- From: Vladimir Alexiev <vladimir.alexiev@ontotext.com>
- Date: Sat, 24 Oct 2015 04:01:13 +0300
- To: <public-data-shapes-wg@w3.org>
sh:AndConstraint and many other constructs use rdf:List, e.g.:
ex:sh a sh:AndConstraint;
sh:shapes (ex:sh1 ex:sh2).
This is implemented by unrolling the list with a property path expression,
e.g.
GRAPH $shapesGraph {
$shapes rdf:rest*/rdf:first ?shape
}
But Sesame (and maybe some other SPARQL processors) have a problem
implementing *.
It's related to this:
?x ex:prop* ?x
matches EVERY resource in the repo for ANY ex:prop.
AFAIK, order in all (most?) of these constructs is unimportant.
E.g. reading the semantics of AndConstraint it seems full evaluation is
required (all violations to be returned), no short-cutting.
RDF is naturally multi-valued, so why can't the constraint be expressed like
this:
ex:sh a sh:AndConstraint;
sh:shapes ex:sh1, ex:sh2.
And implemented like that:
GRAPH $shapesGraph {
$andShape sh:shapes ?shape
}
That's both more economical and more efficient.
--
I also have a question:
Holger wrote that $shapesGraph needs to be passed around, because it's used
in the rdf:List unrolling.
I can't quite grok why: in the absence of GRAPH, shouldn't it consult all
graphs?
Or if we avoid rdf:List unrolling using my approach, would that help?
Received on Saturday, 24 October 2015 01:01:37 UTC