- From: Holger Knublauch <holger@topquadrant.com>
- Date: Tue, 18 Oct 2016 17:21:56 +1000
- To: Jeremy J Carroll <jjc@syapse.com>, public-rdf-shapes@w3.org
- Message-ID: <52ffcd37-6d8c-695d-b426-fdaba0d2e5f9@topquadrant.com>
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 Tuesday, 18 October 2016 07:22:32 UTC