2011-12-26 9 views
9

के बिना this question में दिखाया गया है, जैसा कि एक समान शीर्षक है, मैं इसके नाम का एक हिस्सा जानकर एक डीबीपीडिया संसाधन पुनर्प्राप्त करना चाहता हूं। जब मैं SPARQL और इस तरह की बात करता हूं तो मैं एक नौसिखिया हूं, लेकिन इस सवाल में उदाहरण ने मुझे बहुत मदद की, क्योंकि लेखक ने "रोमानिया" की खोज की, और उस व्यक्ति ने जवाब देने के लिए स्पार्कल अनुरोध के साथ उसे झुका दिया। यह अच्छा है, लेकिन यह बात है।SPARQL के साथ अपने स्ट्रिंग नाम से डीबीपीडिया संसाधन पुनर्प्राप्त करना और इसके प्रकार

उदाहरण में, वे पहले से ही "पता था कि" कि रोमानिया एक देश है, इसलिए

?c a dbpedia-owl:Country ; 
कहां खंड में

। पूरा SPARQL अनुरोध किया जा रहा है

SELECT ?c 
    WHERE { 
    ?c a dbpedia-owl:Country ; 
    foaf:name "Romania"@en . 
    FILTER NOT EXISTS {?c dbpedia-owl:dissolutionYear ?y} 
    } 

लेकिन, इस सवाल का काफी पूरी तरह से हमारे जरूरत का जवाब नहीं है, इसलिए इसका नाम, "नाम" एक संसाधन का वास्तविक नाम, या का एक हिस्सा होने से किसी भी संसाधन के लिए खोज यह, इसके बावजूद (rdf:) प्रकार। लक्ष्य "कुछ भी" खोजना होगा, सिर्फ नाम या उसका हिस्सा जानना होगा।

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

आइए अब मान लें कि डीबीपीडिया संसाधनों के बीच खोज करने के लिए "शब्द" है, यह शब्द कुछ उपयोगकर्ता से इनपुट होगा। और चलिए इसे "INPUT" कहते हैं।

अनुरोध, मैं कल्पना होगा, ऐसा दिखाई देगा:

  1. कुछ ऐसा है जिसे प्रकार Dbpedia संसाधन का वर्णन करता है:

    SELECT ?something WHERE 
        { 
        ?something a (dbpedia Resource). 
        CONTAINS(?something,"INPUT") 
        } 
    

    मेरे प्रमुख प्रश्न के बारे में दो प्रमुख पहलुओं है? मुझे नहीं लगता कि यह ऑटोलॉजी या कुछ भी है। घुटने टेककर मैं एक मिलान खोजने के लिए सभी संसाधनों में खोज करना चाहता हूं ...

  2. एक विशिष्ट नाम जो मैं प्रदान करता हूं, या कुछ स्ट्रिंग। मैंने फ़िल्टर विकल्प पर विचार किया, लेकिन इसका मतलब यह होगा कि सभी संसाधन प्राप्त हो रहे हैं, और उसके बाद उन्हें पुनः नामित करने के बाद उनके नाम से फ़िल्टर करना होगा, जो मुझे लगता है, इतना इष्टतम नहीं होगा।

तो, क्या कोई इसे अपना नाम, या इसका एक हिस्सा प्रदान करके संसाधन प्राप्त करने के लिए "मास्टर क्वेरी" जानता है? (एक उदाहरण "ओबामा" प्रदान करने और न केवल बैरैक के लिए परिणाम प्राप्त करना, बल्कि मिशेल के लिए भी परिणाम प्राप्त करना)।

अग्रिम धन्यवाद।

उत्तर

15

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

SELECT DISTINCT ?s ?label WHERE { 
      ?s rdfs:label ?label . 
      FILTER (lang(?label) = 'en'). 
      ?label bif:contains "Obama" . 
      ?s dcterms:subject ?sub 
} 
इसी प्रकार अपने दूसरे प्रश्न के लिए

- अगर आप सिर्फ DBpedia डाटासेट उपयोग कर रहे हैं आप उपयोग करना चाहते हो सकता है "BIF: शामिल है" हालांकि SPARQL संगत नहीं है।मुझे नहीं लगता कि ऐसा करने का एक और इष्टतम तरीका है और जैसा कि आपने फ़िल्टर का उपयोग करके कहा है, उप-इष्टतम होगा, खासकर यदि आपको प्रश्नों को जल्दी से निष्पादित करने की आवश्यकता है। मुझे लगता है कि कीवर्ड ट्रिपल और इंडेक्सिंग को प्रत्येक ट्रिपल स्टोर द्वारा विज्ञापन-प्रसारित किया जाता है, फिर भी पूर्ण-पाठ खोजकर्ताओं के लिए एक मानक तरीका नहीं है।

तो समेकित करने के लिए, यदि आप डीबीपीडिया के साथ काम करते हैं तो केवल अपनी समस्या को हल करने के लिए स्टोर की विशेषताओं और डेटासेट के विनिर्देशों का उपयोग करें।

+0

यह वास्तव में एक शर्म की बात है कि हमें "चाल" (dcterms: विषय) के माध्यम से जाना है, लेकिन हे, मेरे अनुरोध केवल डीबीपीडिया संसाधनों के लिए हैं। तो आपका जवाब बिल्कुल अद्भुत है और मुझे सिरदर्द के लोड बचाया। बहुत बहुत धन्यवाद। बीआईएफ कार्यों के लिए, मुझे पता है कि वे SPARQL अनुपालन नहीं कर रहे हैं, इसलिए मैंने कंटेन की तलाश की, हालांकि मुझे लगता है कि मैं अभी भी उन उदाहरणों की तलाश कर रहा हूं जहां वे इस खंड का उपयोग करते हैं। तो आपके उत्तर के लिए फिर से धन्यवाद, dbpedia और rdf के साथ मेरी यात्रा अभी शुरू हो गई है, लेकिन आपने मुझे केवल शुरुआत की शुरुआत की है। –

+0

इस दृष्टिकोण के साथ कुछ दर्दनाक प्रतिबंध हैं। यह रिक्त स्थान की अनुमति नहीं देता है। तो यदि आप "बराक ओबामा" (या प्रोग्रामेटिक रूप से, किसी भी नाम स्ट्रिंग में आए थे, जो मेरा मामला है) के लिए कैननिकल इकाई प्रतिनिधित्व लाने की कोशिश कर रहे थे, तो आप bif का उपयोग नहीं कर सकते हैं: इसमें शामिल हैं। और फिर मैंने सोचा, शायद यूआरएल स्ट्रिंग एन्कोड करें? 'लेबल लेबल: इसमें" बराक% 20obama "है। कोई पासा नहीं है। घटक भागों को पकड़ने के लिए शायद दो अलग-अलग वक्तव्य? नहीं। :( 'Virtuoso 37000 त्रुटि SP031: SPARQL कंपाइलर: एक से अधिक bif: एक समूह में '$ लेबल' चर के लिए() या समान भविष्यवाणी ' कोई विचार? – sands

+3

@sands आप कर सकते हैं? लेबल bif: '' बराक ओबामा '' (अतिरिक्त उद्धरणों को नोट करें) – MrM

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