Re: [External] : example showing why rdf:state is essential

Am 15. August 2024 21:15:05 MESZ schrieb Souripriya Das <souripriya.das@oracle.com>:
>I did some re-thinking based on the comments I heard during today's meeting. Since our main (and only?) goal is to allow data creators to easily associate an id to a triple so that they can use it as subject or object of other triples (and also, support parallel edges), we can replace the rather meaningful (unfortunately) and hence confusing property name, rdf:reifies, with rdf:id – something that exactly satisfies our original goal (without venturing beyond).
>
>So, suppose that RDF1.2 adds built-in support for the rdf:id property and triple-terms (only for use with rdf:id). Anything beyond this in this context is up to the data creator. SPARQL does not do anything other than pattern matching for it (although it may provide some shortcuts just for convenience). Note that other data models have built-in support for "asserted" data only. Even with RDF1.2, I'd expect use of reification to be rare or infrequent.
>
>With this rdf:reifies -> rdf:id change, the example in my previous email becomes simple and would have no limitations and most importantly, cause no confusion for users.
>
># mapping from relational data: one-to-one
>:stint1 rdf:id <<( :Bob :workedFor :A )>> . # S1
>:stint2 rdf:id <<( :Bob :workedFor :B )>> . # S2
>:stint3 rdf:id <<( :Bob :workedFor :A )>> . # S3
>
># R4 is marked as "Unreliable", a user terminology, using an extra triple – there is no interference from any of the pre-existing triples
>:stint4 rdf:id <<( :Bob :workedFor :B )>> . # R4
>:stint4 rdf:type :Unreliable .
>
># SPARQL query pattern
>
># returns info about all stints
>SELECT * { ?id rdf:id <<( ?s ?p ?o )>> . ?id ?p2 ?o2 }
>
># returns info about all stints EXCEPT those that the user marked as Unreliable
>SELECT * { ?id rdf:id <<( ?s ?p ?o )>> . FILTER NOT EXISTS { ?id rdf:type :Unreliable } . ?id ?p2 ?o2 }

So,  now all triple terms are considered asserted and rdf:reifies is renamed to rdf:id (and accordingly defined)?
I assume SPARQL is supposed to support that, ie a query for '?s ?p ?o'  also returns "identifications" of <<( ?s ?p ?o )>>. 

And instead of adding :'id a rdf:Stated' to almost every annotation, as Andy suggested, we now add ':id a :Unstated|Unreliable'? 

That all seems possible, and an improvement over both the baseline and Andy's proposal, but I think I liked the approach from your prior mail better ;-) For starters because an annotation saying "this is not a fact" is never as safe as not introducing the non-fact as fact in the first place - which would still leave plenty of room for confusion of users. 

. t

>Thanks,
>Souri.
>
>
>
>
>________________________________
>From: Souripriya Das <souripriya.das@oracle.com>
>Sent: Thursday, August 15, 2024 11:59 AM
>To: RDF-star WG <public-rdf-star-wg@w3.org>
>Subject: [External] : example showing why rdf:state is essential
>
>I am trying to show that if rdf:states is not supported, once the "asserted" s-p-o triple is present, ALL existing and future "reified" s-p-o triples will now be considered as "asserted" (or occurrence of asserted triple). This limitation goes away if rdf:states is supported (along with rdf:reifies).
>
>Consider the following "WorkHistory" data, shown in relational form.
>StintID | EmpName | Company | StartYear | EndYear
>============
>1 | Bob', | 'A' | 1980 | 1990
>2 | 'Bob' | 'B' | 1990 | 2000
>3 | 'Bob' | 'A' | 2000 | 2010
>
>RDF1.2: when rdf:states is NOT supported
>======
># mapping from relational data (annotations not shown): NOT one-to-one
>:stint1 rdf:reifies <<( :Bob :workedFor :A )>> . # R1
>:stint2 rdf:reifies <<( :Bob :workedFor :B )>> . # R2
>:stint3 rdf:reifies <<( :Bob :workedFor :A )>> . # R3
>:Bob :workedFor :A . # A4
>:Bob :workedFor :B . # A5
>
>Addition of uncertain data:
>========
># Adding the following triple to indicate that Bob might have worked for Company B, according to Alice
># This will be counted as "asserted" because of presence of triple A5 above (just like triples R1, R2, and R3)
>
>:stint4 rdf:reifies <<( :Bob :workedFor :B )>> . # R4
>
>RDF1.2: if rdf:states is supported, we can do it
>======
># mapping from relational data: one-to-one
>:stint1 rdf:states <<( :Bob :workedFor :A )>> . # S1
>:stint2 rdf:states <<( :Bob :workedFor :B )>> . # S2
>:stint3 rdf:states <<( :Bob :workedFor :A )>> . # S3
>
># R4 is counted as "reified" – there is no interference from any of the pre-existing triples
>:stint4 rdf:reifies <<( :Bob :workedFor :B )>> . # R4
>
>Thanks,
>Souri.
>
>

Received on Thursday, 15 August 2024 21:17:59 UTC