我正在使用基本的OWL,并且很容易表示一些简单的句子,例如“Songoku是讲师,他教数学”。
E.g:
<owl:Class rdf:ID="Lecturer"></owl:Class>
<owl:Class rdf:ID="Subject"></owl:Class>
<owl:Property rdf:ID="teach">
<rdfs:domain rdf:resource="#Lecturer"/>
<rdfs:range rdf:resource="#Subject"/>
</owl:Property>
<Subject rdf:ID="Maths"></Subject>
<Lecturer rdf:ID="Songoku">
<teach>
<Subject rdf:about="#Maths"></Subject>
</teach>
</Lecturer>
但是当我试图表达这句话时我遇到了一个问题: Bob是学生,如果Bob有5只狗,那么他至少有1只猫。。
你能告诉我一些建议吗?答案 0 :(得分:14)
您可以使用一般子类公理在OWL中表示一些相当复杂的条件句。我们来看几个例子。如果你想尝试一些更简单的东西,请说
Students with at least five dogs have at least one cat.
这是量化条件的缩写“对于所有x,如果 x是一个至少有五只狗的学生,那么 x至少有一只猫,你可以使用
在OWL中执行此操作(Student and hasPet min 5 Dog) subClassOf (hasPet some Cat)
这些都是匿名类表达式,但您可以定义一些等效类来使事情变得更简单:
StudentWithAtLeastFiveDogs equivalentClass (Student and hasPet min 5 Dogs)
CatOwner equivalentClass (hasPet some Cat)
StudentWithAtLeastFiveDogs subClassOf CatOwner
现在,你的例子是 Bob是学生,如果Bob有5只狗,那么他至少有1只猫。那里有两个句子。第一个很容易用
编码Bob a Student
第二个有点复杂。你说鲍勃是这类东西的成员,如果他们至少有五只狗,他们至少有一只猫。 (材料)条件“如果P则Q”在逻辑上等同于“(不是P)或Q”的分离。所以我们说Bob是不至少有五个点或者做至少有一只猫的那类东西的成员。该类的表达式是
(not (hasPet min 5 Dog)) or (hasPet some Cat)
现在我们对鲍勃的了解是
Bob a Student
Bob a (not (hasPet min 5 Dog)) or (hasPet some Cat)
您可以为该匿名类表达式定义一个等效类,但我怀疑它在大多数语言中都会很自然地呈现。这是包含关于Bob的知识的本体论(在N3 format中):
@prefix : <http://www.example.com/example#> .
@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#> .
<http://www.example.com/example>
a owl:Ontology .
:Cat a owl:Class .
:Student
a owl:Class .
:Dog a owl:Class .
:hasPet
a owl:ObjectProperty .
:Bob a :Student , owl:NamedIndividual ;
a [ a owl:Class ;
owl:unionOf ([ a owl:Class ;
owl:complementOf
[ a owl:Restriction ;
owl:minQualifiedCardinality
"5"^^xsd:nonNegativeInteger ;
owl:onClass :Dog ;
owl:onProperty :hasPet
]
] [ a owl:Restriction ;
owl:onProperty :hasPet ;
owl:someValuesFrom :Cat
])
] .
这种方法可用于数据类型属性及其值的限制。例如,要说“如果鲍勃体重至少60公斤,那么他至少180厘米高”,我们可以说鲍勃是一类东西,如果它们的重量至少为60公斤,那么它们至少是180厘米高,或相当于,不重量至少60公斤,或至少180厘米高的东西。在曼彻斯特语法中,类表达式看起来像
(not (hasWeight some int[>= 60])) or (hasHeight some int[>= 180])
本体的N3序列化的相关部分是:
:Bob a [ a owl:Class ;
owl:unionOf ([ a owl:Class ;
owl:complementOf
[ a owl:Restriction ;
owl:onProperty :hasWeight ;
owl:someValuesFrom
[ a rdfs:Datatype ;
owl:onDatatype xsd:int ;
owl:withRestrictions
([ xsd:minInclusive 60
])
]
]
] [ a owl:Restriction ;
owl:onProperty :hasHeight ;
owl:someValuesFrom
[ a rdfs:Datatype ;
owl:onDatatype xsd:int ;
owl:withRestrictions
([ xsd:minInclusive 180
])
]
])
] .
答案 1 :(得分:3)
这是Attempto Controlled English (ACE)中的文字:
Bob is a student. If Bob has 5 dogs then Bob has at least 1 cat.
它在OWL中有这种表示形式:
ClassAssertion(
:student
:Bob
)
SubClassOf(
ObjectIntersectionOf(
ObjectOneOf(
:Bob
)
ObjectMinCardinality(
5
:have
:dog
)
)
ObjectSomeValuesFrom(
:have
:cat
)
)
可以使用ACE parser (APE)自动计算。 因此,如果您已设法用英语概念化您的语句,那么值得检查ACE解析器是否可以将其自动映射到OWL,请参阅online demo of the ACE parser。