0

私の Stardog データベースには、SPARQL エンドポイントのサービス記述が含まれています。https://www.w3.org/TR/2013/REC-sparql11-federated-query-20130321/#valuesで説明されているように、特定のサービスを選択してクエリで呼び出そうとしています

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

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

4

1 に答える 1

2

Stardog は、バージョン 4.1 の時点で、サービス URL の変数をサポートしていません (ドキュメントを参照してください)。--bindCLI のオプションまたはQuery.parameter(String,Value)API の関数を使用するなど、実行前にパラメーター値を設定する場合にのみ、サービス URL に変数を含めることができます。そのため、最初にクエリを実行してサービス URL を取得し、結果ごとに 1 つのクエリを実行する必要があります。

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

于 2016-06-02T01:17:17.700 に答える