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

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


Yes, but m:MARRIED is still a synonym for multiple (implicit) edge
identifiers.

I'm not saying that it should bother anyone on the LPG side. My argument is
that to model it in RDF-Star, where there IS a distinction between the edge
predicate and the reifier, requires that you recognize that what is
depicted as one predicate in an LPG is actually an implicit mapping to
multiple predicates in RDF.

(liz)-[:MARRIED {from: 1964, to: 1975}]->(richard)

is equivalent to:

<<:married1 | :liz :married-1 :richard>> :from 1964; :to 1975  .
<<:married2 | :liz :married-2 :richard>> :from 1985.
:married1 rdfs:label ":MARRIED".
:married2 rdfs:label ":MARRIED".

If you just use a single :married predicate, you get

<<:married | :liz :married :richard>> :from 1964; :to 1975 .
<<:married | :liz :married :richard>> from: 1985.

which creates the potential where you would end up retrieving:

:married :from 1985; :to 1975 .

which is clearly impossible



*Kurt Cagle*
Editor in Chief
The Cagle Report
kurt.cagle@gmail.com
443-837-8725 <http://voice.google.com/calls?a=nc,%2B14438378725>


On Fri, Apr 19, 2024 at 1:11 PM Sasaki, Felix <felix.sasaki@sap.com> wrote:

> “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
>
> 443-837-8725
>
>
>
>
>
> On Fri, Apr 19, 2024 at 12:30 PM ddooss@wp.pl <ddooss@wp.pl> wrote:
>
> Kurt Cagle <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:41:56 UTC