【问题标题】:XML Schema restrictions on the current date当前日期的 XML Schema 限制
【发布时间】:2013-06-17 15:24:35
【问题描述】:

是否可以限制当前日期的 XSD 日期和时间数据类型? 例如,如果要将某个日期的 maxInclusive 设置为当前日期:

<xs:element name="DateOfBirths" type="birthsDate"/>    
 <xs:simpleType name="birthsDate">
  <xs:restriction base="xs:date">
   <xs:minInclusive value="1920-01-01"/>
   <xs:maxInclusive value="current-date()" fixed="true"/>
  </xs:restriction>
 </xs:simpleType>

如果默认情况下这是不可能的,是否存在解决方法?任何帮助将不胜感激。

【问题讨论】:

    标签: xml validation xsd restriction


    【解决方案1】:

    XSD 不支持在设置方面值时调用 XPath 函数,因此(您可能已经知道)问题中的代码将不起作用。

    最明显的解决方法是

    • 使用 XSD 1.1 并检查断言中的约束。
    • 使用 Schematron 并检查断言中的约束。
    • 检查应用程序级别的约束。
    • 将birthDate类型的声明移动到它自己的模式文档中;定期生成该模式文档的新版本,无论是手动还是使用 cron 作业或类似的东西。今天生成的架构文档会有

      <xs:maxInclusive value="2013-06-20"/>
      

      明天生成的架构文档会有

      <xs:maxInclusive value="2013-06-21"/>
      

    【讨论】:

    • 如果我想将当前日期加上下周作为 maxInclusive 值怎么办? XSD1.1 断言或 Schematron 是否也可以做到这一点?
    • 如果你能计算出合适的日期,是的。在 XSD 1.1 和 Schematron 中,当使用 XPath 2.0 作为查询语言时,日期运算相对简单。在使用 XPath 1.0 的 Schematron 中,它可能不那么简单,甚至是不可能的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多