2017-02-13 14 views
0

이 올빼미 모델에 대한 쿼리를 작성하려고합니다.JARA를 사용하여 SPARQL 쿼리 리터럴 인쇄 JA

:Sensor rdf:type owl:Class; 
:hasId rdf:type owl:DatatypeProperty, 
       rdfs:domain :Sensor; 
       rdfs:range xsd:int. 
:MedicalCountainer rdf:type :owlNamedIndividual, 
          :Sensor; 
          :hasId "55"^^xsd:int . 

센서 이름을 검색하려면 sensor-id를 사용하고 싶습니다. 이것은 내 Java 쿼리이지만 인쇄가되지 않는 이유를 모르겠습니다. 나는 내 질문이 옳다는 것을 알았다. 왜냐하면 나는 봉급 생활에서 답을 얻을 것이기 때문이다.

String file = "C:/users/src/data.ttl"; 
Model model = FileManager.get().loadModel(file); 
String queryString = "PREFIX : <http://semanticweb.org/sensor#>" + 
        "SELECT ?sensor" + 
        "WHERE {?sensor :hasId \"55"\^^<xsd:int>}"; 
Query query = QueryFactory.create(queryString); 
try (QueryExecution qexec = QueryExecutionFactory.create(query, model)) { 
      ResultSet result = qexec.execSelect(); 
      for (; result.hasNext();) { 
        QuerySolution soln = result.nextSolution(); 
        Resource r = soln.getResource("sensor"); 
        System.out.println(r); 
      } 
} 
+0

:

그리고 항상 모든 SPARQL 서비스를 통해 적절한 분석을 보장하기 위해 SPARQL 쿼리의 시작 부분에 모든 PREFIX 선언을 추가하는 것을 선호합니다. 그런 다음 "Valr"에 대한 리터럴을 검색합니다. 대신 "센서"에 대한 리터럴을 검색하려고 했습니까? 즉, soln.getLiteral ("sensor"); –

+0

사실, 나는 내 코드에 큰 문제가 있음을 알았다. 루프가 실행되지 않습니다. 즉 '결과'가 비어 있음을 의미합니다. 내 코드를 업데이트하면 문제가 무엇인지 알 수 없습니다. – Ali

답변

2

SPARQL 쿼리에서 리터럴의 사용법이 잘못되었습니다. 어느 쪽이든 당신은

  1. 리터럴에 대한 접두어 URI, 즉 "55"^^xsd:int, 또는
  2. 는 꺾쇠 괄호로 전체 URI를 넣어, 즉 "55"\^^<http://www.w3.org/2001/XMLSchema#int>

있지만 둘의 혼합물을 사용합니다. 당신은 변수 "센서"를 쿼리하는

PREFIX : <http://semanticweb.org/sensor#> 
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
SELECT ?sensor 
WHERE { 
    ?sensor :hasId "55"^^xsd:int 
} 
+0

나는 거북이를 사용하고 있는데 올바른 방법이라고 언급 한 첫 번째 방법은 알지만이 오류가 발생합니다 : 'org.apache.jena.query.QueryParseException : 2 행 63 열 : 미해결 접두사 이름 : xsd : int' 그러나 두 번째 방법은 효과가 있지만 null 만 인쇄합니다. 아시다시피, 왜? – Ali

+1

SPARQL 쿼리 시작 부분에 모든 접두사를 선언해야하기 때문에. 때로는 API/도구가 사전 정의 된 접두사를 제공하지만, 모든 곳에서 사용할 수 있도록하기 위해 쿼리에 사용 된 모든 접두사를 추가하는 것이 가장 좋습니다 :'PREFIX xsd : '추후 참조를 위해 제 대답에도이 내용을 추가했습니다. – AKSW

+0

고마워요. 내가 널이 된 이유를 아십니까? protge에 나는 대답을 얻고 있지만 여기에 나는이 쿼리에 대해 null을 얻고있다. – Ali