- From: Holger Knublauch <holger@topquadrant.com>
- Date: Sat, 25 Oct 2014 12:17:52 +1000
- To: public-data-shapes-wg@w3.org
Let me try to provide some more details in a compact form. Much of the
semantics of SPIN are written down implicitly so I'll try to formulate a
pseuso-code algorithm for SPIN constraint execution:
The input is a domain graph containing instances. It is assumed that
this graph either contains or owl:imports the class definitions
(rdfs:subClassOf etc). The property spin:imports is an alternative to
owl:imports that doesn't carry the traditional OWL imports meaning and
can be used to inject triples into the algorithm that shall not be
"visible" to normal users of the ontology. So in a typical scenario,
users would have three graphs: an instances graph, a classes graph
(possibly an OWL model) and a graph that contains the spin:constraints
attached to the classes.
use owl:imports and spin:imports closure of domain graph
forEach triple (?class spin:constraint ?constraint) # or
sub-properties
forEach ?type := rdfs:subClassOf* ?class
use domain graph only
forEach ?instance of ?type
execute ?constraint, pre-binding ?this with ?instance
-> Collect resulting constraint violations
This algorithm is simplified and not optimized, but the main idea is
that the CONSTRUCTs produce instances of spin:ConstraintViolation which
are reported to the user as a constraint violation. There is no feedback
loop here, i.e. the algorithm neither looks at previous instances of
spin:ConstraintViolation, nor does it iterate. There is a short-cut
syntax using ASK that can also produce constraint violations, but with
less flexibility in the output.
We can ignore spin:rule in this discussion - with spin:rule, the
constructed triples are fed back into the query graph for the next
iteration, e.g. until a fix point is reached.
The computation is bounded by the expressivity of SPARQL 1.1 +
user-defined SPIN functions as outlined elsewhere.
I am not aware of a list of SPIN implementations, although I do remember
seeing a C# port of the open-source SPIN API somewhere, as well as parts
of an independent Sesame implementation. There may be others.
Please let me know if I can answer additional questions.
Regards,
Holger
On 10/24/2014 17:42, Peter F. Patel-Schneider wrote:
> Thanks Holger, this document does a decent job of outlining SPIN.
>
> However, there are some unexplained things. (Maybe these are
> explained in other documents but I could not
>
> Just what signals a constraint violation? Is it the presence of a
> node of type spin:ConstraintViolation (a spin:CV node)? If so, how
> can an RDF graph that contains such nodes be processed? Is it the
> construction of a spin:CV node? If so, what difference is there
> between spin:constraint and spin:role? Is it the construction of a
> spin:CV node by a spin:constraint? If so, how is this signalled?
>
> It appears that the computation required for constraint checking in
> SPIN is potentially unbounded. Is that correct? Where is the
> description of the SPIN execution engine?
>
> Do you have a list of known SPIN implementations?
>
> peter
>
> PS: Let's try to keep the name calling down to close to zero.
>
Received on Saturday, 25 October 2014 02:20:20 UTC