我在owl中编写了一些代码,现在我需要导入一个本体来使用它。问题是owlready没有正确地做,没有找到类。比如我输入go。Owl (http://geneontology.org/docs/download-ontology/),然后添加一个类(为了简单)命名为A
,代码:
with onto:
class A(GO_0046852):
pass
我得到错误
NameError: name 'GO_0000030' is not defined
这是因为owl已经考虑到类IRI应该是#GO_0000030
而不是http://purl.obolibrary.org/obo/GO_0046852
甚至http://purl.obolibrary.org/obo#GO_0046852
这说不通啊。所以没有类被检测到。我该如何解决这个问题,或者绕道而行?
我现在不能换到另一个API,因为我已经写了很多代码。这是产生错误的代码:
from owlready2 import *
onto = get_ontology("go.owl").load()
with onto:
class A(GO_0000030):
pass
onto.save(file = "test.owl", format = "rdfxml")
原始本体中是否有类'GO_0046852'?
在OWLREADY的例子中,定义是
with onto:
class Drug(Thing):
pass
,的在本体中已经定义了一个类,所以classDrug继承类Thing的所有属性. 因此,无论你在括号内写什么类,都应该在本体中声明。这就是你得到错误的原因。
请参考owlready2.0文档中的Namespace章节。
你必须调用一个命名空间,在从存储中加载本体之后。
obo = get_namespace("http://purl.obolibrary.org/obo/")
print(obo.GO_0000001)
因此,当你通过obo。GO_0000001应该给出输出。