【问题标题】:Extract all types and their labels in English from DBPedia从 DBPedia 中提取所有类型及其英文标签
【发布时间】:2013-09-11 05:22:29
【问题描述】:

我正在尝试使用此 SPARQL 查询从 DBpedia 获取所有类型:

select ?type {
   ?type a owl:Class .
}

现在,我还想包含查询返回的每种类型的英文标签。我需要在查询中添加什么?

【问题讨论】:

标签: rdf sparql semantic-web dbpedia


【解决方案1】:

这是了解更多关于如何从 DBpedia 检索任意信息的好机会。您的第一个查询(添加了限制)是:

select ?type {
   ?type a owl:Class .
}
limit 10

SPARQL results

其中一个结果是http://dbpedia.org/ontology/Animal,您实际上可以在网络浏览器中访问它,相应的页面将显示所有资源属性。对于animal,没有那么多,但我们感兴趣的是

rdfs:label  Tier
rdfs:label  animal
rdfs:label  animal
rdfs:label  žival
rdfs:label  동물

这里我们感兴趣的属性是rdfs:label,所以我们可以将查询扩展到

select ?type ?label {
   ?type a owl:Class .
   ?type rdfs:label ?label .
}
limit 10

我们实际上可以用分号稍微缩写一下:

select ?type ?label {
   ?type a owl:Class ;
         rdfs:label ?label .
}
limit 10

SPARQL results

该查询虽然会为每个 ?type 返回多个结果;事实上,每个?label 一个,所以我们得到的结果包括:

http://dbpedia.org/ontology/Animal  "Tier"@de
http://dbpedia.org/ontology/Animal  "animal"@en

请注意,标签不仅仅是字符串,而是带有语言标签的 RDF 文字。在 SPARQL 中,我们可以使用 lang 函数获取 RDF 文字(如果有的话)的语言标签。可以使用= 运算符将语言标签与"en" 进行比较,但更强大的解决方案是使用langMatches,这将处理像文档中给出的更棘手的情况

filter langMatches( lang(?title), "FR" )

可用于查找?title 的以下两个值,而filter( lang(?title) = "fr" ) 将只查找第一个:

"Cette Série des Années Soixante-dix"@fr
"Cette Série des Années Septante"@fr-BE

使用 langMatches、lang 和 filter,我们可以将查询再次更新为

select ?type ?label {
   ?type a owl:Class ;
         rdfs:label ?label .
   filter(langMatches(lang(?label),"EN"))
}
limit 10

SPARQL Results

检索 DBpedia 类型及其英文标签。

【讨论】:

  • 感谢您的精彩解释
【解决方案2】:

试试这个:

SELECT ?type (STR(?l) AS ?label) {
   ?type a owl:Class;
         rdfs:label  ?l .
   FILTER (LANG(?l) = "en")
}

【讨论】:

  • 对于语言,更健壮的解决方案是filter(langMatches(lang(?label),"en"))
猜你喜欢
  • 2012-04-22
  • 2021-05-10
  • 2015-06-24
  • 2017-04-12
  • 1970-01-01
  • 1970-01-01
  • 2016-06-20
  • 2011-09-27
  • 2011-06-12
相关资源
最近更新 更多