如何使用 OWL 定义的数据类型?
How are OWL defined datatypes intended to be used?
OWL2 Web Ontology 语言结构规范的 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
。到目前为止一切顺利。
但是规范说了一些我不明白的东西:
The datatypes defined by datatype definition axioms … have empty lexical spaces and therefore they must not occur in literals.
为什么 a:SSN
在这里有一个空词法 space?它是通过 xsd:pattern
facet 约束 xsd:string
的值 space 来定义的。 XSD 的第 4.3.4 pattern 部分 1.1 第 2 部分:数据类型说
… pattern is a constraint on the ·value space· of a datatype which is achieved by constraining the ·lexical space· to ·literals· which match each member of a set of ·regular expressions·.
所以我们限制了 xsd:string
的值 space,但是我们通过限制 xsd:string
的词法 space(the set of finite-length sequences of zero or more characters … that ·match· the Char production from XML) 匹配正则表达式的文字。那么为什么 OWL 规范说 a:SSN
的词法 space 是空的,而不是零个或多个字符的有限长度序列集(如 XML) 匹配正则表达式 [0-9]{3}-[0-9]{2}-[0-9]{4}
?
更实用的是,OWL 规范说
… there can be no literals of datatype 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
的声明范围推断出实际数据类型是什么以及值是否有效?
在我看来,a:SSN
在示例中有一个空词法 space,因为它本身不是“与正则匹配的零个或多个字符的有限长度序列集表达式 [0-9]{3}-[0-9]{2}-[0-9]{4}。”相反,那是 a:SSN
的定义。定义本身是通过约束 而不是 具有空词法 space 的数据类型 (xsd:string
) 做出的,这就是您引用的模式部分适用的原因.也就是说,该示例使用一种模式来约束具有非空词法 space 的数据类型,以定义具有空词法 space 的数据类型。因此,由于“不能有数据类型 a:SSN
的文字,”您必须通过使用 a:hasSSN
或断言 "123-45-6789"^^xsd:string
来推断 "123-45-6789"^^xsd:string
是 SSN ] 是 a:SSN
.
的实例
Why would a:SSN
have an empty lexical space here?
众所周知,数据类型和文字值在符号推理中很难处理。当您有符号逻辑时,例如一阶逻辑或描述逻辑,符号表示 arbitrary 集合中的 arbitrary 元素。您不需要知道符号表示什么来执行正确和完整的推理(例如,http://dbpedia.org/resource/France
可能表示任何东西,就推理者而言,这是 不可能的 约束此 IRI 以表示 FOL 或 DL 中的特定事物)。
对于文字,这是一个完全不同的故事,因为它们是量化的。它们表示 specific 集中的 specific 值。例如 "10"^^xsd:integer
表示数字“十”,仅此而已。这对推理者很重要,因为它必须理解这与 "10"^^xsd:string
所表示的不同,但与 "10.0"^^xsd:decimal
所表示的相同。这意味着无论您如何实现推理器,都必须有一部分代码专门用于处理数据类型为 IRI xsd:integer
的文字。由于这个专用代码,OWL 推理机能够推断:
<s> <o> "10"^^xsd:int .
来自:
<s> <o> "10.0"^^xsd:decimal .
如果 ontology 可以引入可用于文字的新数据类型 IRI,那么您就没有专门用于这些类型文字的代码。现在,考虑以下内容:
ex:one a rdfs:Datatype;
owl:equivalentClass [
a rdfs:Datatype ;
owl:onDatatype xsd:positiveInteger ;
owl:withRestrictions ( [ xsd:maxInclusive 1 ] )
] .
那么,给定此数据类型定义,以下内容是否应该是格式正确的文字?
"1.0"^^ex:one
你看,"1.0"
在 xsd:decimal
的词法 space 中,并映射到该数据类型中的数值“one”。值“one”也是 xsd:positiveInteger
的值 space 的一部分,但 "1.0"
不是 xsd:positiveInteger
的有效词法形式。您可能会争辩说 ex:one
只能使用 xsd:positiveInteger
的词法形式,因为它被定义为对它的限制。但问题是您随后有一个定义句法约束的语义描述(ontology 的一部分)(允许您编写具有特定数据类型 IRI 的文字的方式)。逻辑学家知道,允许一个人用他们的语义来约束语法的逻辑是恶魔般的。
由于 OWL 2 规范 ex:one
的词法 space 为空,因此可以说 ex:one
与 ex:oneD
定义如下:
ex:oneD a rdfs:Datatype;
owl:equivalentClass [
a rdfs:Datatype ;
owl:onDatatype xsd:decimal ;
owl:withRestrictions ( [ xsd:minInclusive 1 ] [ xsd:maxInclusive 1 ] )
] .
还有一点要注意:我在这里所说的只有当你考虑 OWL 2 Direct Semantics. If you consider the OWL 2 RDF-based semantics 时才有效,然后还有其他事情需要考虑。特别是,在基于RDF的语义中,ex:one
不一定与ex:oneD
相同。它们可能是恰好具有相同值的不同数据类型 space.
关于您的其他问题:
So why does the OWL spec say that the lexical space of a:SSN
is empty, rather than the the set of finite-length sequences of zero or more characters (as defined in XML) that match the regular expression [0-9]{3}-[0-9]{2}-[0-9]{4}
?
在这里,您正在考虑 xsd:string
数据类型,其中值 space 和词法 space 相同。词法到值的映射是身份。所以看起来会有一种简单的方法来允许数据类型 IRI 用于文字。但是请考虑我之前向您展示的更广泛的问题。
So does that mean that a:SSN
cannot be used as follows?
完全正确。
If so, how is one supposed to use the a:SSN
datatype?
您可以使用以这种方式定义的数据类型作为 属性 的范围,例如,或 allValuesFrom
或 someValuesFrom
限制。但是,当谈到附加到实例的具体值时,您必须使用 OWL 2 个推理机本身支持的数据类型,正如您在上一个代码片段中所建议的那样。
However, when it comes to concrete values attached to instances, you have to use the datatypes that are natively supported by OWL 2 reasoners, as you suggest in your last code snippet.
否则,为您的应用程序增强推理器的功能。但是,当数据由 'generic' OWL 推理机处理时,不要指望这些功能可用。
OWL2 Web Ontology 语言结构规范的 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
。到目前为止一切顺利。
但是规范说了一些我不明白的东西:
The datatypes defined by datatype definition axioms … have empty lexical spaces and therefore they must not occur in literals.
为什么 a:SSN
在这里有一个空词法 space?它是通过 xsd:pattern
facet 约束 xsd:string
的值 space 来定义的。 XSD 的第 4.3.4 pattern 部分 1.1 第 2 部分:数据类型说
… pattern is a constraint on the ·value space· of a datatype which is achieved by constraining the ·lexical space· to ·literals· which match each member of a set of ·regular expressions·.
所以我们限制了 xsd:string
的值 space,但是我们通过限制 xsd:string
的词法 space(the set of finite-length sequences of zero or more characters … that ·match· the Char production from XML) 匹配正则表达式的文字。那么为什么 OWL 规范说 a:SSN
的词法 space 是空的,而不是零个或多个字符的有限长度序列集(如 XML) 匹配正则表达式 [0-9]{3}-[0-9]{2}-[0-9]{4}
?
更实用的是,OWL 规范说
… there can be no literals of datatype
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
的声明范围推断出实际数据类型是什么以及值是否有效?
在我看来,a:SSN
在示例中有一个空词法 space,因为它本身不是“与正则匹配的零个或多个字符的有限长度序列集表达式 [0-9]{3}-[0-9]{2}-[0-9]{4}。”相反,那是 a:SSN
的定义。定义本身是通过约束 而不是 具有空词法 space 的数据类型 (xsd:string
) 做出的,这就是您引用的模式部分适用的原因.也就是说,该示例使用一种模式来约束具有非空词法 space 的数据类型,以定义具有空词法 space 的数据类型。因此,由于“不能有数据类型 a:SSN
的文字,”您必须通过使用 a:hasSSN
或断言 "123-45-6789"^^xsd:string
来推断 "123-45-6789"^^xsd:string
是 SSN ] 是 a:SSN
.
Why would
a:SSN
have an empty lexical space here?
众所周知,数据类型和文字值在符号推理中很难处理。当您有符号逻辑时,例如一阶逻辑或描述逻辑,符号表示 arbitrary 集合中的 arbitrary 元素。您不需要知道符号表示什么来执行正确和完整的推理(例如,http://dbpedia.org/resource/France
可能表示任何东西,就推理者而言,这是 不可能的 约束此 IRI 以表示 FOL 或 DL 中的特定事物)。
对于文字,这是一个完全不同的故事,因为它们是量化的。它们表示 specific 集中的 specific 值。例如 "10"^^xsd:integer
表示数字“十”,仅此而已。这对推理者很重要,因为它必须理解这与 "10"^^xsd:string
所表示的不同,但与 "10.0"^^xsd:decimal
所表示的相同。这意味着无论您如何实现推理器,都必须有一部分代码专门用于处理数据类型为 IRI xsd:integer
的文字。由于这个专用代码,OWL 推理机能够推断:
<s> <o> "10"^^xsd:int .
来自:
<s> <o> "10.0"^^xsd:decimal .
如果 ontology 可以引入可用于文字的新数据类型 IRI,那么您就没有专门用于这些类型文字的代码。现在,考虑以下内容:
ex:one a rdfs:Datatype;
owl:equivalentClass [
a rdfs:Datatype ;
owl:onDatatype xsd:positiveInteger ;
owl:withRestrictions ( [ xsd:maxInclusive 1 ] )
] .
那么,给定此数据类型定义,以下内容是否应该是格式正确的文字?
"1.0"^^ex:one
你看,"1.0"
在 xsd:decimal
的词法 space 中,并映射到该数据类型中的数值“one”。值“one”也是 xsd:positiveInteger
的值 space 的一部分,但 "1.0"
不是 xsd:positiveInteger
的有效词法形式。您可能会争辩说 ex:one
只能使用 xsd:positiveInteger
的词法形式,因为它被定义为对它的限制。但问题是您随后有一个定义句法约束的语义描述(ontology 的一部分)(允许您编写具有特定数据类型 IRI 的文字的方式)。逻辑学家知道,允许一个人用他们的语义来约束语法的逻辑是恶魔般的。
由于 OWL 2 规范 ex:one
的词法 space 为空,因此可以说 ex:one
与 ex:oneD
定义如下:
ex:oneD a rdfs:Datatype;
owl:equivalentClass [
a rdfs:Datatype ;
owl:onDatatype xsd:decimal ;
owl:withRestrictions ( [ xsd:minInclusive 1 ] [ xsd:maxInclusive 1 ] )
] .
还有一点要注意:我在这里所说的只有当你考虑 OWL 2 Direct Semantics. If you consider the OWL 2 RDF-based semantics 时才有效,然后还有其他事情需要考虑。特别是,在基于RDF的语义中,ex:one
不一定与ex:oneD
相同。它们可能是恰好具有相同值的不同数据类型 space.
关于您的其他问题:
So why does the OWL spec say that the lexical space of
a:SSN
is empty, rather than the the set of finite-length sequences of zero or more characters (as defined in XML) that match the regular expression[0-9]{3}-[0-9]{2}-[0-9]{4}
?
在这里,您正在考虑 xsd:string
数据类型,其中值 space 和词法 space 相同。词法到值的映射是身份。所以看起来会有一种简单的方法来允许数据类型 IRI 用于文字。但是请考虑我之前向您展示的更广泛的问题。
So does that mean that
a:SSN
cannot be used as follows?
完全正确。
If so, how is one supposed to use the
a:SSN
datatype?
您可以使用以这种方式定义的数据类型作为 属性 的范围,例如,或 allValuesFrom
或 someValuesFrom
限制。但是,当谈到附加到实例的具体值时,您必须使用 OWL 2 个推理机本身支持的数据类型,正如您在上一个代码片段中所建议的那样。
However, when it comes to concrete values attached to instances, you have to use the datatypes that are natively supported by OWL 2 reasoners, as you suggest in your last code snippet.
否则,为您的应用程序增强推理器的功能。但是,当数据由 'generic' OWL 推理机处理时,不要指望这些功能可用。