XML / XSD ISODateTime 正确的格式是什么?
XML / XSD ISODateTime What is the correct format?
我正在使用一些旧的 XML/XSD 代码,这些代码要求日期采用 'ISODateTime' 格式。我尝试了多种不同的 ISO date/time 格式,即中间有 'T',但验证仍然失败。
我是不是遗漏了什么明显的东西?下面是 XML 和 XSD 片段以及错误消息。
XSD:
<xs:complexType name="MessageId">
<xs:sequence>
<xs:element name="Id" type="Max35Text"/>
<xs:element name="Credit" type="ISODateTime"/>
</xs:sequence>
</xs:complexType>
XML:
<ParentId>
<Id>unique id</Id>
<Credit>2019-09-27 04:00:00</Credit>
</ParentId> <!-- Fixed by edit -->
验证错误:
ERROR: Element '{urn:iso:std:iso:20022:tech:xsd:tsmt.017.001.03}Credit': '2019-09-27 04:00:00' is not a valid value of the atomic type '{urn:iso:std:iso:20022:tech:xsd:tsmt.017.001.03}ISODateTime'.
我可以通过将您的日期格式从命名空间 http://www.w3.org/2001/XMLSchema
更改为 xs:dateTime
来让您的 XSD 工作,在您的示例中是 2019-09-27T04:00:00
。
我没有找到 ISODateTime
的定义,但在 W3.org is a definition for date/time formats and the closest I found was xs:dateTime
described here。
因此,将您的 XML 更改为(只需添加您提到的 "T")
<?xml version="1.0" encoding="UTF-8"?>
<ParentId>
<Id>unique id</Id>
<Credit>2019-09-27T04:00:00</Credit>
</ParentId>
和这个示例 XSD
<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="MessageId">
<xs:sequence>
<xs:element name="Id" type="xs:string"/> <!-- Changed for simplicity -->
<xs:element name="Credit" type="xs:dateTime"/>
</xs:sequence>
</xs:complexType>
<xs:element name="ParentId" type="MessageId" />
</xs:schema>
将验证您的 XML。
从报错信息来看,类型ISODateTime
在namespaceurn:iso:std:iso:20022:tech:xsd:tsmt.017.001.03
中。 ISO 20022 是金融行业使用的一套标准。我不熟悉它,但我在 https://tools20022.com/apidocs/com/tools20022/repository/dict/datatype/ISODateTime.html
找到了这种数据类型的描述
该页面实际上没有给出类型的 XSD 定义,从描述中我看不出与标准 W3C 类型 xs:dateTime 有任何区别。然而,它值得对实际模式进行一些进一步的研究。它可能会对 W3C 类型施加一些限制,例如,它可能会强制使用小数秒或时区或限制允许的年份范围。
但是,您引用的验证错误是因为您在值的日期和时间部分之间有 space 而不是 "T"。
ISODateTime 定义于 https://www.iso20022.org/standardsrepository/type/ISODateTime。
它只是 xsd:dateTime 的一个子类型,具有上述定义中注明的限制。请注意有关一天开始和结束等事物的额外定义,这些定义在 xsd:dateTime 中不存在。请注意显式时间偏移的要求。这些是 xsd:dateTime.
的细微变化
XML 模式不强制执行此操作,这就是为什么当您编写带有“T”的有效 xsd:dateTime 时它起作用的原因。
我正在使用一些旧的 XML/XSD 代码,这些代码要求日期采用 'ISODateTime' 格式。我尝试了多种不同的 ISO date/time 格式,即中间有 'T',但验证仍然失败。
我是不是遗漏了什么明显的东西?下面是 XML 和 XSD 片段以及错误消息。
XSD:
<xs:complexType name="MessageId">
<xs:sequence>
<xs:element name="Id" type="Max35Text"/>
<xs:element name="Credit" type="ISODateTime"/>
</xs:sequence>
</xs:complexType>
XML:
<ParentId>
<Id>unique id</Id>
<Credit>2019-09-27 04:00:00</Credit>
</ParentId> <!-- Fixed by edit -->
验证错误:
ERROR: Element '{urn:iso:std:iso:20022:tech:xsd:tsmt.017.001.03}Credit': '2019-09-27 04:00:00' is not a valid value of the atomic type '{urn:iso:std:iso:20022:tech:xsd:tsmt.017.001.03}ISODateTime'.
我可以通过将您的日期格式从命名空间 http://www.w3.org/2001/XMLSchema
更改为 xs:dateTime
来让您的 XSD 工作,在您的示例中是 2019-09-27T04:00:00
。
我没有找到 ISODateTime
的定义,但在 W3.org is a definition for date/time formats and the closest I found was xs:dateTime
described here。
因此,将您的 XML 更改为(只需添加您提到的 "T")
<?xml version="1.0" encoding="UTF-8"?>
<ParentId>
<Id>unique id</Id>
<Credit>2019-09-27T04:00:00</Credit>
</ParentId>
和这个示例 XSD
<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="MessageId">
<xs:sequence>
<xs:element name="Id" type="xs:string"/> <!-- Changed for simplicity -->
<xs:element name="Credit" type="xs:dateTime"/>
</xs:sequence>
</xs:complexType>
<xs:element name="ParentId" type="MessageId" />
</xs:schema>
将验证您的 XML。
从报错信息来看,类型ISODateTime
在namespaceurn:iso:std:iso:20022:tech:xsd:tsmt.017.001.03
中。 ISO 20022 是金融行业使用的一套标准。我不熟悉它,但我在 https://tools20022.com/apidocs/com/tools20022/repository/dict/datatype/ISODateTime.html
该页面实际上没有给出类型的 XSD 定义,从描述中我看不出与标准 W3C 类型 xs:dateTime 有任何区别。然而,它值得对实际模式进行一些进一步的研究。它可能会对 W3C 类型施加一些限制,例如,它可能会强制使用小数秒或时区或限制允许的年份范围。
但是,您引用的验证错误是因为您在值的日期和时间部分之间有 space 而不是 "T"。
ISODateTime 定义于 https://www.iso20022.org/standardsrepository/type/ISODateTime。
它只是 xsd:dateTime 的一个子类型,具有上述定义中注明的限制。请注意有关一天开始和结束等事物的额外定义,这些定义在 xsd:dateTime 中不存在。请注意显式时间偏移的要求。这些是 xsd:dateTime.
的细微变化XML 模式不强制执行此操作,这就是为什么当您编写带有“T”的有效 xsd:dateTime 时它起作用的原因。