我与基本OWL工作,这是很容易表示一些简单的句子,如“孙悟空是个讲师,他教数学”。
例如:
<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有5只狗,那么他至少有1猫咪。 。
你能告诉我一些建议吗?
您可以使用代表一般子类公理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有5只狗,那么他至少有1猫咪。 有两句话在那里。 第一容易被编码
Bob a Student
第二个是一个比较复杂一点。 你说Bob是类的东西,如果他们至少有五只狗中的一员,他们拥有至少一只猫。 A(材料)有条件的“若P则Q”是逻辑上等同于析取“(不是P)或Q”。 因此,我们说,鲍勃是类的东西,要么不至少有五个点或那些至少有一个猫的成员。 对于该类表达是
(not (hasPet min 5 Dog)) or (hasPet some Cat)
现在,我们对鲍勃的知识是,
Bob a Student
Bob a (not (hasPet min 5 Dog)) or (hasPet some Cat)
您可以定义为匿名类表达的等价类,但我怀疑它会在大多数语言很自然地呈现。 下面是含有鲍勃知识本体的样子(在N3格式 ):
@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
])
] .
同样的方法也可以用于数据类型的属性和它们的值的限制。 例如,说“如果Bob至少重60公斤,那么他至少是身高180cm,”我们可以说,鲍勃是一类事物的元素,如果他们体重至少60千克,那么他们至少身高180cm,或等价地,类的东西,要么不重量至少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
])
]
])
] .
这是一个文本Attempto受控英语(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解析器(APE) 。 所以,如果你已成功地概念化的声明以英文,这是值得检查,如果该ACE解析器可以自动映射它OWL,看到的ACE解析器的在线演示 。