我为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定义为强制性,将所有其他类型定义为可选。
关于如何解决此问题的任何想法?
答案 0 :(得分:0)
模式验证器查看每个元素,并确定在当前位置是否允许该元素。如果它找到了不允许的元素,或者在不允许序列结尾的位置找到了序列的结尾,那么它将为您提供可以有效出现在当前位置的元素列表。这就是它设计的工作方式,您将无法更改它。