2012-07-06 28 views
5

मैं सफलता के बिना regex फिल्टर का उपयोग करके SPARQL में एक शब्द मिलान करने के लिए कोशिश कर रहा हूँ, लेकिन ...:/ मैं पर स्थित समाप्ति बिंदु को क्वेरी "भेज रहा http://dbtune.org/ म्यूज़िक/SPARQL "। खैर, निम्न क्वेरी काम करता है:SPARQL regex फिल्टर

PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX mo: <http://purl.org/ontology/mo/> 
SELECT ?artist ?name 
WHERE { 
    ?artist a mo:MusicArtist 
    . ?artist foaf:name "Switchfoot" 
    . ?artist foaf:name ?name 
    . FILTER(regex(str(?name), "switchfoot", "i")) 
} 

लेकिन, अगर मैं लाइन को हटाने के 7 (कलाकार foaf:।? नाम "स्विचफुट"), निम्न क्वेरी से मेल नहीं खाता:

PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX mo: <http://purl.org/ontology/mo/> 
SELECT ?artist ?name 
WHERE { 
    ?artist a mo:MusicArtist 
    . ?artist foaf:name ?name 
    . FILTER(regex(str(?name), "switchfoot", "i")) 
} 

मैं पता नहीं है कि मैं कुछ गलत तरीके से कर रहा हूं या यह एंडपॉइंट की एक बग है ...

क्या कोई मेरी मदद कर सकता है?

+0

या तो एक बग (जैसे आप कहते हैं) या किसी प्रकार की क्वेरी थ्रॉटलिंग की smacks। मुझे आश्चर्य है कि वे किस अंतराल का उपयोग करते हैं? – user205512

+0

एंडपॉइंट "http://dbtune.org/musicbrainz/sparql" है ... मैंने एक परीक्षण किया है और मुझे एहसास हुआ कि अंतराल बिंदु परिणामों को 1000 तक सीमित कर देता है। मैंने निम्नलिखित क्वेरी भेजी: चयन गिनती (? कलाकार) कहां {कलाकार एक मो: संगीत कलाकार} और यह 1000 लौटा, जो बहुत छोटा है ... मुझे लगता है कि यह वास्तव में एक बग है ... =/ –

उत्तर

7

आपकी दूसरी क्वेरी में, इंडेक्स के लिए कोई ग्राफ पैटर्न नहीं है। एकमात्र तरीका क्वेरी प्रोसेसर उस क्वेरी को संतुष्ट कर सकता है, ट्रिपल स्टोर में प्रत्येक कलाकार का नाम पुनर्प्राप्त करना है, और फिर प्रत्येक के लिए एक नियमित अभिव्यक्ति मिलान लागू करना है। इसमें कोई आश्चर्य की बात नहीं है कि आप किसी प्रकार की संसाधन सीमा को मार रहे हैं, भले ही वह CPU समय या समाप्त हो गया हो।

यदि आप इस तरह की मुफ्त टेक्स्ट खोज करना चाहते हैं, तो मैं एक स्थानीय अंतराल पर डेटासेट डाउनलोड करने और LARQ जैसे एक मुक्त-पाठ अनुक्रमणिका का उपयोग करने का सुझाव दूंगा। आपके प्रश्न तेजी से होंगे और आपके उपयोगकर्ता इसके लिए धन्यवाद देंगे!

+0

धन्यवाद, इयान! –

+0

मुझे लगता है कि मैं केवल उस डेटा को स्टोर करने के लिए एक सर्वर बनाउंगा जो मुझे नियमित अभिव्यक्ति, जैसे "नाम", "लेबल" और संभवतः अन्य लोगों के साथ मेल करने की आवश्यकता है, ताकि मैं अपने सर्वर द्वारा संसाधन यूआरआई प्राप्त कर सकूं और दूसरों के गुण प्राप्त करने के लिए इसका इस्तेमाल करें! –