我正在尝试使用 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
.
您需要根据属性值的语言进行过滤。不是every属性将在不同语言中具有值,但某些属性会。从你的例子来看,似乎dbpprop:名称并非每种语言都有值。如果您查看其他语言特定的 DBpediae,您可能会发现其他语言的更多值。
但是,对于名称之类的内容,如果使用rdfs:标签财产。例如,要获取 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")
}
SPARQL 结果
顺便说一句,请注意使用语言匹配而不是匹配语言标签的相等性。这通常是一种更好的方法,因为它可以正确处理一种语言中的不同语言标签。例如(来自 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(?标题) = "fr".
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)