Sparql

2013-08-27 10 views
8

में ऑब्जेक्ट प्रॉपर्टी के साथ कक्षाओं को कैसे क्वेरी करें क्या कोई भी स्पैर्कल में ऑब्जेक्ट प्रॉपर्टी के साथ कक्षाओं से पूछताछ कैसे करता है? मान लें हम जो शामिलSparql

Human ----(hasPizza)---> Pizzas 

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

select ?x ?y where { 
    ?x hasPizza ?y 
} 

लेकिन अगर मैं की तरह

Human:Jim ----(hasPizza)---> Pizzas:cheesePizza 

उन अवधारणाओं के तहत दो व्यक्तियों (या संस्थाओं) जोड़ने के लिए कि क्वेरी लौट ?x=Jim और ?y=cheesePizza मैं कैसे ?x=Human प्राप्त कर सकते हैं और करेंगे SPARQL का उपयोग कर ?y=Pizza?

+3

आप पोस्ट कर सकते हैं अपने सत्तामीमांसा की RDF संस्करण? कक्षाएं सीधे ओडब्लूएल में गुणों से जुड़ी नहीं होती हैं, यह आमतौर पर अस्तित्व प्रतिबंध प्रतिबंध के माध्यम से की जाती है। तो अपने ऑटोलॉजी के आरडीएफ संस्करण को खोलें और निर्माण देखें; फिर आप इसे अपने SPARQL क्वेरी से मिलान करने का प्रयास कर सकते हैं। – loopasam

+1

यह अधिक संभावना है कि आपके पास ऑब्जेक्ट प्रॉपर्टी 'हैस्पिज्ज' है, _rdfs: domain_ और _rdfs: range_ क्रमशः 'मानव' और 'पिज्जा' हैं। हालांकि, यह खोजना अपेक्षाकृत आसान है, लेकिन यह एक अलग कार्य है। –

उत्तर

16

इस तरह देखते हुए डेटा (में RDF/XML):

<rdf:RDF 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xmlns:owl="http://www.w3.org/2002/07/owl#" 
    xmlns:pizzas="http://example.org/pizzas#" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#" 
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"> 
    <owl:Ontology rdf:about="http://example.org/pizzas"/> 
    <owl:Class rdf:about="http://example.org/pizzas#Pizza"/> 
    <owl:Class rdf:about="http://example.org/pizzas#Human"/> 
    <owl:ObjectProperty rdf:about="http://example.org/pizzas#hasPizza"> 
    <rdfs:domain rdf:resource="http://example.org/pizzas#Human"/> 
    <rdfs:range rdf:resource="http://example.org/pizzas#Pizza"/> 
    </owl:ObjectProperty> 
    <owl:NamedIndividual rdf:about="http://example.org/pizzas#Jim"> 
    <rdf:type rdf:resource="http://example.org/pizzas#Human"/> 
    <pizzas:hasPizza> 
     <owl:NamedIndividual rdf:about="http://example.org/pizzas#CheesePizza"> 
     <rdf:type rdf:resource="http://example.org/pizzas#Pizza"/> 
     </owl:NamedIndividual> 
    </pizzas:hasPizza> 
    </owl:NamedIndividual> 
</rdf:RDF> 

या एक ही, अधिक पठनीय कछुए में:

@prefix :  <http://example.org/pizzas#> . 
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . 
@prefix pizzas: <http://example.org/pizzas#> . 
@prefix owl:  <http://www.w3.org/2002/07/owl#> . 
@prefix xsd:  <http://www.w3.org/2001/XMLSchema#> . 
@prefix rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . 

pizzas:Jim 
     a  pizzas:Human , owl:NamedIndividual ; 
     pizzas:hasPizza pizzas:CheesePizza . 

pizzas:hasPizza 
     a  owl:ObjectProperty ; 
     rdfs:domain pizzas:Human ; 
     rdfs:range pizzas:Pizza . 

pizzas:Human 
     a  owl:Class . 

pizzas:Pizza 
     a  owl:Class . 

<http://example.org/pizzas> 
     a  owl:Ontology . 

pizzas:CheesePizza 
     a  pizzas:Pizza , owl:NamedIndividual . 

सूचना है कि अभिकथन Jim hasPizza CheesePizza में एक ट्रिपल है लेखाचित्र। hasPizza ऑब्जेक्ट प्रॉपर्टी के लिए डोमेन और रेंज एक्सिओम्स दो ट्रिपल हैं: hasPizza rdfs:domain Human और hasPizza rdfs:range Pizza। SPARQL क्वेरी ग्राफ़ में ट्रिपल के खिलाफ क्वेरी पैटर्न से मेल खाते हैं। इस प्रकार, की तरह एक प्रश्न से:

prefix :  <http://example.org/pizzas#> 

select ?x ?y where { 
    ?x :hasPizza ?y 
} 

आप क्योंकि एक ग्राफ जिसका विधेय :hasPizza है में ट्रिपल है वहाँ, और कहा कि ट्रिपल एक :Jim विषय के रूप में है मिल जाएगा परिणाम इस तरह के

रूप
$ arq --data pizzas.ttl --query query.sparql 
----------------------- 
| x | y   | 
======================= 
| :Jim | :CheesePizza | 
----------------------- 

, और ऑब्जेक्ट के रूप में :CheesePizza। ऐसा लगता है कि आप वास्तव में :hasPizza संपत्ति के डोमेन और सीमा के लिए पूछ रहे हैं, जो पुनर्प्राप्त करना भी आसान है। इस तरह एक प्रश्न का उपयोग करें:

prefix :  <http://example.org/pizzas#> 
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> 

select ?domain ?range where { 
    :hasPizza rdfs:domain ?domain ; 
      rdfs:range ?range . 
} 

और आप इस तरह के परिणाम प्राप्त करेंगे:

$ arq --data pizzas.ttl --query query.sparql 
------------------- 
| domain | range | 
=================== 
| :Human | :Pizza | 
------------------- 
संबंधित मुद्दे