联盟遗迹查询
Union ruins query
我成功地编写了一个查询,它找到了给定区域单位的城市及其相应的沐浴水域(与它们相交的区域)。现在我想为两个区域单位做这件事并比较哪个 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(..
也有不错的结果。
结果:
Index: 0, Size: 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)
}
我成功地编写了一个查询,它找到了给定区域单位的城市及其相应的沐浴水域(与它们相交的区域)。现在我想为两个区域单位做这件事并比较哪个 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(..
也有不错的结果。
结果:
Index: 0, Size: 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)
}