2016-06-01 4 views
0

私のStardogデータベースには、SPARQLエンドポイントのサービス記述が含まれています。私は今Unforunately https://www.w3.org/TR/2013/REC-sparql11-federated-query-20130321/#valuesStartdog連動型クエリ(可変サービスあり)

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 . } 
} 

で説明したように、特定のサービスを選択して、クエリでそれを呼び出すようにしようとしている、Stardogは、変数がURIでないことを私に言って、例外をスロー:

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

BINDステートメントの "?service"変数をIRIコンストラクタでキャスティングし、バインドされた変数を使用することは役に立ちません。 Stardogに連合クエリを実行させるために、変数がIRIであることを確認する方法

答えて

2

バージョン4.1のStardogは、サービスURL(See the documentation)の変数をサポートしていません。実行前にパラメータ値を設定すると、サービスURLに変数を含めることができます。 CLIで--bindオプションを使用するか、APIのQuery.parameter(String,Value)関数を使用します。したがって、最初にクエリを実行してサービスURLを取得し、各結果に対して1つのクエリを実行する必要があります。

UPDATE:バージョン5.2以降、Stardogはサービス変数をサポートしているため、このクエリはそのまま動作するはずです。

関連する問題