我正在查看Freebase数据转储中包含的一些三元组,其中一些日期时间如下所示:
"T12:00"^^<http://www.w3.org/2001/XMLSchema#dateTime>
一些三重商店可以吸收,但其他商店不吸收。
那么,这是一个有效的dateTime吗?如果是这样,为什么它有效?
答案 0 :(得分:6)
它不是一个有效的xsd:dateTime,但它是一个语法上有效的RDF文字术语,但是在语义上不一致。
首先,让我们看看为什么T12:00
不在xsd:dateTime的词法空间中。标准xsd:dateTime说:
dateTime的词汇空间由有限长度的序列组成 表格中的字符:
'-'? yyyy '-' mm '-' dd 'T' hh ':' mm ':' ss ('.' s+)? (zzzzzz)?
T12:00
匹配其中的一部分,但它缺少年,月,日和第二部分。
但是,作为RobV pointed out,RDF文字术语在语法上仍然有效,即使词法形式不在数据类型的词法空间中。在RDF 1.1 Concepts and Abstract Syntax中,我们有这个(注2.b):
3.3 Literals
RDF图中的文字由两个或三个元素组成:
- 一个词法形式,是一个Unicode字符串,应该是普通形式C,
- 数据类型IRI ,是一个标识数据类型的IRI,用于确定词法表单如何映射到文字值,
- 当且仅当数据类型IRI为
http://www.w3.org/1999/02/22-rdf-syntax-ns#langString
时,非空 由[BCP47]定义的语言标签。必须是语言标签 根据[BCP47]第2.2.9节的规定。...与文字相关联的 文字值 是:
- 如果文字是一个语言标记的字符串,那么文字值是由其词法形式和语言标签组成的一对,其中 顺序。
- 如果文字的数据类型IRI在已识别的数据类型IRI集合中,则让 d 成为数据类型IRI的指示对象。
- 一个。如果文字的词汇形式在 d 的词汇空间中,那么文字值是应用词汇 - 值的结果 将 d 映射到词汇形式。
- 湾否则,文字是错误的类型,没有文字值可以与文字相关联。这种情况产生语义 不一致但不是语法格式错误。实现 必须接受错误的文字并从中生成RDF图。 当遇到不良类型时,实现可能会产生警告 文字。
- 如果文字的数据类型IRI不在已识别的数据类型IRI集中,则文字值不是由此定义的 说明书
醇>
因此,"T12:00"^^<http://www.w3.org/2001/XMLSchema#dateTime>
是一个RDF字面术语,但它是一个语义上不一致的术语。仅这一点不会使Freebase转储无效RDF。实现必须处理它并从中创建RDF图,但可以警告它。这意味着RDF解析器必须能够处理它。我不确定三重存储是否算作“实现”。如果是,那么它应该存储结果值。如果不是,那么我猜它只能存储只有语义上一致的文字的RDF图。
答案 1 :(得分:3)
正如约书亚所说它不是有效的xsd:dateTime
但是它仍然是有效的RDF文字
RDF文字由词汇值 - T12:00
- 和可选的数据类型/语言说明符组成。在您的情况下,它具有xsd:dateTime
因此,您在商店之间看到的行为差异取决于商店是否对文字的词法形式强制执行数据类型限制,即它们是否要求xsd:
数据类型的词汇值与所列出的规则相匹配在XML Schema Part 2: Datatypes
强制执行此操作的商店仅允许有效值,而不允许混合或有效和无效值的商店。一些严格的商店可能有选项允许无效值,在这种情况下,请与您的供应商/社区核实是否是这种情况。