- From: Holger Knublauch <holger@topquadrant.com>
- Date: Fri, 30 Oct 2015 09:26:11 +1000
- To: public-data-shapes-wg@w3.org
On 10/30/2015 9:16, Peter F. Patel-Schneider wrote:
> On 10/29/2015 03:50 PM, Holger Knublauch wrote:
>> On 10/30/2015 4:04, Peter F. Patel-Schneider wrote:
>>> On 10/28/2015 10:29 PM, Holger Knublauch wrote:
>>>> On 10/29/2015 14:14, Peter F. Patel-Schneider wrote:
>>> [...]
>>>>> 9.5
>>>>>
>>>>> [Remove, as implementing this will require parsing and modifying SPARQL
>>>>> bodies.]
>>>> What modifications are required? I had explained how these are invoked in 7.6
>>> Well then I don't understand how 7.6 is supposed to work.
>>>
>>> It appears to me that somehow the body of the node validation function is
>>> going to have to be modified and injected into the generated SPARQL query, so
>>> that !{validationFunction} can be executed.
>> Take the node validation function sh:hasDatatype as an example. The call would
>> become
>>
>> FILTER (!sh:hasDatatype(?object, $datatype)) .
>>
>> i.e. no difficult SPARQL manipulation would be required.
>>
>> Holger
> So instead of code injection this requires the ability to call not just
> functions that have been implemented in the engine beforehand, but also the
> ability to call functions that are constructed on the fly?
>
> I suppose that this does get away from SPARQL manipulation here, but
> on-the-fly function generation doesn't seem to be a common facility in SPARQL
> engines.
It doesn't have to be on-the-fly. There are various implementation
strategies to install the new functions beforehand. Usually there is a
limited number of shapes graphs in a system. Installing new functions
only needs to be done on the first call to SHACL with a given shapes
graph. In TopBraid we also have a mechanism that walks through all SPIN
files in the workspace (folders containing the RDF files) to pre-load
all functions. But our Jena implementation can also create functions on
the fly, by looking at the current query graphs.
Yes, this isn't necessarily a cheap feature, but - trust me - once you
have gotten used to working with such functions, you would never want to
go back. In many practical use cases (large commercial projects) SPARQL
queries would become completely unmaintainable if we had to repeat the
same patterns and sub-queries over and over again.
Holger
Received on Thursday, 29 October 2015 23:26:49 UTC