【发布时间】:2023-04-03 02:37:01
【问题描述】:
我想对Person 类建模,该类采用xsd:string 类型的数据属性givenName。如何指定仅适用于Person 类的此属性(例如maxLength=50)的长度限制?例如,我想允许其他类使用相同的属性,并为限制选择不同的值。
【问题讨论】:
-
尝试对类和调用类本身建模,然后在此处包含代码。
标签: owl semantic-web protege4
我想对Person 类建模,该类采用xsd:string 类型的数据属性givenName。如何指定仅适用于Person 类的此属性(例如maxLength=50)的长度限制?例如,我想允许其他类使用相同的属性,并为限制选择不同的值。
【问题讨论】:
标签: owl semantic-web protege4
首先,OWL 不是一种约束语言。它的目的是根据限制来定义类,而不是为类设置限制。
但是,可以定义匿名的“基于限制”的类,并声明另一个类是这个匿名类的子类。
在曼彻斯特语法中,你可以这样写:
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)不得不说你的本体不一致:
【讨论】: