Javadabbadoo.org - Tu comunidad Java parlante XML
Inicio | Cursos infosintesis.net liberados | Java SE Avanzado | Creación de un XML Schema que valida doc. XML
Creación de un XML Schema que valida documentos XML
Paso 2: Operativa

En esta operativa vamos a ir creando en paralelo los documentos pedido.xml y pedido .xsd para irnos familiarizando con la sintaxis de los documentos XML Schema.

Nota: La síntesis de las palabras clave y la sintaxis de los XML Schema la podemos encontrar en Apéndice - Palabras clave y sintaxis de los XML Schema

Primeras modificaciones y comprobaciones de que los documentos XML Schema y XML estan bien formados y bien validados

Vamos a modificar el código del fichero pedido.xml de la siguiente forma

<?xml version="1.0" encoding="UTF-8"?>

<pedido xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
        xsi:noNamespaceSchemaLocation='pedido.xsd'>
 <enviarA>localidad de envío</enviarA>
 <facturarA>localidad de facturación</facturarA>
 <comentario>Líneas de pedido</comentario>
 <articulos>Lista de artículos</articulos>
</pedido>

Y ahora vamos a modificar el código del fichero pedido.xsd de la siguiente forma

<?xml version="1.0" encoding="UTF-8"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            
elementFormDefault="qualified">
 
<xsd:element name="pedido" type="PedidoType"/>

 <xsd:complexType name="PedidoType">
  <xsd:sequence>
   <xsd:element name="enviarA" type="xsd:string"/>
   <xsd:element name="facturarA" type="xsd:string"/>
   <xsd:element name="comentario" type="xsd:string"/>
   <xsd:element name="articulos" type="xsd:string"/>
  </xsd:sequence>
 </xsd:complexType>

</xsd:schema>

Crear un elemento global y una referencia al elemento global

Vamos a hacer que el elemento globla sea el elemento comentario de la siguiente forma

<xsd:element name="comentario" type="xsd:string"/>

Cuando un elemento se repite varias veces en un XML Schema nos puede salir más a cuenta crear un elemento global

Esta es la sintaxis de una declaración local a una referencia de un elemento global

<xsd:element ref="nombreElementoGlobalYaExistente" minOccurs="valor">

Para realizar la referencia al elemento global comentario varmos a tener que modificar la siguiente línea de código

<xsd:element name="comentario" type="xsd:string"/>

También vamos a indicar que la referencia al elemento global comentario puede aparecer una o ninguna vez.

Ahora vamos a añadir el elemento global comentario y a crear una referencia hacia este elemento en el documento pedido.xsd


Compara tu código con la solución propuesta

Añadir un atributo opcional a un tipo complejo

Ampliamos el documento pedido.xml añadiento al elemento pedido el atriibuto fechaPedido

Este es el código del documento pedido.xml con el nuevo atributo

<?xml version="1.0" encoding="UTF-8"?>

<pedido fechaPedido="2006-06-22"
        xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
        xsi:noNamespaceSchemaLocation='pedido.xsd'>
 <enviarA>localidad de envío</enviarA>
 <facturarA>localidad de facturación</facturarA>
 <comentario>Líneas de pedido</comentario>
 <articulos>Lista de artículos</articulos>
</pedido>

Esta es la declaración de un atributo

<xsd:attribute name="nombreAtributo"
                         type
="tipoSimple"
                         use="valor"
                         default="valor"
                         fixed="valor"/>

Ahora vamos a ampliar el documento pedido.xsd


Compara tu código con la solución propuesta

Añadir un nuevo tipo complejo

En el documento pedido.xml modificamos el contenido de texto de los elementos enviarA y facturarA. Estos elementos van a albergar los subelementos nombre, calle, ciudad, estado y codigoPostal

<?xml version="1.0" encoding="UTF-8"?>

<pedido xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
        xsi:noNamespaceSchemaLocation='pedido.xsd'>
 <enviarA>
  
<nombre>Alice Smith</nombre>
  <calle>
123 Maple Street</calle>
  <ciudad>
Cambridge</ciudad>
  <estado>
MA</estado>
  <codigoPostal>
12345</codigoPostal>
 </enviarA>

 <facturarA>
  
<nombre>John Bob</nombre>
  <calle>
242 Main Street</calle>
  <ciudad>
Beverly Hills</ciudad>
  <estado>
CA</estado>
  <codigoPostal>
90210</codigoPostal>
 </facturarA>

 <comentario>Líneas de pedido</comentario>
 <articulos>Lista de artículos</articulos>
</pedido>

Ahora tenemos que realizar modificaciones al documento pedido.xsd teniendo en cuenta lo siguiente

Ahora vamos a ampliar el documento pedido.xsd


Compara tu código con la solución propuesta

Añadir un atributo fijo a un tipo complejo

Ampliamos el documento pedido.xml añadiento a los elementos enviarA y facturarA el atriibuto pais

<?xml version="1.0" encoding="UTF-8"?>

<pedido xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
        xsi:noNamespaceSchemaLocation='pedido.xsd'>
 <enviarA pais="EEUU">
  <nombre>Alice Smith</nombre>
  <calle>123 Maple Street</calle>
  <ciudad>Cambridge</ciudad>
  <estado>MA</estado>
  <codigoPostal>12345</codigoPostal>
 </enviarA>
 <facturarA>
  <nombre>John Bob</nombre>
  <calle>242 Main Street</calle>
  <ciudad>Beverly Hills</ciudad>
  <estado>CA</estado>
  <codigoPostal>90210</codigoPostal>
 </facturarA>
 <comentario>Líneas de pedido</comentario>
 <articulos>Lista de artículos</articulos>
