簡體   English   中英

XSD-在XML模式中使元素可選和強制

[英]XSD - Making elements optional and mandatory in an XML schema

我為XML生成的架構如下所示:

 <xs:complexType name="ComplexElement1">
        <xs:sequence>
            <xs:element name="ComplexType1" type="ComplexType1">
            </xs:element>
            <xs:element name="ComplexType2" type="ComplexType2" minOccurs="0">
            </xs:element>
            <xs:element name="ComplexType3">
                <xs:complexType>
                    <xs:sequence maxOccurs="unbounded">
                        <xs:element name="ComplexType4" type="ComplexType4"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="ComplexType5" type="ComplexType5" minOccurs="0"/>
            <xs:element name="ComplexType6" type="ComplexType6" minOccurs="0" maxOccurs="1"/>
            <xs:element name="SimpleType1" type="xs:string" minOccurs="0" maxOccurs="1"/>
            <xs:element name="ComplexType7" type="ComplexType7" minOccurs="0" maxOccurs="1"/>
            <xs:element name="SimpleType2" minOccurs="1" maxOccurs="1" type="xs:string"/>
        </xs:sequence>
        <xs:attribute name="Attribute1" type="StringLength3WithNoSpace" use="required"/>
        <xs:attribute name="Attribute2" type="ComplexAttribute1"/>
        <xs:attribute name="Attribute3" type="xs:boolean" use="optional"/>
    </xs:complexType>

從XSD中可以看到,ComplexType 5,6和7以及SimpleType 1都是可選元素 另外,SimpleType2是必填元素。

當我嘗試在請求中沒有SimpleType2的請求時,會收到類似以下內容的消息

Message validation failed. Errors: [cvc-complex-type.2.4.b: The content of element 'ComplexElement1' is not complete. One of '{"somePath":SimpleType2}' is expected.]

工作正常。

但是,在我不放置任何可選元素,ComplexType 5、6和7,SimpleType 1以及強制性SimpleType2的情況下,就會出現問題。

我期望的消息與上述消息相同-因為使用minOccurs =“ 0”,該序列中的所有其他元素都是可選的

但是,我收到的實際錯誤消息是:

Message validation failed. Errors: [cvc-complex-type.2.4.b: The content of element 'ComplexElement1' is not complete. One of '{"somePath":ComplexType5, "somePath":ComplexType6, "somePath":SimpleType1, "somePath":ComplexType7, "somePath":SimpleType2}' is expected.]<

這不是真的正確,因為我的架構僅將SimpleType2定義為強制性,將所有其他類型定義為可選。

關於如何解決此問題的任何想法?

模式驗證器查看每個元素,並確定在當前位置是否允許該元素。 如果它找到了不允許的元素,或者在不允許序列結尾的位置找到了序列的結尾,那么它將為您提供可以有效出現在當前位置的元素列表。 這就是它設計的工作方式,您將無法對其進行更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM