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

Hi Kurt,    I don't fully understand your position.  You compare the formal RDF-star model to just one implementation which is Neo4j.  These things are not comparable.   Best,   Dominik  
     
      
       
        Dnia 19 kwietnia 2024 22:42 Kurt Cagle <kurt.cagle@gmail.com> napisał(a):
       
    
       
         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 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 voice.google.com   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 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 21:32:06 UTC