FANDOM


Un sencillo ejemploEditar

El siguiente es un ejemplo de validación de un documento XML muy sencillo utilizando esquemas. En primer lugar, el esquema:

<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
  <element name="pelicula">
    <complexType>
      <sequence>
        <element name="titulo" type="string"/>
      </sequence>
    </complexType>
  </element>
</schema>

A continuación, el documento XML que hace uso de dicho esquema:

<?xml version="1.0"?>
<pelicula
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation="brazil-01.xsd">
  <titulo>Brazil</titulo>
</pelicula>

ElementosEditar

El uso de esquemas permite estructurar perfectamente la definición del documento de forma más sencilla que el ejemplo anterior que vimos. El siguiente esquema define el mismo documento XML que vimos en la sección anterior:

<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
  <element name="pelicula" type="string"/>
</schema>

El documento ha de definirse de la siguiente forma:

<?xml version="1.0"?>
<pelicula
  xsi:noNamespaceSchemaLocation="brazil-02.xsd"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  Brazil
</pelicula>

GruposEditar

Ampliando el documento de ejemplo anterior, añadamos un nuevo elemento que muestre la duración de la película:

<?xml version="1.0"?>
<pelicula
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation="brazil-03.xsd">
  <titulo>Brazil</titulo>
  <minutos>142</minutos>
</pelicula>

Consecuentemente, el esquema debería ser el siguiente:

<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
  <element name="pelicula">
    <complexType>
      <all>
        <element name="titulo" type="string"/>
        <element name="minutos" type="integer"/>
      </all>
    </complexType>
  </element>
</schema>

Este esquema no obliga a seguir ningún orden. También sería válido el siguiente documento:

<?xml version="1.0"?>
<pelicula
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation="brazil-03.xsd">
  <minutos>142</minutos>
  <titulo>Brazil</titulo>
</pelicula>

El siguiente esquema obliga a seguir un orden en la declaración de elementos del documento XML:

<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
  <element name="pelicula">
    <complexType>
      <sequence>
        <element name="titulo" type="string"/>
        <element name="minutos" type="integer"/>
      </sequence>
    </complexType>
  </element>
</schema>

AtributosEditar

Los esquemas también permiten controlar la existencia de atributos de un documento XML. Por ejemplo, para definir el siguiente:

<?xml version="1.0"?>
<pelicula titulo="Brazil" minutos="142" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation="brazil-05.xsd">
  <director>Terry Gilliam</director>
  <actor>Jonathan Pryce</actor>
</pelicula>

El siguiente esquema describe el documento anterior:

<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
  <element name="pelicula">
    <complexType>
      <sequence>
        <element name="director" type="string"/>
        <element name="actor" type="string"/>
      </sequence>
      <attribute name="titulo" type="string" use="required"/>
      <attribute name="minutos" type="integer" use="optional" default="90"/>
    </complexType>
  </element>
</schema>

RepeticionesEditar

Por lo general, una película incluye más de un actor en su reparto:

<?xml version="1.0"?>
<pelicula titulo="Brazil" minutos="142"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation="brazil-07.xsd">
  <director>Terry Gilliam</director>
  <reparto>
    <interprete>Jonathan Pryce</interprete>
    <interprete>Robert De Niro</interprete>
    <interprete>Kim Greist</interprete>
    <interprete>Michael Palin</interprete>
    <interprete>Ian Holm</interprete>
    <interprete>Bob Hoskins</interprete>
  </reparto>
</pelicula>

Los esquemas también permiten describir la repetición de varios elementos:

<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
  <element name="pelicula">
    <complexType>
      <sequence>
        <element name="director"/>
        <element name="reparto">
          <complexType>
            <sequence>
              <element name="interprete" maxOccurs="unbounded"/>
            </sequence>
          </complexType>
        </element>
      </sequence>
      <attribute name="titulo" type="string" use="required"/>
      <attribute name="minutos" type="integer" use="optional" default="90"/>
    </complexType>
  </element>
</schema>

AnotacionesEditar

Siempre es conveniente incluir notas en los esquemas:

<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
  <element name="pelicula">
    <complexType>
      <sequence>
        <element name="director"/>
        <element name="reparto">
          <complexType>
            <sequence>
              <element name="interprete" maxOccurs="unbounded">
                <annotation>
                  <documentation>
                  Incluya tantos actores 
                  como crea conveniente.
                  </documentation>
                </annotation>
              </element>
            </sequence>
          </complexType>
        </element>
      </sequence>
      <attribute name="titulo" type="string" use="required"/>
      <attribute name="minutos" type="integer" use="optional" default="90"/>
    </complexType>
  </element>
</schema>

Enlaces interesantesEditar

Puede que encuentres interesantes los siguientes enlaces:

El contenido de la comunidad está disponible bajo CC-BY-SA a menos que se indique lo contrario.