“nillable”仅适用于元素,不适用于属性 - 即使这样它也不是很有用,因为如果元素为空,您必须添加 xsi:nil="true",这是完全多余的。
(a) 定义一个类型,它是 xs:integer 和一个零长度字符串的联合,如 IMSoP 所建议的,或者 (b) 定义一个项目类型为整数、minLength 0、maxLength 1 的列表类型。我更喜欢后者解决方案,因为它与模式感知 XSLT 和 XQuery 配合得更好。
例如:
<xs:simpleType name="list-of-int">
<xs:list itemType="xs:integer"/>
</xs:simpleType>
<xs:simpleType name="optionalInt">
<xs:restriction base="list-of-int">
<xs:minLength value="0"/>
<xs:maxLength value="1"/>
</xs:restriction>
</xs:simpleType>
可能有更简单的方法,但也许您可以创建一个自定义类型,该类型可以是空字符串,也可以使用
xs:int
类型符合 union
的定义:
<xs:simpleType name="emptyString">
<xs:restriction base="xs:string">
<xs:length value="0" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="intOrEmpty">
<xs:union memberTypes="xs:int emptyString" />
</xs:simpleType>
顺便说一句,值得记住的是
xs:string
类型包含空字符串,因此,如果 exe
属性应始终具有非空值,则需要 nonEmptyString
类型(使用 minLength
限制)以及将其标记为 required
。我知道这让我过去很困惑。