2013-08-21 7 views
5

एक खाली दुकान में सिर्फ इस एक ट्रैक्टर जोड़ें:सिंगल क्वाड + सबसे बुनियादी SPARQL क्वेरी = 1 परिणाम जेना में, 2 परिणाम तिल में - जो सही है?

<http://x.com/s> <http://x.com/p> 2 <http://x.com/g> . 

फिर भर सभी quads पुन: प्राप्त करने के लिए इस SPARQL क्वेरी (प्रति बॉब Ducharme की पुस्तक 'लर्निंग SPARQL' से लिया निष्पादित, तो यह मानक होना चाहिए SPARQL डाटासेट, कार्यान्वयन, सही !?) की परवाह किए बिना:

SELECT ?g ?s ?p ?o 
WHERE { 
{ ?s ?p ?o } 
UNION 
{ GRAPH ?g { ?s ?p ?o } } } 

लेकिन जेना और तिल अलग जवाब के साथ उत्तर !!? यहाँ मैं क्या देख रहा है: (! संस्करण 2.10.0 - बाहर के बॉक्स, कोई विन्यास बदलाव) -

जेना Fuseki सांत्वना बिलाव 6.0.37 पर (सही जवाब के रूप में मैं बातें समझने):

-------------------------------------------------------------- 
| g    | s    | p    | o | 
============================================================== 
| <http://x.com/g> | <http://x.com/s> | <http://x.com/p> | 2 | 
-------------------------------------------------------------- 

टॉमकैट 6.0.37 (संस्करण 2.7.3 - आउट ऑफ़ द बॉक्स, कोई विन्यास परिवर्तन नहीं) पर तिल वर्कबेंच:) वर्कबेंच में मैन्युअल रूप से उपरोक्त क्वाड जोड़ने के लिए 'एड' सुविधा का उपयोग किया गया है ('एन' के साथ -क्वैड '' डेटा प्रारूप 'ड्रॉपडाउन बॉक्स में चुना गया है),' आरडीएफ डेटा दर्ज करें जिसे आप अपलोड करना चाहते हैं 'संपादित करें बॉक्स में, फिर उपर्युक्त क्वेरी चलाएं:

-------------------------------------------------------------- 
| g    | s    | p    | o | 
============================================================== 
|     | <http://x.com/s> | <http://x.com/p> | 2 | 
| <http://x.com/g> | <http://x.com/s> | <http://x.com/p> | 2 | 
-------------------------------------------------------------- 

तो आरडीएफ को देखने शुरू करने वाले किसी के लिए यह बहुत डरावना है - मैं यहां क्या खो रहा हूं? मुझे लगता है कि तिल 'गलत' नहीं हो सकता है - इसलिए यह मेरा 'व्याख्या' होना चाहिए (या बॉब की क्वेरी 'मानक SPARQL' नहीं है, और विभिन्न परिणामों को वापस करने के लिए बहुत अलग कार्यान्वयन मुक्त हैं) - कोई भी ज्ञान बहुत होगा स्वागत हे :) !

+3

डिफ़ॉल्ट ग्राफ के विरुद्ध आपके 'यूनियन' क्वेरी के बाईं तरफ।मुझे संदेह है कि अंतर इन दोनों प्रणालियों में डिफ़ॉल्ट ग्राफ में निहित है से उत्पन्न होता है। उदाहरण के लिए, शायद जेना में डिफ़ॉल्ट ग्राफ खाली है जब तक कि ट्रिपल जोड़े नहीं जाते हैं, और तिल में डिफ़ॉल्ट ग्राफ नामित ग्राफ का संघ होता है? –

उत्तर

7

@ जोशुआ टेलर अपनी टिप्पणी में बताते हैं, कारण यह है कि तिल और जेना डिफ़ॉल्ट ग्राफ की एक अलग व्याख्या का उपयोग करते हैं।

तिल में, संपूर्ण भंडार को डिफ़ॉल्ट ग्राफ माना जाता है: सभी नामित ग्राफों के साथ-साथ नामित ग्राफ के बिना सभी कथन। इसलिए, आपके यूनियन का पहला तर्क, जो डिफ़ॉल्ट ग्राफ से पूछताछ करता है, ?s, ?p और ?o (लेकिन ?g नहीं) सफल होता है और बाध्य करता है। आपके संघ का दूसरा तर्क स्पष्ट रूप से सफल होता है क्योंकि मूल क्वाड निश्चित रूप से नामित ग्राफ में है, और इसलिए आपको दो उत्तरों मिलते हैं।

जेना डिफ़ॉल्ट रूप से एक "अनन्य" डिफ़ॉल्ट ग्राफ का उपयोग करता है: केवल बयान जो किसी भी विशेष नामित ग्राफ में स्पष्ट रूप से जोड़े नहीं हैं डिफ़ॉल्ट ग्राफ में हैं। इसलिए, जेना में, आपके संघ का पहला भाग विफल रहता है (जेना के डिफ़ॉल्ट ग्राफ में कोई मिलान करने वाला बयान नहीं है), दूसरा भाग सफल होता है, और इसलिए आपको केवल 1 परिणाम मिलता है।

अजीब जैसा लगता है, दोनों सही हैं। अंतर यह है कि कैसे डेटासेट जिस पर क्वेरी निष्पादित की जाती है, स्थापित किया जाता है।

बेशक, इससे निपटने के तरीके हैं। जेना और तिल दोनों में, आप FROM (NAMED) क्लॉज जोड़ सकते हैं ताकि यह स्पष्ट किया जा सके कि प्रश्नोत्तरी डेटासेट क्या है (तिल sesame:nil ग्राफ़ नाम प्रदान करता है ताकि वे उन बयानों को स्पष्ट रूप से पूछ सकें जिनके पास कोई नाम ग्राफ नहीं है)। वैकल्पिक रूप से, आप डेटासेट परिभाषा को प्रोग्रामेटिक रूप से संशोधित कर सकते हैं जिस पर एक क्वेरी निष्पादित की जाती है। जेना और तिल में सटीक तंत्र थोड़ा अलग हैं, लेकिन दोनों के पास विकल्प है (तिल में, आप निष्पादन से पहले अपनी क्वेरी के साथ Dataset ऑब्जेक्ट बना और आपूर्ति कर सकते हैं, जेना में मेरा मानना ​​है कि आप वास्तविक स्टोर या मॉडल को फिर से कॉन्फ़िगर कर सकते हैं आप अलग-अलग व्यवहार करने के लिए क्वेरी निष्पादित करते हैं)।

+4

पिछली टिप्पणी पोस्ट करने के बाद, मैंने जेना में डिफ़ॉल्ट और यूनियन ग्राफ प्राप्त करने के तरीकों को देखा। [प्रलेखन] (http://jena.apache.org/documentation/tdb/datasets.html) दो विशेष आलेखों का वर्णन करता है, 'urn: x-arq: UnionGraph' और' urn: x-arq: defaultGraph'। –

+4

मुझे क्वेरी में होना जरूरी नहीं है: यदि आप संदर्भ TDB.getContext() के माध्यम से सेट करते हैं। सेट (TDB.symUnionDefaultGraph, true); तो क्वेरी डिफ़ॉल्ट ग्राफ नामित ग्राफ का संघ है। Http://jena.apache.org/documentation/tdb/datasets.html देखें – AndyS

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