联盟废墟查询

时间:2016-04-11 12:45:02

标签: union sparql rdf geospatial linked-data

我成功地写了一个查询,该查询创建了一个特定区域单位的市政当局及其相应的沐浴水域(与之相交的水域)。现在我想为两个区域单位做这个,并比较哪个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(..也有很好的结果。
  3. 结果:

      

    指数:0,大小:0

    如何解决这个问题?

    这应该与联盟有关,对吧?

1 个答案:

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