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

Ami*_*ian 1 rdf semantic-web sparql dbpedia

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

select ?type {
   ?type a owl:Class .
}
Run Code Online (Sandbox Code Playgroud)

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

Jos*_*lor 19

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

select ?type {
   ?type a owl:Class .
}
limit 10
Run Code Online (Sandbox Code Playgroud)

SPARQL结果

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

rdfs:label  Tier
rdfs:label  animal
rdfs:label  animal
rdfs:label  žival
rdfs:label  ??
Run Code Online (Sandbox Code Playgroud)

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

select ?type ?label {
   ?type a owl:Class .
   ?type rdfs:label ?label .
}
limit 10
Run Code Online (Sandbox Code Playgroud)

我们实际上可以使用分号缩写一点:

select ?type ?label {
   ?type a owl:Class ;
         rdfs:label ?label .
}
limit 10
Run Code Online (Sandbox Code Playgroud)

SPARQL结果

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

http://dbpedia.org/ontology/Animal  "Tier"@de
http://dbpedia.org/ontology/Animal  "animal"@en
Run Code Online (Sandbox Code Playgroud)

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

filter langMatches( lang(?title), "FR" )
Run Code Online (Sandbox Code Playgroud)

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

"Cette Série des Années Soixante-dix"@fr
"Cette Série des Années Septante"@fr-BE
Run Code Online (Sandbox Code Playgroud)

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

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

SPARQL结果

它检索DBpedia类型及其英文标签.


Ant*_*ann 5

试试这个:

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

  • 对于该语言,更强大的解决方案是`filter(langMatches(lang(?label),"en"))`. (6认同)