如何用 OWL 说 "zero or more"(在 Protégé 中)

How to say "zero or more" with OWL (in Protégé)

我有点困惑如何在 OWL 中限制 "zero or more"(使用 Protégé)?

假设我们有一个 Person、Order 和 OrderDetails class。 Person 和 Order 之间存在一对多关系(但一个人也可以有零订单) 一个订单可以有一个或多个 OrderDetails。

反之,OrderDetail 只能是一个 Order 的一部分。 一个订单只能属于一个人。

我特别喜欢零或更多部分。它的最小基数是 0 吗?似乎不直观。或者我什么都不用做?而不是为零或更多创建限制? 我怀疑对于一个或多个,我只需要正确使用 SomeValueFrom 即可。

以下是正确的吗?

    <owl:Class rdf:about="http://www.example.org/ont/myMiniStore#Order">
    <rdfs:subClassOf>
        <owl:Restriction>
            <owl:onProperty rdf:resource="http://www.example.org/ont/myMiniStore#hasParts"/>
            <owl:someValuesFrom rdf:resource="http://www.example.org/ont/myMiniStore#OrderDetails"/>
        </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
        <owl:Restriction>
            <owl:onProperty rdf:resource="http://www.example.org/ont/myMiniStore#isOrderOf"/>
            <owl:qualifiedCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:qualifiedCardinality>
            <owl:onClass rdf:resource="http://www.example.org/ont/myMiniStore#Person"/>
        </owl:Restriction>
    </rdfs:subClassOf>
</owl:Class>



<!-- http://www.example.org/ont/myMiniStore#OrderDetails -->

<owl:Class rdf:about="http://www.example.org/ont/myMiniStore#OrderDetails">
    <rdfs:subClassOf>
        <owl:Restriction>
            <owl:onProperty rdf:resource="http://www.example.org/ont/myMiniStore#isOrderOf"/>
            <owl:qualifiedCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:qualifiedCardinality>
            <owl:onClass rdf:resource="http://www.example.org/ont/myMiniStore#Order"/>
        </owl:Restriction>
    </rdfs:subClassOf>
</owl:Class>



<!-- http://www.example.org/ont/myMiniStore#Person -->

<owl:Class rdf:about="http://www.example.org/ont/myMiniStore#Person">
    <rdfs:subClassOf>
        <owl:Restriction>
            <owl:onProperty rdf:resource="http://www.example.org/ont/myMiniStore#hasOrder"/>
            <owl:minQualifiedCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">0</owl:minQualifiedCardinality>
            <owl:onClass rdf:resource="http://www.example.org/ont/myMiniStore#Order"/>
        </owl:Restriction>
    </rdfs:subClassOf>
</owl:Class>

我可能对数据库关系想得太多了,所以欢迎任何关于一对一、一对多关系的提示!

非常感谢!

此致,

Class: Person
     SubClassOf: 
         hasOrder some Order

相当于说

Class: Person
     SubClassOf: 
         hasOrder min 1 Order

添加限制 hasOrder min 0 Order 将无效。要看到这一点,请想想 personA 有零订单,personB 有一些订单。例如,您将无法推断 personB 是客户而 personA 不是。

如果需要,您可以通过以下方式对其进行建模:

Class: Person

Class: Customer
     SubClassOf:
         Person,
         hasOrder min 1 Order

Class: NonCustomer
     SubClassOf:
         Person,
         hasOrder max 0 Order


 Individual: personA
     Types: 
         hasOrder max 0 Order

 Individual: booksOrder
     Types:
         Order

 Individual: personB
     Facts: 
         hasOrder booksOrder 

在这种情况下,您将能够推断出 personB 是客户,但要推断出 personA 不是客户,您必须明确声明 personA 没有订单(即 Types: hasOrder max 0 Order)。这就是数据库思维(封闭世界假设)与 Protege 思维(开放世界假设)不同的地方。在 DB 中,信息缺失通常假设该信息不存在,而在 Protege 中,假设信息只是未知但可能存在。