- From: Holger Knublauch <holger@topquadrant.com>
- Date: Fri, 21 Oct 2016 16:07:02 +1000
- To: Jeremy J Carroll <jjc@syapse.com>, public-rdf-shapes@w3.org
- Message-ID: <e569a896-89d7-c415-e623-8a731f5a332e@topquadrant.com>
FWIW I have meanwhile found a solution to define a Shape for well-formed RDF lists, avoiding recursion: http://datashapes.org/dash.html#ListShape Holger On 18/10/2016 17:21, Holger Knublauch wrote: > Hi Jeremy, > > On 18/10/2016 2:39, Jeremy J Carroll wrote: >> >> Hi Holger >> >> on your historical issue: >> >> >>> On Oct 15, 2016, at 8:57 PM, Holger Knublauch >>> <holger@topquadrant.com <mailto:holger@topquadrant.com>> wrote: >>> >>> It is a bit surprising that there doesn't seem to be a standard >>> definition of what a well-formed rdf:List is. >> >> >> Back in 2004 time-frame, the RDF group felt that it was out of scope >> because the ‘obvious’ constraints were simply not the sort of complex >> syntactical constraint at a graph level that the group felt were in >> scope for that group. >> If when you merge graphs, apply inferences, etc etc you get an >> ill-formed list, what do you do? >> i.e. the RDF Core WG was aware of the problem of ill-formed lists and >> made an explicit decision that it was not within the focus of the work >> >> On the other hand, the OWL WG, were schizophrenic, with the DL/Lite >> versions simply regarding the triples as a projection of the real OWL >> syntax: in this projection all lists are well formed, but you cannot >> use rdf lists as a general data structure. >> In OWL Full, OTOH, constraints are expressed semantically not >> syntactically, and so the well-formedness constraint for RDF lists >> was once again out of scope. > > Thanks for your helpful background! > >> >> It seems to me that this constraint is one of many potential high >> level syntactic constraints on RDF triples expressing data >> structures, and I am pleased to see that it is noted as in-scope for >> the shapes group: >> >> https://www.w3.org/TR/2015/WD-shacl-ucr-20150414/#uc26-rdf-lists-and-ordered-data >> >> This, to me at least, seems to be the appropriate level at which to >> fix this long-standanding problem. > > I have just used this opportunity to try and implement the use case > above in SHACL. I ran into a problem. My current draft for such a > ListShape is: > > > dash:ListShape > rdf:type sh:Shape ; > rdfs:comment "Defines constraints on what it means for a node to be > a well-formed RDF list." ; > rdfs:label "List shape" ; > sh:or ( > [ > sh:hasValue () ; > sh:property [ > sh:predicate rdf:first ; > sh:maxCount 0 ; > ] ; > sh:property [ > sh:predicate rdf:rest ; > sh:maxCount 0 ; > ] ; > ] > [ > sh:not [ > sh:hasValue () ; > ] ; > sh:property [ > sh:predicate rdf:first ; > sh:maxCount 1 ; > sh:minCount 1 ; > ] ; > sh:property [ > sh:predicate rdf:rest ; > sh:maxCount 1 ; > sh:minCount 1 ; > sh:shape dash:ListShape ; > ] ; > sh:property [ > dash:nonRecursive "true"^^xsd:boolean ; > sh:path [ > sh:oneOrMorePath rdf:rest ; > ] ; > ] ; > ] > ) . > > (Note this uses dash:nonRecursive [1] which could alternatively be > expressed with a sh:sparql constraint). > > So either the list must be rdf:nil, and not have any rdf:first and > rdf:rest, or it must not be rdf:nil and have rdf:first and rdf:rest > plus rdf:rest must again be a well-formed list. And no cycles in the > path rdf:rest+. > > The problem - maybe someone has a better solution for this - is that > the values of rdf:rest must recursively be well-formed rdf:List nodes. > I have expressed this via sh:shape dash:ListShape. However, SHACL does > not prescribe how to handle recursion, so some implementations may not > be able to handle this scenario. In fact, my own implementation > currently just throws a Failure when it encounters calls of > sh:hasShape with the same argument combination, while other > implementations may accept the recursion and only report the violation > of the rdf:rest+ recursion. > > I am hopefully missing something, but I don't see how to implement Use > Case 26 with the current definition of SHACL. Maybe there is a > solution using SPARQL paths, but that would be quite ugly. Expressing > Use Case 26 isn't a strict requirement, just a nice-to-have. Yet this > makes it problematic to put something like a SHACL-based formal > definition of well-formed lists into the SHACL document. It may also > open yet another can of worms because such things are difficult to get > right, covered with tests etc. A textual definition may be the best > thing we can do, also in the short time frame that we currently have. > > Cheers, > Holger > > [1] http://datashapes.org/constraints.html#NonRecursiveConstraintComponent >
Received on Friday, 21 October 2016 06:07:36 UTC