Elemento <anyAttribute> XSD

L'elemento <anyAttribute> ci dà la capacità di estendere un documento XML tramite attributi non definiti dallo schema!

Elemento <anyAttribute>

L'elemento <anyAttribute> ci dà la capacità di estendere un documento XML tramite attributi non definiti dallo schema!

Esempio di fragmento di schema XML proveniente da un file chiamato "family.xsd". Questo ci mostra una dichiarazione per l'elemento "person". Utilizzando l'elemento <anyAttribute> possiamo aggiungere un numero illimitato di attributi all'elemento "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>

Ora, speriamo di estendere l'elemento "person" tramite l'attributo "gender". In questo caso possiamo farlo, anche se l'autore dello schema non ha mai dichiarato alcun attributo "gender".

Vediamo questo file schema, chiamato "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>

Di seguito questo XML (chiamato "Myfamily.xml"), utilizza componenti provenienti da diversi schema, "family.xsd" e "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>

Questo file XML è valido perché lo schema "family.xsd" ci permette di aggiungere attributi all'elemento "person".

Gli elementi <any> e <anyAttribute> possono essere utilizzati per creare documenti estensibili! Consentono al documento di includere elementi aggiuntivi non dichiarati nel principale schema XML.