- From: Andy Seaborne <andy.seaborne@epimorphics.com>
- Date: Fri, 27 Jan 2012 20:18:22 +0000
- To: SPARQL Working Group <public-rdf-dawg@w3.org>
(First attempt to send this was from the wrong address - please ignore)
I've managed to run the federated query tests - in case it helps anyone
else, here's what I did.
There are two changes to the test needed:
== service06.srx
The query says:
SELECT ?s ?o1 ?o2
but ?o2 (which is never bound) wasn't listed in the in the <head> of the
results.
I've corrected this in CVS.
== service05.rq
This one is because the test isn't quite what it seems.
SELECT ?service ?title
WHERE {
# Find the service with subject "remote".
?p dc:subject ?projectSubject ;
void:sparqlEndpoint ?service
FILTER regex(?projectSubject, "remote")
# Query that service projects.
SERVICE ?service {
?project doap:name ?title . }
}
Written like that, strict SPARQL says the FILTER is on the whole block
and that includes the SERVICE. It's as if it is after the SERVICE (an
optimizer can move it around - I'm sure many do). That makes ?service
unfiltered at the point of naive execution.
But we want to force it to be only applying to the local part of the
query: adding a pair of {} does that:
{
{
# Find the service with subject "remote".
?p dc:subject ?projectSubject ;
void:sparqlEndpoint ?service
FILTER regex(?projectSubject, "remote")
}
# Query that service projects.
SERVICE ?service {
?project doap:name ?title . }
}
After talking to Greg about this on IRC, I have changed CVS as it seems
to be the intention. My EARL report assumes the change.
== Setup
The tests can't be executes as-is because they refer to various
endpoints needed to be queries. I was aiming to run the queries and
manually check the results against the specified results. Changing the
ARQ test suite code looked like it would take longer than running the
tests and doing some manual work.
The data for the same endpoint is different for different tests so
instead I made every endpoint/data combination different. I ran a copy
of Fuseki with 9 different endpoints (some tests go to two places, #7
does not need a real endpoint).
e.g.
service02.rq:
SELECT ?s ?o1 ?o2
{
SERVICE <http://localhost:3030/ds2a/sparql> {
?s ?p ?o1 . }
OPTIONAL {
SERVICE <http://localhost:3030/ds2b/sparql> {
?s ?p2 ?o2 }
}
}
Then I ran the tests queries in a single run, and checked the results
were the same as the srx files.
The final state of my test area is available for inspection:
http://people.apache.org/~andy/service-tests-2012-01-25.zip
Andy
Received on Friday, 27 January 2012 20:18:50 UTC