我在OWL本体中做了一些SWRL规则,如下所示:
..., hasHazardCode(?a, H350) -> DangerousProduct(?a)
..., hasHazardCode(?a, H350i) -> DangerousProduct(?a)
..., hasHazardCode(?a, H400) -> DangerousProduct(?a)
..., hasHazardCode(?a, H401) -> DangerousProduct(?a)
......
H350
,H350i
,H400
和H401
是一些有名的人。我们可以看到这些SWRL规则的模式是相似的。所以我想也许我们可以用一条规则替换这些规则:
..., hasHazardCode(?a, {H350, H350i, H400, H401}) -> DangerousProduct(?a)
我在Protege的Rules选项卡中尝试了这种语法,但它没有用。 SWRL是否支持这样的个别枚举声明?
答案 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