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:
<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.
<?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>
The Myfamily.xml
XML file above is valid because the schema family.xsd
allows us to add an attribute to the person
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.