RDFS蕴涵机制的不一致性



SPARQL 1.1蕴因机制的文档断言有可能产生一个不一致的图,而且存在一个单一的不一致源: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月标准化,它基于2004年标准的RDF语义(我将其称为RDF 1.0)。在RDF 1.0中,RDFS蕴涵并没有强制要求将数据类型URI解释为数据类型,但它为具有该数据类型URI的rdf:XMLLiteral和文字分配了特殊的语义。其他文字不以任何方式受其数据类型uri的约束,因此,例如xsd:boolean,不会影响RDFS隐含的一致性。实际上,RDF蕴涵对rdf:XMLLiteral进行了特殊处理,并延续到RDFS蕴涵。

为了发现由于数据类型导致的额外不一致性,您必须考虑另一种蕴涵机制,如d蕴涵或OWL。在RDF 1.0中,d蕴涵被定义为RDFS的扩展,因此没有"验证公共数据类型"。RDFS。

此外,"<"^^rdf:XMLLiteral是一个错误类型的XML文字,因此它不能被解释为XML值,并且根据RDF蕴蕴性的约束,它的解释不能是类型rdf:XMLLiteral,也就是说,更正式地说,由文字"<"^^rdf:XMLLiteral的解释和URIrdf:XMLLiteral的解释组成的对(IL("<"^^rdf:XMLLiteral), is (rdf:XMLLiteral))不能在属性rdf:type的扩展IEXT(is (rdf:type))中。此外,类型不良的XML文字不能等于任何文字值,其中必须包括普通文字值(UNICODE字符串和语言标记的字符串),因此它不能表示字符串"<"。原因是我们不希望不良类型的字面量表示与某些格式良好的字面量相同的值。

这应该可以回答你的第一个问题。2014年,RDF 1.1进行了标准化,更新了语义。d -蕴涵不再是RDFS蕴涵的延伸。相反:RDFS蕴涵是根据可识别的数据类型IRIs的集合D定义的。这意味着RDFS蕴意不再是单一的蕴意制度,而是一系列蕴意制度,由d参数化。在最简单的实例中,RDFS蕴意必须只识别xsd:stringrdf:langString,这意味着仍然可能存在不一致,因为并非所有UNICODE字符串都是有效的XSD字符串。另外,RDF 1.1改变了对病态文字的解释。在RDF 1.1语义中,类型不良的字面量不表示任何东西。这意味着你甚至不能谈论它们。只要RDF图中有一个类型错误的文字,这个图就不一致。因此:

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

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

关于你的最后一个问题,我不知道。然而,我确实相信,有相当高的信心,没有现有的工具正确和完整地实现RDFS的需求,无论是在2004年的版本还是2014年的版本。

最新更新