如何在 Protege 中为 类 断言数据 属性?
How assert data property for classes in Protege?
我想建模 Person
class,它采用 xsd:string
类型的数据 属性 givenName
。如何指定仅适用于 Person
class 的 属性(比如 maxLength=50
)的长度限制?例如,我想允许其他class使用相同的属性并选择不同的限制值。
首先,OWL不是约束语言。它的目的是根据限制定义 classes,而不是为 classes 设置限制。
但是,可以定义匿名“restriction-based”class 并声明另一个 class 是这个匿名 class 的子class。
在曼彻斯特语法中,你可以这样写:
Class: Person
SubClassOf: givenName only xsd:string[maxLength 5]
在函数语法中:
SubClassOf(
:Person
DataAllValuesFrom(
:givenName
DatatypeRestriction(
xsd:string
xsd:maxLength "5"^^xsd:string
)
)
)
在 Turtle 语法中:
:Person rdfs:subClassOf
[ rdf:type owl:Restriction ;
owl:onProperty :givenName ;
owl:allValuesFrom
[ rdf:type rdfs:Datatype ;
owl:onDatatype xsd:string ;
owl:withRestrictions ( [ xsd:maxLength "5"^^xsd:string ] )
]
] .
下图是Protégé中的“Class description”视图:
现在假设您声明
Individual: He
Types: Person
Facts: givenName "Alexander"^^xsd:string
然后推理者(例如 HermiT)不得不说你的 ontology 不一致:
我想建模 Person
class,它采用 xsd:string
类型的数据 属性 givenName
。如何指定仅适用于 Person
class 的 属性(比如 maxLength=50
)的长度限制?例如,我想允许其他class使用相同的属性并选择不同的限制值。
首先,OWL不是约束语言。它的目的是根据限制定义 classes,而不是为 classes 设置限制。
但是,可以定义匿名“restriction-based”class 并声明另一个 class 是这个匿名 class 的子class。
在曼彻斯特语法中,你可以这样写:
Class: Person
SubClassOf: givenName only xsd:string[maxLength 5]
在函数语法中:
SubClassOf(
:Person
DataAllValuesFrom(
:givenName
DatatypeRestriction(
xsd:string
xsd:maxLength "5"^^xsd:string
)
)
)
在 Turtle 语法中:
:Person rdfs:subClassOf
[ rdf:type owl:Restriction ;
owl:onProperty :givenName ;
owl:allValuesFrom
[ rdf:type rdfs:Datatype ;
owl:onDatatype xsd:string ;
owl:withRestrictions ( [ xsd:maxLength "5"^^xsd:string ] )
]
] .
下图是Protégé中的“Class description”视图:
现在假设您声明
Individual: He
Types: Person
Facts: givenName "Alexander"^^xsd:string
然后推理者(例如 HermiT)不得不说你的 ontology 不一致: