当应用程序向代理发送消息时,解释消息数据的方法取决于消息自身的内容和消息流的配置。如果应用程序发送将由一般 XML 解析器或 MRM 解析器解释的消息(具体使用哪种解析器解释由 XML 的实际格式决定),此应用程序便可以包含可用任何 XML 模式原语日期时间数据类型表示的日期或时间数据。
每部分 XML 模式数据类型的数据都可以转换成 ESQL 数据类型,在逻辑消息树中创建的元素是转换过的类型。如果输入消息中的日期时间数据不符合所选模式数据类型的规则,即使该消息在 MRM 域中并且您配置了消息流用来验证输入消息,解析器写入逻辑消息树的值也会被修改。(对于一般 XML 消息不提供验证。)
这对日期时间输入数据的子字段有以下影响:
以下示例演示了这些要点。
输入数据的 XML 模式数据类型 | 模式规则 | 位流中的输入值 | 写入逻辑树的值(括号中的 ESQL 数据类型) |
---|---|---|---|
xsd:dateTime | CCYY-MM-DDThh:mm:ss | 2002-12-31T23:59:59 | 2002-12-31 23:59:59 (TIMESTAMP) |
--24 | 1970-01-24 (DATE) | ||
23:59:59 | 23:59:59 (TIME) | ||
xsd:date | CCYY-MM-DD | 2002-12-31 | 2002-12-31 (DATE) |
2002-12-31T23:59:59 | 2002-12-31 (DATE) | ||
-06-24 | 1970-06-24 (DATE) | ||
xsd:time | hh:mm:ss | 14:15:16 | 14:15:16 (TIME) |
xsd:gDay | ---DD | ---24 | 1970-01-24 (DATE) |
xsd:gMonth | --MM | --12 | 1970-12-01 (DATE) |
xsd:gMonthDay | --MM-DD | --12-31 | 1970-12-31 (DATE) |
xsd:gYear | CCYY | 2002 | 2002-01-01 (DATE) |
xsd:gYearMonth | CCYY-MM | 2002-12 | 2002-12-01 (DATE) |
当您考虑使用哪种模式日期时间数据类型时,请记住,如果消息在 MRM 域中,并且您配置了消息流用来验证消息,缺少子字段会导致发生验证异常。
模式数据类型 Gday、gMonth、gMonthDay、gYear 和 gYearMonth 用于记录某些重现时间段。由于这些模式数据类型中使用的重现时间段被 ESQL 作为特定的时间点进行存储,因此打开验证时可能会发生冲突。
例如,当月中 gDay(月中的日)类型的第 24 天写入逻辑树时,缺少的月和年子字段从戳记(1970 年 1 月)提供,以提供特定的日期 1970-01-24。如果编写 ESQL 代码来处理此日期,例如添加 10 天的时间间隔,然后生成验证过的输出消息,则会发生异常。这是因为计算结果是 1970-02-03,由于此日期的月份子字段不再与戳记日期匹配,因此该日期无效。