2011-10-29 15 views
18

साथ वैकल्पिक चयन मैं कुछ ट्रिपल कि इस तरह दिखना है अगर कोई मौजूद है।SPARQL भाषा

मैं इस कोशिश की और यह काम नहीं कर रहा:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
SELECT ?label ?preferredLabel 
WHERE { 
    test:thing rdfs:label ?label 
    OPTIONAL { 
    test:thing rdfs:label ?preferredLabel . 
    FILTER (regex(str(?preferredLabel), '(^|\\\\W)fr', 'i')) 
    } 
} 

धन्यवाद अग्रिम में!

उत्तर

21

मैं तुम क्यों OPTIONAL यहाँ बिल्कुल जरूरत नहीं दिख रहा। जन की क्वेरी विफल हो रही है क्योंकि बाहरी पैटर्न और वैकल्पिक के बीच कोई साझा चर नहीं है, इसलिए आप test:thing के लिए प्रत्येक लेबल के क्रॉस उत्पाद की गणना करने की कोशिश कर रहे हैं, प्रत्येक गैर/फ़्रेंच लेबल test:thing के साथ जो विशाल हो सकता है और क्यों क्वेरी प्रोसेसर विफल हो रहा है।

आप बस निम्नलिखित की तरह कुछ चाहते हैं जो आपको दो लेबल अलग से तो तुम कर सकते हो चाहते हैं जब तक कि मैं अपने प्रश्न

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
SELECT ?label 
WHERE 
{ 
    test:thing rdfs:label ?label 
    FILTER(LANG(?label) = "" || LANGMATCHES(LANG(?label), "fr")) 
} 

गलत समझा गया है कुछ की तरह:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
SELECT ?label ?preferredLabel 
WHERE 
{ 
    { 
    test:thing rdfs:label ?label . FILTER(LANG(?label) = "") 
    } 
    UNION 
    { 
    test:thing rdfs:label ?preferredLabel . FILTER(LANGMATCHES(LANG(?label), "fr")) 
    } 
} 
+0

के लिए धन्यवाद आप मुझे सही रास्ते पर मिला !!! धन्यवाद!!! –

4

साहित्यिक भाषा की जांच करने का सबसे आसान तरीका लैंग() फ़ंक्शन का उपयोग करना है। इस का उपयोग करना, आपकी क्वेरी लिखा जा सकता है के रूप में:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX test: <http://test#> 
SELECT ?label ?preferredLabel 
WHERE { 
    test:thing rdfs:label ?label 
    OPTIONAL { 
    test:thing rdfs:label ?preferredLabel . 
    FILTER (lang(?preferredLabel) = "" || lang(?preferredLabel) = "fr") 
    } 
} 
+0

हाय - सहायता के लिए धन्यवाद। आप फ़िल्टरिंग तर्क में कहीं भी जोड़ने में सही हैं, जो अच्छा दिखता है। यह प्रश्न सिर्फ मेरे लिए त्रुटियों से बाहर है। मुझे लगता है कि समस्या मूल रूप से उसी डेटा को दो बार चुनने से शुरू होती है (जैसे? लेबल और जैसा? पसंदीदा लेबल)। मैं एक ही रिकॉर्ड में लेबल और? पसंदीदा लेबल होना चाहता हूं। मैं इस पर थोड़ा सा परेशान हूं - प्रतीत होता है सरल, अभी तक इतना नहीं! मदद –

2
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
SELECT ?uri ?label ?preferredLabel 
WHERE 
{ 
    { 
    ?uri rdfs:label ?label . FILTER(LANG(?label) = "" && regex(str(?label), '(^|\\\\W)fr', 'i')) 
    } 
    UNION 
    { 
    ?uri rdfs:label ?preferredLabel . FILTER(LANG(?preferredLabel) = "fr" && regex(str(?preferredLabel), '(^|\\\\W)fr', 'i')) 
    } 
} 
संबंधित मुद्दे