我正在尝试使用此 SPARQL 查询从 DBpedia 获取所有类型:
select ?type {
?type a owl:Class .
}
现在,我还想包含查询返回的每种类型的英文标签。我需要在查询中添加什么?
我正在尝试使用此 SPARQL 查询从 DBpedia 获取所有类型:
select ?type {
?type a owl:Class .
}
现在,我还想包含查询返回的每种类型的英文标签。我需要在查询中添加什么?
这是了解更多关于如何从 DBpedia 检索任意信息的好机会。您的第一个查询(添加了限制)是:
select ?type {
?type a owl:Class .
}
limit 10
其中一个结果是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
该查询虽然会为每个返回多个结果?type
;事实上,每一个?label
,所以我们得到的结果包括:
http://dbpedia.org/ontology/Animal "Tier"@de
http://dbpedia.org/ontology/Animal "animal"@en
请注意,标签不仅仅是字符串,而是带有语言标签的 RDF 文字。在 SPARQL 中,我们可以使用函数获取 RDF 文字(如果有的话)的语言标签lang
。可以将语言标签"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
它检索 DBpedia 类型及其英文标签。
试试这个:
SELECT ?type (STR(?l) AS ?label) {
?type a owl:Class;
rdfs:label ?l .
FILTER (LANG(?l) = "en")
}