OwlReady2,将子类中的两个功能属性限制为相等的值

时间:2019-04-15 11:14:23

标签: python semantic-web ontology owlready

我具有以下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)。

我遇到的问题是CompositePipelinehas_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或任何其他等效表示形式中都有解决方案,那么它也将非常有用。

0 个答案:

没有答案