【发布时间】:2021-03-29 18:27:50
【问题描述】:
OWL 2 Web Ontology Language Structural Specification 的9.4 Datatype Definitions 部分展示了如何定义自定义数据类型,并给出以下示例:
a:SSN rdf:type rdfs:Datatype .
a:SSN owl:equivalentClass [
rdf:type rdfs:Datatype ;
owl:onDatatype xsd:string ;
owl:withRestrictions (
[ xsd:pattern "[0-9]{3}-[0-9]{2}-[0-9]{4}" ]
)
] .
a:hasSSN rdfs:range a:SSN .
因此,我们在这里通过xsd:pattern facet 限制xsd:string 数据类型来定义一个新的数据类型a:SSN。到目前为止一切顺利。
但是规范说明了一些我不明白的内容:
由数据类型定义公理定义的数据类型......具有空的词法空间,因此它们不得出现在文字中。
为什么a:SSN 在这里有一个空的词法空间?它是通过xsd:pattern facet 约束xsd:string 的值空间来定义的。 XSD 1.1 第 2 部分的 4.3.4 pattern 部分:数据类型说明了这一点
... pattern 是对数据类型的·值空间· 的约束,通过将·词汇空间· 约束为匹配一组·正则表达式· 的每个成员的·文字空间来实现.
所以我们限制了xsd:string 的值空间,但是我们通过将xsd:string (the set of finite-length sequences of zero or more characters … that ·match· the Char production from XML) 的词法空间限制为与正则表达式匹配的文字来做到这一点。那么为什么 OWL 规范说 a:SSN 的词法空间是空的,而不是匹配正则表达式 [0-9]{3}-[0-9]{2}-[0-9]{4} 的零个或多个字符(如 XML 中定义)的有限长度序列集?
OWL 规范更务实地说
... 不能有数据类型为
a:SSN的文字。
那么这是否意味着a:SSN不能如下使用?
a:Jane a:hasSSN "123-45-6789"^^a:SSN .
如果是这样,应该如何使用a:SSN 数据类型?是应该写的想法吗
a:Jane a:hasSSN "123-45-6789"^^xsd:string .
并从a:hasSSN 的声明范围推断实际数据类型是什么,从而推断值是否有效?
【问题讨论】: