- From: Holger Knublauch <holger@topquadrant.com>
- Date: Fri, 3 Jun 2016 09:32:00 +1000
- To: "public-data-shapes-wg@w3.org" <public-data-shapes-wg@w3.org>
I believe we need to resolve ISSUE-41 before things like ISSUE-139. The
question of whether and how to allow paths has been ongoing for quite a
while, and there are good arguments both ways. On the one hand side,
paths are yet another feature that adds up to the cognitive, spec and
implementation burden. On the other hand side, such paths would expand
the use cases of SHACL Core and also may allow better code reuse (I say
this with the SPARQL hat on - a single path query would reduce the need
to have forward and backward queries).
If we are to support paths, my requirement is that we do not change the
current syntax, i.e. do not throw away sh:property and
sh:inverseProperty as currently specified. That would break the elegance
and predictability of SHACL as a declarative language, e.g. for form
building and static analysis. Instead, I suggest we support paths as a
separate syntactic construct only, and then only for paths that are
different from the simple paths. Users should always express their
property/inverseProperty constraints using the more specialized syntax.
Under these conditions, here is what I would support (possibly even as a
Core feature):
ex:MyShape
a sh:Shape ;
sh:pathConstraint [ # or better name...
sh:path [
sh:sequencePath [
sh:path1 [ sh:predicatePath rdf:type ] ;
sh:path2 [ sh:zeroOrMorePath [ sh:predicatePath
rdfs:subClassOf ] ]
]
] ;
sh:hasValue ex:MyClass ;
] .
which would check that the path rdf:type/(rdfs:subClassOf*) contains
ex:MyClass. We could support most of
https://www.w3.org/TR/sparql11-query/#pp-language and define a mapping
from our syntax to SPARQL 1.1 expressions. SPIN has something similar
(http://spinrdf.org/sp.html#sp-TriplePath)
The reason why I would support this is that it would help with the
definition of validators and other SPARQL queries that currently need to
be written in two directions (for sh:property and sh:inverseProperty).
For example, unless a sh:propertyValidator exists, the system would fall
back to sh:pathValidator, which uses a special variable $path as
placeholder for the actual property or path. So while we have additional
work to do in the spec and implementations, the overall cost for the end
user will be smaller. And while technically busy work, I don't think it
would be particularly difficult to specify the semantics, based on the
syntax mapping to SPARQL.
Arnaud, could this be put onto the agenda before we discuss ISSUE-139 again?
Thanks
Holger
Received on Thursday, 2 June 2016 23:32:32 UTC