Élément <any> XSD

L'élément <any> nous permet d'étendre le document XML par des éléments non définis par le schéma !

L'élément <any>

L'élément <any> nous permet d'étendre le document XML par des éléments non définis par le schéma !

L'exemple suivant est une fragment extrait de l'XML schema nommé "family.xsd". Il montre une déclaration pour l'élément "person". En utilisant l'élément <any>, nous pouvons étendre le contenu de "person" par n'importe quel élément (après <lastname>):

<xs:element name="person">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string"/>
      <xs:any minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

Maintenant, nous voulons utiliser l'élément "children" pour étendre l'élément "person". Dans ce cas, nous pouvons le faire même si l'auteur de ce schéma n'a déclaré aucun élément "children".

Voyons ce fichier schéma, nommé "children.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:element name="children">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="childname" type="xs:string"
      maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>
</xs:schema>

Le fichier XML suivant (nommé "Myfamily.xml") utilise des composants provenant de deux schémas différents, "family.xsd" et "children.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 children.xsd">
<person>
<firstname>David</firstname>
<lastname>Smith</lastname>
<children>
  <childname>mike</childname>
</children>
</person>
<person>
<firstname>Tony</firstname>
<lastname>Smith</lastname>
</person>
</persons>

Ce fichier XML est valide car le schéma "family.xsd" nous permet d'étendre l'élément "person" par l'intermédiaire d'un élément optionnel après l'élément "lastname".

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.