</pedido>

Ahora vamos a ampliar el documento pedido.xsd


Compara tu código con la solución propuesta

Creación de un tipo anónimo complejo

Ampliamos el documento pedido.xml añadiendo dos subelementos articulo al elemento articulos

<?xml version="1.0" encoding="UTF-8"?>

<pedido xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
        xsi:noNamespaceSchemaLocation='pedido.xsd'>
 <enviarA pais="EEUU">
  <nombre>Alice Smith</nombre>
  <calle>123 Maple Street</calle>
  <ciudad>Cambridge</ciudad>
  <estado>MA</estado>
  <codigoPostal>12345</codigoPostal>
 </enviarA>
 <facturarA>
  <nombre>John Bob</nombre>
  <calle>242 Main Street</calle>
  <ciudad>Beverly Hills</ciudad>
  <estado>CA</estado>
  <codigoPostal>90210</codigoPostal>
 </facturarA>
 <comentario>Líneas de pedido</comentario>
 <articulos>
  <articulo>
   <nombreProducto>
Cortacésped</nombreProducto>
   <precioEEUU>
148.95</precioEEUU>
   <comentario>
Eléctrico con baterías recargables</comentario>
   <fechaEnvio>
2006-06-28</fechaEnvio>
  </articulo>
  <articulo>
   <nombreProducto>
Bolsa de tierra de abono marca Acme</nombreProducto>
   <precioEEUU>
7.20</precioEEUU>
  </articulo>
 </articulos>

</pedido>

Ahora vamos a modificar el documento pedido.xsd teniendo en cuenta lo siguiente


Compara tu código con la solución propuesta

Creación de un tipo anónimo simple con restricción para limitar valores numéricos

Ampliamos el documento pedido.xml añadiendo un subelemento cantidad a los elementos articulo

<?xml version="1.0" encoding="UTF-8"?>

<pedido xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
        xsi:noNamespaceSchemaLocation='pedido.xsd'>
 <enviarA pais="EEUU">
  <nombre>Alice Smith</nombre>
  <calle>123 Maple Street</calle>
  <ciudad>Cambridge</ciudad>
  <estado>MA</estado>
  <codigoPostal>12345</codigoPostal>
 </enviarA>
 <facturarA>
  <nombre>John Bob</nombre>
  <calle>242 Main Street</calle>
  <ciudad>Beverly Hills</ciudad>
  <estado>CA</estado>
  <codigoPostal>90210</codigoPostal>
 </facturarA>
 <comentario>Líneas de pedido</comentario>
 <articulos>
  <articulo>
   <nombreProducto>Cortacésped</nombreProducto>
   <cantidad>1</cantidad>
   <precioEEUU>148.95</precioEEUU>
   <comentario>Eléctrico con baterías recargables</comentario>
   <fechaEnvio>2006-06-28</fechaEnvio>
  </articulo>
  <articulo>
   <nombreProducto>Bolsa de tierra de abono marca Acme</nombreProducto>
   <cantidad>1</cantidad>
   <precioEEUU>7.20</precioEEUU>
  </articulo>
 </articulos>
</pedido>

Ahora vamos a modificar el documento pedido.xsd teniendo en cuenta lo siguiente


Compara tu código con la solución propuesta

Creación de un tipo simple con una restricción basada en una expresión regular

Ampliamos el documento pedido.xml añadiendo el atributo codigoStock al elemento articulo

<?xml version="1.0" encoding="UTF-8"?>

<pedido xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
        xsi:noNamespaceSchemaLocation='pedido.xsd'>
 <enviarA pais="EEUU">
  <nombre>Alice Smith</nombre>
  <calle>123 Maple Street</calle>
  <ciudad>Cambridge</ciudad>
  <estado>MA</estado>
  <codigoPostal>12345</codigoPostal>
 </enviarA>
 <facturarA>
  <nombre>John Bob</nombre>
  <calle>242 Main Street</calle>
  <ciudad>Beverly Hills</ciudad>
  <estado>CA</estado>
  <codigoPostal>90210</codigoPostal>
 </facturarA>
 <comentario>Líneas de pedido</comentario>
 <articulos>
  <articulo codigoStock="872-AA">
   <nombreProducto>Cortacésped</nombreProducto>
   <cantidad>1</cantidad>
   <precioEEUU>148.95</precioEEUU>
   <comentario>Eléctrico con baterías recargables</comentario>
   <fechaEnvio>2006-06-28</fechaEnvio>
  </articulo>
  <articulo codigoStock="926-BC">
   <nombreProducto>Bolsa de tierra de abono marca Acme</nombreProducto>
   <cantidad>1</cantidad>
   <precioEEUU>7.20</precioEEUU>
  </articulo>
 </articulos>
</pedido>

Vamos a realizar la última modificación del documento pedido.xsd teniendo en cuenta lo siguiente

Nota: En este vínculo encontraremos una tabla con la sintaxis de las expresiones regulares Apéndice - Sintaxis de las expresiones regulares


Compara tu código con la solución propuesta

Página anterior
Ignasi Pérez Valls
Infosintesis Solutions Group


Marzo 2009
Dudas y comentarios: Foro [2-06] XML - XML Schema
 
 
 
 
JavaDabbaDoo.org
Tu comunidad Java parlante. Cursos abiertos, tutoriales y mucho mucho más ...