如何使用 OWL 定义的数据类型?

如何解决如何使用 OWL 定义的数据类型?

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 .

因此,我们在这里通过 a:SSN 方面限制 xsd:string 数据类型来定义新的数据类型 xsd:pattern。到目前为止一切顺利。

但是规范说了一些我不明白的事情:

由数据类型定义公理定义的数据类型......有空的词法空间,因此它们不能出现在文字中。

为什么 a:SSN在这里一个空的词法空间?它是通过通过 xsd:string 面约束 xsd:pattern 的值空间来定义的。 XSD 1.1 第 2 部分的 4.3.4 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 的词法空间是空的,而不是与正则表达式 {{1} 匹配的零个或多个字符(如 XML 中定义的)的有限长度序列的集合}?

更实用地说,OWL 规范说

... 不能有数据类型为 [0-9]{3}-[0-9]{2}-[0-9]{4}文字

那么这是否意味着 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:SSN 会在这里有一个空的词法空间?

众所周知,数据类型和文字值在符号推理中很难处理。当您有符号逻辑时,例如一阶逻辑或描述逻辑,符号表示任意集合中的任意元素。你不需要知道符号代表什么来执行正确和完整的推理(例如,http://dbpedia.org/resource/France 可以表示任何东西,就推理者而言,这是不可能的 限制此 IRI 表示 FOL 或 DL 中的特定事物)。

对于文字,这是一个完全不同的故事,因为它们是量化的。它们表示特定集合中的特定值。例如 "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 .

如果本体可以引入可用于文字的新数据类型 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 的词法空间中,并映射到此数据类型中的数值“one”。值“one”也是 xsd:positiveInteger 值空间的一部分,但 "1.0" 不是 xsd:positiveInteger 的有效词法形式。您可能会争辩说 ex:one 必须只使用 xsd:positiveInteger 的词法形式,因为它被定义为它的限制。但问题是,您有一个语义描述(一个本体),它定义了一个句法约束(允许您使用特定数据类型 IRI 编写文字的方式)。逻辑学家知道,允许用语义来约束句法的逻辑是邪恶的。

由于 OWL 2 规范中 ex:one 的词法空间为空,因此可以说 ex:oneex: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 时才有效。如果您考虑 OWL 2 RDF-based semantics,那么还有其他事情需要考虑。尤其是在基于 RDF 的语义中,ex:one 不一定与 ex:oneD 相同。它们可能是恰好具有相同值空间的不同数据类型。

关于您的其他问题:

那么为什么 OWL 规范说 a:SSN 的词法空间是空的,而不是与正则表达式匹配的零个或多个字符(如 XML 中定义的)的有限长度序列的集合{ {1}}?

这里,您正在考虑 [0-9]{3}-[0-9]{2}-[0-9]{4} 数据类型,其中值空间和词法空间相同。词法到值的映射是身份。所以看起来有一种简单的方法可以允许在文字上使用数据类型 IRI。但请考虑我之前向您展示的更广泛的问题。

那么这是否意味着 xsd:string 不能如下使用?

没错。

如果是这样,应该如何使用 a:SSN 数据类型?

例如,您可以使用以这种方式定义的数据类型作为属性的范围,或者在 a:SSNallValuesFrom 限制中使用。但是,当涉及到附加到实例的具体值时,您必须使用 OWL 2 推理器本机支持的数据类型,正如您在上一个代码片段中所建议的那样。

,

在我看来,a:SSN 在示例中有一个空的词法空间,因为它本身不是“与正则表达式 [0-9] 匹配的零个或多个字符的有限长度序列的集合{3}-[0-9]{2}-[0-9]{4}。”相反,这就是 a:SSN 的定义。定义本身是通过约束具有空词法空间的数据类型 (xsd:string) 制定的,这就是您引用的模式部分适用的原因。也就是说,该示例使用模式来约束具有非空词法空间的数据类型以定义具有空词法空间的数据类型。因此,由于“不可能有数据类型为 a:SSN 的文字”,您必须通过使用 "123-45-6789"^^xsd:string 或断言 a:hasSSN 来推断 "123-45-6789"^^xsd:string 是 SSN } 是 a:SSN 的一个实例。

,

但是,当涉及到附加到实例的具体值时,您必须使用 OWL 2 推理器本机支持的数据类型,正如您在上一个代码片段中所建议的那样。

否则为您的应用程序增强推理器的功能。但是,当数据由“通用”OWL 推理器处理时,不要指望这些功能可用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?