【问题标题】:Does SWRL support enumeration statement for individuals?SWRL 是否支持个人枚举声明?
【发布时间】:2017-04-02 17:30:46
【问题描述】:

我正在像这样在 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 的“规则”选项卡中尝试了这种语法,但没有奏效。 SWRL 是否支持这样的单个枚举语句?

【问题讨论】:

    标签: owl ontology swrl


    【解决方案1】:

    这可以通过类型为“Range”的 OWL 类表达式来实现。

    let myClass = thingclasssome hasHazardCode 范围内[H350, H350i, ... ] in hasHazardCode(?a, ?HValue) /\ Class(myClass, ?HValue) -> Class(DangerousProduct,?a)

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

        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")))
        );
    

    【讨论】:

      猜你喜欢
      • 2012-12-03
      • 2011-03-10
      • 1970-01-01
      • 1970-01-01
      • 2021-01-16
      • 1970-01-01
      • 2015-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多