Java 如何得到一个直辖市的国家?

Java 如何得到一个直辖市的国家?,java,rdf,sparql,rdfs,linked-data,Java,Rdf,Sparql,Rdfs,Linked Data,本体存在于XML中 我还试着询问我的世界中的哪些类,然后试着检查我的资源(市政当局)是否真的属于那个类,但国家还是溜走了(尽管在我请求所有类时它被提取了,但它无法通过属于我的资源的属性进行连接) 我还启用了Sesame中推理的正向链接!顺便说一句,我是初学者,所以任何小费对我来说都是黄金。我错过了什么 编辑: 新查询: "SELECT ?res ?belongs " + "WHERE {" + "?res a geo:Mun ;"+ "geo:has

本体存在于XML中

我还试着询问我的世界中的哪些类,然后试着检查我的资源(市政当局)是否真的属于那个类,但国家还是溜走了(尽管在我请求所有类时它被提取了,但它无法通过属于我的资源的属性进行连接)

我还启用了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]

如果我正确理解了您的数据模型,那么您就有了类
geo:unicity
的实例,它们属于
geo:RegionUnit
的实例,反过来又属于
geo:Region
的实例,等等,直到它们最终属于
geo:Country
的实例。除非我误解了,否则你的查询会为了一个特殊的共同性而试图返回所有这些实例

这非常简单,甚至不需要任何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 .
}
请注意
+
。这意味着“一次或多次”,因此变量
?所属
将绑定到通过遵循
geo:belongsTo
属性一次或多次(您在问题中使用的
*
表示“零次或多次”)可以达到的任何值

更新

现在,如果除了获取单个资源外,您还想获取它们所属的类本身(即,
geo:RegionUnit
geo:Country
,等等),您可以修改查询,如下所示:

SELECT ?res ?belongs ?adminUnit
WHERE  {
           ?res a geo:Municipality ;
                geo:έχει_επίσημο_όνομα "ΔΗΜΟΣ ΧΑΝΙΩΝ" ;
                geo:belongsTo+ ?belongs .
           ?belongs a ?adminUnit .
} 
这将返回给定市政所属的所有行政单位,以及每个特定行政单位的类别。在这里,顺便说一下,RDFS推断会有一点不同:因为您所有的管理单元类都被定义为类
RDFS:subassof
geo:AdministrativeUnit,您将得到每个单元的两个结果:一个是特定类,一个是超类
geo:AdministrativeUnit

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

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

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

Jeen,我们在哪里利用了此处的正向链接?@gsamaras nowhere。因此,我的观点是,您不需要通过RDFS推断来获得您在问题中要求的结果。请查看我的更新。我有一些我们市政府的身份证,但我的目标是班级。我一直在努力。但是,国家的id也不存在,国家的id是0。该死的。如果我得到了身份证,我也会找到一个方法找到他们的班级!啊。Sesame根据产生的结果类型对不同类型的查询进行了区分:TupleQuery(
SELECT
)、BooleanQuery(
ASK
)和GraphQuery(
CONSTRUCT
description
)。在RepositoryConnection接口中,每一个都有自己的
prepare
方法。@JeenBroekstra我不确定输出应该是什么,但我可以从上面的本体图像中看出,
属于
我们得到的是地区单位、地区、12月管理的id,但我们缺少一个,国家的id!现在清楚了吗?我想是的。但如果是这样的话,问题很简单,对于这个城市来说,12月份管理员和国家/地区之间的实际
belongsTo
关系丢失了。我试图手动检查,但Eclipse无法管理大数据集,无论如何,我会看看我能做些什么,谢谢!添加了一些有用的查询,以确定是否缺少数据。
SELECT ?decAdmin ?country 
WHERE { 
       ?decAdmin a geo:DecAdm .
       OPTIONAL { ?decAdmin geo:belongsTo ?country .
                  ?country a geo:Country .
       }
} ORDER BY ?decAdmin