如何用OWL说“零或更多”(在Protégé中)

时间:2017-12-12 22:33:23

标签: ontology protege

我对如何在OWL(使用Protégé)中限制“零或更多”感到困惑?

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

OrderDetail的另一种方式只能是一个订单的一部分。 订单只能属于一个人。

我特别坚持零或多部分。它的最小基数是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>

我可能在DB关系方面考虑太多,所以欢迎任何有关一对一,一对多关系的提示!

我真的很感激!

此致

1 个答案:

答案 0 :(得分:1)

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思维(开放世界假设)不同的地方。在数据库中缺少信息通常假定信息不存在,而在Protege中,假设信息只是未知但可能存在。