2016-06-01 3 views
0

내 Stardog 데이터베이스에는 SPARQL 엔드 포인트의 서비스 설명이 들어 있습니다. 지금 Unforunately https://www.w3.org/TR/2013/REC-sparql11-federated-query-20130321/#valuesStartdog Federated Query with variable service

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

Stardog는 버전 4.1부터 서비스 URL (See the documentation)의 변수를 지원하지 않습니다. 실행하기 전에 매개 변수 값을 설정하면 서비스 URL에 변수 만있을 수 있습니다 (예 : CLI에서 --bind 옵션을 사용하거나 API의 Query.parameter(String,Value) 함수를 사용하십시오. 따라서 먼저 서비스 URL을 검색하기 위해 쿼리를 실행하여 각 결과에 대해 하나의 쿼리를 실행해야합니다.

업데이트 : 버전 5.2부터 Stardog는 서비스 변수를 지원하므로이 쿼리는있는 그대로 작동해야합니다.