Mi Blog
Cómo validar documentos XML, DTDs y SCHEMA con XML Copy Editor

Cómo validar documentos XML, DTDs y SCHEMA con XML Copy Editor

 
(9 votos)

Validar documentos XML es sumamente sencillo. Existen muchas formas y herramientas para su validación, todas muy similares pero con el mismo concepto.

Si queréis aprender como hacer una validación desde Windows, seguid leyendo...

⬇️ Compra en Amazon el hardware que utilizo ⬇️

🔥 ¡DESCÚBRELOS! 🔥

 

 

¿QUE ES XML?

XML, siglas en inglés de eXtensible Markup Language, traducido como "Lenguaje de Marcado Extensible" o "Lenguaje de Marcas Extensible", es un meta-lenguaje que permite definir lenguajes de marcas desarrollado por el World Wide Web Consortium (W3C) utilizado para almacenar datos en forma legible. Proviene del lenguaje SGML y permite definir la gramática de lenguajes específicos (de la misma manera que HTML es a su vez un lenguaje definido por SGML) para estructurar documentos grandes. A diferencia de otros lenguajes, XML da soporte a bases de datos, siendo útil cuando varias aplicaciones deben comunicarse entre sí o integrar información.1

XML no ha nacido únicamente para su aplicación en Internet, sino que se propone como un estándar para el intercambio de información estructurada entre diferentes plataformas. Se puede usar en bases de datos, editores de texto, hojas de cálculo y casi cualquier cosa imaginable.

XML es una tecnología sencilla que tiene a su alrededor otras que la complementan y la hacen mucho más grande, con unas posibilidades mucho mayores. Tiene un papel muy importante en la actualidad ya que permite la compatibilidad entre sistemas para compartir la información de una manera segura, fiable y fácil.

 

 

VENTAJAS DEL XML

  • Es extensible: Después de diseñado y puesto en producción, es posible extender XML con la adición de nuevas etiquetas, de modo que se pueda continuar utilizando sin complicación alguna.
  • El analizador es un componente estándar, no es necesario crear un analizador específico para cada versión de lenguaje XML. Esto posibilita el empleo de cualquiera de los analizadores disponibles. De esta manera se evitan bugs y se acelera el desarrollo de aplicaciones.
  • Si un tercero decide usar un documento creado en XML, es sencillo entender su estructura y procesarla. Mejora la compatibilidad entre aplicaciones. Podemos comunicar aplicaciones de distintas plataformas, sin que importe el origen de los datos, es decir, podríamos tener una aplicación en Linux con una base de datos Postgres y comunicarla con otra aplicación en Windows y Base de Datos MS-SQL Server.
  • Transformamos datos en información, pues se les añade un significado concreto y los asociamos a un contexto, con lo cual tenemos flexibilidad para estructurar documentos.

 

 

DOCUMENTOS XML BIEN FORMADOS Y CONTROL DE ERRORES

Los documentos denominados como «bien formados» (del inglés well formed) son aquellos que cumplen con todas las definiciones básicas de formato y pueden, por lo tanto, analizarse correctamente por cualquier analizador sintáctico (parser) que cumpla con la norma. Se separa esto del concepto de validez que se explica más adelante.

  • Los documentos han de seguir una estructura estrictamente jerárquica con lo que respecta a las etiquetas que delimitan sus elementos. Una etiqueta debe estar correctamente incluida en otra, es decir, las etiquetas deben estar correctamente anidadas. Los elementos con contenido deben estar correctamente cerrados.
  • Los documentos XML solamente permiten un elemento raíz del que todos los demás sean parte, es decir, solo pueden tener un elemento inicial.
  • Los valores atributos en XML siempre deben estar encerrados entre comillas simples o dobles.
  • El XML es sensible a mayúsculas y minúsculas. Existe un conjunto de caracteres llamados espacios en blanco (espacios, tabuladores, retornos de carro, saltos de línea) que los procesadores XML tratan de forma diferente en el marcado XML.
  • Es necesario asignar nombres a las estructuras, tipos de elementos, entidades, elementos particulares, etc. En XML los nombres tienen alguna característica en común.
  • Las construcciones como etiquetas, referencias de entidad y declaraciones se denominan marcas; son partes del documento que el procesador XML espera entender. El resto del documento entre marcas son los datos «entendibles» por las personas.

1.- ELEMENTOS USADOS EN ESTE TUTORIAL

  • Windows 7 64 bits
  • XML Copy Editor 1.2.1.3

 

 

2.- DESCARGA E INSTALACIÓN DE XML COPY EDITOR

