- From: Peter F. Patel-Schneider <pfpschneider@gmail.com>
- Date: Sat, 22 Apr 2017 16:30:43 -0700
- To: Irene Polikoff <irene@topquadrant.com>
- Cc: Dimitris Kontokostas <jimkont@gmail.com>, "public-rdf-sha." <public-rdf-shapes@w3.org>
There are several new pieces of information that I have brought up recently.
The purported remedy is incomplete.
There are interoperability problems on well-formed shapes graphs between SHACL
Core and SHACL-SPARQL implementations.
There are interoperability problems on well-formed shapes graphs between
different SHACL Core implementations.
The new syntax rules increase the probability of creating ill-formed shapes
graphs.
Peter F. Patel-Schneider
Nuance Communications
On 04/22/2017 04:18 PM, Irene Polikoff wrote:
> Peter,
>
> Merits aside, there is a strong procedural reason for not adding such requirement. As you know, the working group charter is coming to the end. W3C has a morrotorium on publishing new versions that is starting now and will last for at least a week, may be more. Then, after a document with a new requirement is published, the implementers would need to comply, etc. All of this pushes the timescale.
>
> Further, you brought up the topic of checking validity of the shapes graph many times in the past, even raising a formal objection prior to the CR. I don’t believe you are providing any new information now.
>
> Irene
>
>> On Apr 22, 2017, at 3:58 PM, Peter F. Patel-Schneider <pfpschneider@gmail.com> wrote:
>>
>> 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 23:31:21 UTC