Tutoriales de informática - Abrirllave.com

Abrirllave.com

Extensiones en XSD (XML Schema)

xs:extension sirve para extender un elemento simpleType o complexType.

xs:extension (complexContent)

EJEMPLO Dado el siguiente documento XML:

<?xml version="1.0" encoding="UTF-8"?>
<fichas xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="fichas.xsd">
   <ficha numero="1">
      <nombre>Eva</nombre>
      <edad>25</edad>
      <ciudad>París</ciudad>
      <pais>Francia</pais>
   </ficha>
   <ficha numero="2">
      <nombre>Giovanni</nombre>
      <edad>26</edad>
      <ciudad>Florencia</ciudad>
      <pais>Italia</pais>
   </ficha>
</fichas>

Y el archivo "fichas.xsd" que permite validarlo:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="fichas">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="ficha" type="infoPersonaAmpliada"
                    maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:complexType name="infoPersonaAmpliada">
    <xs:complexContent>
      <xs:extension base="infoPersona">
        <xs:sequence>
          <xs:element name="ciudad" type="xs:string"/>
          <xs:element name="pais" type="xs:string"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="infoPersona">
    <xs:sequence>
      <xs:element name="nombre" type="xs:string"/>
      <xs:element name="edad" type="edadPersona"/>
    </xs:sequence>
    <xs:attribute name="numero" type="xs:integer"/>
  </xs:complexType>

  <xs:simpleType name="edadPersona">
     <xs:restriction base="xs:integer">
        <xs:minExclusive value="-1"/>
        <xs:maxExclusive value="131"/>
     </xs:restriction>
  </xs:simpleType>

</xs:schema>
Ejercicio resuelto

xs:extension (simpleContent)

xs:simpleContent permite definir restricciones o extensiones a elementos que solo contienen datos, es decir, no contienen a otros elementos.

EJEMPLO El siguiente archivo "precios.xsd":

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="precios">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="precio" maxOccurs="unbounded">
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="xs:decimal">
                <xs:attribute name="moneda" type="xs:string"/>
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Permite validar el siguiente documento XML:

<?xml version="1.0" encoding="UTF-8"?>
<precios xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="precios.xsd">
   <precio moneda="Euro">5</precio>
   <precio moneda="Dólar">6.2</precio>
   <precio moneda="Libra esterlina">4.3</precio>
</precios>
Ejercicios resueltos