首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SWRL是否支持针对个人的枚举语句?

SWRL是否支持针对个人的枚举语句?
EN

Stack Overflow用户
提问于 2016-11-19 03:02:29
回答 1查看 47关注 0票数 0

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

代码语言:javascript
运行
复制
..., hasHazardCode(?a, H350) -> DangerousProduct(?a)
..., hasHazardCode(?a, H350i) -> DangerousProduct(?a)
..., hasHazardCode(?a, H400) -> DangerousProduct(?a)
..., hasHazardCode(?a, H401) -> DangerousProduct(?a)
......

H350H350iH400H401是一些被命名的个体。正如我们所看到的,这些SWRL规则的模式是相似的。所以我认为也许我们可以用一条规则来代替这些规则,比如:

代码语言:javascript
运行
复制
..., hasHazardCode(?a, {H350, H350i, H400, H401}) -> DangerousProduct(?a)

我在Protege的Rules选项卡中尝试了这种语法,但它不起作用。SWRL是否支持像这样的单个枚举语句?

EN

回答 1

Stack Overflow用户

发布于 2017-03-29 22:22:12

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

let myClass = the class of thing some hasHazardCode in range [H350, H350i, ... ] in hasHazardCode(?a, ?HValue) /\ Class(myClass, ?HValue) -> Class(DangerousProduct,?a)

使用pellet java syntax,下面是如何重写你的例子:

代码语言:javascript
运行
复制
    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")))
    );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40684282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档