我成功地写了一个查询,该查询创建了一个特定区域单位的市政当局及其相应的沐浴水域(与之相交的水域)。现在我想为两个区域单位做这个,并比较哪个r。单位最多。但是,union的第二个操作数未通过strdf:mbbIntersects()函数。
这是我的代码:
SELECT *
WHERE {
{
SELECT (COUNT(?bw) as ?bwCount1) WHERE
{
?regional_unit geo:έχει_επίσημο_όνομα "ΠΕΡΙΦΕΡΕΙΑΚΗ ΕΝΟΤΗΤΑ ΗΡΑΚΛΕΙΟΥ" .
?municipality1 geo:ανήκει_σε ?regional_unit .
?municipality1 geo:έχει_γεωμετρία ?geometry .
?bw geos:hasGeometry ?bw_geo .
?bw_geo geos:asWKT ?bw_geo_wkt .
FILTER(strdf:mbbIntersects(?geometry, ?bw_geo_wkt)) .
?bw unt:has_concie_0 ?concie_0 .
FILTER(?concie_0 < 1.5)
}
}
UNION
{
SELECT (COUNT(?bw) as ?bwCount2) WHERE
{
?regional_unit geo:έχει_επίσημο_όνομα "ΠΕΡΙΦΕΡΕΙΑΚΗ ΕΝΟΤΗΤΑ ΗΡΑΚΛΕΙΟΥ" .
?municipality2 geo:ανήκει_σε ?regional_unit .
?municipality2 geo:έχει_γεωμετρία ?geometry .
?bw geos:hasGeometry ?bw_geo .
?bw_geo geos:asWKT ?bw_geo_wkt .
FILTER(strdf:mbbIntersects(?geometry, ?bw_geo_wkt)) .
?bw unt:has_concie_0 ?concie_0 .
FILTER(?concie_0 < 1.5)
}
}
}
请注意:
FILTER(strdf:mbbIntersects(..
,它会给出
结果。 FILTER(!strdf:mbbIntersects(..
也有很好的结果。结果:
指数:0,大小:0
如何解决这个问题?
这应该与联盟有关,对吧?
答案 0 :(得分:0)
在这种情况下,等效查询如下(在评论中很难做到这一点):
SELECT (COUNT(?bw1) as ?bwCount1) (COUNT(?bw2) as ?bwCount2)
WHERE {
{
?regional_unit geo:έχει_επίσημο_όνομα "ΠΕΡΙΦΕΡΕΙΑΚΗ ΕΝΟΤΗΤΑ ΗΡΑΚΛΕΙΟΥ" .
?municipality1 geo:ανήκει_σε ?regional_unit .
?municipality1 geo:έχει_γεωμετρία ?geometry .
?bw geos:hasGeometry ?bw_geo .
?bw_geo geos:asWKT ?bw_geo_wkt .
FILTER(strdf:mbbIntersects(?geometry, ?bw_geo_wkt)) .
?bw1 unt:has_concie_0 ?concie_0 .
FILTER(?concie_0 < 1.5)
}
UNION
{
?regional_unit geo:έχει_επίσημο_όνομα "ΠΕΡΙΦΕΡΕΙΑΚΗ ΕΝΟΤΗΤΑ ΗΡΑΚΛΕΙΟΥ" .
?municipality2 geo:ανήκει_σε ?regional_unit .
?municipality2 geo:έχει_γεωμετρία ?geometry .
?bw geos:hasGeometry ?bw_geo .
?bw_geo geos:asWKT ?bw_geo_wkt .
FILTER(strdf:mbbIntersects(?geometry, ?bw_geo_wkt)) .
?bw2 unt:has_concie_0 ?concie_0 .
FILTER(?concie_0 < 1.5)
}
}
即。两个UNION
子句完全相同。它没有带回数据的原因可能是其中一个匹配不存在,我们正在过滤值(例如,尝试删除FILTER(?concie_0 < 1.5)
)。还可以尝试系统地在行的开头用#
评论三重模式,直到得到结果,可能使用SELECT *
,直到找出缺少匹配的位置为止。
可以重写上述查询,只关注不同的UNION
图形模式部分:
SELECT (COUNT(?bw1) as ?bwCount1) (COUNT(?bw2) as ?bwCount2)
WHERE {
?regional_unit geo:έχει_επίσημο_όνομα "ΠΕΡΙΦΕΡΕΙΑΚΗ ΕΝΟΤΗΤΑ ΗΡΑΚΛΕΙΟΥ" .
?bw geos:hasGeometry ?bw_geo .
?bw_geo geos:asWKT ?bw_geo_wkt .
{
?municipality1 geo:ανήκει_σε ?regional_unit .
?municipality1 geo:έχει_γεωμετρία ?geometry .
?bw1 unt:has_concie_0 ?concie_0 .
FILTER(strdf:mbbIntersects(?geometry, ?bw_geo_wkt)) .
}
UNION
{
?municipality2 geo:ανήκει_σε ?regional_unit .
?municipality2 geo:έχει_γεωμετρία ?geometry .
?bw2 unt:has_concie_0 ?concie_0 .
FILTER(strdf:mbbIntersects(?geometry, ?bw_geo_wkt)) .
}
FILTER(?concie_0 < 1.5)
}