类表达式hasPet exactly 1 DomesticAnimal 恰好具有那些通过属性hasPet 与恰好一个DomesticAnimal 相关的个体作为实例。 正好一个表示至少一个和不超过一个。基于三元组
:Joe :hasPet :Lassy .
:Bob :hasPet :Sparkey ;
:hasPet :Lucky .
我们知道 Joe 和 Bob 都有至少一个宠物,但我们不知道他们可能有多少。 Joe 可能有 Lassy 以外的其他宠物,所以我们不知道 Joe 确切地有一只宠物。 Sparkey 和 Lucky 有可能碰巧是同一个人,所以 Bob 至少有一只宠物,但 Bob 拥有的宠物数量没有上限。
OWL 和 RDF 一样,生成了open world assumption,这意味着 OWL 并不假定所提供的数据是对世界上所有真实事物的详尽枚举。如果是这样,推理就没有意义了。没有s p o 的断言并不意味着NOT( s p o ),而只是对s p o 尚无判断。
不过,您可以向数据添加更多知识,以获得您想要的结论。您用以下方式描述乔:
Joe a Human ;
hasPet Lassy ;
hasPet only { Lassy } .
Lassy a DomesticAnimal .
由此你将能够推断出
Joe a (hasPet exactly 1 DomesticAnimal) .
对于 Bob,您似乎认为 Sparkey 和 Lucky 是不同的动物,所以您需要owl:differentFrom:
Bob a Human ;
hasPet Sparkey, Lucky .
Sparkey a DomesticAnimal .
Lucky a DomesticAnimal ;
owl:differentFrom Sparkey .
我没有在这些公理中包含Bob hasPet only { Sparkey, Lucky },因为它们没有必要推断 Bob 拥有不止一只宠物,但您可以包含它。我还只包含了一个可以做出的owl:differentFrom 断言。现在已知 Bob 有两个 不同 宠物,因此已知 不 是 hasPet exactly 1 DomesticAnimal。将此数据加载到 Protégé 后,DL 查询 hasPet exactly 1 DomesticAnimal 将按预期工作:
示例本体
如果您希望能够将此结构快速加载到 Protégé 中,这里有一个包含上述个体、属性和公理的本体。我没有定义petOf 属性,但您仍然可以将前两个查询分别运行为inverse hasPet value Joe 和inverse hasPet value Bob 并获得预期结果。
@prefix : <http://www.example.com/owa#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix owa: <http://www.example.com/owa#> .
owa:Bob
a owl:NamedIndividual , owa:Human ;
owa:hasPet owa:Sparkey , owa:Lucky .
owa:Sparkey
a owl:NamedIndividual , owa:DomesticAnimal .
owa:Lassy
a owl:NamedIndividual , owa:DomesticAnimal .
[] a owl:AllDifferent ;
owl:distinctMembers (owa:Lucky owa:Sparkey) .
owa:Joe
a owl:NamedIndividual , owa:Human ;
a [ a owl:Restriction ;
owl:allValuesFrom
[ a owl:Class ;
owl:oneOf (owa:Lassy)
] ;
owl:onProperty owa:hasPet
] ;
owa:hasPet owa:Lassy .
<http://www.example.com/owa>
a owl:Ontology .
owa:Lucky
a owl:NamedIndividual , owa:DomesticAnimal .
owa:Human
a owl:Class .
owa:hasPet
a owl:ObjectProperty .
owa:DomesticAnimal
a owl:Class .