2016-06-01 4 views
0

Meine Stardog-Datenbank enthält Dienstbeschreibungen von SPARQL-Endpunkten. Ich bin jetzt versuchen, einen bestimmten Dienst auszuwählen und es in der Abfrage aufrufen, wie beschrieben in https://www.w3.org/TR/2013/REC-sparql11-federated-query-20130321/#valuesStartdog Federated Query mit Variablendienst

PREFIX void: <http://rdfs.org/ns/void#> 
PREFIX dc: <http://purl.org/dc/elements/1.1/> 
PREFIX doap: <http://usefulinc.com/ns/doap#> 

SELECT ?service ?projectName 
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 ?projectName . } 
} 

Unforunately, wirft Stardog eine Ausnahme, mir zu sagen, dass die Variable nicht eine URI ist:

com.complexible.stardog.plan.eval.operator.OperatorException: Cannot execute a service query with a variable ref which binds to non-URI values 

Das Darstellen der "? Service" -Variable in einer BIND-Anweisung mit dem IRI-Konstruktor und Verwenden der gebundenen Variablen hilft ebenfalls nicht. Wie kann sichergestellt werden, dass es sich bei der Variablen um eine IRI handelt, damit Stardog die föderierte Abfrage ausführen kann?

Antwort

2

Stardog unterstützt ab Version 4.1 keine Variablen für die Service-URL (See the documentation). Sie können nur eine Variable in der Service-URL haben, wenn Sie den Parameterwert vor der Ausführung festlegen, z. Verwendung der Option --bind in der CLI oder der Query.parameter(String,Value)-Funktion in der API. Sie müssen also zuerst die Abfrage ausführen, um Service-URLs abzurufen, und eine Abfrage für jedes Ergebnis ausführen.

UPDATE: Ab Version 5.2 unterstützt Stardog Service-Variablen, so dass diese Abfrage so wie sie ist funktionieren sollte.