如何获得直辖市的国家?
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:RegionUnit
、geo:Country
、等),您可以像这样修改查询:
SELECT ?res ?belongs ?adminUnit
WHERE {
?res a geo:Municipality ;
geo:έχει_επίσημο_όνομα "ΔΗΜΟΣ ΧΑΝΙΩΝ" ;
geo:belongsTo+ ?belongs .
?belongs a ?adminUnit .
}
这将返回给定市镇所属的所有行政单位,以及每个特定行政单位的 class。在这里,顺便说一下,RDFS 推理会略有不同:因为你所有的管理单元 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
,则查询结果的第二列对于该行将为空。
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:RegionUnit
、geo:Country
、等),您可以像这样修改查询:
SELECT ?res ?belongs ?adminUnit
WHERE {
?res a geo:Municipality ;
geo:έχει_επίσημο_όνομα "ΔΗΜΟΣ ΧΑΝΙΩΝ" ;
geo:belongsTo+ ?belongs .
?belongs a ?adminUnit .
}
这将返回给定市镇所属的所有行政单位,以及每个特定行政单位的 class。在这里,顺便说一下,RDFS 推理会略有不同:因为你所有的管理单元 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
,则查询结果的第二列对于该行将为空。