2013-02-26 7 views
6

मैं परिणामों को वापस करने के लिए स्पार्कल क्वेरी का उपयोग करके, मुल्गार आरडीएफ स्टोर से आरडीएफ ग्राफ बनाने की कोशिश कर रहा हूं। मैं बस सरल प्रश्नों के साथ सहज महसूस करना शुरू कर रहा हूं, प्रभावी रूप से पूछता हूं, "कौन सी वस्तुएं किसी विशेष संग्रह के सदस्य हैं?"संग्रहों के संग्रह ब्राउज़ करने के लिए SPARQL में रिकर्सिव प्रश्न

मेरा प्रश्न है, और मैं किसी भी सलाह की सराहना करता हूं, चाहे मैं इस सरल प्रश्न से परिणाम ले सकता हूं और क्वेरी के उद्देश्य के रूप में उन्हें वापस भेज सकता हूं?

SELECT ?x WHERE {?x <fedora-rels-ext:isMemberOfCollection> <info:fedora/collection:ramsey>} 
इन परिणामों के साथ

:

"x" 
info:fedora/ramsey:ThelifeandadventuresofRobinsonCrusoe 
info:fedora/ramsey:Jackanapes 
info:fedora/ramsey:SundayJournalvol01no0219951126 
info:fedora/ramsey:Ideologyandchange 
info:fedora/ramsey:theshepherdofthepyrenees 
info:fedora/ramsey:ScenesinAmerica 
... 

मेरा लक्ष्य, है, तो इन एकमात्र पहचान लेते हैं और वस्तु, <info:fedora/collection:ramsey> को बदलने के लिए है से

उदाहरण के लिए, मैं इस SPARQL प्रश्न हैं मूल क्वेरी और क्वेरी फिर से चलाएं।

मैं एक परिदृश्य में जहाँ मैं प्रारंभिक क्वेरी में एक मूल तत्व की पहचान हैं की कल्पना कर रहा हूँ, परिणाम सभी सदस्य वस्तुओं वापसी की है, तो सभी उन वस्तुओं 'सदस्य वस्तुओं, लौट अनंत तक ...

क्या यह स्पार्कल प्रश्नों के साथ संभव है? विशेष रूप से, मुझे विश्वास है कि मैं एक मुल्गार आरडीएफ डेटाबेस से पूछताछ कर रहा हूं। कोई विचार, भले ही यह 'करने योग्य नहीं है, बहुत सराहना की।

+0

@ghkill मैंने इस बारे में बेहतर सारांश देने के लिए शीर्षक संपादित किया है। –

उत्तर

8

मान लें कि आपको SPARQL 1.0 से चिपकना है। मेरा मानना ​​है कि मुल्गार के पास SPARQL 1.1 के लिए सीमित समर्थन है यदि कोई हो।

SPARQL 1.0 के साथ

यदि आप शायद जानते हैं कि कैसे कई स्तरों आप क्वेरी करने के लिए आप की तरह कर सकते हैं चाहते हैं:

SELECT ?y WHERE { 
     ?x <fedora-rels-ext:isMemberOfCollection> <info:fedora/collection:ramsey> 
     ?y <fedora-rels-ext:isMemberOfCollection> ?x 
} 

यहाँ ?y अपने जड़ से 2 स्तर तत्वों के साथ बाध्य होंगे। यूनियनों के साथ आप एक प्रश्न के साथ कई स्तरों पर क्वेरी कर सकते हैं। एक क्वेरी में जड़ से एक और दो के स्तर के लिए एक उदाहरण:

SELECT ?x WHERE { 
    { 
     ?x <fedora-rels-ext:isMemberOfCollection> <info:fedora/collection:ramsey> . 
    } UNION { 
     ?zz <fedora-rels-ext:isMemberOfCollection> <info:fedora/collection:ramsey> 
     ?x <fedora-rels-ext:isMemberOfCollection> ?zz . 
    } 
} 

इस के साथ समस्या यह है कि आप वास्तव में क्या स्तर ?x ही है पर पता नहीं है है। इसलिए आप इस प्रकार की क्वेरी के साथ एक पेड़ पेंट नहीं कर सकते हैं। SPARQL 1.1 में इस BIND AS

SELECT ?x ?level WHERE { 
    { 
     ?x <fedora-rels-ext:isMemberOfCollection> <info:fedora/collection:ramsey> . 
     BIND (1 AS ?level) 
    } UNION { 
     ?zz <fedora-rels-ext:isMemberOfCollection> <info:fedora/collection:ramsey> 
     ?x <fedora-rels-ext:isMemberOfCollection> ?zz . 
     BIND (2 AS ?level) 
    } 
} 

यह दूसरा प्रश्न के साथ हल हो जाता है क्या स्तर ?x ही है पर वापस आ जाएगी। आप पेड़ की अधिकतम गहराई तक पहुंचने की कोशिश कर रहे कई यूनियनों के साथ कुछ प्रोग्रामिक रूप से जेनरेट की गई क्वेरी की कल्पना कर सकते हैं। यदि आप SPARQL 1.1 के लिए पूर्ण समर्थन चाहते हैं तो आप Jena/ARQ का उपयोग करने का प्रयास कर सकते हैं।

SELECT ?x WHERE { 
    ?x <fedora-rels-ext:isMemberOfCollection>+ <info:fedora/collection:ramsey> . 
} 

आप विधेय <fedora-rels-ext:isMemberOfCollection> के माध्यम से ?x सभी <info:fedora/collection:ramsey> से पहुंचा जा सकता नोड्स में बाँध होगा: जेना में आप भी Property paths और के साथ कुछ इस तरह का उपयोग कर सकते हैं।

+1

आप महोदय, एक विद्वान और सज्जन हैं, बहुत बहुत धन्यवाद। यह वही है जो मैं सीखने की उम्मीद कर रहा था, और मुझे बहुत चारा आगे बढ़ने देता है। – ghukill

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