- From: Holger Knublauch <holger@topquadrant.com>
- Date: Mon, 13 Jul 2015 15:42:31 +1000
- To: public-data-shapes-wg@w3.org
I have just pushed an updated version
http://w3c.github.io/data-shapes/shacl/index-2015-07-13.html
which includes all my latest changes:
- Removed Appendix in favor of shacl-ref document
- Cleaned up scopes/filter shape mechanism (ISSUE-62)
- Latest changes to sh:hasShape are in the Ref document:
http://w3c.github.io/data-shapes/shacl-ref/
Since the sh:hasShape stuff is SPARQL-specific, it is currently only
covered by the Ref document. It is used in the definitions of various
built-in templates such as sh:valueShape and sh:NotConstraint. You can
also look at the associated Turtle file. What else would you consider a
"full description"? If you believe this cannot work correctly, maybe you
can provide a counter-example.
Thanks,
Holger
On 7/11/2015 14:37, Peter F. Patel-Schneider wrote:
> I don't see how that can work correctly. I think that a full description is
> needed for analysis by the working group.
>
> peter
>
>
> On 07/10/2015 07:12 PM, Holger Knublauch wrote:
>> sh:hasShape creates its own (nested) validation engine. This produces new
>> constraint violations. If one of them is a sh:FatalError then sh:hasShape
>> returns unbound, which in turn may lead to further sh:FatalErrors in the
>> surrounding engine.
>>
>> Holger
>>
>>
>> On 7/11/2015 12:05, Peter F. Patel-Schneider wrote:
>>> So 'A while ago I had suggested a solution to the recursion question that
>>> would throw a fatal error ("cannot handle") whenever it encounters a recursive
>>> call to sh:hasShape with the same ?node/?shape pair.'
>>> [https://lists.w3.org/Archives/Public/public-data-shapes-wg/2015Jul/0033.html]
>>> is not correct? If sh:hasShape doesn't throw an error, how does the failure
>>> get through SPARQL FILTER constructs, e.g., in the expansion of sh:valueShape?
>>>
>>> peter
>>>
>>>
>>> On 07/10/2015 06:48 PM, Holger Knublauch wrote:
>>>> sh:hasShape doesn't throw a fatal error by itself, but reports "unbound".
>>>> Every SPARQL function may return no binding, and queries can chose how to
>>>> handle this, e.g.
>>>>
>>>> BIND (sh:hasShape(...) AS ?hasShape) .
>>>> FILTER bound(?hasShape) .
>>>>
>>>> The "fatal error" (sh:FatalError) is created by the surrounding SHACL engine
>>>> based on the results of the SELECT queries. The current convention in my draft
>>>> is that sh:FatalError is triggered if a SELECT query returns a variable ?error
>>>> = true. We can of course change this convention - maybe ?fatalError would be a
>>>> better indicator.
>>>>
>>>> This is all worked out on a branch, but I am not permitted to change the main
>>>> document anymore without resolutions from the WG. You can see the current
>>>> details in the shacl-ref document, e.g. at
>>>>
>>>> http://w3c.github.io/data-shapes/shacl-ref/#AbstractValueShapePropertyConstraint
>>>>
>>>>
>>>> You can see there that the SELECT returns ?error=true if !bound(?hasShape)
>>>>
>>>> The authors of custom constraints and macros using SPARQL can use the same
>>>> mechanisms to take full control over how they want to treat unsupported
>>>> recursion.
>>>>
>>>> Please confirm if this resolves your issue.
>>>>
>>>> HTH
>>>> Holger
>>>>
>>>>
>>>> On 7/11/15 12:32 AM, RDF Data Shapes Working Group Issue Tracker wrote:
>>>>> shapes-ISSUE-73 (sh:hasShape error handling): how do recursion errors from
>>>>> sh:hasShape interact with SPARQL [SHACL Spec]
>>>>>
>>>>> http://www.w3.org/2014/data-shapes/track/issues/73
>>>>>
>>>>> Raised by: Peter Patel-Schneider
>>>>> On product: SHACL Spec
>>>>>
>>>>> If sh:hasShape can throw a fatal error, then there needs to be a
>>>>> specification of how this error interacts with the rest of SPARQL.
>>>>>
>>>>> Otherwise the results of certain shape validations can depend on, for
>>>>> example, the order of evaluation of constructs that SPARQL leaves open.
>>>>>
>>>>> In a macro defined as
>>>>>
>>>>> orproperties(?p,?q,?s)
>>>>>
>>>>> expanding to
>>>>>
>>>>> SELECT ?this (?this as ?subject)
>>>>> WHERE {
>>>>> ?this ?p ?pv .
>>>>> ?this ?q ?qv .
>>>>> FILTER (sh:hasShape(?pv, ?s, ?shapesGraph)
>>>>> || sh:hasShape(?qv, ?s, ?shapesGraph) ) .
>>>>> }
>>>>>
>>>>> the results of validation could depend on the order in which the two
>>>>> sh:hasShapes are evaluated.
>>>>>
>>>>>
>>>>>
Received on Monday, 13 July 2015 05:43:10 UTC