SPARQL过滤器语言';en';提供其他语言
下面的SPARQL查询没有得到我想要的结果,因为它们使用的是英语以外的其他语言,而与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
过滤器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