我具有以下owlready2
构造:
class Pipeline(Thing):
pass
class Data(Thing):
pass
class has_input(FunctionalProperty):
domain = [Pipeline]
range = [Data]
class has_output(FunctionalProperty):
domain = [Pipeline]
range = [Data]
class Algorithm(Pipeline):
pass
class CompositePipeline(Pipeline):
pass
class has_first_step(FunctionalProperty):
domain = [CompositePipeline]
range = [Algorithm]
class has_next_step(FunctionalProperty):
domain = [CompositePipeline]
range = [Pipeline]
基本上,我使用递归定义将Pipeline
定义为Algorithm
的序列,即Pipeline
是单个Algorithm
还是{ {1}}后跟一个Algorithm
(一个Pipeline
)。
我遇到的问题是CompositePipeline
和has_input
。在has_output
中,我想断言CompositePipeline
将完全等于has_input
对象的has_input
值,并与has_first_step
等效。
我尝试创建一个has_output
,然后尝试做类似的事情
PropertyChain([has_first_step, has_input])
我测试了不同的重写方式以及class CompositePipeline(Pipeline):
equivalent_to = [ Pipeline &
has_input.exactly(PropertyChain([has_first_step, has_next_step])) &
... ]
之类的不同运算符,但没有任何效果。 .some()
会引发一些非参考性的错误,或者当它起作用时,断言在保存时不会最终出现在XML / OWL文件中。
如果某人在纯OWL,Turtle或任何其他等效表示形式中都有解决方案,那么它也将非常有用。