dbpedia 获取非英语语言的实体
dbpedia fetch entitites in language other than english
我正在尝试使用 sparql 从 dbpedia 中提取包含人名等的实体字典。
PREFIX owl: <http://dbpedia.org/ontology/>
PREFIX dbpprop: <http://dbpedia.org/property/>
SELECT ?name
WHERE {
?person a owl:Person .
?person dbpprop:name ?name . FILTER(lang(?name) = "en")
}
上面的查询确实成功了,但是当我将语言名称更改为fr
时,没有任何可获取的内容。
如何获取其他语言的姓名?
此外,为什么我不能使用下面的查询来过滤语言?
SELECT ?name
WHERE {
?person a owl:Person .
?person dbpprop:language "English"
?person dbpprop:name ?name .
}
// this query returns nothing
我尝试使用
获取所有语言
SELECT DISTINCT ?lanName
WHERE {
?person a owl:Person .
?person dbpprop:language ?lanName .
}
结果集包含English
.
你在找rdfs:label
一个名字,当然都是英文的,你在看英文dbpedia
PREFIX owl: <http://dbpedia.org/ontology/>
PREFIX dbpprop: <http://dbpedia.org/property/>
SELECT distinct *
WHERE {
?person a owl:Person .
?person rdfs:label ?name .
FILTER(lang(?name) = "fr")
}
同样,对于第二个,如果将名称替换为 rdfs: label
,则可以:
PREFIX owl: <http://dbpedia.org/ontology/>
PREFIX dbpprop: <http://dbpedia.org/property/>
SELECT distinct *
WHERE {
?person a owl:Person .
?person rdfs:label ?name .
?person dbpprop:language <http://dbpedia.org/resource/English_language>.
}
您需要根据 属性 值的语言进行过滤。并非 every 属性 将具有不同语言的值,但某些属性会。从您的示例来看,dbpprop:name 似乎并非在每种语言中都有值。如果您查看其他语言特定的 DBpediae,您可能会发现其他语言的更多值。
但是,对于名称之类的内容,如果您使用 rdfs:label 属性,您可能会得到多语言结果。例如,要获取 Barack Obama、Daniel Webster 和 Johnny Cash 的俄语名字,您可以这样做:
select ?label {
values ?person { dbpedia:Johnny_Cash dbpedia:Barack_Obama dbpedia:Daniel_Webster }
?person rdfs:label ?label .
filter langMatches(lang(?label),"ru")
}
顺便说一句,请注意使用 langMatches 而不是匹配语言标签的相等性。这通常是一种更好的方法,因为它可以正确处理一种语言中的不同语言标记 例如(来自 SPARQL 规范),您可以找到两种法语文字:
"Cette Série des Années Soixante-dix"@fr .
"Cette Série des Années Septante"@fr-BE .
with langMatches(lang(?title),"fr"),但只有第一个 lang(?title) = "fr".
我正在尝试使用 sparql 从 dbpedia 中提取包含人名等的实体字典。
PREFIX owl: <http://dbpedia.org/ontology/>
PREFIX dbpprop: <http://dbpedia.org/property/>
SELECT ?name
WHERE {
?person a owl:Person .
?person dbpprop:name ?name . FILTER(lang(?name) = "en")
}
上面的查询确实成功了,但是当我将语言名称更改为fr
时,没有任何可获取的内容。
如何获取其他语言的姓名?
此外,为什么我不能使用下面的查询来过滤语言?
SELECT ?name
WHERE {
?person a owl:Person .
?person dbpprop:language "English"
?person dbpprop:name ?name .
}
// this query returns nothing
我尝试使用
获取所有语言SELECT DISTINCT ?lanName
WHERE {
?person a owl:Person .
?person dbpprop:language ?lanName .
}
结果集包含English
.
你在找rdfs:label
一个名字,当然都是英文的,你在看英文dbpedia
PREFIX owl: <http://dbpedia.org/ontology/>
PREFIX dbpprop: <http://dbpedia.org/property/>
SELECT distinct *
WHERE {
?person a owl:Person .
?person rdfs:label ?name .
FILTER(lang(?name) = "fr")
}
同样,对于第二个,如果将名称替换为 rdfs: label
,则可以:
PREFIX owl: <http://dbpedia.org/ontology/>
PREFIX dbpprop: <http://dbpedia.org/property/>
SELECT distinct *
WHERE {
?person a owl:Person .
?person rdfs:label ?name .
?person dbpprop:language <http://dbpedia.org/resource/English_language>.
}
您需要根据 属性 值的语言进行过滤。并非 every 属性 将具有不同语言的值,但某些属性会。从您的示例来看,dbpprop:name 似乎并非在每种语言中都有值。如果您查看其他语言特定的 DBpediae,您可能会发现其他语言的更多值。
但是,对于名称之类的内容,如果您使用 rdfs:label 属性,您可能会得到多语言结果。例如,要获取 Barack Obama、Daniel Webster 和 Johnny Cash 的俄语名字,您可以这样做:
select ?label {
values ?person { dbpedia:Johnny_Cash dbpedia:Barack_Obama dbpedia:Daniel_Webster }
?person rdfs:label ?label .
filter langMatches(lang(?label),"ru")
}
顺便说一句,请注意使用 langMatches 而不是匹配语言标签的相等性。这通常是一种更好的方法,因为它可以正确处理一种语言中的不同语言标记 例如(来自 SPARQL 规范),您可以找到两种法语文字:
"Cette Série des Années Soixante-dix"@fr .
"Cette Série des Années Septante"@fr-BE .
with langMatches(lang(?title),"fr"),但只有第一个 lang(?title) = "fr".