Protégé:DL查询和SPARQL查询之间的差异结果

Protégé:DL查询和SPARQL查询之间的差异结果,sparql,owl,protege,rdflib,owlready,Sparql,Owl,Protege,Rdflib,Owlready,名为wildlife.owl,由Protégé创建,在其中我有动物类、食肉类、食草动物类、狮子类、长颈鹿类,还有狮子类、长颈鹿类和长颈鹿类。在本体论中,我只声明那只狮子⊏ 食肉动物⊏ 动物 当我在Protégé的DL Query选项卡中询问animal的实例时,除其他外,我得到了lio,它是一头狮子,因此是一种食肉动物,因此是一种动物 但当我编写以下SPARQ查询时: PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

名为wildlife.owl,由Protégé创建,在其中我有动物类、食肉类、食草动物类、狮子类、长颈鹿类,还有狮子类、长颈鹿类和长颈鹿类。在本体论中,我只声明那只狮子⊏ 食肉动物⊏ 动物

当我在Protégé的DL Query选项卡中询问animal的实例时,除其他外,我得到了lio,它是一头狮子,因此是一种食肉动物,因此是一种动物

但当我编写以下SPARQ查询时:

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 }

如何使用OWL推理机获取此查询?

调用推理机时,Owlready不保留琐碎的推理,例如is-a及物性,例如狮子是动物这一事实

对于琐碎的推论,您应该使用SPARQL,如下例所示。any_animal变量包含所有动物子类,包括动物本身,感谢Subassof*SPARQL语法,*表示及物性。然后,我们以任何动物类为例

从owlready2导入* 从rdflib导入* 上ologyhttp://test.org/wildlife.owl 关于: 课堂动画:通过 类食肉动物:通行证 lioncarnivore级:通过 狮 默认_world.graph.dump graph=默认的\u world.as\u rdflib\u图形 printlistgraph.query\u owlready 前缀rdf语法: 前缀“我”: 选择?b在哪里{ ?任何动物*我:动物。 ?b rdf语法:类型?任意动物。 }
在给推理者打电话时,Owlready不保留琐碎的推论,例如is-a及物性,例如狮子是动物的事实

对于琐碎的推论,您应该使用SPARQL,如下例所示。any_animal变量包含所有动物子类,包括动物本身,感谢Subassof*SPARQL语法,*表示及物性。然后,我们以任何动物类为例

从owlready2导入* 从rdflib导入* 上ologyhttp://test.org/wildlife.owl 关于: 课堂动画:通过 类食肉动物:通行证 lioncarnivore级:通过 狮 默认_world.graph.dump graph=默认的\u world.as\u rdflib\u图形 printlistgraph.query\u owlready 前缀rdf语法: 前缀“我”: 选择?b在哪里{ ?任何动物*我:动物。 ?b rdf语法:类型?任意动物。 }
DL查询选项卡使用OWL推理器(如果启用),SPARQL选项卡不使用。Snap SPARQL插件也使用了OWL推理器,但是有一些限制w.r.t.SPARQL语法。谢谢!如何让Owlreader2使用OWL reasoner?我在Python Owlreader2代码中尝试了sync_reasoner,但没有任何更改。在Python的RDF工具RDFlib集合中,它可以进行RDFS或RL推理,但不能进行DL。API名为owlready2,而不是Owlreader2-请在提交之前始终检查您的文本,否则事情会变得混乱。如果启用,DL查询选项卡将使用OWL推理器,而SPARQL选项卡则不会。Snap SPARQL插件也使用了OWL推理器,但是有一些限制w.r.t.SPARQL语法。谢谢!如何让Owlreader2使用OWL reasoner?我在Python Owlreader2代码中尝试了sync_reasoner,但没有任何更改。在Python的RDF工具RDFlib集合中,它可以进行RDFS或RL推理,但不能进行DL。API名为owlready2,而不是Owlreader2-请在提交之前始终检查您的文本,否则事情会变得混乱。非常感谢!我还有一个问题:在我得到的结果中,[[wildlife.Léo],[wildlife.lion1],[wildlife.Gigi],[wildlife.Giginou],[wildlife.lion1],据我所知,没有一个人叫wildlife.lion1,这是从哪里来的?我举个例子,lion1来自狮子。在创建个人时,如果没有明确给出他们的IRI,Owlready将通过使用小写的类IRI生成一个新的IRI,并添加一个从1开始的数字,如下所示。非常感谢!我还有一个问题:在我得到的结果中,[[wildlife.Léo],[wildlife.lion1],[wildlife.Gigi],[wildlife.Giginou],[wildlife.lion1],据我所知,没有一个人叫wildlife.lion1,这是从哪里来的?我举个例子,lion1来自狮子。在创建个人时,如果没有显式地给出他们的IRI,Owlready将通过使用小写的类IRI生成一个新的IRI,并添加一个从1开始的数字,如下所示。
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 .
}""")))