- From: Simon Steyskal <simon.steyskal@wu.ac.at>
- Date: Thu, 11 Jun 2015 08:06:19 +0200
- To: Holger Knublauch <holger@topquadrant.com>
- Cc: RDF Data Shapes Working Group <public-data-shapes-wg@w3.org>
Hi! > What am I missing? Although I still have to walk through all recent SHACL related mails I was wondering if negation in combination with recursion was already discussed? Without stratification, using negation within recursion may lead to infinite loops.. I tried to come up with an example which illustrates that issue: ------------------------------------------------ ex:recursionShapeExample a sh:Shape ; sh:property [ sh:predicate ex:someProperty ; sh:valueShape ex:hasAShape) ] . ex:hasAShape a sh:Shape ; sh:constraint [ a sh:AndConstraint ; sh:shapes (ex:ValueTypeAShape ex:notBShape) ] . ex:hasBShape a sh:Shape ; sh:constraint [ a sh:AndConstraint ; sh:shapes (ex:ValueTypeBShape ex:notAShape) ] . ex:notAShape a sh:Shape ; sh:constraint [ a sh:NotConstraint ; sh:shape ex:hasAShape; ] . ex:notBShape a sh:Shape ; sh:constraint [ a sh:NotConstraint ; sh:shape ex:hasBShape; ] . ex:ValueTypeAShape a sh:Shape ; sh:property [ sh:predicate ex:property ; sh:valueType ex:ClassA ; ] . ex:ValueTypeBShape a sh:Shape ; sh:property [ sh:predicate ex:property ; sh:valueType ex:ClassB ; ] . ------------------------------------------------ Here recursionShapeExample states that the value of ex:someProperty must be of shape ex:hasAShape. ex:hasAShape itself is defined as being both an ex:ValueTypeAShape and ex:notBShape. Now it gets tricky.. ex:notBShape is defined as sh:NotConstraint of ex:hasBShape, which itself is defined as the exact opposite, i.e. being both an ex:ValueTypeBShape and ex:notAShape. Could this be relevant for recursive shapes? cheers, simon --- DDipl.-Ing. Simon Steyskal Institute for Information Business, WU Vienna www: http://www.steyskal.info/ twitter: @simonsteys Am 2015-06-11 03:11, schrieb Holger Knublauch: > I would like to write down the solution to the recursion issue that I > have currently implemented in my prototype, and welcome comments > whether this would resolve the issue. > > Recursive evaluation of shapes can only be triggered via the > sh:hasShape function. sh:hasShape takes three arguments: > > sh:hasShape(?focusNode, ?shape, ?shapesGraph) > > Proposal: sh:hasShape must fail with a constraint violation, if it > encounters a recursive call involving the same combination of > arguments. The constraint violation could have a system generated > message such as "Failed to evaluate constraint due to unsupported > recursive use of sh:hasShape" and point at the focus node that was > visited twice. > > This would still allow most interesting cases that involve recursion > between shapes, but excludes cases where the same instances are > visited more than once. > > What am I missing? > > Thanks, > Holger
Received on Thursday, 11 June 2015 06:06:46 UTC