- From: Andy Seaborne <andy@apache.org>
- Date: Mon, 2 Dec 2019 13:31:32 +0000
- To: public-rdf-star@w3.org
Hi Pavel,
Good question - it really pushes on the triple reference / triple in
data model point.
On 22/11/2019 13:44, Pavel Klinov wrote:
> Hi all,
>
> I'm an engineer at Stardog and we're working on a beta support for
> RDF*/SPARQL*. Here's one thing which bothers me: the semantics of
> BIND(<<spo>> as ?x).
>
> The way it's defined in https://arxiv..org/pdf/1406.3399.pdf
> <https://arxiv.org/pdf/1406.3399.pdf> Defn 13.2 (if I read it
> correctly) basically means "evaluate spo as a triple pattern and
> extend each solution with ?x = <s,p,o>". This is OK but it's very
> different from the standard semantics of BIND in SPARQL, e.g. BIND(:a
> as ?x). It creates the following specific issues:
>
> i) It's difficult to construct embedded triples out of nothing. On the
> empty data, "select ?x { bind(:a as ?x) }" returns "?x = :a"
> but "select ?x { bind(<<:a :p :b>> as ?x) }" returns nothing because
> the semantics evaluates ":a :p :b" and that triple is not in the data.
In PG mode, yes, I think <<:a :p :b>> with no :a :p :b has to evaluate
to error.
Is SA mode, no problem it is a term without associate condition.
>
> ii) this possibly creates troubles for query parameterisation in
> SPARQL* which often (though it is not standardised) works by textually
> replacing variables by their parameter values and adding BIND nodes to
> preserve variables names. For example,evaluation of select ?x ?y { ?x
> ?p ?y . } with "?x -> :a" could be done as select ?x ?y { :a ?p ?y .
> bind(:a as ?x) }, and it's not clear if that would work in all cases
> for "?x -> << :a :p :b >>"
>
> iii) queries like "construct { << ?x :p ?y >> :q "abc" } where {
> something }", while seem reasonable, cannot be trivially rewritten
> into something like "construct { ?s :q "abs" } where { something .
> bind(<< ?x :p ?y >> as ?s) }". It's pretty common in SPARQL to rewrite
> complex expressions in projections to bind expressions and aux
> variables to simplify processing, and it now breaks since BIND works
> differently for embedded patterns.
>
> To sum up, it feels like overriding the same old BIND keyword for a
> different semantics is not ideal. Does anyone have thoughts on this?
>
> Best,
> Pavel
Received on Monday, 2 December 2019 13:30:21 UTC