联盟遗迹查询

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

注意:

  1. 我正在使用 相同的区域 单位作为 证明 数据是 正确。
  2. 如果我评论第二个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)
}