Élément <anyAttribute> XSD

L'élément <anyAttribute> nous permet d'élargir le document XML à l'aide d'attributs non spécifiés par le schéma !

L'élément <anyAttribute>

L'élément <anyAttribute> nous permet d'élargir le document XML à l'aide d'attributs non spécifiés par le schéma !

L'exemple suivant est une partie d'un schéma XML nommé "family.xsd". Il nous montre une déclaration pour l'élément "person". En utilisant l'élément <anyAttribute>, nous pouvons ajouter un nombre quelconque d'attributs à l'élément "person":

<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>

Nous espérons maintenant étendre l'élément "person" via l'attribut "gender". Dans ce cas, nous pouvons le faire même si l'auteur de ce schéma n'a jamais déclaré d'attribut "gender".

Voyons ce fichier de schéma, nommé "attribute.xsd":

<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.codew3c.com"
xmlns="http://www.codew3c.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>

La XML suivante (nommée "Myfamily.xml") utilise des composants provenant de différents schémas, "family.xsd" et "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.codew3c.com attribute.xsd">
<person gender="female">
<firstname>Jane</firstname>
<lastname>Smith</lastname>
</person>
<person gender="male">
<firstname>David</firstname>
<lastname>Smith</lastname>
</person>
</persons>

Ce fichier XML est valide car le schéma "family.xsd" nous permet d'ajouter des attributs à l'élément "person".

Les éléments <any> et <anyAttribute> peuvent tous deux être utilisés pour créer des documents extensibles ! Ils permettent aux documents de contenir des éléments supplémentaires non déclarés dans le schéma XML principal.