如何用 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 中,假设信息只是未知但可能存在。
我有点困惑如何在 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 中,假设信息只是未知但可能存在。