2012-01-20 9 views
8

असल में मेरे पास एक क्वेरी है (नीचे दिखाया गया है) जो कुशलता से काम करता है। हालांकि, मैं चाहता हूं कि मेरी खोज अधिक सटीक हो जहां लेबल स्ट्रिंग 'यागो' के बजाय वास्तविक स्ट्रिंग 'yago' है। यदि संभव हो तो फ़िल्टर के बिना मैं इसे करने की कोशिश करना चाहता हूं क्योंकि मुझे लगता है कि फ़िल्टर का उपयोग करने से डीबीपीडिया लंबे समय तक पूछताछ करता है।डीबीपीडिया SPARQL एक विशिष्ट rdfs के लिए पूछताछ: लेबल

SELECT ?uri ?label 
WHERE { 
?uri rdfs:label ?label. 
?label bif:contains "'yago'" . 
} 

उत्तर

13

अगर आप फिल्टर के बिना यह करने के लिए चाहते हैं तो आप निम्न कार्य की कोशिश कर सकते हैं:

SELECT ?uri ?label 
WHERE { 
?uri rdfs:label ?label . 
filter(?label="Yago"@en) 
} 
:

SELECT ?uri ?label 
WHERE { 
?uri rdfs:label "Yago"@en . 
?uri rdfs:label ?label 
} 

मुझे यकीन है कि नहीं, हालांकि यह अगर यह फिल्टर के साथ इसी क्वेरी की तुलना में बहुत तेजी से होता है

+2

मेरा मानना ​​है कि आपकी पहली क्वेरी में ट्रिपल पैटर्न डुप्लीकेट है। –

+1

धन्यवाद दूसरी क्वेरी अधिक कुशलता नहीं है – Sam

3

मूल प्रतिक्रिया में एक महत्वपूर्ण सुधार। आप एक सटीक मिलान है, तो भाषा लेबल के साथ, फिर निम्न काम करेगा:

SELECT ?uit ?label 
WHERE { 
    ?uri rdfs:label ?label . 
    FILTER regex(str(?label), "yago", "i") 
} 
:

SELECT ?uit ?label 
WHERE { 
    ?uri rdfs:label "Yago"@en . 
} 

अगर, हालांकि, सटीक मिलान का उपयोग नहीं किया जा सकता कि आप क्या चाहते हैं, SPARQL एक मानक regex का समर्थन करता है

... जो वर्ण केस के बावजूद स्ट्रिंग से मेल खाता है, और आप आवश्यक स्ट्रिंग मैच प्राप्त करने के लिए सामान्य रेगेक्स गेम खेल सकते हैं। (बेशक, अन्य स्ट्रिंग फ़ंक्शंस, जैसे STRSTARTS और STRENDS अधिक कुशल होंगे यदि वे वांछित मिलान मानदंडों को पूरा करते हैं।)

संबंधित मुद्दे