XSD 可选元素 minOccurs="0" 但在验证时它是预期的?
XSD optional element minOccurs="0" but on validation it is expected?
我的要求是我有三个元素,其中 ProductID
和 DivisionID
是必需的,单位是可选的。
XSD
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
attributeFormDefault="unqualified" elementFormDefault="qualified">
<xs:element name="Message">
<xs:complexType>
<xs:sequence>
<xs:element name="Product">
<xs:complexType>
<xs:sequence>
<xs:element name="productID">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="100"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Unit" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="0"/>
<xs:maxLength value="30"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="DivisionID">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="0"/>
<xs:maxLength value="30"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
XML
<?xml version="1.0" encoding="UTF-8"?>
<Message>
<Product>
<productID>ABC-EDI</productID>
</Product>
</Message>
验证错误
Cvc-complex-type.2.4.b: The Content Of Element 'Product' Is Not Complete. One Of '{Unit, DivisionID}' Is Expected., Line '4', Column '14'.
问题
错误应该是只需要 DivisionID
。 为什么要 Unit
?
你的 XML 对你发布的 XSD 有效。
如果您要省略必需的 DivisionID
元素,您确实会收到类似
的验证错误
cvc-complex-type.2.4.b: The content of element 'Product' is not
complete. One of '{Unit, DivisionID}' is expected.
这个错误应该理解为不是说 Unit
在 productID
之后 需要 ,而是说 Unit
或 DivisionID
预计将跟随 productID
。可以理解,您希望了解满足 XSD 要求所需的最小更改。但是,它正在按照
的方式发表更广泛的声明
Hey, I just saw a close tag for Product
, and its content model
remains unsatisfied. Before Product
ends, I expected to see one of
Unit
or DivisionID
at this point.
我的要求是我有三个元素,其中 ProductID
和 DivisionID
是必需的,单位是可选的。
XSD
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
attributeFormDefault="unqualified" elementFormDefault="qualified">
<xs:element name="Message">
<xs:complexType>
<xs:sequence>
<xs:element name="Product">
<xs:complexType>
<xs:sequence>
<xs:element name="productID">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="100"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Unit" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="0"/>
<xs:maxLength value="30"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="DivisionID">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="0"/>
<xs:maxLength value="30"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
XML
<?xml version="1.0" encoding="UTF-8"?>
<Message>
<Product>
<productID>ABC-EDI</productID>
</Product>
</Message>
验证错误
Cvc-complex-type.2.4.b: The Content Of Element 'Product' Is Not Complete. One Of '{Unit, DivisionID}' Is Expected., Line '4', Column '14'.
问题
错误应该是只需要 DivisionID
。 为什么要 Unit
?
你的 XML 对你发布的 XSD 有效。
如果您要省略必需的 DivisionID
元素,您确实会收到类似
cvc-complex-type.2.4.b: The content of element 'Product' is not complete. One of '{Unit, DivisionID}' is expected.
这个错误应该理解为不是说 Unit
在 productID
之后 需要 ,而是说 Unit
或 DivisionID
预计将跟随 productID
。可以理解,您希望了解满足 XSD 要求所需的最小更改。但是,它正在按照
Hey, I just saw a close tag for
Product
, and its content model remains unsatisfied. BeforeProduct
ends, I expected to see one ofUnit
orDivisionID
at this point.