XML Schema any Element

From http://www.w3schools.com (Copyright Refsnes Data)

# XSD The <any> Element

The <any> element enables us to extend the XML document with elements not specified by the schema!

## The <any> Element

The <any> element enables us to extend the XML document with elements not specified by the schema.

The following example is a fragment from an XML schema called "family.xsd". It shows a declaration for the "person" element. By using the <any> element we can extend (after <lastname>) the content of "person" with any element:

    <xs:element name="person">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="firstname" type="xs:string"/>
          <xs:element name="lastname" type="xs:string"/>
          <xs:any minOccurs="0"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>

Now we want to extend the "person" element with a "children" element. In this case we can do so, even if the author of the schema above never declared any "children" element.

Look at this schema file, called "children.xsd":

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.w3schools.com"
    xmlns="http://www.w3schools.com"
    elementFormDefault="qualified">

    <xs:element name="children">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="childname" type="xs:string"
          maxOccurs="unbounded"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>

    </xs:schema>

The XML file below (called "Myfamily.xml"), uses components from two different schemas; "family.xsd" and "children.xsd":

    <?xml version="1.0" encoding="ISO-8859-1"?>

    <persons xmlns="http://www.microsoft.com"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:SchemaLocation="http://www.microsoft.com family.xsd
    http://www.w3schools.com children.xsd">

    <person>
    <firstname>Hege</firstname>
    <lastname>Refsnes</lastname>
    <children>
      <childname>Cecilie</childname>
    </children>
    </person>

    <person>
    <firstname>Stale</firstname>
    <lastname>Refsnes</lastname>
    </person>

    </persons>

The XML file above is valid because the schema "family.xsd" allows us to extend the "person" element with an optional element after the "lastname" element.

The <any> and <anyAttribute> elements are used to make EXTENSIBLE documents! They allow documents to contain additional elements that are not declared in the main XML schema.

From http://www.w3schools.com (Copyright Refsnes Data)