XSD可选元素minOccurs =“0”但是在验证时它是预期的吗?

时间:2017-08-30 17:16:27

标签: xml xsd xsd-validation xml-validation

我的要求是我有三个要素,其中ProductIDDivisionID是必需的,而单位是可选的。

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:元素'产品'的内容不完整。其中一个'{Unit,DivisionID}'是预期的。,'4'行,'14'列。

问题

错误应该是只需要DivisionID为什么需要Unit

1 个答案:

答案 0 :(得分:2)

您的XML对发布的XSD有效。

如果您要省略所需的DivisionID元素,您确实会收到验证错误

  

cvc-complex-type.2.4.b:元素'Product'的内容不是   完成。预计会有一个“{Unit,DivisionID}”。

Unit之后,应该将此错误解读为productID ,而是UnitDivisionIDproductID。您可以理解地看到了满足XSD要求所需的最小变更。但是,它正在按照

的方式做出更广泛的陈述
  

嘿,我刚刚看到Product的关闭标记及其内容模型   仍然不满意。在Product结束之前,我希望看到其中一个   此时UnitDivisionID