我对如何在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关系方面考虑太多,所以欢迎任何有关一对一,一对多关系的提示!
我真的很感激!
此致
答案 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中,假设信息只是未知但可能存在。