Enreas
Etiqueta: Edición visual
(Deshecha la revisión 1309 de 83.40.79.107 (disc.))
 
Línea 6: Línea 6:
 
<element name="pelicula">
 
<element name="pelicula">
 
<complexType>
 
<complexType>
'''<sequence>
+
<sequence>
<elemente="titulo" type="string"/>
+
<element name="titulo" type="string"/>
 
</sequence>
 
</sequence>
 
</complexType>
 
</complexType>
 
</element>
 
</element>
</schema>'''
+
</schema>
 
</pre>
 
</pre>
 
A continuación, el documento '''XML que hace uso de dicho esquema:'''
 
A continuación, el documento '''XML que hace uso de dicho esquema:'''

Revisión actual - 14:56 17 abr 2018

Un sencillo ejemplo[]

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>

Elementos[]

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>

Grupos[]

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>

Atributos[]

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>

Repeticiones[]

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>

Anotaciones[]

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 interesantes[]

Puede que encuentres interesantes los siguientes enlaces: