我有一个类,Person。有一个数据类型属性Profession ,其Person的值为{"Composer","Singer","Conductor"}。我有另一个名为Piece的类和一个对象属性compositionBy。我希望composerBy的范围是所有职业为“作曲家”的人?我如何在 OWL 中做到这一点,以及如何使用 Protégé 表达该 OWL?
2 回答
您的第一个描述并不难表达为 DL 公理(尽管,我将使用名称hasProfession以与其他属性名称更加一致,composerBy)。
有一个数据类型属性 Profession,其 Person 的值为 {"Composer","Singer","Conductor"}。
人 ⊑ 仅限职业 {“作曲家”、“歌手”、“指挥家”}
第二个也不太棘手:
我有另一个名为 Piece 的类,以及一个对象属性composedBy。我希望composerBy的范围是所有职业为“作曲家”的人?
现在,你需要在这里更清楚。您可能意味着composerBy 的范围是“所有职业是'Composer' 的人”,即,任何commitBy语句的值都是一个Peron,其职业是'Composer'。但是,您提到了另一个类 Piece,所以我认为您要问的是如何说如果Piece是由某物组成的,那么该物就是一个职业是“作曲家”的人。那将是这个公理:
Piece ⊑ ∀composedBy.(人⊓有职业值“作曲家”)
如果你想复制和粘贴本体,这里是:
<rdf:RDF
xmlns="http://stackoverflow.com/q/20920232/1281433/composers#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
<owl:Ontology rdf:about="http://stackoverflow.com/q/20920232/1281433/composers"/>
<owl:Class rdf:about="http://stackoverflow.com/q/20920232/1281433/composers#Piece">
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty>
<owl:ObjectProperty rdf:about="http://stackoverflow.com/q/20920232/1281433/composers#composedBy"/>
</owl:onProperty>
<owl:allValuesFrom>
<owl:Class>
<owl:intersectionOf rdf:parseType="Collection">
<owl:Class rdf:about="http://stackoverflow.com/q/20920232/1281433/composers#Person"/>
<owl:Restriction>
<owl:onProperty>
<owl:DatatypeProperty rdf:about="http://stackoverflow.com/q/20920232/1281433/composers#hasProfession"/>
</owl:onProperty>
<owl:hasValue>Composer</owl:hasValue>
</owl:Restriction>
</owl:intersectionOf>
</owl:Class>
</owl:allValuesFrom>
</owl:Restriction>
</rdfs:subClassOf>
</owl:Class>
<owl:Class rdf:about="http://stackoverflow.com/q/20920232/1281433/composers#Person">
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource="http://stackoverflow.com/q/20920232/1281433/composers#hasProfession"/>
<owl:allValuesFrom>
<rdfs:Datatype>
<owl:oneOf>
<rdf:List>
<rdf:first>Composer</rdf:first>
<rdf:rest>
<rdf:List>
<rdf:first>Conductor</rdf:first>
<rdf:rest>
<rdf:List>
<rdf:first>Singer</rdf:first>
<rdf:rest rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#nil"/>
</rdf:List>
</rdf:rest>
</rdf:List>
</rdf:rest>
</rdf:List>
</owl:oneOf>
</rdfs:Datatype>
</owl:allValuesFrom>
</owl:Restriction>
</rdfs:subClassOf>
</owl:Class>
</rdf:RDF>
将范围定义为composedBy
范围Person and some Profession {Composer}
所说的是composerBy 的值将是一个Person 并且它将具有一个Profession 属性,其可能的值只有Composer - 这是一个HasValue 限制。