这是builtin_owl2-rl.pie行361

// Part 1 of cls_oo
Id: cls_oo_1
     c <owl:oneOf>    x
     ------------------
     c <onto:_oneOf>  x                     [Context <onto:_cls_oo>]


// Part 2 of cls_oo
Id: cls_oo_2
     c  <onto:_oneOf>  x                    [Context <onto:_cls_oo>]
     x  <rdf:first>    y
     x  <rdf:rest>     z
    -------------------------------
     y  <rdf:type>     c
     c  <onto:_oneOf>  z                    [Context <onto:_cls_oo>][Constraint z != <rdf:nil>]


一些随机的东西可以缓解stackoverflow的“ AI”建议“这只是代码,请添加说明”

最佳答案

此规则实现https://www.w3.org/TR/owl2-profiles/#cls-oo


owl:oneOf是原始属性;它的对象是一个列表。
onto:_oneOf是用于展开列表的实现属性。它总是放在实现上下文onto:_cls_oo中。从此上下文中获取的三元组绝不能返回。


现在假设您有c owl:oneOf (y1 y2)这真的意味着

c owl:oneOf [rdf:first y1;
         rdf:rest [rdf:first y2;
                   rdf:rest rdf:nil]]


第一条规则将其复制到onto:_oneOf。然后第二条规则产生

y1 rdf:type c.
c onto:_oneOf [rdf:first y2;
               rdf:rest rdf:nil]]


第二条规则再次生效

y1 rdf:type c.
y2 rdf:type c.
c onto:_oneOf rdf:nil


前两个是您要推断的内容,第三个是实现上下文中隐藏的剩余内容。

你明白了吗?如果您这样做了,请尝试证明owl:propertyChainAxiom https://www.w3.org/TR/owl2-profiles/#prp-spo2的实现是正确的:

Id: prp_spo2_1
    p <owl:propertyChainAxiom> pc
    start pc last                   [Context <onto:_checkChain>]
    ----------------------------
    start p last

Id: prp_spo2_2
    pc <rdf:first> p
    pc <rdf:rest> t                 [Constraint t != <rdf:nil>]
    start p next
    next t last                     [Context <onto:_checkChain>]
    ----------------------------
    start pc last                   [Context <onto:_checkChain>]

Id: prp_spo2_3
    pc <rdf:first> p
    pc <rdf:rest> <rdf:nil>
    start p last
    ----------------------------
    start pc last                   [Context <onto:_checkChain>]

关于owl - owlim中的owl:oneof和toon:oneof有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23509573/

10-10 17:20