从DBPedia中提取所有类型及其英文标签

时间:2013-09-11 05:22:30

标签: rdf sparql semantic-web dbpedia

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

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

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

2 个答案:

答案 0 :(得分:18)

这是一个学习如何从DBpedia中检索任意信息的好机会。您的第一个查询(添加了限制)是:

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

SPARQL results

其中一个结果是http://dbpedia.org/ontology/Animal,您可以在Web浏览器中实际访问该对象,相应的页面将显示所有资源属性。对于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类型及其英文标签。

答案 1 :(得分:5)

试试这个:

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