为什么这个complexType定义是正确的

时间:2016-12-03 15:44:49

标签: xml xsd xsd-validation xml-validation

正如我一直认为的那样,xs:restriction用于限制某个simpleType或complexType,因此名称为restriction。但下面的xsd片段是正确的。看一下Norwegian_customercountry被complexType覆盖,所以它被扩展,不受限制。它被重命名。 xs:restriction想要提供什么? xs:restrictionxs:extension的超集吗?该代码段在WebStorm验证。

  <xs:complexType name="customer">
    <xs:sequence>
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string"/>
      <xs:element name="country" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Norwegian_customer">
    <xs:complexContent>
      <xs:restriction base="customer">
        <xs:sequence>
          <xs:element name="firstname" type="xs:string"/>
          <xs:element name="lastname" type="xs:string"/>
          <xs:element name="country1">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="firstname" type="xs:string"/>
                <xs:element name="lastname" type="xs:string"/>
                <xs:element name="country" type="xs:string"/>
              </xs:sequence>
            </xs:complexType>
            </xs:element>
        </xs:sequence>
      </xs:restriction>
    </xs:complexContent>
  </xs:complexType>

1 个答案:

答案 0 :(得分:2)

  

但下面的xsd片段是正确的。

不,您的XSD代码段不正确Norwegian_customer不是customer的有效限制,因为它不允许country,只允许country1。必须在派生类型中明确允许受限制的基类型的内容模型的所有部分。

  

该片段在WebStorm中得到验证。

如果Webstorm验证了此XSD,那么它就不符合。

请参阅W3C XML Schema Part 1: Structures Second Edition,具体来说:

请注意,基于Xerces的验证程序会通知您,如下所示:

  

[错误] try.xsd:13:45:rcase-Recurse.2:没有完整的   粒子之间的功能映射。

     

[错误] try.xsd:13:45:derivation-ok-restriction.5.4.2:类型错误   'Norwegian_customer'。该类型的粒子不是有效的   限制碱的颗粒。