RDFS 蕴含制度不一致
Inconsistency in RDFS entailment regime
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 蕴含制度于 2013 年 3 月标准化,基于 RDF Semantics from the 2004 standard (which I will refer to as RDF 1.0). In RDF 1.0, RDFS entailment does not impose that datatype URIs are interpreted as datatypes, but it assigns a special semantics to rdf:XMLLiteral
and literals that have this datatype URI. Other literals are not constrained in any ways by their datatype URIs, therefore xsd:boolean
, for instance, doesn't influence the consistency in RDFS entailment. In fact, RDF entailment imposes the special treatment of rdf:XMLLiteral
,它延续到 RDFS 蕴含。
为了找到由于数据类型引起的额外不一致,您必须考虑另一种蕴含机制,例如 D-entailment 或 OWL。在 RDF 1.0 中,D-entailment 被定义为 RDFS 的扩展,因此 RDFS 中没有“validating common datatypes”。 这应该可以回答您的第二个问题。
此外,"<"^^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 semantics. D-entailment is no longer an extension of RDFS entailment. It is the other way around: RDFS entailment is defined with respect to a set D of recognized datatype IRIs。这意味着 RDFS 蕴涵不再是一个单一的蕴涵机制,而是一个蕴涵机制家族,由 D 参数化。在最简单的例子中,RDFS 蕴涵必须只识别 xsd:string
和 rdf:langString
,这意味着有仍然可以不一致,因为并非所有 UNICODE 字符串都是有效的 XSD 字符串。此外,RDF 1.1 更改了错误类型文字的解释。在 RDF 1.1 语义中,错误类型的文字不表示任何内容。这意味着您甚至不能谈论它们。只要 RDF 图中存在错误类型的文字,该图就会不一致。因此:
<s> <p> "\u0000"^^xsd:string .
在 RDFS 1.1 蕴含制度中不一致。 这应该可以回答您的第三个问题。
关于你最后一个问题,我不知道。但是,我非常有信心地相信,无论是 2004 版还是 2014 版,现有工具都无法正确且完全地实现 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 蕴含制度于 2013 年 3 月标准化,基于 RDF Semantics from the 2004 standard (which I will refer to as RDF 1.0). In RDF 1.0, RDFS entailment does not impose that datatype URIs are interpreted as datatypes, but it assigns a special semantics to rdf:XMLLiteral
and literals that have this datatype URI. Other literals are not constrained in any ways by their datatype URIs, therefore xsd:boolean
, for instance, doesn't influence the consistency in RDFS entailment. In fact, RDF entailment imposes the special treatment of rdf:XMLLiteral
,它延续到 RDFS 蕴含。
为了找到由于数据类型引起的额外不一致,您必须考虑另一种蕴含机制,例如 D-entailment 或 OWL。在 RDF 1.0 中,D-entailment 被定义为 RDFS 的扩展,因此 RDFS 中没有“validating common datatypes”。 这应该可以回答您的第二个问题。
此外,"<"^^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 semantics. D-entailment is no longer an extension of RDFS entailment. It is the other way around: RDFS entailment is defined with respect to a set D of recognized datatype IRIs。这意味着 RDFS 蕴涵不再是一个单一的蕴涵机制,而是一个蕴涵机制家族,由 D 参数化。在最简单的例子中,RDFS 蕴涵必须只识别 xsd:string
和 rdf:langString
,这意味着有仍然可以不一致,因为并非所有 UNICODE 字符串都是有效的 XSD 字符串。此外,RDF 1.1 更改了错误类型文字的解释。在 RDF 1.1 语义中,错误类型的文字不表示任何内容。这意味着您甚至不能谈论它们。只要 RDF 图中存在错误类型的文字,该图就会不一致。因此:
<s> <p> "\u0000"^^xsd:string .
在 RDFS 1.1 蕴含制度中不一致。 这应该可以回答您的第三个问题。
关于你最后一个问题,我不知道。但是,我非常有信心地相信,无论是 2004 版还是 2014 版,现有工具都无法正确且完全地实现 RDFS 蕴含。