【问题标题】:Finding common categories or supercategories of resources查找资源的常见类别或超类别
【发布时间】:2013-12-24 14:41:06
【问题描述】:

我想知道我们是否可以知道 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.
}

【问题讨论】:

  • 这是您尝试的实际查询吗?它的语法格式不正确,因此它甚至不会被端点接受。最好从合法语法的查询开始,然后尝试修改它们以返回您想要的内容。
  • 你在这方面有什么进展吗?

标签: rdf sparql semantic-web dbpedia linked-data


【解决方案1】:

DBpedia 不使用skos:subject 表示资源,而是使用dcterms:subject 将资源与其维基百科类别相关联。您可以通过浏览资源页面找出可用的数据。例如,您可以查看http://dbpedia.org/resource/Mount_Monadnock。如果要查找两种资源共有的类别,只需使用相同的变量即可。例如,

?subject1 dcterms:subject ?category .
?subject2 dcterms:subject ?category .

您可以使用^property 符号和对象列表更简洁地编写它。写o ^p s 和写s p o 是一样的。对象列表允许您编写 s p o1, o2 而不是 s p o1. s p o2.。把这些放在一起,我们可以写:

?category ^dcterms:subject ?subject1, ?subject2 .

例如,这是一个查找莫纳德诺克山和斯波福德湖常见类别的查询。只有一个结果,新罕布什尔州柴郡县的地貌,因为它们只有一个共同点。

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

SPARQL results

现在,类别通过skos:broader 与 DBpedia 中的超类别相关,您可以在 http://dbpedia.org/page/Category:Landforms_of_Cheshire_County,_New_Hampshire 中看到,其中有指向

现在,这意味着如果两个事物有一些共同的类别(或超类别),则每个事物都将通过以 dcterms:subject 链接开头并后跟零个或多个 skos:broader 链接的路径相关联。因此,您可以使用类似

的查询
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 .
}

SPARQL results

这也适用于汤姆克鲁斯和麦当娜,但由于内存问题,您需要稍微缩减路径长度。例如,以下查询返回 74 个结果。

select distinct ?category where {
  ?category
      ^(dcterms:subject/(skos:broader{0,2}))
          <http://dbpedia.org/resource/Tom_Cruise>,
          <http://dbpedia.org/resource/Madonna_(entertainer)> .
}

SPARQL results

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

相关阅读

还有一个相关的(但不完全是重复的问题),您可能会觉得有帮助:Using SPARQL to locate a subject with multiple occurrences of same property

【讨论】:

  • @user3132739 好的,已更新以显示如何找到常见类别或超类别。
  • 嗨,当我尝试运行您在上述答案中提到的查询时,我收到一条错误消息“Virtuoso 37000 Error SP030: SPARQL compiler, line 5: Undefined namespace prefix at 'dcterms' before ' /'”。请告诉我如何解决这个问题:)
  • @emi 是的,dbpedia 在其端点更改了一些预定义的命名空间。您需要通过添加 DC 术语命名空间前缀来更新查询,或者更新查询正文以使用他们为 DC 术语定义的任何前缀。
猜你喜欢
  • 2011-12-14
  • 2020-01-19
  • 2017-01-31
  • 2020-12-10
  • 1970-01-01
  • 2017-05-25
  • 1970-01-01
  • 2018-01-06
  • 2011-02-05
相关资源
最近更新 更多