我是RDF和OWL本体的初学者。
我试图将此图转换为OWL语法。
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
>
<!-- OWL Class Definition - Robot Position -->
<owl:Class rdf:ID="house" />
<owl:Class rdf:ID="room" />
<owl:Class rdf:ID="kitchen" />
<owl:Class rdf:ID="garden" />
<owl:Class rdf:ID="table" />
<owl:Class rdf:ID="chair" />
<owl:ObjectProperty rdf:ID="composedBy">
<rdfs:domain rdf:resource="#house"/>
<rdfs:rang rdf:resource="#room" >
</owl:ObjectProperty>
</rdf:RDF>
我不知道如何做多次使用关系的组合。 我正在考虑使用
使范围采用集合类型 (house)---composedBy---(room, kitchen, garden)
但是,我想与
使用相同的关系 (kitchen)---comoposedBy---(table, chair)
验证器发出错误,因为我使用了composBy作为ID两次。 (我现在把它删除了)
如何正确翻译此图表。
:))
答案 0 :(得分:3)
如果你想说房子必须有一个(或至少一个)厨房,并且必须有一个(或至少一个)房间,并且必须有一个(或至少一个)花园,那么unionOf这里并没有真正解决这个问题。我认为如果你有一个更通用的组件属性,并表达使用存在性限制必须保持的不同关系,而不是担心组合属性的范围。例如,你可以这么说
House⊑= 1 hasPart.Kitchen
House⊑≥2havePart.Room
House⊑⊑hasPart.Garden
说一个房子只有一个厨房,至少有两个房间,至少有一个花园。同样,你可以说有一张桌子和一把椅子
厨房⊑⊑hasPart.Chair
厨房⊑⊑hasPart.Table
在Protégé中,这看起来像是:
Turtle和RDF / XML中的RDF序列化是:
@prefix : <http://www.example.org/houses#> .
@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.org/houses>
a owl:Ontology .
:hasPart a owl:ObjectProperty .
:Table a owl:Class .
:Room a owl:Class .
:Garden a owl:Class .
:Chair a owl:Class .
:House a owl:Class ;
rdfs:subClassOf [ a owl:Restriction ;
owl:minQualifiedCardinality "2"^^xsd:nonNegativeInteger ;
owl:onClass :Room ;
owl:onProperty :hasPart
] ;
rdfs:subClassOf [ a owl:Restriction ;
owl:onProperty :hasPart ;
owl:someValuesFrom :Garden
] ;
rdfs:subClassOf [ a owl:Restriction ;
owl:onClass :Kitchen ;
owl:onProperty :hasPart ;
owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger
] .
:Kitchen a owl:Class ;
rdfs:subClassOf [ a owl:Restriction ;
owl:onProperty :hasPart ;
owl:someValuesFrom :Table
] ;
rdfs:subClassOf [ a owl:Restriction ;
owl:onProperty :hasPart ;
owl:someValuesFrom :Chair
] .
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns="http://www.example.org/houses#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
<owl:Ontology rdf:about="http://www.example.org/houses"/>
<owl:Class rdf:about="http://www.example.org/houses#Room"/>
<owl:Class rdf:about="http://www.example.org/houses#House">
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty>
<owl:ObjectProperty rdf:about="http://www.example.org/houses#hasPart"/>
</owl:onProperty>
<owl:onClass rdf:resource="http://www.example.org/houses#Room"/>
<owl:minQualifiedCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger"
>2</owl:minQualifiedCardinality>
</owl:Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource="http://www.example.org/houses#hasPart"/>
<owl:someValuesFrom>
<owl:Class rdf:about="http://www.example.org/houses#Garden"/>
</owl:someValuesFrom>
</owl:Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource="http://www.example.org/houses#hasPart"/>
<owl:onClass>
<owl:Class rdf:about="http://www.example.org/houses#Kitchen"/>
</owl:onClass>
<owl:qualifiedCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger"
>1</owl:qualifiedCardinality>
</owl:Restriction>
</rdfs:subClassOf>
</owl:Class>
<owl:Class rdf:about="http://www.example.org/houses#Chair"/>
<owl:Class rdf:about="http://www.example.org/houses#Table"/>
<owl:Class rdf:about="http://www.example.org/houses#Kitchen">
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource="http://www.example.org/houses#hasPart"/>
<owl:someValuesFrom rdf:resource="http://www.example.org/houses#Table"/>
</owl:Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource="http://www.example.org/houses#hasPart"/>
<owl:someValuesFrom rdf:resource="http://www.example.org/houses#Chair"/>
</owl:Restriction>
</rdfs:subClassOf>
</owl:Class>
</rdf:RDF>
答案 1 :(得分:0)
确实,这种composedBy
属性的范围应该是一个联合。
由于UML类模型中有两种不同的组合,您可能必须定义两个不同的OWL属性,例如houseComposedBy
和kitchenComposedBy
。
正如您在评论中所建议的那样,原则上,使用XML命名空间来获取这些不同composedBy
OWL属性的不同名称(如限定名称house:composedBy
和{{1 }})。实际上,这对应于UML属性,它们始终位于由(域)类定义的命名空间中。因此,您必须声明与具有kitchen:composedBy
属性的域的类一样多的名称空间。
编辑:我将尝试总结约书亚泰勒和我自己的两个答案。
composedBy
限制。除了这些对翻译至关重要的allValuesFrom
限制外,我们还可以定义与我们的UML类模型中定义的多重约束相对应的基数限制(如果有的话)。