यहां एक छोटा सा जीव विज्ञान है जिसे wildlife.owl कहा जाता है, जिसे प्रोटेग ने बनाया है, जिसमें मेरी कक्षाएं animal, carnivore, herbivore, lion, giraffe, और व्यक्ति Léo (a lion) हैं। , Gigi (एक giraffe) और Giginou (एक giraffe)। ऑटोलॉजी में मैं केवल यह घोषणा करता हूं कि lion ⊏ carnivore ⊏ animal

जब मैं प्रोटेग के डीएल क्वेरी टैब में animal के उदाहरणों के लिए पूछता हूं, तो मुझे दूसरों के बीच, Léo (जो एक lion है, इसलिए एक carnivore मिलता है, इसलिए एक animal)।

लेकिन जब मैं निम्नलिखित स्पार्क क्वेरी लिखता हूं:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX me: <file:wildlife.owl#>
SELECT ?b
    WHERE { ?b rdf:type me:animal }

मुझे कोई उदाहरण नहीं मिलता है। वही परिणाम जब मैं me:animal को me:carnivore से प्रतिस्थापित करता हूं। केवल जब मैं इसे me:lion से बदल देता हूं तो मुझे वांछित परिणाम मिलता है Léo

DL क्वेरी अनुमान क्यों कर रही है (मुझे Léo को animal वर्ग के उदाहरण के रूप में प्राप्त करने की अनुमति दे रही है) और SPARQL क्वेरी नहीं?

SPARQL क्वेरी में समान परिणाम प्राप्त करने के लिए मैं क्या कर सकता हूं?


मेरा अगला प्रश्न पायथन से संबंधित है: जब मैं Owlready2 और RDFlib का उपयोग करके SPARQL क्वेरी भेजता हूं, तो मुझे फिर से कोई परिणाम नहीं मिलता है:

from owlready2 import *
from rdflib import *
onto = get_ontology("wildlife.owl").load()
sync_reasoner([onto])
graph = default_world.as_rdflib_graph()
print(list(graph.query_owlready("""
PREFIX rdf-syntax: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX me: <file:wildlife.owl#>
SELECT ?b WHERE {
?b rdf-syntax:type me:animal .
}""")))

मैं इस क्वेरी को OWL रीज़नर का उपयोग कैसे कर सकता हूँ?

0
yannis 22 मार्च 2020, 18:13

1 उत्तर

सबसे बढ़िया उत्तर

तर्ककर्ता को बुलाते समय, उल्लू पहले से ही सामान्य ज्ञान के अनुमानों को बरकरार नहीं रखता है, जैसे कि है-एक सकर्मकता (उदाहरण के लिए यह तथ्य कि शेर एक जानवर है)।

तुच्छ अनुमानों के लिए, आपको SPARQL का उपयोग करना चाहिए, जैसा कि नीचे दिए गए उदाहरण में है। ?any_animal चर में सभी पशु उपवर्ग शामिल हैं (animal सहित), SubclassOf* SPARQL सिंटैक्स के लिए धन्यवाद (* सकर्मकता को इंगित करता है)। फिर, हम ?any_animal वर्ग का कोई उदाहरण लेते हैं।

    from owlready2 import *
    from rdflib import *

    onto = get_ontology("http://test.org/wildlife.owl")

    with onto:
        class animal(Thing): pass
        class carnivore(animal): pass
        class lion(carnivore): pass

        lion()

    default_world.graph.dump()

    graph = default_world.as_rdflib_graph()

    print(list(graph.query_owlready("""
    PREFIX rdf-syntax: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
    PREFIX me: <http://test.org/wildlife.owl#>
    SELECT ?b WHERE {
    ?any_animal <http://www.w3.org/2000/01/rdf-schema#subClassOf>* me:animal .
    ?b rdf-syntax:type ?any_animal .
    }""")))
2
Nikolay Shebanov 23 मार्च 2020, 12:22