我安装了Virtuoso Open Source Edition 07.20.3217。
但是GeoSPARQL不像我预期的那样工作。
我插入了10个三元组 -
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))
}
但没有结果。
我做错了什么?
感谢您的回复。
答案 0 :(得分:0)
我想您可能想要指明您正在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通常比假设更有用,所以这里的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
几何体的实时数据集,并准确地将纪念碑POINTs
放置在这样的公园POLYGONs
内,所以我无法进一步挖掘..但如果您可以公开您的实例,或者指向包含此类数据的实时公共实例,我们可以更进一步。