- From: Jos De Roo <josderoo@gmail.com>
- Date: Mon, 22 Apr 2024 11:35:53 +0200
- To: Gregg Kellogg <gregg@greggkellogg.net>
- Cc: Luke VanderHart <lvanderhart@modern.energy>, RDF-star Working Group <public-rdf-star-wg@w3.org>
- Message-ID: <CAJbsTZdXqU7vy1y2zHPVwWppDNUMcJMyO3ucQG547ykvXrYCOw@mail.gmail.com>
On Mon, Apr 22, 2024 at 3:44 AM Gregg Kellogg <gregg@greggkellogg.net> wrote: > > On Apr 21, 2024, at 1:04 PM, Luke VanderHart <lvanderhart@modern.energy> > wrote: > > > > Alignment with LPGs is a stated goal for some members of this working > > group. I am curious how they reconcile this with the fact that none of > > the proposed changes actually permit first-class edges, only > > reifications of first-class edges. > > > > The following example seems to be highly motivating: > > > > <<#m1 | :liz :marriedTo :richard>> [:from 1964 ; to: 1975] . > > <<#m2 | :liz :marriedTo :richard>> [:from 1980; to: 2001] . > > Slight not on syntax: The statement `<<#m1 | :liz :marriedTo :richard>> > :from 1964 ; to: 1975 .` (note no []) asserts the following triples: > > <#m1> rdf:reifies <<(:liz :marriedTo :richard)>> . > <#m1> :from 1964 . > <#m1> :to 1975 . > > The graph may assert elsewhere `:liz :marriedTo :richard .`, but may not. > In the LPG case, I would expect that triple to always be asserted, but > there are interesting use cases where you want to make a claim about a > statement that might not be asserted in the graph, and may not be true in > any case. > > If you want to both reify and assert a triple, there is the annotation > syntax: > > :liz :marriedTo :richard {| <#m1> | :from 1964; :to 1975 |} . > > The LPG use case IIRC only makes sense with asserted triples. > > Reifiers, which indirectly reference the triple term, mirror LPG use cases > when there are multiple identical edges which have separate assertions. > > > However, querying this graph using Sparql returns no data, because > > neither #m1 nor #m2 are actually asserted in the graph. This is > > probably not what someone from a LPG background would expect. > > #m1 and #m2 are asserted in the graph, but :liz :marriedTo :richard may > not be asserted in the graph. A SPARQL query can be constructed that will > return useful information. > > > I can assert the triple, but then the semantics become unclear: > > > > <<#m1 | :liz :marriedTo :richard>> [:from 1964 ; to: 1975] . > > <<#m2 | :liz :marriedTo :richard>> [:from 1980; to: 2001] . > > :liz :marriedTo :richard . > > > > Which marriage does the asserted triple represent? The one from 1964, > > the one from 1980, or neither? > > This does get into other things under active discussion, such as if a > reifier only reifies a statement (triple), or could reify an event. There > are other ways to model this in RDF, but in LPG, it may be similar to the > following: > > (liz)-[:MARRIED {from: 1964, to: 1975}]->(richard) > (liz)-[:MARRIED {from: 1980, to: 2001}]->(richard) > > In this case, there are two edges from :liz to :richard with different > annotations, mirroring the RDF-star statements, but perhaps better stated > as > > :liz :marriedTo :richard {| <#m1> | :from 1964; :to 1975 |} > {| <#m2> | :from 1980; :to 2001 |} . > That's nice Gregg and I actually tested that syntax in https://github.com/eyereasoner/eye/blob/master/reasoning/temp/edge.ttl and eye --pass gives https://github.com/eyereasoner/eye/blob/master/reasoning/temp/edge-output.ttl which looks reasonable to me :-) Kind regards, Jos The graph includes a single triple asserting `:liz :marriedTo :richard`, as > graphs cannot include duplicated triples. The reifier is necessary to be > able to distinguish between different sets of statements on that triple, as > LPG allows. > > > Is there any mechanism in any of the current proposals to associate > > the asserted triple (which cannot have properties in RDF) with one of > > the reifications? > > That is the purpose of the reifier; in RDF, it doesn’t make sense to > distinguish between different reifiers as a triple which is part of the > graph is true (WRT the graph) regardless of any annotations made about that > triple. Of course, this may be an inherently confusing example and may be > better to model events and make assertions about those events: > > :m1 a :MarriageEvent; :subject :liz, :richard; :from 1965 :to 1975 . > :m2 a :MarriageEvent; :subject :liz, :richard; :from 1980; :to 2001 . > > > If there is no such mechanism, are we really aligning with LPGs? Some > > use cases might be covered on the surface, but we can't truly annotate > > asserted edges, we can only annotate statements about edges. This is a > > subtle but meaningful distinction and seems likely to cause confusion > > down the road. > > Certainly can be confusing, but I think the LPG case can also be > confusing. The only way to talk about edges in RDF is via reification, > either the RDF-star version, or using the original Reification vocabulary > (rdf:Statement, :subject, :predicate, :object). > > Gregg > > > Thank you, and my apologies if this point has already been discussed > > and I missed it. > > > > - Luke VanderHart > > > -- https://josd.github.io
Received on Monday, 22 April 2024 09:36:05 UTC