2016-08-17 3 views
0

Ich installierte Virtuoso Open Source Edition 07.20.3217.st_within Funktion von GeoSPARQL auf Virtuoso

Aber GeoSPARQL funktioniert nicht wie erwartet.

I 10 Dreibettzimmer eingefügt -

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 . 

Dann habe ich versucht, diese GeoSPARQL Abfrage -

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

Aber es gibt kein Ergebnis.

Was habe ich falsch gemacht?

Vielen Dank für eine Antwort.

+0

Vielen Dank für Ihre Korrekturen in diesem Beitrag, TallTed. :) –

Antwort

0

Ich denke, Sie möchten vielleicht angeben, dass Sie nach Denkmälern in Parks suchen. Außerdem glaube ich nicht, dass Sie ein Wildcard-Ergebnis wollen, sondern nur die Liste solcher Monumente und Parks.

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 sind oft nützlicher als hypothetisch, also hier ist an adjusted query die Ergebnisse produziert, wenn es ein Problem zu sein, mit Monument vs Park Bezeichnung scheint, und beide haben POINT Geometrie (dh keine POLYGON Daten) -

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)) 
    } 

ich habe keine Zeit, um eine Live-Datenmenge zu finden, die POLYGON Geometrie für Parks umfasst, und legt genau Monument POINTs in einem solchen Park POLYGONs, so kann ich viel weiter nicht graben ... aber wenn Sie Wenn Sie Ihre Instanz öffentlich machen oder auf eine öffentliche Live-Instanz verweisen, die solche Daten enthält, können wir noch weiter gehen.

+0

Danke für Ihre Antwort. Als Ihr Kommentar möchte ich nur Denkmäler in Parks bekommen. Aber es ist kein Typ- und Platzhalterproblem. Ihr GeoSPARQL funktioniert auch nicht. –

+0

Ich habe mit einer Live-Abfrage aktualisiert, aber gegen unvollkommene Daten, also mit unvollkommenen Ergebnissen ... – TallTed

+0

Vielen Dank für Ihren Reiseführer. Ich habe ein Beispiel in "OGC GeoSPARQL - Eine geografische Abfragesprache für RDF-Daten" getestet und es funktioniert gut. Im Dokument verwenden sie Funktionen definiert opengis.net wie geof: sfWithin. Unterstützt Virtuoso diese Funktionen nicht? –

Verwandte Themen