如何获得直辖市的国家?

How to get country of a municipality?

ontology在于XMLhere.

我也试图询问我的世界有哪些 classes,然后试图检查我的资源(市政当局)是否真的属于那个 class,但国家仍然溜走了(虽然当我请求所有 classes 时它被获取,但它无法通过 属性 belongs_to 连接到我的资源)。

我还在 Sesame 中启用了 前向链接 推理!顺便说一句,我是初学者,所以任何提示对我来说都是黄金。我错过了什么?


编辑:

新查询:

"SELECT ?res ?belongs " +
"WHERE  {" +
         "?res a geo:Mun ;"+
            "geo:hasName \"mun name\" ;"+
            "geo:belongs_to+ ?belongs ."+
        "}";

输出:

[belongs=http://geo.linkedopendata.gr/gag/id/1304;res=http://geo.linkedopendata.gr/gag/id/9325]
[belongs=http://geo.linkedopendata.gr/gag/id/13;res=http://geo.linkedopendata.gr/gag/id/9325]
[belongs=http://geo.linkedopendata.gr/gag/id/997;res=http://geo.linkedopendata.gr/gag/id/9325]

如果我对你的数据模型的理解正确,你有 class geo:Municipality 的实例,它们属于 geo:RegionUnit 的实例,而 geo:RegionUnit 又属于 [= 的实例18=],等等,直到最终它们属于 geo:Country 的一个实例。除非我误解,否则您的查询会尝试为一个特定的自治市取回所有这些实例。

这非常简单,甚至不需要任何 RDFS 推理支持。

让我们一步步构建查询。首先,让我们抓住实际的自治市本身:

SELECT ?res 
WHERE  {
           ?res a geo:Municipality ;
                geo:έχει_επίσημο_όνομα "ΔΗΜΟΣ ΧΑΝΙΩΝ" .
}

我在这里假设(因为我不会说希腊语)geo:έχει_επίσημο_όνομα 是将 Municipality 资源与其名称标签链接起来的 RDF 属性。

第二步,我们要抓取它所属的所有其他资源。

SELECT ?res ?belongs
WHERE  {
           ?res a geo:Municipality ;
                geo:έχει_επίσημο_όνομα "ΔΗΜΟΣ ΧΑΝΙΩΝ" ;
                geo:belongsTo ?belongs .
}

当然,以上只是让我们找回它直接所属的东西。如果我们相信你的ontology,这将把它所属的区域单位还给我们,但没有别的。但是我们想要所有这些,删除 N 个步骤,所以我们想要 传递 遵循 geo:belongsTo 关系。这可以使用传递 属性 路径来完成:

SELECT ?res ?belongs
WHERE  {
           ?res a geo:Municipality ;
                geo:έχει_επίσημο_όνομα "ΔΗΜΟΣ ΧΑΝΙΩΝ" ;
                geo:belongsTo+ ?belongs .
}

注意 +。这意味着 "one or more times",因此变量 ?belongs 将绑定到任何可以通过遵循 geo:belongsTo 属性 一次或多次(*顺便说一句,您在问题中使用的表示 'zero or more times')。

更新

现在,如果除了获取单个资源之外,还想取回它们所属的 classes 本身(即 geo:RegionUnitgeo:Country、等),您可以像这样修改查询:

SELECT ?res ?belongs ?adminUnit
WHERE  {
           ?res a geo:Municipality ;
                geo:έχει_επίσημο_όνομα "ΔΗΜΟΣ ΧΑΝΙΩΝ" ;
                geo:belongsTo+ ?belongs .
           ?belongs a ?adminUnit .
} 

这将返回给定市镇所属的所有行政单位,以及每个特定行政单位的 class。在这里,顺便说一下,R​​DFS 推理会略有不同:因为你所有的管理单元 classes 都被定义为 rdfs:subClassOf class geo:AdministrativeUnit,你会得到每个单元返回两个结果:一次是特定的 class,一次是超级 class geo:AdministrativeUnit

更新 2 如果问题是您恢复了所有行政单位 除了国家 ,那么最可能的原因就是这个是特定去中心化管理员(我们简称为 geo:DecAdm)与国家/地区之间的 geo:belongsTo 关系缺失。如果您想验证这一点,您可以执行以下查询:

ASK WHERE { 
    <http://geo.linkedopendata.gr/gag/id/997> geo:belongsTo [ a geo:Country ] . 
} 

<http://geo.linkedopendata.gr/gag/id/997> 替换为您感兴趣的 geo:DecAdmin 的实际 ID。如果关系存在,查询将 return true false 除此以外。

或者如果你想检查得更笼统,你可以这样做:

SELECT ?decAdmin ?country 
WHERE { 
       ?decAdmin a geo:DecAdm .
       OPTIONAL { ?decAdmin geo:belongsTo ?country .
                  ?country a geo:Country .
       }
} ORDER BY ?decAdmin

此查询将为您提供所有 分散管理实例及其所属国家/地区的概览。如果特定国家/地区不存在 ?decAdmin,则查询结果的第二列对于该行将为空。