具有不同复杂类型的相同元素名称

时间:2016-09-19 15:09:51

标签: xml xsd

此代码是一系列xsd文件的一部分,它们结合在一起..

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="Headers"
    targetNamespace="http://HttpNamespace/types"
    elementFormDefault="qualified"
    xmlns="http://HttpNamespace/types"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:saml ="http://HttpNamespace/saml"

>
  <xs:import namespace="http://HttpNamespace/saml" schemaLocation="Saml.xsd" />

  <xs:complexType name="ConnectionHeader">
    <xs:attribute name="key" fixed="Connection" />
    <xs:attribute name="value" >
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="keep-alive" />
          <xs:enumeration value="close" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>

  <xs:complexType name="ContentTypeHeader">
    <xs:attribute name="key" fixed="Content-Type" />
    <xs:attribute name="value" >
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="application/json" />
          <xs:enumeration value="application/soap+xml" />
          <xs:enumeration value="text/xml" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>


 <xs:complexType name="AuthorizationHeader">
   <xs:sequence>
    <xs:element name="Saml" minOccurs="0" maxOccurs="1" type="saml:SamlContent"/>
   </xs:sequence>
    <xs:attribute name="key" fixed="Authorization"/>
 </xs:complexType>


  <xs:complexType name="HeadersType">
    <xs:sequence>
      <xs:element name="Header" maxOccurs="unbounded">
        <xs:complexType>
          <xs:choice>
              <xs:element name="Header" minOccurs="0" maxOccurs="1" type="ConnectionHeader" />
              <xs:element name="Header" minOccurs="0" maxOccurs="1" type="ContentTypeHeader" />
              <xs:element name="Header" minOccurs="0" maxOccurs="1" type="AuthorizationHeader" />
          </xs:choice>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

</xs:schema>

你可以看到,在复杂类型HeadersType中我试图在相同元素名称的3种复杂类型之间创建选择&#34; Header&#34;。所有3种类型都在此代码段中定义。

但编辑不断向我提出错误:

  

元素Header的多个定义导致内容模型   变得暧昧

所以我的问题是如何定义具有不同复杂类型的相同元素的多重选择?

1 个答案:

答案 0 :(得分:1)

你做不到。约束“元素声明一致”表示如果两个兄弟元素(或具有相同父元素的两个替代元素)具有相同的名称,则它们必须具有相同的类型。无论您使用的是XSD 1.0还是XSD 1.1,都是如此。

您必须更改内容模型(例如,使用不同的元素名称),或者您必须使用当前允许的类型的并集来定义Header元素,并使用其他方式来验证约束(例如XSD) 1.1断言)。