RDFS 蕴涵制度不一致

问题描述

SPARQL 1.1 Entailment Regimes 的文档断言有可能产生不一致的图,而且不一致的单一来源:rdf:XMLLiteral

ex:a ex:b "<"^^rdf:XMLLiteral .
ex:b rdfs:range rdf:XMLLiteral .

理由是 < 不是有效的 XML 片段,因此 "<"^^rdf:XMLLiteral 必须被解释为不在 rdfs:Literal 中的东西(显然)。这似乎有些随意和复杂,所以我有以下问题:

  • 为什么不能将 "<"^^rdf:XMLLiteral 简单地解释为 "<"?它不是 XML 文字是有道理的,但为什么它根本不能是文字
  • 为什么只有 rdf:XMLLiteral 而不是 xsd:boolean 或其他数据类型?如果我们开始验证常见数据类型,就会发现许多不一致之处。
  • 从 RDF 1.1 开始,我理解 rdf:XMLLiteral 是非规范的。这是否意味着对 RDFS 的新解释总是一致的?
  • 此规则是否在实践中实施过,是否有一些 SPARQL 端点可能(仍然)拒绝 RDFS 不一致的图?

解决方法

SPARQL 1.1 Entailment 机制于 2013 年 3 月标准化,基于 2004 年标准(我将其称为 RDF 1.0)中的 RDF Semantics。在 RDF 1.0 中,RDFS 蕴涵不强制要求将数据类型 URI 解释为数据类型,但它为 rdf:XMLLiteral 和具有此数据类型 URI 的文字分配特殊语义。其他文字不受其数据类型 URI 的任何限制,因此,例如,xsd:boolean 不会影响 RDFS 蕴涵中的一致性。事实上,RDF entailment imposes the special treatment of rdf:XMLLiteral,它进行到 RDFS 蕴涵。

为了发现由于数据类型引起的其他不一致,您必须考虑另一种蕴含机制,如 D-entailment 或 OWL。在 RDF 1.0 中,D-entailment 被定义为 RDFS 的扩展,因此 RDFS 中没有“验证通用数据类型”。 这应该可以回答你的第二个问题。

此外,"<"^^rdf:XMLLiteral 是错误类型的 XML 文字,因此不能将其解释为 XML 值,并且根据 RDF 蕴涵的约束,它的解释不能属于 rdf:XMLLiteral 类型,即更正式地说,是一对 (IL("<"^^rdf:XMLLiteral),IS(rdf:XMLLiteral)),由文字 "<"^^rdf:XMLLiteral 的解释和 URI rdf:XMLLiteral 的解释组成,不得在属性 rdf:type 的扩展 IEXT(IS(rdf:type)) 中。此外,错误类型的 XML 文字不能等于任何文字值,它必须包括纯文字值(UNICODE 字符串和语言标记字符串),因此它不能表示字符串 "<"。原因是我们不希望错误类型的文字表示与某些格式良好的文字相同的值。 这应该可以回答您的第一个问题。

2014 年,RDF 1.1 was standardised with an updated semanticsD-entailment 不再是 RDFS entailment 的扩展。反之亦然:RDFS 蕴涵是相对于recognized datatype IRIs 的集合 D 定义的。这意味着 RDFS 蕴涵不再是单一的蕴涵体制,而是由 D 参数化的一系列蕴涵体制。在最简单的例子中,RDFS 蕴涵必须只识别 xsd:stringrdf:langString,这意味着有仍然可能存在不一致,因为并非所有 UNICODE 字符串都是有效的 XSD 字符串。此外,RDF 1.1 更改了错误类型文字的解释。在 RDF 1.1 Semantics 中,类型错误的文字不表示任何内容。这意味着你甚至不能谈论它们。只要 RDF 图中存在类型错误的文字,该图就会不一致。因此:

<s>  <p>  "\u0000"^^xsd:string .

在 RDFS 1.1 蕴涵制度中不一致。 这应该可以回答你的第三个问题。

关于你的最后一个问题,我不知道。但是,我确实以相当高的信心相信,无论是 2004 版还是 2014 版,现有工具都无法正确且完整地实现 RDFS 蕴涵。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...