XSD <anyAttribute>Elemento


¡El elemento `<anyAttribute>` nos permite extender documentos XML con atributos no especificados por el schema!


¡El elemento `<anyAttribute>` nos permite extender documentos XML con atributos no especificados por el schema!

El siguiente ejemplo es un fragmento de un schema XML llamado "family.xsd". Nos muestra una declaración para el elemento "person". Mediante el uso del elemento `<anyAttribute>`, podemos agregar cualquier cantidad de atributos al 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>

Ahora queremos extender el elemento "person" con un atributo "gender". En este caso, podemos hacerlo, incluso si el autor del schema nunca declaró ningún atributo "gender".

Mira este archivo de schema, llamado "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>

El siguiente XML (llamado "Myfamily.xml") utiliza componentes de diferentes schemas, "family.xsd" y "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>

El archivo XML anterior es válido porque el schema "family.xsd" nos permite agregar atributos al elemento "person".

Tanto `<any>` como `<anyAttribute>` se pueden utilizar para crear documentos extensibles. Permiten que el documento incluya elementos adicionales no declarados en el schema XML principal.

Otras extensiones