在XSD中可以接受空值或只有一个值的数据类型是什么?

What is the data type that can accept empty or have one value in XSD?

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

您可以使元素可为空。

<xs:element name="Price"
            nillable="true">
    <xs:simpleType>
        <xs:restriction base="xs:int">
            <xs:totalDigits value="2"/>
        </xs:restriction>
    </xs:simpleType>
</xs:element>

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

  <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 标记空实例似乎没有任何用处;它不适用于属性。