2016-08-17 14 views
0

Virtuoso Open Source Edition 07.20.3217을 설치했습니다.Virtuoso의 GeoSPARQL 기능 st_within

하지만 예상대로 GeoSPARQL이 작동하지 않습니다.

prefix owl: <http://www.w3.org/2002/07/owl#> 
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
prefix geo: <http://www.opengis.net/ont/geosparql#> 
prefix ex: <http://www.example.org/POI#> 
prefix sf: <http://www.opengis.net/ont/sf#> 
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 

ex:WashingtonMonument 
    rdf:type   ex:Monument 
    rdfs:label  "Washington Monument" ; 
    geo:hasGeometry ex:WMPoint . 

ex:WMPoint 
    rdf:type   sf:Point ; 
    geo:asWKT   "POINT(-77.03524 38.889468)"^^geo:wktLiteral . 

ex:NationalMall 
    a     ex:Park ; 
    rdfs:label  "National Mall" ; 
    geo:hasGeometry ex:NMPoly . 

ex:NMPoly 
    a     sf:Polygon ; 
    geo:asWKT   "POLYGON((-77.050125 38.892086, -77.039482 38.892036, -77.039482 38.895393, -77.033669 38.895508, -77.033585 38.892052, -77.031906 38.892086, -77.031883 38.887474, -77.050232 38.887142, -77.050125 38.892086))"^^geo:wktLiteral . 

가 그럼 난이 GeoSPARQL 쿼리 시도 - -

PREFIX geo: <http://www.opengis.net/ont/geosparql#> 
SELECT * 
WHERE { 
    ?m geo:hasGeometry ?mgeo . 
    ?p geo:hasGeometry ?pgeo . 
    FILTER (bif:st_within(?mgeo, ?pgeo)) 
} 

을하지만 어떤 결과가 없습니다

나는 10 트리플 삽입.

내가 뭘 잘못 했니?

답변 해 주셔서 감사합니다.

+0

이 게시물 (TallTed)에서 수정 해 주셔서 감사합니다. :) –

답변

0

공원 내의 기념물을 찾고 있다고 지정할 수 있습니다. 또한, 나는 당신이 와일드 카드 결과를 원하지는 않는다고 생각하지만, 그러한 기념물과 공원의 목록 만 생각합니다.

PREFIX geo: <http://www.opengis.net/ont/geosparql#> 

SELECT ?monument 
     ?park 
WHERE 
    { 
    ?monument    a ex:Monument ; 
       geo:hasGeometry ?mgeo  . 

    ?park     a ex:Park  ; 
       geo:hasGeometry ?pgeo  . 

    FILTER (bif:st_within(?mgeo, ?pgeo)) 

    } 

Live examples는 공원 지정 대 기념비에 문제가있는 것 같습니다하지만 그래서 여기에 결과를 않습니다 an adjusted query이있어, 종종 가정 법적보다 더 유용, 둘 다 POINT 형상을 가지고 (즉, 아니 POLYGON 데이터) -

PREFIX geo: <http://www.opengis.net/ont/geosparql#> 
PREFIX lgdo: <http://linkedgeodata.org/ontology/> 
PREFIX wgs: <http://www.w3.org/2003/01/geo/wgs84_pos#> 

SELECT ?monument ?mlabel ?mgeo 
     ?park  ?plabel ?pgeo 
WHERE 
    { 
    ?monument    a lgdo:Monument ; 
       rdfs:label ?mlabel ; 
       wgs:geometry ?mgeo . 

    ?park     a lgdo:Park ; 
       rdfs:label ?plabel ; 
       wgs:geometry ?pgeo . 

    FILTER (bif:st_within(?mgeo, ?pgeo)) 
    } 

나는 공원에 대한 POLYGON 형상을 포함하는 라이브 데이터 집합을 찾을 시간이 정확하게 같은 공원 POLYGONs 내 기념물 POINTs을 배치, 그래서 훨씬 더 팔 수 없습니다 ...하지만하지 마십시오 경우 인스턴스를 public으로 만들거나 그러한 데이터를 보유하고있는 라이브 공개 인스턴스를 가리킬 수 있습니다.

+0

답변 해 주셔서 감사합니다. 귀하의 의견대로, 나는 단지 공원 내에서 기념물을 얻고 싶습니다. 그러나 유형 및 와일드 카드 문제는 아닙니다. GeoSPARQL이 작동하지 않습니다. –

+0

라이브 쿼리로 업데이트했지만 불완전한 데이터와 비교하여 불완전한 결과를 얻었습니다 ... – TallTed

+0

감사합니다. "OGC GeoSPARQL - RDF 데이터 용 지리 쿼리 언어"에서 몇 가지 예를 테스트했는데 제대로 작동합니다. 이 문서에서는 geof : sfWithin과 같이 opengis.net에 정의 된 함수를 사용합니다. Virtuoso가 이러한 기능을 지원하지 않습니까? –