2010-05-28 13 views
41

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

उदाहरण के लिए।

show tables 

describe table 

select * from table 

क्या कोई मुझे SPARQL एंडपॉइंट का उपयोग करके एक rdf डेटास्टोर की समान खोज को पूरा करने के तरीके को समझने में मदद कर सकता है?

धन्यवाद :)

उत्तर

69

ठीक है, स्पष्ट पहली शुरुआत वर्गों और गुण डेटा में मौजूद को देखने के लिए है।

यहाँ कैसे क्या वर्गों इस्तेमाल किया जा रहा है देखने के लिए है:।

SELECT DISTINCT ?class 
WHERE { 
    ?s a ?class . 
} 
LIMIT 25 
OFFSET 0 

(LIMIT और OFFSET पेजिंग के लिए देखते हैं यह इन खासकर यदि आप इंटरनेट पर आपकी क्वेरी भेज रहे हैं करने के लिए इस्तेमाल हो रही लायक है मैं। 'करूँगा उन्हें अन्य उदाहरण में छोड़ देते हैं)

a है एक विशेष SPARQL (और Notation3/Turtle) वाक्य रचना rdf:type विधेय प्रतिनिधित्व करने के लिए -। यह करने के लिए owl:Class/rdfs:Class प्रकार व्यक्तिगत उदाहरणों लिंक एस (एसक्यूएल आरडीबीएमएस में टेबल के बराबर बराबर)।

दूसरा, आप गुणों को देखना चाहते हैं। आप या तो कक्षाओं का उपयोग करके या केवल संपत्तियों की तलाश करके ऐसा कर सकते हैं। सिर्फ दुकान से बाहर सभी गुण प्राप्त करते हैं:

SELECT DISTINCT ?property 
WHERE { 
    ?s ?property ?o . 
} 

यह सभी गुण है, जो आप शायद में कोई दिलचस्पी नहीं कर रहे हैं मिल जाएगा यह एसक्यूएल में सभी पंक्ति कॉलम की एक सूची के बराबर है, लेकिन बिना। तालिका द्वारा किसी भी समूह।

अधिक उपयोगी क्या गुण उदाहरणों कि एक विशेष वर्ग की घोषणा के द्वारा प्रयोग किया जा रहा है देखने के लिए है:

SELECT DISTINCT ?property 
WHERE { 
    ?s a <http://xmlns.com/foaf/0.1/Person>; 
    ?property ?o . 
} 

इससे आप वापस किसी उदाहरण पर इस्तेमाल किया गुण है कि पहली ट्रिपल संतुष्ट हो जाएगा - अर्थात्, है http://xmlns.com/foaf/0.1/Person का।

याद रखें, क्योंकि एक rdf: संसाधन में कई rdf हो सकते हैं: गुण गुण - वर्ग यदि आप करेंगे - और क्योंकि आरडीएफ का डेटा मॉडल योजक है, तो आपके पास हीरा समस्या नहीं है। यह प्रकार सिर्फ एक और संपत्ति है - यह कहना एक उपयोगी सामाजिक समझौता है कि कुछ चीजें व्यक्ति या कुत्ते या जीन या फुटबॉल टीम हैं। इसका मतलब यह नहीं है कि डेटा स्टोर में आमतौर पर उस प्रकार से जुड़े गुण होते हैं। प्रकार किसी संसाधन के गुणों के संदर्भ में कुछ भी गारंटी नहीं देता है।

आपको डेटा मॉडल और SPARQL के यूनियन और वैकल्पिक वाक्यविन्यास के उपयोग से परिचित होना चाहिए। Rdf का मोटा मैपिंग: एसक्यूएल टेबल पर टाइप करना सिर्फ इतना है - मोटा।

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

SELECT DISTINCT ?property 
WHERE { 
    ?s a <http://xmlns.com/foaf/0.1/Person>; 
    ?property ?o . 
    FILTER isLiteral(?o) 
} 

हम यहाँ हैं केवल गुण होते हैं कि उनके वस्तु एक शाब्दिक रूप में प्राप्त करने के लिए जा रहा - एक स्ट्रिंग, तिथि-समय, बूलियन, या अन्य एक्सएसडी डेटाटाइप में से एक।

लेकिन गैर-शाब्दिक वस्तुओं के बारे में क्या? एक सादृश्य के रूप में यह बहुत ही सरल छद्म जावा वर्ग परिभाषा पर विचार करें: ऊपर क्वेरी का उपयोग करना

public class Person { 
    int age; 
    Person marriedTo; 
} 

, हम शाब्दिक है कि उम्र का प्रतिनिधित्व करते हैं, तो उम्र संपत्ति ही है वापस मिल जाएगा। लेकिन विवाहित है कोई आदिम नहीं है (यानी आरडीएफ शर्तों में एक शाब्दिक) - यह किसी अन्य वस्तु का संदर्भ है - आरडीएफ/ओडब्ल्यूएल शब्दावली में, यह एक वस्तु संपत्ति है। लेकिन हम नहीं जानते कि उन गुणों (भविष्यवाणी) द्वारा किस प्रकार की वस्तुओं का उल्लेख किया जा रहा है। यह क्वेरी आपको साथ के साथ गुणों को वापस ले जाएगी।

SELECT DISTINCT ?property, ?class 
WHERE { 
    ?s a <http://xmlns.com/foaf/0.1/Person>; 
    ?property ?o . 
    ? a ?class . 
    FILTER(!isLiteral(?o)) 
} 

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

DESCRIBE <http://example.org/resource> 

कुछ SPARQL उपकरण हैं - SNORQL, उदाहरण के लिए - कि तुम चलो एक ब्राउज़र में ऐसा करते हैं। एसएनओआरक्यूएल इंस्टेंस जो मैंने लिंक किया है, संभावित नामित आलेखों की खोज के लिए एक नमूना क्वेरी है, जिसे मैंने यहां शामिल नहीं किया है।

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

+0

बाहर फ्लैट भयानक जवाब - धन्यवाद बहुत टॉम! – significance

+0

मुझे पता है कि मुझे सरल पोस्ट नहीं करना चाहिए "धन्यवाद!"एसओ पर संदेश, लेकिन आपने केवल एक SPARQL नोब की गंभीरता से मदद की है, इसलिए:" धन्यवाद! "। –

1

मैं अक्सर इस list of queries from the voiD project का संदर्भ देता हूं। वे मुख्य रूप से एक सांख्यिकीय प्रकृति के हैं, लेकिन न केवल। वास्तविक मूल्य प्राप्त करने के लिए कुछ कथनों से COUNT को हटाना मुश्किल नहीं होना चाहिए।

देखकर कक्षाएं:

select distinct ?type ?label 
where { 
    ?s a ?type . 
    OPTIONAL { ?type rdfs:label ?label } 
} 

देखकर गुण:

select distinct ?objprop ?label 
where { 
    ?objprop a owl:ObjectProperty . 
    OPTIONAL { ?objprop rdfs:label ?label } 
} 

देखकर डेटा गुण:

6

मैं उपयोगी खोजपूर्ण प्रश्नों के निम्नलिखित सेट को खोजने

select distinct ?dataprop ?label 
where { 
    ?dataprop a owl:DatatypeProperty . 
    OPTIONAL { ?dataprop rdfs:label ?label } 
} 

देखकर जो गुण वास्तव में उपयोग किया जाता है:

select distinct ?p ?label 
where { 
    ?s ?p ?o . 
    OPTIONAL { ?p rdfs:label ?label } 
} 

यह देखना कि कौनसे संस्थाओं बात पर जोर दिया जाता है:

select distinct ?entity ?elabel ?type ?tlabel 
where { 
    ?entity a ?type . 
    OPTIONAL { ?entity rdfs:label ?elabel } . 
    OPTIONAL { ?type rdfs:label ?tlabel } 
} 

उपयोग में अलग रेखांकन देखकर:

select distinct ?g where { 
    graph ?g { 
     ?s ?p ?o 
    } 
} 
संबंधित मुद्दे