繁体   English   中英

使用 Protege 在 OWL 中分配序列

[英]Assigning sequence in OWL using Protege

我的本体中有这个公理

:drug :givenAs (({dose1}) or ({dose2}) or ({dose3}))
 and (not ({dose4}))

根据 Turtle 的语法不正确,但我希望你明白这一点。

我想断言,dose1 之后是dose2,然后是dose3。

我检查了OWL-DL 本体中的建模序列顺序,但它并没有完全解决我的情况。 那是因为在这种情况下我只处理个人,而不是类。

断言序列的优雅方式是什么?

该公理用于识别数据记录中的错误。 例如,如果存在:drug :givenAs :dose2 . ,我希望本体指出错误:drug :givenAs :dose2 . 没有:drug :givenAs :dose1 .

更新 1

我按照建议尝试了hasNext属性。 我可以链接使用该属性的个人。 但是,我不确定这是否适用于我的上下文:

Class: SequenceItem
    EquivalentTo: 
        hasNext only SequenceItem

我没有课程,如果合适,我想避免它。 我仍然如何分配序列?

更新 2

我添加了前面提到的类公理。 推理者没有发现错误。 然而,他们也没有识别剂量 2 在剂量 1 之前的错误记录。 我断言Dose类相当于:

Dose
and hasNext only Dose

我认为,问题是我没有在任何地方断言在剂量 1 之前不可能有剂量 2,在剂量 2 之前不可能有剂量 3,等等。

在 OWL-DL 本体中添加hasNext属性 ala Modeling sequence order也能正常工作。 只需在个人上声明hasNext (见最后一段)。

另一种指定排序的方法是通过 RDF 列表,即(:dose1 ;dose2 :dose3) 该列表是一个有序的枚举列表,您可以使用 rdf:first/rdf:rest 按顺序查询元素。

最后一个想法是指定一个排序属性。 hasList解决方案类似,可以将sequenceNum属性添加到剂量对象上,例如:

:dose1 :sequenceNum 1 .
:dose1 :sequenceNum 2 .
:dose1 :sequenceNum 3 .

然后使用编号来指定哪个出现在另一个之前。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM