SPARQL过滤器lang'en'提供其他语言

Fun*_*ica 8 sparql dbpedia

以下SPARQL查询无法获得我想要的结果,因为它们使用的是其他语言而不是英语(无论filter lang 'en'查询中的过滤器).

查询结果:

"???????? ????????? ????????"@en    "???????? ????????"@en  "Nikolai Bukharin"@en
"Gamal Abdel Nasser Hussein"@en     "???? ??? ??????"@en    "Gamal Abdel Nasser"@en
Run Code Online (Sandbox Code Playgroud)

我查看了DBpedia页面,我看到有英文版的名称,但我不明白为什么过滤器不起作用!

有人可以帮助我吗?

PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbpedia: <http://dbpedia.org/property/>
SELECT DISTINCT ?person ?birthname ?nameExact ?label
where {

     ?person rdf:type dbpedia-owl:Person .
     ?person rdfs:label ?label .
     OPTIONAL { ?person dbpedia-owl:birthName ?birthname . }
     OPTIONAL { ?person dbpprop:name ?nameExact . }

     FILTER (lang(?birthname) = 'en')
     FILTER (lang(?label) = 'en')
     FILTER (lang(?nameExact) = 'en')

}
LIMIT 300
Run Code Online (Sandbox Code Playgroud)

cyg*_*gri 6

语言标记是数据库中的注释.您的过滤器工作正常.en即使数据库中的某些值位于不同的脚本中,也会对其中的某些值进行注释.您需要编写自己的逻辑来选择最合适的属性.我可能只是使用该rdfs:label属性并切断括号中的任何内容(如in "Black Hawk (Sauk leader)"@en).这似乎提供了不错的结果.

另外请注意,你需要把FILTERS代表?birthname?nameExact OPTIONAL块,否则会落得去除没有可选属性的任何比赛.


小智 5

注意前缀必须在声明和查询中使用相同的(dbo- > dbo,而不是dbo- > dbpedia-owl)

PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbp: <http://dbpedia.org/property/>

SELECT DISTINCT ?person ?birthname ?nameExact ?label
where {

     ?person rdf:type dbo:Person .
     ?person rdfs:label ?label .
     OPTIONAL { ?person dbo:birthName ?birthname . }
     OPTIONAL { ?person dbp:name ?nameExact . }

     FILTER (lang(?birthname) = 'en')
     FILTER (lang(?label) = 'en')
     FILTER (lang(?nameExact) = 'en')

}

LIMIT 300
Run Code Online (Sandbox Code Playgroud)