本体在于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]
答案 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:RegionUnit
,geo:Country
等),您可以修改查询如下:
SELECT ?res ?belongs ?adminUnit
WHERE {
?res a geo:Municipality ;
geo:έχει_επίσημο_όνομα "ΔΗΜΟΣ ΧΑΝΙΩΝ" ;
geo:belongsTo+ ?belongs .
?belongs a ?adminUnit .
}
这将返回给定市政所属的所有行政单位,以及每个特定行政单位的类别。顺便说一下,RDFS推理会略有不同:因为所有的管理单元类都被定义为rdfs:subClassOf
类geo: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
的已知国家/地区,则查询结果中的第二列对于该行将为空。