2011-02-11 20 views
7

मैं अपेक्षाकृत बुनियादी कार्य के लिए SPARQL का उपयोग करना चाहता हूं: एफओएएफ ग्राफ को देखते हुए, मैं वहां मौजूद तत्वों को पार्स करना चाहता हूं, उनके टैग प्राप्त करें (यदि वे मौजूद हैं) और फिर, उन लोगों के बारे में जानकारी प्राप्त करने के लिए उन नए ग्राफ के रूप में उपयोग करें।रिमोट ग्राफ लाने के लिए SPARQL में 'ग्राफ' कीवर्ड का उपयोग

तो उदाहरण के लिए, आप एक साधारण उपयोग केस की कल्पना कर सकते हैं जहां मैं अपने सभी पसंदीदा खाद्य पदार्थों (मेरी एफओएएफ फ़ाइल के अनुसार) और मेरे सभी दोस्तों के पसंदीदा खाद्य पदार्थों को सूचीबद्ध करने के लिए एक SPARQL क्वेरी चलाने के लिए चाहता हूं।

इस समय यह कैसा दिखता है। ध्यान दें कि परीक्षण उद्देश्यों के लिए, फिलहाल मैं नीचे दी गई क्वेरी के साथ करने की कोशिश कर रहा हूं, नाम 3 चर के माध्यम से मित्र का नाम लाता है। इस क्वेरी को चलाने से ग्राफ़ और? Name3 के लिए कोई परिणाम नहीं लौटाता है, भले ही मुझे पता है कि rdfs: देखें कुछ मान्य आरडीएफ फाइलों के साथ भी लिंक, जिनमें से कम से कम दो में नाम विशेषता होनी चाहिए। आपके पास किसी भी इनपुट के लिए धन्यवाद!

PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
SELECT ?name1 ?name2 ?graph ?name3 
FROM <my-rdf-file> 
WHERE { 
    ?person1 foaf:knows ?person2 . 
    ?person1 foaf:name ?name1 . 
    ?person2 foaf:name ?name2 . 
    OPTIONAL { 
     ?person2 rdfs:seeAlso ?graph . 
     GRAPH ?graph { 
      ?person3 foaf:name ?name3 .   
     } 
    }  
} 

उत्तर

4

ग्राफ फिलहाल स्टोर में रिमोट डेटा नहीं लाता है, जो सुरक्षा जोखिम का बहुत अधिक होगा। कुछ सिस्टम हो सकते हैं जहां आप इसे सक्षम कर सकते हैं, लेकिन यह गैर-मानक है।

हालांकि, SPARQL 1.1 अद्यतन में, वहाँ एक कीवर्ड लोड है, हालांकि जो ऐसा करता है, तो आप लिख सकते हैं:

LOAD <uri> 

कौन सा दुकान में ग्राफ लायेगा, तो आप लिख सकते हैं:

PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
SELECT DISTINCT ?graph 
FROM <my-rdf-file> 
WHERE { 
    ?person1 foaf:knows ?person2 . 
    ?person1 foaf:name ?name1 . 
    ?person2 foaf:name ?name2 . 
    OPTIONAL { 
     ?person2 rdfs:seeAlso ?graph . 
    }  
} 

लोड स्टेटमेंट्स के सेट में ग्राफ के लिए बाइंडिंग फ़ीड करें और फिर अपनी मूल क्वेरी चलाएं।

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

+0

धन्यवाद स्टीव! मुझे लगता है कि यह समझ में आता है कि आरडीएफ ग्राफ की "ऑटो-डिस्कवरी" एक मुद्दा हो सकती है, खासकर अगर यह विचाराधीन ग्राफ के आकार में विस्फोटक वृद्धि की ओर ले जाती है। फिर भी, ऐसा लगता है कि यह SPARQL क्वेरीिंग में एक बहुत ही शक्तिशाली तकनीक होगी। वैसे भी, मुझे एक विकल्प मिला जो मेरी अपेक्षाकृत सरल समस्या के लिए चाल है। – Geoffroy

5

लोड का उपयोग करने के बजाय, स्टीव के उदाहरण के अनुसार, आपको ग्राफ को खोजने की आवश्यकता है, तो वैकल्पिक रूप से NAMED से उपयोग करना उचित नहीं होगा, परिणामस्वरूप क्वेरी यानी

में सभी प्रासंगिक ग्राफ बताएंगे
PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
SELECT ?name1 ?name2 ?name3 
FROM <my-rdf-file> 
FROM NAMED <discovered-graph-URI-1> 
FROM NAMED <discovered-graph-URI-n> 
WHERE { 
GRAPH <my-rdf-file> { 
    ?person1 foaf:knows ?person2 . 
    ?person1 foaf:name ?name1 . 
    ?person2 foaf:name ?name2 . 
} 
    OPTIONAL { 
     ?person2 rdfs:seeAlso <discovered-graph-URI-1> . 
     GRAPH <discovered-graph-URI-1> { 
      ?person3 foaf:name ?name3 .   
     } 
     ?person2 rdfs:seeAlso <discovered-graph-URI-n> . 
     GRAPH <discovered-graph-URI-n> { 
      ?person3 foaf:name ?name3 .   
     } 
    }  
} 

इस तरह आप सुरक्षा मुद्दों को पार करते हैं और आपको अपने स्वयं के triplestore में डेटा को बनाए रखने की आवश्यकता नहीं है।

+0

यह एक बुद्धिमान समाधान की तरह लगता है। या तुमने कोशिश की? अगली बार जब मैं जेएनए खोलता हूं तो मैं इसे एक शॉट दूंगा। धन्यवाद विलियम। – Geoffroy

+0

जियोफ्रॉय - यह ठीक है, लेकिन असली ग्राफ के साथ कोशिश नहीं की है –