Skip to content

XSD The <anyAttribute> Element

How to use the <anyAttribute> element in XSD to dynamically add undefined attributes to complex types while maintaining schema validation.

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.xsdxml
<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.xsdxml
<?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>
Navigation