2016-09-19 5 views
0

Dieser Code Teil einer großen Reihe von XSD-Dateien, die zusammen kombiniert ..gleicher Elementname mit verschiedenen komplexen Typen

<?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> 

Wie yo sehen kann, in dem komplexen Typ HeadersType Ich versuche, ein zu schaffen Auswahl zwischen 3 komplexen Typen des gleichen Elementnamens "Header". In diesem Code-Snippet sind alle 3 Typen definiert.

Aber der Redakteur halten werfen mir den Fehler:

multiple definitions of element Header causes the content model to become ambiguous

Also meine Frage ist, wie ich eine multiple choice des gleichen Elements mit verschiedenen komplexen Typen definieren?

Antwort

1

Sie können nicht. Die Einschränkung "Element Declarations Consistent" besagt, dass, wenn zwei Geschwisterelemente (oder zwei alternative Elemente mit demselben Elternelement) denselben Namen haben, sie denselben Typ haben müssen. Dies gilt unabhängig davon, ob Sie XSD 1.0 oder XSD 1.1 verwenden.

Sie müssen entweder Ihr Inhaltsmodell ändern (zB um andere Elementnamen zu verwenden), oder Sie müssen das Header-Element mit der Vereinigung der aktuell erlaubten Typen definieren und die Einschränkungen auf andere Weise validieren (z XSD 1.1-Zusicherungen).

Verwandte Themen