2012-09-11 22 views
7

निम्नलिखित SPARQL क्वेरी को परिणाम नहीं मिलते हैं क्योंकि वे filter lang 'en' (क्वेरी में फ़िल्टर देखें) के बावजूद अंग्रेजी से अन्य भाषाओं में हैं।SPARQL फ़िल्टर लैंग 'एन' अन्य भाषाओं को

क्वेरी के परिणाम:

"Никола́й Ива́нович Буха́рин"@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 में)। ऐसा लगता है कि सभ्य परिणाम प्रदान करते हैं।

भी ध्यान रखें कि आप संबंधित OPTIONAL ब्लॉक में ?birthname और ?nameExactके लिए FILTER रों लगाने की जरूरत है, अन्यथा वे कि वैकल्पिक संपत्ति नहीं था कोई भी मैच को हटाने खत्म हो जाएगा।

+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