这是一个有效的xsd:dateTime吗?如果是这样,为什么?

Kri*_*ian 4 datetime xsd freebase sparql triples

我正在查看Freebase数据转储中包含的一些三元组,并且一些日期时间如下所示:

"T12:00"^^<http://www.w3.org/2001/XMLSchema#dateTime>
Run Code Online (Sandbox Code Playgroud)

一些三重商店可以食用,但不被其他商店食用.

那么,这是一个有效的dateTime吗?如果是这样,为什么它有效?

Jos*_*lor 6

它不是一个有效的xsd:dateTime,但它是一个语法上有效的RDF文字术语,但是在语义上不一致.

首先,让我们看看为什么T12:00不在xsd:dateTime的词法空间中.标准的 xsd:dateTime说:

dateTime的词法空间由以下形式的有限长度字符序列组成: '-'? yyyy '-' mm '-' dd 'T' hh ':' mm ':' ss ('.' s+)? (zzzzzz)?

T12:00 匹配其中的一部分,但它缺少年,月,日和第二部分.

但是,正如RobV指出的那样,RDF文字术语在语法上仍然有效,即使词法形式不在数据类型的词法空间中.在RDF 1.1概念和抽象语法中,我们有这个(注2.b):

3.3文字

字面在RDF图由两个或三个元素组成:

  • 一个词法形式,是一个Unicode字符串,应该是普通形式C,
  • 一个数据类型IRI,作为一个IRI识别确定词汇形式如何映射到一个文字值的数据类型,以及
  • 当且仅当数据类型为IRI时http://www.w3.org/1999/02/22-rdf-syntax-ns#langString,为[BCP47]定义的非空语言标记.根据[BCP47]第2.2.9节,语言标签必须是格式良好的.

...与文字相关的字面值是:

  1. 如果文字是一个语言标记的字符串,那么文字值是一个由词法形式和语言标记组成的对,按顺序排列.
  2. 如果文字的数据类型IRI在已识别的数据类型IRI的集合中,则令d为数据类型IRI的指示对象.
    • 一个.如果文字的词汇形式是在词法空间d,则该文字值是应用的词汇-到值的映射的结果d的词汇形式.
    • 湾 否则,文字是错误的类型,没有文字值可以与文字相关联.这种情况会产生语义上的不一致,但在语法上不合理.实现必须接受错误的文字并从中生成RDF图.实现可能会在遇到错误的文字时产生警告.
  3. 如果文字的数据类型IRI不在已识别的数据类型IRI集中,则此规范未定义文字值.

因此,它"T12:00"^^<http://www.w3.org/2001/XMLSchema#dateTime>是一个RDF字面术语,但它是一个语义上不一致的术语.仅这一点不会使Freebase转储无效RDF.实现必须处理它并从中创建RDF图,但可以警告它.这意味着RDF解析器必须能够处理它.我不确定三重存储是否算作"实现".如果是,那么它应该存储结果值.如果不是,那么我猜它只能存储只具有语义一致文字的RDF图.