2012-09-11 25 views
7

無論filter lang 'en'(請參閱查詢中的過濾器),以下SPARQL查詢都不會獲得我想要的結果,因爲它們使用的是英語以外的其他語言。查詢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 

回答

6

語言標記是數據庫中的註釋。您的過濾器正常工作。即使數據庫中的某些值處於不同的腳本中,也會使用en進行註釋。你需要編寫自己的邏輯來選擇最合適的屬性。我可能只是使用rdfs:label屬性並切斷括號中的任何內容(如"Black Hawk (Sauk leader)"@en)。這似乎提供了不錯的結果。

另外請注意,你需要把FILTER S代表?birthname?nameExact各自OPTIONAL塊,否則會落得去除沒有可選屬性的任何比賽。

+0

非常感謝! – Funmatica

+0

@Funmatica如果這個答案適合你,你應該[接受它](http://meta.stackexchange.com/q/5234/225437)。 –

3

要當心,以前綴您必須使用相同的聲明和查詢(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