XSD - сделать элементы необязательными и обязательными в схеме XML - PullRequest
0 голосов
/ 05 декабря 2018

Схема, сгенерированная мной для 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 как обязательный, а все остальные как необязательные.

Есть какие-нибудь идеи о том, что я могу сделать, чтобы это исправить?

1 Ответ

0 голосов
/ 05 декабря 2018

Валидатор схемы просматривает каждый элемент и решает, разрешен ли этот элемент в текущей позиции.Если он находит элемент, который не разрешен, или находит конец последовательности, в котором конец последовательности не разрешен, он дает вам список элементов, которые могут корректно отображаться в текущей позиции.Именно так оно и работает, и вы не сможете его изменить.

...