SmartDataAnalytics / RdfProcessingToolkit

Command line interface based RDF processing toolkit to run sequences of SPARQL statements ad-hoc on RDF datasets, streams of bindings and streams of named graphs with support for processing JSON, CSV and XML using function extensions
https://smartdataanalytics.github.io/RdfProcessingToolkit/
Other
39 stars 3 forks source link

Conditional Triple Pattern Reordering Deactivation when property functions and SERVICE clauses are used #18

Closed Aklakan closed 3 years ago

Aklakan commented 3 years ago

Triple pattern reordering w.r.t. property functions and SERVICE causes unexpected results. In general if a property function computes bindings from input bindings the reordering will cause lots of issues For example, if (?x pfn:retrieve "search string") requires the object to be bound in order to yield bindings with matching resources then { <foo> rdfs:label ?l . ?x pfn:?l } is vastly different from { ?x pfn:retrieve ?l . <foo> rdfs:label ?l .}.

The underlying issue is query planning over restricted sources (or that's the name I recall from a db lecture) - so pfn:retrieve can be seen as a relation whole 'object' column is non-enumerable. AFAIK there is no way in jena to express that.

Hence, there should be a feature to auto disable triple pattern reordering in the presence of property functions (or make the reordering aware of the pfn capabilities).

W.r.t SERVICE: I think there was a similar issues that problems can occurr when { {BEFORE} SERVICE {...} { AFTER } } is transformed into { {BEFORE AFTER} SERVICE {...} } - but right now I don't recall the issue anymore...

Aklakan commented 3 years ago

Conditional triple pattern reordering is now implemented.