1

创建 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 时出现错误。

4

2 回答 2

4

"nillable" 仅适用于元素,不适用于属性 - 即使这样它也不是很有用,因为如果元素为空,您必须添加 xsi:nil="true",这完全是多余的。

要么 (a) 定义一个类型,它是 xs:integer 和零长度字符串的联合,如 IMSoP 所建议的那样,或者 (b) 定义一个具有项目类型整数、minLength 0、maxLength 1 的列表类型。我更喜欢后一种解决方案因为它与模式感知 XSLT 和 XQuery 配合得更好。

于 2012-08-19T08:47:42.733 回答
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. 我知道这在过去让我失望了。

于 2012-08-18T22:02:16.640 回答