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) IMSoP で提案されているように、xs:integer と長さ 0 の文字列の和集合である型を定義するか、(b) 項目型が整数、minLength 0、maxLength 1 のリスト型を定義します。私は後者の解決策を好みます。スキーマを認識する XSLT および XQuery との相性が良いからです。

于 2012-08-19T08:47:42.733 に答える
0

もっと簡単な方法があるかもしれませんが、おそらく、空の文字列であるか、型の使用の定義に準拠したカスタム型を作成できますxs:intunion

<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 に答える