- From: Peter F. Patel-Schneider <pfpschneider@gmail.com>
- Date: Sat, 22 Apr 2017 12:58:02 -0700
- To: Dimitris Kontokostas <jimkont@gmail.com>
- Cc: "public-rdf-sha." <public-rdf-shapes@w3.org>, Irene Polikoff <irene@topquadrant.com>
There is a very simple test to ensure that are not SHACL-SPARQL constructs in a shapes graph. Just look for sh:sparql values in shapes and SHACL instances of sh:ConstraintComponent. If there are none then the only effective constructs in the shapes graph are in SHACL Core. Of course there are cases where a SHACL Core processor would otherwise produce the same results as a SHACL-SPARQL processor on a shapes graph, but I don't think that that is what is needed here. As far as future versions of SHACL are concerned I don't see how there is any way to ensure that a SHACL Core processor (or a SHACL-SPARQL processor) for the current version of SHACL does the right thing for future versions of SHACL. Future versions of SHACL could be written so that changes to SHACL-SPARQL did not require changes to SHACL Core implementations, of course. An easy way to achieve this under my proposal would be to have the future version of SHACL-SPARQL only make changes that are only effective if there are SHACL instances of sh:ConstraintComponent in the shapes graph. My proposal eliminates an important source of silent interoperability failures between SHACL Core and SHACL-SPARQL implementations. It is much like C compilers complaining if they see C++ syntax, even if that syntax would not change the behaviour of the program. My proposal is extremely simple to implement and its run-time costs are minimal. I see no reason not to add it to SHACL. Peter F. Patel-Schneider Nuance Communications On 04/21/2017 10:45 PM, Dimitris Kontokostas wrote: > Hi Peter, > > Although I agree that interoperability is important, I don't think it is > realistic to require shacl core processor to be able to detect shacl sparql > constructs without implementing (part of) shacl sparql. > > For example, a constraint component could be defined but never used in a > shapes graph. > > Also, what about deactivated shapes, shapes that are never reached in a > validation or ill formed constructs? > > This easily becomes more complex than identifying two graph patterns > > In addition, it is not future proof. What if we later define shacl sparql+ or > another variant? Will all preexisting shacl core implementations break for not > detecting the new constructs? > > An informative note about interoperability would helpful but conformance > criteria are hard to define imho. > > Best, > Dimitris > > Typed by thumb. Please forgive brevity, errors. > > On Apr 22, 2017 4:09 AM, "Peter F. Patel-Schneider" <pfpschneider@gmail.com > <mailto:pfpschneider@gmail.com>> wrote: > > Note that SHACL implementations that ignore SHACL-SPARQL constructs can > produce more violations than even a SHACL implementation that is in complete > compliance with all the SHACL constructs. There are very simple examples > that demonstrate this, such as > > ex:s1 a sh:NodeShape ; > sh:targetNode ex:i ; > sh:not [ sh:sparql "SELECT $this WHERE { }" ] . > > peter > > > On 04/21/2017 04:03 PM, Irene Polikoff wrote: > > Peter, > > > > We will discuss this at the next WG meeting. > > > > > >> On Apr 21, 2017, at 5:30 PM, Peter F. Patel-Schneider > <pfpschneider@gmail.com <mailto:pfpschneider@gmail.com>> wrote: > >> > >> The situation with respect to RDFS/OWL is quite different from that for > SHACL. > >> For starters, RDFS and OWL are two different recommendations, so there > is some > >> expectation that there might be differences between them. On the other > hand > >> SHACL is one recommendation so there should be an expectation of > >> interoperability between different SHACL implementations, even between > SHACL > >> Core and SHACL-SPARQL. > >> > >> Further, there is a useful interoperability between RDFS and OWL - RDFS > >> entailment is sound with respect to OWL entailment (subject to some > annoying > >> caveats). The same can't be said for SHACL Core versus SHACL-SPARQL In > >> general the violations reported by SHACL Core implementations will be > >> different from those reported by SHACL-SPARQL implementations - some > >> violations will be reported only by SHACL Core implementations and other > >> violations will be reported only by SHACL-SPARQL implementations. These > >> differences may only arise long after deployment. > >> > >> Fortunately there is a simple change that alleviates much of this > >> interoperability problem. Just require that SHACL implementations at least > >> have a mode where they signal when they see constructs that they do not > >> handle. This is already a requirement for sh:entailment so it is not as if > >> requirements for signalling unhandled constructs is alien to SHACL. > With this > >> simple change users can ensure that they will be quickly notified if > there is > >> a chance of interoperability failures. > >> > >> A sound method for detecting the potential use of SHACL-SPARQL construct in > >> shapes is very simple - it is not necessary to process SPARQL-based > constraint > >> components to find their parameters. All that is needed is to check > for the > >> absence of sh:sparql constructs in shapes and the absence of SHACL > instances > >> of sh:ConstraintComponent in the shapes graph. This easy method will > produce > >> a signal in cases where a SHACL-based constraint component is present but > >> unused - certainly not a significant problem and probably not a problem > at all. > >> > >> So there is a very easy method to make SHACL Core and SHACL-SPARQL > >> implementations much more interoperable. Given that one of the tenets > of W3C > >> recommendations is interoperability this method needs to be required > for SHACL > >> implementations. > >> > >> Peter F. Patel-Schneider > >> Nuance Communications > >> > >> > >> On 04/21/2017 12:47 PM, Irene Polikoff wrote: > >>> I don’t think I follow. > >>> > >>> Two SHACL Core processors will not produce different results. They > will both only understand SHACL Core and produce results for the shapes > “inside” SHACL Core. > >>> > >>> SHACL SPARQL constructs are valid RDF, but SHACL Core processors do > not understand or interpret their semantics. > >>> > >>> Similarly, to how an RDFS inference engine will ignore OWL > restrictions - they don’t mean anything special to it. And an OWL > inferencing engine that only supports one profile (let’s say OWL RL) will > not be signaling that there are some axioms which meaning it didn’t interpret. > >>> > >>>> On Apr 21, 2017, at 3:03 PM, Peter F. Patel-Schneider > <pfpschneider@gmail.com <mailto:pfpschneider@gmail.com>> wrote: > >>>> > >>>> It is important for interoperability that SHACL Core implementations are > >>>> required to *not* silently produce different results on valid shapes > graphs. > >>>> Instead they must be required to signal that they have been given a > shapes > >>>> graph that they do not completely handle. > >>>> > >>>> peter > >>>> > >>>> > >>>> On 04/21/2017 12:01 PM, Irene Polikoff wrote: > >>>>> But, of course, SHACL Core and SHACL-SPARQL implementations will > produce different results. This is by design. > >>>>> > >>>>> SHACL Core processors do not support SHACL-SPARQL. By definition, a > SHACL Core and a SHACL SPARQL processors are only interoperable for a > subset of SHACL which is SHACL Core and sh:sparql is not in SHACL Core. > >>>>> > >>>>>> On Apr 21, 2017, at 2:43 PM, Peter F. Patel-Schneider > <pfpschneider@gmail.com <mailto:pfpschneider@gmail.com>> wrote: > >>>>>> > >>>>>> A SHACL implementation that silently ignores sh:sparql constructs > produces an > >>>>>> interoperability nightmare. > >>>>>> > >>>>>> For example, such an implementation will produce no violations for > the shape > >>>>>> ex:sparql a sh:NodeShape ; > >>>>>> sh:targetNode ex:i ; > >>>>>> sh:sparql "SELECT ?this WHERE { }" . > >>>>>> A SHACL-SPARQL implementation will instead produce a violation. > >>>>>> > >>>>>> peter > >>>>>> > >>>>>> > >>>>>> On 04/21/2017 03:39 AM, Irene Polikoff wrote: > >>>>>>> Peter, > >>>>>>> > >>>>>>> If your implementation is SHACL Core only, how could SHACL-SPARQL > constructs affect it? It would seem to me that the values in the sh:spraql > triples would be no different to it than values in the ex:foo (or any user > defined predicate) triples. > >>>>>>> > >>>>>>> Sent from my iPhone > >>>>>>> > >>>>>>>> On Apr 21, 2017, at 12:45 AM, Peter F. Patel-Schneider > <pfpschneider@gmail.com <mailto:pfpschneider@gmail.com>> wrote: > >>>>>>>> > >>>>>>>> My alt-SHACL implementation does complete syntax checking, > signalling whenever > >>>>>>>> in encounters a shape or path or list that is not correctly > formed. My > >>>>>>>> implementation has a strict mode that signals whenever the > putative shapes > >>>>>>>> graph contains anything that violates any of the SHACL Core > syntax rules or > >>>>>>>> contains a recursive shape or contains SHACL-SPARQL constructs > that could > >>>>>>>> affect validation. To test this checking I had put together an > RDF graph > >>>>>>>> containing a comprehensive set of constructs that need to be checked. > >>>>>>>> > >>>>>>>> I just updated this graph, and the associated checking code, to > incorporate > >>>>>>>> the numerous additional syntax rules that were added when the > SHACL document > >>>>>>>> became a candidate recommendation. I include the graph here. > It can be > >>>>>>>> turned into a comprehensive set of syntax test cases for SHACL > Core by just > >>>>>>>> separating it into small graphs each containing one of the test > shapes. > >>>>>>>> > >>>>>>>> The amount of code required to do complete syntax checking was > quite modest. > >>>>>>>> Running my implementation over the graph was helpful in finding > bugs such as > >>>>>>>> incorrect recursion checks in the path code. I strongly > recommend that every > >>>>>>>> SHACL implementation be run on every shape in this graph. > >>>>>>>> > >>>>>>>> Peter F. Patel-Schneider > >>>>>>>> Nuance Communications > >>>>>>>> <syntax.ttl> > >>>>> > >>> > > >
Received on Saturday, 22 April 2017 19:58:40 UTC