The < anyAttribute > element gives us the ability to extend an XML document with attributes that are not specified by schema!
The < anyAttribute > element gives us the ability to extend an XML document with attributes that are not specified by schema!
The following example is a fragment from a XML schema named “family.xsd”. It shows us 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 the “gender” attribute. We can do this in this case, even if the author of the schema has never declared any “gender” attribute.
Please look at this schema file, named “attribute.xsd”:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">
<xs:attribute name="gender">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="male|female"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:schema>
The following XML (named “Myfamily.xml”) uses ingredients from different schema, “family.xsd” and “attribute.xsd”:
<?xml version="1.0" encoding="ISO-8859-1"?>
<persons xmlns="http://www.microsoft.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:SchemaLocation="http://www.microsoft.com family.xsd
http://www.w3schools.com attribute.xsd">
<person gender="female">
<firstname>Hege</firstname>
<lastname>Refsnes</lastname>
</person>
<person gender="male">
<firstname>Stale</firstname>
<lastname>Refsnes</lastname>
</person>
</persons>
The above XML file is valid because the schema “family.xsd” allows us to add attributes to the “person” element.
Both < any > and < anyAttribute > can be used to make extensible documents! They give the document the ability to contain additional elements that are not declared in the main XML schema.