- From: Peter F. Patel-Schneider <pfpschneider@gmail.com>
- Date: Thu, 3 Mar 2016 11:17:06 -0800
- To: Dimitris Kontokostas <kontokostas@informatik.uni-leipzig.de>, public-data-shapes-wg <public-data-shapes-wg@w3.org>
It looks to me as if this is a way to determine what to run the shapes on in a bottom-up implementation. However, it does not appear to address how to determine results when recursion happens, at least as far as I can see, and that is the issue that needs to be addressed for SHACL in general. For example, how does this approach address whether there is a violation in ex:a rdf:type ex:Person ; p1 ex:o1 . ex:o1 p2 ex:o2 . ex:o2 p3 ex:o3 . ex:o3 p1 ex:o1 . peter On 03/02/2016 11:54 PM, Dimitris Kontokostas wrote: > I maybe surprising to the group that I make such a proposal :) but had a > (crazy) idea about enabling *some* recursion on shacl that is consistent with > the rest of the spec and is based in SPARQL. > > The basic idea is to use implicit scopes and property paths to achieve that goal. > (Note that I have not yet implemented this, this is just a draft idea and > wanted to see if you would like to explore more on this) > > Example: > ShpA (scopeClass ex:Person, property(p1, valueShape: ShpB)) > ShpB ( property (p2, isIRI, (valueShape: ShpC)) > ShpC ( property (p3, isIRI, (valueShape: ShpA)) > > In this approach, every shape may have an explicit scope (such as scopeClass, > scopeNode, etc) as well as implicit scopes that derive from sh:valuShape. > to identify the implicit scope of a shape we traverse all the current shape > references to that shape from other shapes and give them implicit scopes only > if the other shapes have an explicit scope. > An example with make it easier to understand > > (note that this is without recursion and is how RDFUnit has currently > implemented sh:valueShape) > ShpA has an explicit scope with scopeClass ex:Person (we do not take ShpC into > account here) > ShpB has no explicit scope and 1 implicit scope: [a ex:Person] / p1 > ShpC has no explicit scope and 1 implicit scope: [a ex:Person] / p1 / p2 > > note that ShpC gets an implicit scope from ShpA only as ShpB has no explicit > scope, if it did, we would add an extra scope > to put this in SPARQL, ShpC would have the following scope > select ?this where { [] a ex:Person ; p1/p2 ?this } > > if we want to add recursion into this what we could do is something like the > following > ShpA has an explicit scope with scopeClass [ a ex:Person] and 1 implicit > scope [a ex:Person] / (p1 / p2 / p3 )+ > ShpB has no explicit scope and 1 implicit scope: [a ex:Person] / (p1 / p2 / p3 > )* / p1 > ShpC has no explicit scope and 1 implicit scope: [a ex:Person] / (p1 / p2 / p3 > )* / p1 / p2 > > As I said, this is just a draft idea for very simple recursion in simple shape > definitions. > I have not yet tested it or thought how this will behave in nested AND / OR (I > think NOT is out of the question anyway), I just wanted to share this and get > you feedback if it is worth exploring more > > Best > Dimitris > > > -- > Dimitris Kontokostas > Department of Computer Science, University of Leipzig & DBpedia Association > Projects: http://dbpedia.org, http://rdfunit.aksw.org, > http://http://aligned-project.eu <http://aligned-project.eu/> > Homepage:http://aksw.org/DimitrisKontokostas > Research Group: AKSW/KILT http://aksw.org/Groups/KILT >
Received on Thursday, 3 March 2016 19:17:45 UTC