AW: reifiesDomain-14 (Re: proposal: a reifier should reify only one "thing")

“The user usually doesn't see the predicate identifiers directly; they only see the label“

For creating data
CREATE        (liz:Person {name: 'Liz'}), (richard:Person {name: 'Richard'})
CREATE        (liz)-[:MARRIED {from: 1964, to: 1975}]->(richard)
CREATE        (liz)-[:MARRIED {from: 1985}]->(richard)

That does not bother them, and also not for querying the data
MATCH (liz:Person {name: 'Liz'})-[m:MARRIED]->(richard:Person {name: 'Richard'})
RETURN m.from AS StartYear, m.to AS EndYear

Best,

Felix

Von: Kurt Cagle <kurt.cagle@gmail.com>
Datum: Freitag, 19. April 2024 um 21:53
An: ddooss@wp.pl <ddooss@wp.pl>
Cc: Pierre-Antoine Champin <pierre-antoine@w3.org>, Lassila, Ora <ora@amazon.com>, RDF-star WG <public-rdf-star-wg@w3.org>
Betreff: Re: reifiesDomain-14 (Re: proposal: a reifier should reify only one "thing")
>> This is actually an error that arises in LPGs, because they have no way of differentiating #marriage1 from #marriage3.
> It's not true. Most PG definitions or implementations allow you to create two edges with the same label and different properties.

I'm saying that this is a modelling error with LPGs.  The edge contains the identifier in the assertion, not the nodes. In an LPG (specifically Neo4J):

(Liz marries Richard) [from 1964; to 1975]

and

(Liz marries Richard) [from 1985]

are distinct because the predicate "marries" carries the (implicit) identifier, and any query is actually an query on the text of the labels.

This is equivalent to

<<:liz :marries-1 :richard>> [:from 1964 ; to: 1975] .
<<:liz :marries-2 :robert>> [:from 1977 ; to: 1981] .
<<:liz :marries-3 :richard>> [:from 1985] .

:marries-1 rdfs:label "marries" .
:marries-2 rdfs:label "marries" .
:marries-3 rdfs:label "marries" .

The user usually doesn't see the predicate identifiers directly; they only see the label, so they don't recognize that the first and third statements actually have different predicates with the same name. That is CERTAINLY the case for Neo4J; I'm not sure about other LPGs.



Kurt Cagle
Editor in Chief
The Cagle Report
kurt.cagle@gmail.com<mailto:kurt.cagle@gmail.com>
443-837-8725


On Fri, Apr 19, 2024 at 12:30 PM ddooss@wp.pl<mailto:ddooss@wp.pl> <ddooss@wp.pl<mailto:ddooss@wp.pl>> wrote:
Kurt Cagle <kurt.cagle@gmail.com<mailto:kurt.cagle@gmail.com>>:
<<#marriage1 | :liz :marries :richard>> a :Event;
       :bride :liz ;
       :groom :richard ;
       :startYear 1964 ;
       :endYear 1975 ;
       .

This works in the case where Liz later marries Bob:

<<#marriage2 | :liz :marries :robert>> a :Event;
       :bride :liz ;
       :groom :robert ;
       :startYear 1977 ;
       :endYear 1981 ;
       .

But gets into trouble when Liz and Richard decide to remarry:

<<#marriage3 | :liz :marries :richard>> a :Event;
       :bride :liz ;
       :groom :richard ;
       :startYear 1985 ;
       .

This is actually an error that arises in LPGs, because they have no way of differentiating #marriage1 from #marriage3.

It's not true. Most PG definitions or implementations allow you to create two edges with the same label and different properties.

Best,
Dominik

Received on Friday, 19 April 2024 20:11:44 UTC