在上面的例子中,Drug类的iri是‘http://test.org/pharmaco/Drug’,但是类属于‘http://test.org/onto’这个本体。
Owlready2拥有三种显示命名空间的方法:
(1)namespace类属性(attribute);
(2)with namespace:语句;
(3)如果不提供,则命名空间从第一个父类处继承。
下面的例子阐明了以上三种方法:
3. 更改定义在其他本体中的类
在OWL中一个本体可以修改一个在其他本体中定义的类。
在Owlready2中,以上特性可以使用‘with namespace:’语句实现。每一个被创建(删除)在‘with namespace:’语句之内的RDF三元组都存在于那个语句指定的namespace之内。
下面的例子在第一个本体中创建Drug类,并且声明Drug是第二个本体中的Substance的实例。
Worlds
Owlready2将所有的三元组存储在‘World’对象中,它也可以同时处理多个Worlds。‘default_world’是默认使用的World。
1. 持久的world:将quadstore存储在SQLite3文件中
Owlready2使用一个优化的quadstore。这个quadstore默认存储在内存中,但是它也可以被存储在SQLite3文件中。这就保证了持久化:一个被加载的或创建的本体存储在文件中以供以后使用。这对于大型本体来说很有趣:加载一个大型本体需要时间,但是打开一个SQLite3文件只需要几分之一秒(即使很大)。并且如果你仅仅需要访问几个本体的实体的话,应当避免在内存中加载巨型本体。
World的.set_backend()函数将SQLite3文件名关联到quadstore:
default_world.set_backend(filename=\3\
如果quadstore非空,当调用.set_backend()函数时RDF三元组会被自动地复制。然而这个操作会有很高的性能消耗(尤其是三元组很多时)
当时用持久化时必须调用World的.save()函数以保存SQLite3文件中的quadstore的实际状态。
在文件中保存quadstore不会损耗Owlready2的性能(事实上,将quadstore保存在硬盘上Owlready2允许地会略快一些)
2. 使用多个孤立的Worlds
Owlready2支持多个、孤立的Worlds。如果你想要加载同一个本体的多个版本,例如本体在进行推理前后的版本,会十分有趣。
你可以使用World类来创建新的World:
本体在这之后就可以使用World的.get_ontology()方法创建和加载本体(当在多个Worlds中使用时,这个方法会替代全局的get_ontology()函数):
onto = my_world.get_ontology(\
World对象可以像伪字典一样使用以通过iri来访问实体(当在多个Worlds中使用时,这个方法会替代全局的IRIS伪字典):
my_world[\
最后,推理器可以在指定的World中运行:
sync_reasoner(my_world) 3. 使用RDFlib执行SPARQL查询
Owlready2使用一个优化的RDF quadstore。它也可以被当做RDFlib图来访问:
graph=default_world.as_rdflib_graph()
RDFlib图也可以被用来执行SPARQL查询:
r=list(graph.query(\b.org/jiba/ontologies/2017/0/test#ma_pizza>