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