- From: Peter F. Patel-Schneider <pfpschneider@gmail.com>
- Date: Mon, 12 Dec 2016 04:54:34 -0800
- To: Dimitris Kontokostas <kontokostas@informatik.uni-leipzig.de>
- Cc: Holger Knublauch <holger@topquadrant.com>, "public-rdf-sha." <public-rdf-shapes@w3.org>
That's a bug in my definitions. I was trying to come up with something that fit into Section 9 of the SPARQL document. The wording in the current SHACL document The values of a property path path for a given node s are the distinct bindings produced by a SPARQL processor for the variable o from a TriplesBlock of the form s path ?o. captures the general idea. However, this definition doesn't work for blank nodes. A solution is to use something like An RDF term n has value v for *SPARQL property path expression* p in an RDF graph G if there is a solution mapping in the result of the SPARQL query SELECT ?s ?o WHERE { ?s p' ?o } on G that binds ?s to n and ?o to v where p' is SPARQL surface syntax for p. peter On 12/11/2016 11:49 PM, Dimitris Kontokostas wrote: > Thank you for your great feedback Peter, > > regarding the definition of *path* what was your intent wrt the existing > definition of *property paths* , replace or add? > I am asking because this definition allows only forward paths (not inverse) > > Best, > Dimitris > > On Sat, Dec 10, 2016 at 8:33 PM, Peter F. Patel-Schneider > <pfpschneider@gmail.com <mailto:pfpschneider@gmail.com>> wrote: > > Here is a definition of value nodes along with the definitions needed to > support it. > > > > > > > Path: > > A **path** in an *RDF graph* from *RDF term* n to RDF term m is a sequence > of *RDF triples* in the graph such that the *subject* of the first RDF > triple is n, the *object* of the last RDF triple is m, and the object of > each RDF triple except the last is the subject of the next. > > > Value: > > An RDF term n has **value** v for property p in an RDF graph if there is an > RDF triple in the graph with subject n, predicate p, and object v. > > An RDF term n has value v for *SPARQL property path expression* p in an RDF > graph if there is a path in the graph from n to v that *matches* p. > > > SHACL List: > > A **SHACL list** in an RDF graph is an IRI or a *blank node* that is either > rdf:nil provided that rdf:nil has no value for either rdf:first or rdf:rest > in the graph, or has exactly one value for rdf:first in the graph and > exactly one value for rdf:rest in the graph that is also a SHACL list in the > graph and there is no non-empty path in the graph from the list back to > itself where the predicates of the RDF triples in the path are each > rdf:rest. > > The **members** of any SHACL list except rdf:nil in an RDF graph consist of > its value for rdf:first in the graph followed by the members in the graph of > its value for rdf:rest in the graph. The list rdf:nil has no **members** in > any RDF graph. > > > SHACL PROPERTY PATHS > > A blank node is an **ill-formed SHACL property path** in an RDF graph if it > has a value for more than one of rdf:first, sh:alternativePath, > sh:inversePath, sh:zeroOrMorePath, sh:oneOrMorePath, or sh:zeroOrOnePath in > the graph. > > A blank node is an **ill-formed SHACL property path** in an RDF graph if > there is a path in the graph from the node back to itself where the sequence > of predicates of the RDF triples in the path matches the regular expression > ( ( rdf:rest* rdf:first ) | sh:alternativePath ( rdf:rest* rdf:first ) | > sh:inversePath | sh:zeroOrMorePath | sh:oneOrMorePath | sh:zeroOrOnePath ) + > > An RDF term is an **ill-formed SHACL property path** in an RDF graph > if it does not satisfy exactly one of the conditions in the mapping below. > > If an RDF term is not an ill-formed SHACL property path in an RDF graph then > it is a **SHACL property path** in the graph. > > The **path mapping** in an RDF graph of a RDF term p that is not an > ill-formed SHACL property path in the graph, path(p,S), is a *SPARQL > property path expression* defined as follows: > 1/ If p is an IRI then path(p,S) is PredicatePath(p). > 2/ If p is a blank node that is a SHACL list in the graph that has at least > two members in the graph and none of these members are ill-formed SHACL > property paths in the graph then path(p,S) is SequencePath(path(v1,S) > ... path(vn,S)) where vi are the members of p in the graph, in order. > 3/ If p is a blank node that has exactly one value for sh:alternativePath in > the graph and that value is a SHACL list in the graph that has at least two > members in the graph and none of the members in the graph are ill-formed > SHACL property paths in the graph then path(p,S) is > AlternativePath(path(v1,S) ... path(vn,S)) where vi are the members of the > list in the graph, in order. > 4/ If p is a blank node that has exactly one value v for sh:inversePath in > the graph and v is not an ill-formed SHACL property path in the graph then > path(p,S) is InversePath(path(v,S)). > 5/ If p is a blank node that has exactly one value v for sh:zeroOrMorePath in > the graph and v is not an ill-formed SHACL property path in the graph then > path(p,S) is ZeroOrMorePath(path(v,S)). > 6/ If p is a blank node that has exactly one value v for sh:oneOrMorePath in > the graph and v is not an ill-formed SHACL property path in the graph then > path(p,S) is OneOrMorePath(path(v,S)). > 7/ If p is a blank node that has exactly one value v for sh:zeroOrOnePath in > the graph and v is not an ill-formed SHACL property path in the graph then > path(p,S) is ZeroOrOnePath(path(v,S)). > > SHACL property paths in same or different RDF graphs are **equivalent** if > their path mappings in their graphs are the same. > > > > Value Nodes: > > A shape in an RDF graph with a value for sh:path in the graph that is an > ill-formed SHACL property path in the graph is an **ill-formed shape** in > the graph. A shape in an RDF graph with more than one value for sh:path in > the graph is an **ill-formed shape** in the graph. > > Given f an RDF term, D a data graph, and s a shape in S a shapes graph > the **value nodes** of f with D for s in S is the set containing > the values of f for path(p,S) in D if s has p as value for sh:path in S; > or just f if s has no value for sh:path in S. > > > > > > On 12/09/2016 05:23 PM, Holger Knublauch wrote: > > On 10/12/2016 2:44, Peter F. Patel-Schneider wrote: > >> The wording about value nodes at the beginning of Section 4 in the document > >> needs to be tightened. The document doesn't even define the notion of > >> reachability. > > > > Do you have specific input to address that? > > > > Thanks, > > Holger > > > > > >> > >> peter > >> > >> > >> On 12/08/2016 11:49 PM, Dimitris Kontokostas wrote: > >>> Thank you for your feedback Peter, > >>> would something like the following wording resolve this issue? > >>> Validation results may have a <a>SHACL property path</a> as value for the > >>> property <code>sh:resultPath</code> that represents the <a>property > path</a> > >>> from the focus node to the value node. > >>> > >>> On Fri, Dec 9, 2016 at 6:21 AM, Holger Knublauch > <holger@topquadrant.com <mailto:holger@topquadrant.com> > >>> <mailto:holger@topquadrant.com <mailto:holger@topquadrant.com>>> wrote: > >>> > >>> I have raised ISSUE-217 for this. > >>> > >>> https://www.w3.org/2014/data-shapes/track/issues/217 > <https://www.w3.org/2014/data-shapes/track/issues/217> > >>> <https://www.w3.org/2014/data-shapes/track/issues/217 > <https://www.w3.org/2014/data-shapes/track/issues/217>> > >>> > >>> Holger > >>> > >>> > >>> > >>> On 9/12/2016 11:29, Peter F. Patel-Schneider wrote: > >>> > >>> > >>> ISSUE<<<<<<<<<<<<<<<<<< > >>> > >>> The requirements for values of sh:resultPath in validation > results > >>> are > >>> impossible to achieve, poorly defined, contradictory, and > >>> problematic for > >>> applications that consume validation reports.. > >>> > >>> > >>> ISSUE<<<<<<<<<<<<<<<<<< > >>> > >>> > >>> 3.4.2.2 Path (sh:resultPath) > >>> Validation results may have a value for the property > sh:resultPath > >>> pointing > >>> at a well-formed property path starting with the given > >>> sh:focusNode. For > >>> results produced by a property constraint, this path is always > >>> identical to > >>> either the sh:predicate or sh:path of the constraint. > >>> > >>> > >>> A property path is a "possible route in a graph between two graph > >>> nodes". > >>> There is no definition of route to be found in the document. > It is > >>> thus not > >>> possible to point to a property path, well-formed or not. > >>> > >>> The values of sh:predicate and sh:path in shapes graphs are SHACL > >>> property > >>> paths. As objects of triples in a graph these values are > nodes in > >>> the > >>> graph, and certainly not routes of any kind. > >>> > >>> Identity of RDF terms is not defined in RDF, so it is not > >>> completely clear > >>> what the second sentence in the description above means. The > only > >>> reasonable interpretation appears to be that value of > >>> sh:resultPath is the > >>> same as the object of the sh:predicate or sh:path triple, which > >>> implies that > >>> validation results will contain nodes taken from shapes graphs. > >>> This is > >>> contradictory as nodes are not paths. > >>> > >>> This is also problematic for applications that consume validation > >>> reports as > >>> it requires the ability to take a blank node from one graph and > >>> find the > >>> same blank node in another graph, which is not always possible in > >>> RDF. > >>> > >>> > >>> This is yet another case of malformed descriptions in the > >>> document. The > >>> document needs to be changed to provide a well-formed description > >>> for the > >>> value of sh:resultPath in validation results. A complete > examination > >>> of the > >>> document by a competent member of the working group is needed to > >>> find and > >>> eliminate other similar problems in the document. > >>> > >>> > >>> Peter F. Patel-Schneider > >>> Nuance Communications > >>> > >>> > >>> > >>> > >>> > >>> > >>> > >>> > >>> -- > >>> Dimitris Kontokostas > >>> Department of Computer Science, University of Leipzig & DBpedia > Association > >>> Projects: http://dbpedia.org, http://rdfunit.aksw.org, > >>> http://aligned-project.eu > >>> Homepage: http://aksw.org/DimitrisKontokostas > <http://aksw.org/DimitrisKontokostas> > >>> Research Group: AKSW/KILT http://aksw.org/Groups/KILT > >>> > > > > > > > -- > Dimitris Kontokostas > Department of Computer Science, University of Leipzig & DBpedia Association > Projects: http://dbpedia.org, http://rdfunit.aksw.org, http://aligned-project.eu > Homepage: http://aksw.org/DimitrisKontokostas > Research Group: AKSW/KILT http://aksw.org/Groups/KILT >
Received on Monday, 12 December 2016 18:08:27 UTC