Skip to main content

XSD The <anyAttribute> Element

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

The <anyAttribute> 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 <anyAttribute> element we can add any number of attributes to the "person" 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:sequence>
<xs:anyAttribute/>
</xs:complexType>
</xs:element>

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

attribute.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="https://www.w3schools.com"
xmlns="https://www.w3schools.com"
elementFormDefault="qualified">

<xs:attribute name="eyecolor">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="blue|brown|green|grey"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>

</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 attribute.xsd">

<person eyecolor="green">
<firstname>Tom</firstname>
<lastname>Nolan</lastname>
</person>

<person eyecolor="blue">
<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 add an attribute to the person 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.