XML Schema 日期/时间数据类型概述
XML Schema 定义了一套日期和时间数据类型,用于精确表示时间信息。这些类型包括xs:date、xs:time、xs:dateTime、xs:gYear、xs:gMonth等,遵循 ISO 8601 标准格式。
常用日期/时间数据类型
xs:date
表示日历日期,格式为YYYY-MM-DD,可带时区信息。
<birthday>2000-05-15</birthday> <eventDate>2023-10-30+08:00</eventDate> <!-- 带时区 -->xs:time
表示一天中的时间,格式为HH:MM:SS,支持毫秒和时区。
<startTime>09:30:00</startTime> <endTime>17:45:30.500-05:00</endTime> <!-- 带毫秒和时区 -->xs:dateTime
组合日期和时间,格式为YYYY-MM-DDTHH:MM:SS,T为分隔符。
<timestamp>2023-10-30T14:30:00Z</timestamp> <!-- UTC 时间 --> <meetingTime>2023-11-01T09:00:00+08:00</meetingTime>其他类型
xs:gYear:年份(如2023)。xs:gMonth:月份(如--05)。xs:gDay:日期中的日(如---15)。
<foundedYear>1999</foundedYear> <!-- gYear --> <anniversary>--12</anniversary> <!-- gMonth -->代码示例:XML Schema 定义
定义日期/时间元素
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="schedule"> <xs:complexType> <xs:sequence> <xs:element name="date" type="xs:date"/> <xs:element name="time" type="xs:time"/> <xs:element name="due" type="xs:dateTime"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>约束日期范围
通过xs:minInclusive和xs:maxInclusive限制日期范围:
<xs:element name="eventDate"> <xs:simpleType> <xs:restriction base="xs:date"> <xs:minInclusive value="2023-01-01"/> <xs:maxInclusive value="2023-12-31"/> </xs:restriction> </xs:simpleType> </xs:element>实际应用示例
生成带时区的当前时间(XSLT)
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:template match="/"> <currentTime> <xsl:value-of select="format-dateTime(current-dateTime(), '[Y]-[M]-[D]T[H]:[m]:[s][Z]')"/> </currentTime> </xsl:template> </xsl:stylesheet>验证 XML 数据有效性
使用xs:assert确保结束时间晚于开始时间:
<xs:element name="event"> <xs:complexType> <xs:sequence> <xs:element name="start" type="xs:dateTime"/> <xs:element name="end" type="xs:dateTime"/> </xs:sequence> <xs:assert test="end gt start"/> </xs:complexType> </xs:element>注意事项
- 时区处理:建议统一使用 UTC(
Z)或明确指定时区偏移。 - 格式一致性:避免混合使用带/不带时区的数据。
- 闰秒处理:
xs:dateTime不直接支持闰秒,需特殊处理。
通过合理使用 XML Schema 的日期/时间类型,可以确保数据的精确性和 interoperability。