2012-02-09 19 views
9

के उप-वर्गों की सभी इकाइयां प्राप्त करें मुझे SPARQL में सी के वर्ग सी और सबक्लास (प्रत्यक्ष या अप्रत्यक्ष) के सभी उदाहरण प्राप्त करना होगा।SPARQL: एक निश्चित वर्ग

मैं इस तरह से सी के सभी प्रत्यक्ष उपवर्गों प्राप्त कर सकते हैं:

SELECT ?entity 
WHERE { 
    ?subclass rdfs:subClassOf :C . 
    ?entity rdf:type ?subclass . 
} 

लेकिन मैं एक अप्रत्यक्ष उपवर्ग के उदाहरण नहीं मिल सकता है और न ही सी

के किसी भी मामले मैं जानते हैं (मैंने उन्हें पूर्व-गणना की है) सभी उप-वर्ग (सी के प्रत्यक्ष और अप्रत्यक्ष), और मैं गतिशील क्वेरी बना सकता हूं, क्या यह संभव है कि निम्न की तरह एक क्वेरी बनाएं?

SELECT ?entity 
WHERE { 
    ?entity rdf:type in <list>. 
} 

सभी के लिए धन्यवाद।

संपादित करें:

मैं सिर्फ इसे हल कर दिया है, यहां तक ​​कि एक सुरुचिपूर्ण नहीं रास्ते में है।

SELECT ?entity 
WHERE { 
    ?entity rdf:type ?type. 
    ?type rdfs:subClassOf* :C. 
} 

उत्तर

20

एक बेहतर समाधान SPARQL 1.1

में संपत्ति पथ एक्सप्रेशन का उपयोग करना है यह रूप में लिखा की जाएगी

SELECT ?entity 
WHERE { 
    ?entity rdf:type/rdfs:subClassOf* :C 
} 

संपत्ति पथ के लिए समर्थन के बिना expre का कोई रास्ता नहीं है मनमाना लंबाई के वर्ग पदानुक्रम ssing।

+2

ट्रिपल स्टोर के आधार पर यह काम कर सकता है या नहीं। सभी ट्रिपल स्टोर संपत्ति पथ अभिव्यक्तियों को लागू नहीं करते हैं। –

+0

धन्यवाद, यह काम किया !! – auino

+0

@msalvadores एक अद्यतन के रूप में, जबकि अभी भी पुराने ट्रिपल स्टोर हो सकते हैं, संपत्ति पथ इसे SPARQL 1.1 में बनाते हैं, इसलिए मौजूदा मानक का समर्थन करने वाले किसी भी ट्रिपल स्टोर संपत्ति पथ का समर्थन करेंगे। –

3

SPARQL 1.1 specification यह होगा करने के लिए उचित तरीके के आधार पर::

SELECT ?entity 
WHERE { 
    { ?entity rdf:type :C } 
    UNION { ?entity rdf:type :SubClass1 } 
    UNION { ?entity rdf:type :SubClass2 } 
    UNION { ?entity rdf:type :SubClass3 } 
} 
संबंधित मुद्दे