如何获得自治市的国家?

时间:2015-12-03 23:12:28

标签: java rdf sparql rdfs linked-data

本体在于XML here

我还试着询问我的世界的哪些类,然后试图检查我的资源(市政当局)是否真的属于那个班级,但是国家仍然没有收获(尽管当我要求所有课程时它被取出,它无法通过属性belongs_to连接到我的资源)。

我还在芝麻中启用转发链接进行推理!顺便说一句,我是初学者,所以任何提示对我来说都是金币。我错过了什么?

编辑:

新查询:

"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]

1 个答案:

答案 0 :(得分:3)

如果我正确理解了您的数据模型,则您拥有类geo:Municipality的实例,这些实例属于geo:RegionUnit的实例,后者又属于geo:Region的实例等,直到最终它们属于geo:Country的实例。除非我误解,否则您的查询会尝试为一个特定的munipicality返回所有这些实例。

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

让我们一步一步地构建查询。首先,让我们抓住实际的市政当局:

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

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

第二步是我们想要获取它所属的所有其他资源。

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

当然,上面只会让我们回到直接所属的东西。如果我们相信你的本体论,这会让我们回到它所属的地区单位,但没有别的。但我们想要所有这些,N个步骤已删除,因此我们希望传递遵循geo:belongsTo关系。这可以使用传递属性路径来完成:

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

注意+。这意味着“一次或多次”,因此变量?belongs将绑定到geo:belongsTo属性一次或多次(您使用的*)可以达到的任何值在你的问题中,顺便说一句,表达'零次或多次')。

<强>更新

现在,如果除了获取单个资源之外,您还希望自己恢复它们所属的类(即geo:RegionUnitgeo:Country等),您可以修改查询如下:

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

这将返回给定市政所属的所有行政单位,以及每个特定行政单位的类别。顺便说一下,R​​DFS推理会略有不同:因为所有的管理单元类都被定义为rdfs:subClassOfgeo:AdministrativeUnit,所以每个单元都会得到两个结果:特定类,一旦超类geo:AdministrativeUnit

更新2 如果问题是您所有的管理单位都退回除了国家/地区,那么最可能的原因是geo:belongsTo特定的权力下放管理员之间的关系(简称为geo:DecAdm)和国家/地区缺失。如果您想验证这一点,可以执行以下查询:

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

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

或者,如果您想更频繁地检查,可以执行以下操作:

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

此查询将概述所有分散管理实例及其所属国家/地区。如果没有针对特定?decAdmin的已知国家/地区,则查询结果中的第二列对于该行将为空。