Skip to main content

XSD <any> Elements

The <any> element is used to extend the XSD functionality. It is used to extend a complexType element defined in an XSD with an element that is not defined in the schema.

The <any> Element

Consider the following example. There is a piece of XML schema from family.xsd that shows a declaration for the "person" element.

By using the <any> element we can extend (after <lastname>) the content of "person" with any element:

family.xsd
<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.

children.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="https://tutorialreference.com"
xmlns="https://tutorialreference.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:

MyFamily.xml
<?xml version="1.0" encoding="UTF-8"?>

<persons xmlns="http://tutorialreference.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tutorialreference.com family.xsd
https://tutorialreference.com children.xsd">

<person>
<firstname>Tom</firstname>
<lastname>Nolan</lastname>
<children>
<childname>Laura</childname>
</children>
</person>

<person>
<firstname>Ryan</firstname>
<lastname>Reynolds</lastname>
</person>

</persons>
note

The Myfamily.xml 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.

note

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

Table of Contents