Rdf 查找资源的公共类别或超级类别

Rdf 查找资源的公共类别或超级类别,rdf,sparql,semantic-web,dbpedia,linked-data,Rdf,Sparql,Semantic Web,Dbpedia,Linked Data,我想知道在DBpedia中,两个资源是否具有相同的类别或子类别(即,属于某个公共超类别的类别)?我在DBpedia端点中尝试了此查询,但它是错误的: select distinct ?s ?s2 where { ?s skos:subject <http :// dbpedia.org/resource/ Category ?c. ?s2 skos:subject <http :// dbpedia.org/resource/ Category ?c2. ?c=?c2. } 选择不

我想知道在DBpedia中,两个资源是否具有相同的类别或子类别(即,属于某个公共超类别的类别)?我在DBpedia端点中尝试了此查询,但它是错误的:

select distinct ?s ?s2 where {
?s skos:subject <http :// dbpedia.org/resource/ Category ?c.
?s2 skos:subject <http :// dbpedia.org/resource/ Category ?c2.
?c=?c2.
}
选择不同的?s?s2,其中{

?s skos:subjectDBpedia不对资源使用
skos:subject
,而是使用
dcterms:subject
将资源与其Wikipedia类别关联。您可以通过浏览资源页面找到可用的数据。例如,您可以查看一下。如果您想查找两个资源共有的类别,请必须使用相同的变量。例如

?subject1 dcterms:subject ?category .
?subject2 dcterms:subject ?category .
您可以使用
^property
符号和对象列表更简洁地编写它。编写
o^ps
与编写
spo
是一样的。对象列表允许您编写
spo1,o2
而不是
spo1.spo2.
。将它们放在一起,我们可以编写:

?category ^dcterms:subject ?subject1, ?subject2 .
例如,这里有一个查询,可以找到蒙纳德诺克山和斯波福德湖的共同类别。只有一个结果,即新罕布什尔州柴郡的地貌,因为它们只有一个共同类别

select * where {
  ?category ^dcterms:subject dbpedia:Mount_Monadnock, dbpedia:Spofford_Lake .
}

现在,类别通过
skos:brother
与DBpedia中的超级类别相关,如中所示,其中有指向

现在,这意味着,如果两个事物有一些共同的类别(或超级类别),那么每个事物都将通过一个路径与该类别相关,该路径以
dcterms:subject
链接开始,后跟零个或多个
skos:brother
链接

select * where {
  ?category ^(dcterms:subject/skos:broader*) dbpedia:Mount_Monadnock, dbpedia:Spofford_Lake .
}
不幸的是,您会发现DBpedia端点在该查询中遇到了内存使用问题,因此您不能完全按照这种方式运行它。但是,DBpedia SPARQL端点支持的属性路径功能实际上没有纳入标准;您可以编写
p{n,m}
表示长度至少为
n
且最多为
m
的链。这意味着您可以设置一些范围,以获得与
*
相同的结果:

select distinct ?category where {
  ?category ^(dcterms:subject/(skos:broader{0,3})) dbpedia:Mount_Monadnock, dbpedia:Spofford_Lake .
}

这也适用于Tom Cruise和Madonna,不过由于内存问题,您需要稍微缩减路径长度

select distinct ?category where {
  ?category
      ^(dcterms:subject/(skos:broader{0,2}))
          <http://dbpedia.org/resource/Tom_Cruise>,
          <http://dbpedia.org/resource/Madonna_(entertainer)> .
}
选择不同的类别,其中{
类别
^(dcterms:主题/(skos:更广泛的{0,2}))
,
.
}

不过,值得注意的是,维基百科的分类不是类型。因此,虽然这两种资源都被正确地认为是地貌,但也不是地理,也不是新罕布什尔州,正如您在后面的查询中所看到的那样。维基百科的分类更多地是关于主题,而不是类型层次结构

相关阅读
还有一个相关的(但不是完全重复的问题)您可能也会觉得很有帮助:。

@user3132739 OK,更新以显示如何查找公共类别或超级类别。您好,当我尝试运行您在上述答案中提到的查询时,我收到一个错误消息Virtuoso 37000错误SP030:SPARQL编译器,第5行:在“/”之前的“dcterms”处未定义命名空间前缀"。请让我知道如何解决此问题:)@emi是的,dbpedia在其端点上更改了一些预定义的命名空间。您需要通过添加DC terms命名空间前缀来更新查询,或者更新查询体以使用它们为DC terms定义的任何前缀。这是您尝试的实际查询吗?它不是语法查询ally格式良好,因此它甚至不会被端点接受。最好从合法语法的查询开始,然后尝试修改它们以返回所需内容。您在这方面取得了任何进展吗?