I am not a SPARQL expert by any means, so apologies if what seems like a bug turns out to be misuse on my part.

Using rdfproc 1.0.17 for Debian Stretch I run the following (the second query from https://www.w3.org/TR/rdf-sparql-query/#alternatives ):

```
rdfproc --contexts --new test add "_:a" "http://purl.org/dc/elements/1.0/title"; "SPARQL Query Language Tutorial" rdfproc --contexts test add "_:a" "http://purl.org/dc/elements/1.0/creator"; "Alice"

rdfproc --contexts test add "_:b" "http://purl.org/dc/elements/1.1/title"; "SPARQL Protocol Tutorial" rdfproc --contexts test add "_:b" "http://purl.org/dc/elements/1.1/creator"; "Bob"

rdfproc --contexts test add "_:c" "http://purl.org/dc/elements/1.0/title"; "SPARQL" rdfproc --contexts test add "_:c" "http://purl.org/dc/elements/1.1/title"; "SPARQL (updated)"

rdfproc --contexts test query sparql - "SELECT ?x ?y WHERE  { { ?book <http://purl.org/dc/elements/1.0/title> ?x } UNION { ?book <http://purl.org/dc/elements/1.1/title> ?y } }"
```

This gives:

```
result: [, x="SPARQL Query Language Tutorial"]
result: [, x="SPARQL"]
result: []
result: []
```

Notice the lack of `y` bindings.


I have tried these examples with a version compiled from the GitHub sources and got the same results. I also tried this with the C library, and it seems to be `librdf_query_results_get_binding_value` that is failing, although I'm not sure.


Also, FWIW, here's the experiment that made me notice this in the first place:

```
rdfproc --contexts --new test add s:1 o:readBy i:1 c:1
rdfproc --contexts test add s:1 o:writtenBy i:1 c:2
rdfproc --contexts test add s:3 o:writtenBy i:1 c:3
rdfproc --contexts test add s:3 o:readBy i:1 c:4
rdfproc --contexts test add s:3 o:removedBy i:1 c:5

rdfproc --contexts test query sparql - "SELECT * WHERE { FILTER(?subject IN (<s:1>, <s:2>, <s:3>))   { GRAPH ?read_context { ?subject <o:readBy> ?read_object } } UNION  { GRAPH ?write_context { ?subject <o:writtenBy> ?write_object } } }"
```

Executing the above returns:

```
result: [, subject=<s:1>, read_context=<c:1>, read_object=<i:1>, write_context=<c:1>] result: [, subject=<s:3>, read_context=<c:4>, read_object=<i:1>, write_context=<c:1>]
result: [, subject=<s:1>, read_context=<c:5>]
result: [, subject=<s:3>, read_context=<c:5>]
```

Notice `write_context` is wrong in the first two, `read_context` is wrong in the second two (`<c:5>` is showing up despite not being asked for), `write_object` is missing from the first two, and `read_object` is missing from the second two.


I'd like to finish this though with a huge thanks for librdf and co, they've been a great help.
_______________________________________________
redland-dev mailing list
[email protected]
http://lists.librdf.org/mailman/listinfo/redland-dev

Reply via email to