创建XML时,属性wait
可能并不总是包含值。如何编辑架构以使属性wait
包含数字或无值?
<xs:complexType name="CommandType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="exe" use="required" />
<xs:attribute type="xs:string" name="args" use="required" />
<xs:attribute type="xs:int" name="wait" use="required" />
<xs:attribute type="xs:string" name="expectedOutput" use="required" />
<xs:attribute type="xs:string" name="toVariable" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
我已尝试同时执行这两项nillable="true"
xsi:nil="true"
但它们不起作用。当我尝试验证XSD时,我遇到了错误。
答案 0 :(得分:3)
“nillable”仅适用于元素,不适用于属性 - 即使这样也不是很有用,因为如果元素为空,则必须添加xsi:nil =“true”,这是完全冗余的。
要么(a)定义一个类型,它是xs:integer和零长度字符串的并集,如IMSoP所建议的,或者(b)定义一个列表类型,其项目类型为integer,minLength 0,maxLength 1.我更喜欢后一种解决方案,因为它可以更好地使用模式感知的XSLT和XQuery。
答案 1 :(得分:0)
可能有一种更简单的方法,但也许您可以使用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
。我知道过去让我感到很不舒服。