Complex Type (declaration)

  • Declaring a Global Complex Type

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" ...>
      <xsd:complexType name="type-name">
        ...
      </xsd:complexType>
    </schema>
    		    	

    A complexType declared as a direct child of the schema root element is considered a 'global' complexType.

    A 'name' attribute is required for a global defined complexType.

  • Referencing a Global Complex Type

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" ...>
      <xsd:element name="element-name" type="type-name"/>
    
      <xsd:complexType name="type-name">
        ...
      </xsd:complexType>
    </schema>
    		    	

    Reuse a global defined complexType, by referencing the complexType, using the 'type' attribute.

    A complex type can only be specified for elements.

  • Declaring a Local Complex Type

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" ...>
      <xsd:element name="element-name">
        <xsd:complexType>
          ...
        </xsd:complexType>
      <attribute>
    </schema>
    		    	

    A complexType declared as a child of an element is considered a 'local' complexType.

    The type attribute cannot be used together with a local complexType element.

    A local complex type does not have a name.

  • SimpleContent

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" ...>
      <xsd:complexType name="type-name">
        <xsd:simpleContent>
            ...
        </xsd:simpleContent>
      </xsd:complexType>
    </schema>
    		    	

    Specifies text content and/or attributes.

  • ComplexContent

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" ...>
      <xsd:complexType name="type-name">
        <xsd:complexContent>
            ...
        </xsd:complexContent>
      </xsd:complexType>
    </schema>
    		    	

    Specifies element or mixed content and/or attributes.

  • Derivation by restriction.

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" ...>
      <xsd:complexType name="type-name">
        <xsd:complexContent>
          <xsd:restriction base="complex-type-name">
            ...
          </xsd:restriction>
        </xsd:complexContent>
      </xsd:complexType>
    
      <xsd:complexType name="another-type-name">
        <xsd:simpleContent>
          <xsd:restriction base="xs:string">
            ...
          </xsd:restriction>
        </xsd:simpleContent>
      </xsd:complexType>
    </schema>
    		    	

    Specify the to be restricted type using the 'base' attribute or with an anonymous inner class.

    Remove elements/attributes from the base-type.

    It is mandatory to repeat the content from the base-type.

    Result always validates against base-type.

  • Derivation by extension.

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" ...>
      <xsd:complexType name="type-name">
        <xsd:complexContent>
          <xsd:extension base="complex-type-name">
            ...
          </xsd:extension>
        </xsd:complexContent>
      </xsd:complexType>
    
      <xsd:complexType name="another-type-name">
        <xsd:simpleContent>
          <xsd:extension base="xs:string">
            ...
          </xsd:extension>
        </xsd:simpleContent>
      </xsd:complexType>
    </schema>
    		    	

    Specify the to be extended type using the 'base' attribute or with an anonymous inner class.

    Add elements/attributes to the base-type.

    Result does not always validate against base-type.

  • Defining attributes in complexTypes.

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" ...>
      <xsd:complexType name="type-name">
        <xsd:complexContent>
          <xsd:extension base="complex-type-name">
            ...
            <xsd:attribute name="attribute-name" type="xs:string"/>
          </xsd:extension>
        </xsd:complexContent>
      </xsd:complexType>
    
      <xsd:complexType name="another-type-name">
        <xsd:simpleContent>
          <xsd:restriction base="xs:string">
            ...
            <xsd:attribute name="attribute-name" type="xs:string"/>
          </xsd:restriction>
        </xsd:simpleContent>
      </xsd:complexType>
    
      <xsd:complexType name="another-type-name">
        ...
        <xsd:attribute name="attribute-name" type="xs:string"/>
      </xsd:complexType>
    </schema>
    		    	

    Attributes can be defined as child elements of the restriction/extension elements.

    Attributes can also be defined directly on the complexType.

    Attributes are always defined after all facets or content models have been defined.

  • Defining empty elements.

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" ...>
      <xsd:element name="empty-element">
        <xsd:complexType>
          <xsd:complexContent>
            <xsd:restriction base="xsd:anyType"/>
          </xsd:complexContent>
        </xsd:complexType>
      </xsd:element>
    </schema>
    		    	

    Defines an element with a complex-type with complex-content that has no content defined.