注释(Annotation)
在Owlready2中注释可以像Python类属性(attribute)一样被访问。需要注意的是注释不可被继承。
1. 添加注释
对于一个给定的实体(类、属性或者实例),可以用以下方法添加注释:
可以看到,注释是以列表的形式出现的,默认有以下几种方式添加注释:comment、isDefinedBy、seeAlso、backwardCompatibleWith、deprecated、incompatibleWith、priorVersion、versionInfo。
Owlready2同时支持给关系三元组添加注释,使用AnnotationProperty(在这里用的是comment)以伪字典的方式添加注释(字典的key分别是定义域类实例、关系名、值域类实例,字典的value是评论文本)。
Owlready2提供特殊的伪属性以注释is-a关系(包括owl_subclassof和rdf_type)、定义域(domains,如rdf_domain)以及定义域(ranges,如rdf_range)。
注释值通常是值列表。然而在很多情况下都会使用单个值。Owlready2允许给注释属性
设置单个值。
2. 查询注释
注释值可以使用.运算符来获取就如同它们是实体的属性:
如果你希望查询结果是单个值,可以使用list类型的.first()函数,它返回列表中的首个值,如果列表为空则返回None。
3. 删除注释
只需从注释列表中将特定注释移除即可:
Drug.comment.remove(\。
或者直接给注释列表赋值一个空列表以删除全部注释:Drug.comment=[]。
4. 定制化的实体呈递
全局函数set_render_func()可以指定Owlready2如何呈递实体。例如,当打印实体时如何去将他们转换成文本。这个函数接收一个函数作为参数,做参数的函数的参数是实体,返回值是字符串。
label注释经常被用来呈递实体,下面的例子使用它们的label注释呈递实体,如果label为空则使用实体名。
下面的例子使用实体的iri呈递实体:
5. 特定语言的注释
可以使用locstr类型来指定注释的语言:
另外,值列表支持指定语言的子列表,子列表形式为‘.<语言代码>’如‘.en’、‘.fr’等。这些子列表包含普通的字符串,可以被修改。
修改指定语言的子列表会自动更新值列表,但是反过来就不会:修改值列表不会更新指定语言子列表。
6. 创建新的注释类
AnnotationProperty类可以生成子类以创建新的注释类:
你也可以为已存在的注释类创建子类。
命名空间
本体可以定义位于其他命名空间的实体。一个例子是Gene本体:本体的IRI是‘htt
p://purl.obolibrary.org/obo/go.owl’,但是本体的实体的IRI并不是如此形式‘http://purl.obolibrary.org/obo/go.owl#GO_entity’,而是‘http://purl.obolibrary.org/obo/GO_entity’。
1. 访问定义在其他命名空间的实体
实体在Owlready2中可以使用命名空间来访问。本体的.get_namespace(base_iri)方法返回一个base_iri指定的命名空间。
命名空间之后可以使用‘.’来进行使用,和本体类似。
2. 在指定命名空间中创建类
当创建一个类或者属性的时候,命名空间属性可以用来建立类的full iri并且定义在哪个本体中创建这个类。类的iri与命名空间的base iri加上类名相同。
一个本体永远可以被当成命名空间使用,见‘类和类实例’这一章。如果你想在不同的iri中建立类你可以使用命名空间对象: