2017-09-28 1 views
0

Apache Jena에서 실행중인 SPARQL 쿼리에 문제가 있습니다. 쿼리는 sparqlservice를 통해 LinkedGeoData에 전달됩니다. 쿼리는 다음과 같습니다sparql-service에서 구조화되지 않은 반환

Prefix lgdo: <http://linkedgeodata.org/ontology/> 
Prefix geom: <http://geovocab.org/geometry#> 
Prefix ogc:<http://www.opengis.net/ont/geosparql#> 
Select ?s ?l ?g 
From <http://linkedgeodata.org> { 
    ?s 
    a lgdo:Amenity ; 
    rdfs:label ?l ;  
    geom:geometry [ 
     ogc:asWKT ?g 
    ] . 

    Filter(<bif:st_intersects> (?g, <bif:st_point> (12.372966, 51.310228), 0.1)) . 
} 
내가 <bif:st_intersects> 사용

<bif:st_point>을 접두사로 bif 엔드 포인트 http://linkedgeodata.org/sparql에 의해 정의가 아니라 내 자바 코드 내에서있다 :

여기
String queryString2 = 
         "Prefix lgdo: <http://linkedgeodata.org/ontology/> "+ 
         "Prefix geom: <http://geovocab.org/geometry#> "+ 
         "Prefix ogc:<http://www.opengis.net/ont/geosparql#> "+ 
         "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> "+ 
         "Select ?s ?l ?g From <http://linkedgeodata.org> { ?s a lgdo:Amenity ; rdfs:label ?l ;  geom:geometry [  ogc:asWKT ?g ] . Filter (<bif:st_intersects> (?g, <bif:st_point> (12.372966, 51.310228), 0.1)) .}"; 
    QueryExecution qexec2 = QueryExecutionFactory.sparqlService("http://linkedgeodata.org/sparql", query2); 

Iterator<Triple> triples2 = qexec2.execConstructTriples(); 

while(triples2.hasNext()) 
       { 

        Triple triple = triples2.next(); 

        Node s = triple.getSubject(); 
        Node p = triple.getPredicate(); 
        Node o = triple.getObject(); 

        System.out.println(s.toString()); 
        System.out.println(p.toString()); 
        System.out.println(o.toString()); 
        System.out.println("\n"); 
       } 

내 출력의 일부입니다 그러나

b80d5f650b2e98240baf560415cdef40 
http://www.w3.org/2005/sparql-results#value 
"Kita EinSteinchen" 


559c608a13e5bc6e4f98ed9ea24ee97d 
http://www.w3.org/2005/sparql-results#binding 
b80d5f650b2e98240baf560415cdef40 


0759546664f20899fa5455abd7dbcc74 
http://www.w3.org/2005/sparql-results#variable 
"g" 


0759546664f20899fa5455abd7dbcc74 
http://www.w3.org/2005/sparql-results#value 
"LINESTRING(12.3802344 51.3325989,12.380315 51.3327169,12.3803773 51.3327029,12.3804007 51.3327403,12.3799895 51.3328375,12.3800728 51.332975,12.3800728 51.332975,12.3800992 51.3330203,12.3799822 51.3330486,12.3799632 51.3330555,12.3799248 51.3330256,12.379842 51.3330456,12.3798641 51.3331146,12.3799149 51.3331622,12.3795303 51.333342,12.379223 51.3328586,12.3792961 51.3328139,12.3802344 51.3325989)"^^http://www.openlinksw.com/schemas/virtrdf#Geometry 

, 나는 SPARQL 엔드 포인트,536에서 직접 동일한 쿼리를 실행하면(Query on LinkedGeoData SPARQL-service) 잘 구조화 된 솔루션을 얻을 수 있습니다. 즉, 모든 변수 (?s ?l ?g)에 대한 값을 얻습니다. Java 프로그램에서 동일한 형식을 사용하려면 어떻게해야합니까? - 내가 원하는 해결책을 찾기 위해 이상한 반환 문자열을 스캔하고 싶지는 않습니다.

미리 감사드립니다.

답변

3

당신은 콘솔로 결과를 포맷 ResultSet

ResultSet rs = qexec2.execSelect(); 
ResultSetFormatter.out(rs); 

이 인쇄를 사용할 수 있지만 모든 인쇄됩니다

rs.forEachRemaining(r -> System.out.println(r.get("s"))); 

원하는대로 당신은 또한 결과를 구문 분석 ResultSet의 제공 방법을 사용할 수 있습니다 변수 "s"의 결과

see here also

+0

대단히 감사합니다! 그것은 일했다 :) –

관련 문제