- From: Holger Knublauch <holger@topquadrant.com>
- Date: Tue, 10 Feb 2015 14:49:31 +1000
- To: public-data-shapes-wg@w3.org
- Message-ID: <54D98DDB.1050702@topquadrant.com>
On 1/26/2015 11:20, Peter F. Patel-Schneider wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Indeed the wording you point out is in the document, but it does not speak
> to the ability of LDOM to handle recursion. It simply says that LDOM uses
> procedural recursion to handle nesting. Nesting is very different from
> recursion.
(Peter, I am picking up this thread because you still seem unconvinced
that LDOM can handle recursion).
Maybe my PhD in Computer Science is not sufficient to understand the
difference between nesting and recursion here. Do you have a definition
of "nesting" in this context? Better: do you have an example that LDOM
could not handle? I have added the Polentoni example to my test case
library, and my SPARQL-based implementation returns the correct results.
I have attached the Turtle file for your reference. The following query
can be used to verify the two cases:
SELECT *
WHERE {
BIND (ldom:violatesConstraints(ex:Diego, ex:Polentoni) AS ?diego) .
BIND (ldom:violatesConstraints(ex:Enrico, ex:Polentoni) AS ?enrico) .
}
ex:Enrico violates constraints (?enrico is true), because he knows John
who knows Maurizio who does not live in Northern Italy. ex:Diego does
not violate constraints (and ?diego is false).
If you are talking about nesting, do you assume that the function
ldom:violatesConstraints will somehow rewrite the surrounding SPARQL
query and then contain nested calls to itself? But this is not the case
and would indeed not work. It is simply a SPARQL function that is
executed like this:
Entry point:
ldom:violatesConstraints(ex:Diego, ex:Polentoni)
-> triggers the LDOM engine which looks at all constraints of
ex:Polentoni including the ldom:all:
ex:Polentoni
a rdfs:Class ;
lion:constraint [
a ldom:ShapeConstraint ;
ldom:all ex:Polentoni ;
ldom:predicate ex:knows
] ...
The LDOM engine executes all SPARQL queries attached to the constraints.
The ldom:sparql of ldom:all is calling ldom:violatesConstraints again.
This spawns off a new (recursive) LDOM engine, taking us back to the
entry point.
Note that I had to add some logic to prevent endless recursion for the
same combination of arguments of the ldom:violatesConstraints function
within the same call stack.
Holger
Attachments
- text/plain attachment: constraint-recursive-001.ttl
Received on Tuesday, 10 February 2015 04:50:15 UTC