[英]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.