首页 > 解决方案 > XSD 中可以接受空或只有一个值的数据类型是什么?

问题描述

在 XSD 文件中,我有一个具有两位数的元素,price="90"但我希望它也接受空的。XSD 中要指定的数据类型是什么?!

标签: xmlxsdxsd-validation

解决方案


我首选的方法是将元素定义为具有列表类型:

  <xs:simpleType name="twoDigitNumber">
    <xs:restriction base="xs:int">
      <xs:totalDigits value="2"/>
    </xs:restriction>
  </xs:simpleType>
  
  <xs:simpleType name="listOfTwoDigitNumbers">
    <xs:list itemType="twoDigitNumber"/>
  </xs:simpleType>
  
  <xs:simpleType name="optionalTwoDigitNumber">
    <xs:restriction base="listOfTwoDigitNumbers">
      <xs:maxLength value="1"/>
    </xs:restriction>
  </xs:simpleType>

另一种流行的方法是定义一个联合类型,其成员类型为 (a) 一个两位整数,和 (b) 一个 maxLength=0 的字符串。这两种方法在验证方面实现了相同的效果,但如果您使用数据绑定技术或模式感知 XPath 表达式,则工作方式会有所不同。

我不是 nillable/xsi:nil 的忠实粉丝。要求人们xsi:nil在元素是空的时候标记空实例似乎没有任何用处;它不适用于属性。


推荐阅读