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

SPARQL过滤器语言';en';提供其他语言,sparql,dbpedia,Sparql,Dbpedia,下面的SPARQL查询没有得到我想要的结果,因为它们使用的是英语以外的其他语言,而与过滤器lang'en'无关(请参见查询中的过滤器) 查询结果: "Никола́й Ива́нович Буха́рин"@en "Никола́й Буха́рин"@en "Nikolai Bukharin"@en "Gamal Abdel Nasser Hussein"@en "جمال عبد الناصر"@en "Gamal Abdel Nasser"@en 我查看了DBped

下面的SPARQL查询没有得到我想要的结果,因为它们使用的是英语以外的其他语言,而与
过滤器lang'en'
无关(请参见查询中的过滤器)

查询结果:

"Никола́й Ива́нович Буха́рин"@en    "Никола́й Буха́рин"@en  "Nikolai Bukharin"@en
"Gamal Abdel Nasser Hussein"@en     "جمال عبد الناصر"@en    "Gamal Abdel Nasser"@en
我查看了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
前缀dbo:
前缀dbpedia:
选择不同的?人名?出生名?姓名精确?标签
在哪里{
?person-rdf:type-dbpedia-owl:person。
?人员rdfs:标签?标签。
可选{?person dbpedia owl:birthName?birthName.}
可选{?person dbpprop:name?nameExact.}
筛选器(lang(?birthname)='en')
过滤器(lang(?label)=“en”)
过滤器(lang(?nameExact)='en')
}
限额300

语言标记是数据库中的注释。您的过滤器工作正常。数据库中的一些值用
en
注释,即使它们在不同的脚本中。您需要编写自己的逻辑来选择最合适的属性。我可能只会使用
rdfs:label
属性,并切掉括号中的任何内容(如
中的“黑鹰(沙特领导人)”@en
)。这似乎提供了不错的结果


还要注意的是,您需要将
出生名
姓名精确
过滤器
放入相应的
可选
块中,否则它们将删除任何不具有可选属性的匹配项。

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

前缀dbo:
前缀dbp:
选择不同的?人名?出生名?姓名精确?标签
在哪里{
?人员rdf:类型dbo:人员。
?人员rdfs:标签?标签。
可选{?个人dbo:出生名?出生名。}
可选{?person dbp:name?nameExact.}
筛选器(lang(?birthname)='en')
过滤器(lang(?label)=“en”)
过滤器(lang(?nameExact)='en')
}
限额300

@Funmatica如果这个答案对你有效,你应该这样做。
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