XSD 使属性可为空

问题描述 投票:0回答:2
xml xsd
2个回答
4
投票

“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>

1
投票

可能有更简单的方法,但也许您可以创建一个自定义类型,该类型可以是空字符串,也可以使用

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
。我知道这让我过去很困惑。

© www.soinside.com 2019 - 2024. All rights reserved.