sparql - dbpedia 以英语以外的语言获取实体

标签 sparql owl wikipedia dbpedia foaf

我正在尝试使用 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 .

最佳答案

您需要根据属性值的语言进行过滤。并非每个属性都有不同语言的值,但有些属性会有。从你的例子看来, dbprop:名称 不是每种语言都有值(value)。如果您查看其他语言特定的 DBpediae,您可能会在其他语言中找到更多值。

然而,对于像名字这样的东西,如果你使用 ,你可能会得到多语言的结果。 rdfs:标签属性(property)。例如,要获取俄语版 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 results

顺便说一句,请注意 langMatches 的使用而不是匹配语言标签的平等。这通常是一种更好的方法,因为它会正确处理一种语言中的不同语言标记。例如(来自 SPARQL 规范),您可以找到两种法语文字:
"Cette Série des Années Soixante-dix"@fr .
"Cette Série des Années Septante"@fr-BE .

langMatches(lang(?title),"fr") ,但只有第一个 lang(?title) = "fr" .

关于sparql - dbpedia 以英语以外的语言获取实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29069479/

相关文章:

rdf - 如何在 Protégé 中使用其他标准本体扩展本体?

java - 添加更复杂的子类公理

php - 使用维基百科 API 查找文章的主要类别

sparql - 如何在TDB中查询具体型号?

ruby-on-rails - SPARQL、RDF 和处理数据

sparql - 如何转换xsd :Date into xsd:DateTime in SPARQL (dbpedia)?

ontology - 使用曼彻斯特语法查询 OWL API 中的匿名类

python - 如何列出从特定 IP 地址对维基百科进行的所有匿名(因此 IP 公开)编辑?

javascript - 如何使用维基百科 API 在浏览器 javascript 上编辑页面?

apache - 405 方法不允许 : PUT http://localhost:3030/dataset/data? 默认