Para instalar XML Copy Editor debemos descargarla preferiblemente de su Web Oficial alojada en http://xml-copy-editor.sourceforge.net/. El programa está disponible para Windows, Ubuntu (*.deb) y en código fuente. Una vez descargado el programa, lo instalaremos de la forma habitual en función del Sistema Operativo con el que trabajemos.

XML Copy EditorPantalla principal XML Copy Editor

 

 

3.- VALIDAR XML SIMPLE

Podemos comprobar si nuestro XML está bien formado y validarlo para ver si cumple con nuestros dtd y schemas. Para ello, abriremos nuestro fichero XML y tenemos 2 opciones: comprobar bien formado y validar. Para comprobar si está bien formado nuestro XML haremos click en el tick azul. Veremos un mensaje en la parte inferior indicando si es correcto o no:

XML Copy EditorComprobar sintaxis

Para comprobar si el XML está correcto tanto a nivel sintáctico, como si cumple con los esquemas y dtd asociados, haremos click en el check verde:

XML Copy EditorValidación correcta de XML

El código del XML usado en este ejemplo es el siguiente:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
Autor: Raúl Prieto Fernández
-->
<!DOCTYPE pedidos
[
<!ELEMENT pedidos (pedido)*>
<!ELEMENT pedido (cod_pedido|sucursal|direccion|nombre_trabajador|fecha_pedido|observaciones|plazo_revision|codigo_articulo|unidades|precio_unidad|observaciones_articulo)*>
<!ELEMENT cod_pedido (#PCDATA)>
<!ELEMENT sucursal (#PCDATA)>
<!ELEMENT direccion (#PCDATA)>
<!ELEMENT nombre_trabajador (#PCDATA)>
<!ELEMENT fecha_pedido (#PCDATA)>
<!ELEMENT observaciones (#PCDATA)>
<!ELEMENT plazo_revision (#PCDATA)>
<!ELEMENT codigo_articulo (#PCDATA)>
<!ELEMENT unidades (#PCDATA)>
<!ELEMENT precio_unidad (#PCDATA) >
<!ELEMENT observaciones_articulo (#PCDATA)>
]>

<pedidos>
<pedido>
<cod_pedido></cod_pedido>
<sucursal></sucursal>
<direccion></direccion>
<nombre_trabajador></nombre_trabajador>
<fecha_pedido></fecha_pedido>
<observaciones></observaciones>
<plazo_revision></plazo_revision>
<codigo_articulo></codigo_articulo>
<unidades></unidades>
<precio_unidad></precio_unidad>
<observaciones_articulo></observaciones_articulo>
</pedido>
</pedidos>

 

 

4.- VALIDAR XML + DTD

En el ejemplo anterior, hemos visto que el dtd está incluido en el propio XML, pero muchas veces lo que nos interesa es tener un dtd externo y poder así vincularlo desde multitud de ficheros XML. El proceso de validación es exactamente igual al realizado en el paso anterior:

Abrimos nuestro fichero XML donde podemos ver en el DOCTYPE que lo asociamos a un dtd llamado dtd.dtd dentro de su mismo directorio. Haremos click en el check azul par comprobar si el XML está bien formado:

XML Copy EditorFichero XML bien formado

Para validar tanto a nivel de sintaxis como validad si cumple el XML con nuestro DTD, haremos click en el check verde:

XML Copy EditorError en validación

En el asco anterior, vemos que nos ha dado un error de validación. Lo que sucede es que, si asociamos un dtd externo, no puede haber espacios entre las etiquetas. Por tanto, si eliminamos los espacios y volvemos a validar, el error desaparecerá:

XML Copy EditorValidación XML corregida

El código del XML del ejemplo es:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
Autor: Raúl Prieto Fernández
-->
<!DOCTYPE pedidos SYSTEM "dtd.dtd">

<pedidos>
<pedido>
<cod_pedido></cod_pedido>
<sucursal></sucursal>
<direccion></direccion>
<nombre_trabajador></nombre_trabajador>
<fecha_pedido></fecha_pedido>
<observaciones></observaciones>
<plazo_revision></plazo_revision>
<codigo_articulo></codigo_articulo>
<unidades></unidades>
<precio_unidad></precio_unidad>
<observaciones_articulo></observaciones_articulo>
</pedido>
</pedidos>

El código del DTD del ejemplo es:

<!ELEMENT pedidos (pedido)*>
<!ELEMENT pedido (cod_pedido|sucursal|direccion|nombre_trabajador|fecha_pedido|observaciones|plazo_revision|codigo_articulo|unidades|precio_unidad|observaciones_articulo)*>
<!ELEMENT cod_pedido (#PCDATA)>
<!ELEMENT sucursal (#PCDATA)>
<!ELEMENT direccion (#PCDATA)>
<!ELEMENT nombre_trabajador (#PCDATA)>
<!ELEMENT fecha_pedido (#PCDATA)>
<!ELEMENT observaciones (#PCDATA)>
<!ELEMENT plazo_revision (#PCDATA)>
<!ELEMENT codigo_articulo (#PCDATA)>
<!ELEMENT unidades (#PCDATA)>
<!ELEMENT precio_unidad (#PCDATA) >
<!ELEMENT observaciones_articulo (#PCDATA)>

5.- VALIDAR XML + DTD + SCHEMA

Para validar un XML, con su DTD y con su SCHEMA, primero es necesario asociar el esquema al XML desde las opciones del menú MXL -> Asociar -> XML Schema y seleccionaremos el esquema.

XML Copy EditorAsociar SCHEMA

Para comprobar si está bien formado el XML, haremos click en el check azul:

XML Copy EditorXML bien formado

Para validar el fichero con su correspondiente dtd y SCHEMA, haremos click en el check verde:

XML Copy EditorValidando XML+DTD+SCHEMA

Se puede ver que los datos introducidos no siguen el patrón esperado por el esquema definido. En nuestro caso hemos introducido el valor "1AA-123" cuando el esquema espera LETRA-LETRA-LETRA-NÚMERO-NÚMERO-NÚMERO:

XML Copy EditorEjemplo del SCHEMA

El código del fichero XML del ejemplo es:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
Autor: Raúl Prieto Fernández
-->
<!DOCTYPE pedidos SYSTEM "dtd.dtd">

<pedidos xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schema.xsd">
<pedido>
<cod_pedido>a1234567</cod_pedido>
<sucursal>123213213</sucursal>
<direccion>213213213</direccion>
<nombre_trabajador>213213213213</nombre_trabajador>
<fecha_pedido>2014-01-01</fecha_pedido>
<observaciones>Urgente</observaciones>
<plazo_revision>365</plazo_revision>
<codigo_articulo>1AA-123</codigo_articulo>
<unidades>10</unidades>
<precio_unidad>100</precio_unidad>
<observaciones_articulo></observaciones_articulo>
</pedido>
</pedidos>

El código del fichero DTD del ejemplo es:

<!ELEMENT pedidos (pedido)*>
<!ELEMENT pedido (cod_pedido|sucursal|direccion|nombre_trabajador|fecha_pedido|observaciones|plazo_revision|codigo_articulo|unidades|precio_unidad|observaciones_articulo)*>
<!ELEMENT cod_pedido (#PCDATA)>
<!ELEMENT sucursal (#PCDATA)>
<!ELEMENT direccion (#PCDATA)>
<!ELEMENT nombre_trabajador (#PCDATA)>
<!ELEMENT fecha_pedido (#PCDATA)>
<!ELEMENT observaciones (#PCDATA)>
<!ELEMENT plazo_revision (#PCDATA)>
<!ELEMENT codigo_articulo (#PCDATA)>
<!ELEMENT unidades (#PCDATA)>
<!ELEMENT precio_unidad (#PCDATA) >
<!ELEMENT observaciones_articulo (#PCDATA)>

El código del fichero XSD (SCHEMA) del ejemplo es:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="pedidos">
<xs:complexType>
<xs:sequence>
<xs:element ref="pedido"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="pedido">
<xs:complexType>
<xs:sequence>
<xs:element name="cod_pedido">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[a-zA-Z]{1}[0-9]{7}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="sucursal">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="255"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="direccion">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="255"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="nombre_trabajador">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="128"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="fecha_pedido" type="xs:date"/>
<xs:element name="observaciones">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="Urgente|Incompleto"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="plazo_revision">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:pattern value="[0-9][0-9][0-9]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="codigo_articulo">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z][A-Z][A-Z][\-][0-9][0-9][0-9]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="unidades">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="1000"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="precio_unidad">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="10000"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="observaciones_articulo" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

ENJOY!


Acerca de Mi

RPF

Soy Ingeniero Téc. Industrial Mecánico, Administrador de Sistemas Informáticos, Desarrollador de Aplicaciones Informaticas Web, Técnico Superior en PRL, Experto en Energías Renovables... y trabajo actualmente como Senior DevOPS en HP SCDS.

Contactar conmigo

Dirección: León, España

E-Mail: Contactar

Web: https://www.raulprietofernandez.net

Skype: raul.lnx

APÚNTATE GRATIS

VIP RPF
Entra en la Comunidad VIP y consigue acceso a las descargas en PDF, Trucos y Videotutoriales ocultos y mucho más... ¡Muy Pronto!

Si haces login, serás automáticamente suscrito a mi lista de Newsletter. Siempre podrás borrarte cuando quieras.