SWRL是否支持个人的查点声明?

时间:2016-11-18 19:02:29

标签: owl ontology swrl

我在OWL本体中做了一些SWRL规则,如下所示:

..., hasHazardCode(?a, H350) -> DangerousProduct(?a)
..., hasHazardCode(?a, H350i) -> DangerousProduct(?a)
..., hasHazardCode(?a, H400) -> DangerousProduct(?a)
..., hasHazardCode(?a, H401) -> DangerousProduct(?a)
......

H350H350iH400H401是一些有名的人。我们可以看到这些SWRL规则的模式是相似的。所以我想也许我们可以用一条规则替换这些规则:

..., hasHazardCode(?a, {H350, H350i, H400, H401}) -> DangerousProduct(?a)

我在Protege的Rules选项卡中尝试了这种语法,但它没有用。 SWRL是否支持这样的个别枚举声明?

1 个答案:

答案 0 :(得分:0)

使用类型"范围"。

的OWL类表达式可以实现

thing some hasHazardCode [H350, H350i, ... ] in hasHazardCode(?a, ?HValue) /\ Class(myClass, ?HValue) -> Class(DangerousProduct,?a) OWLObjectProperty myProperty = OWL.ObjectProperty("hasHazardCode"); OWLObjectOneOf myRange = OWL.oneOf(OWL.Individual("H350"), OWL.Individual("H350i"), OWL.Individual("H400"), OWL.Individual("H401")); OWLClassExpression myClass = OWL.some(OWL.ObjectProperty("hasHazardCode"), myRange); SWRL.rule( SWRL.antecedent( SWRL.propertyAtom(myProperty, SWRL.variable("?a"), SWRL.variable("?HValue")), SWRL.classAtom(myClass, SWRL.variable("?HValue")) ), SWRL.consequent(SWRL.classAtom(OWL.Class("DangerousProduct"), SWRL.variable("?a"))) ); unionAll范围groupby

使用pellet java syntax,这里可以重写您的示例:

groupby