viernes, 3 de junio de 2016

Receta C# No. 6-8: Cómo Validar un Documento XML con un Esquema

Índice

1. Introducción
2. Palabras Clave
3. Problema
4. Solucón
5. Discusión de la Solución
5.1 Validación con esquema
6. Práctica: Validación de Documento XML
7. Conclusiones
8. Literatura & Enlaces

1. Introducción

Con esta receta C# se enseña cómo validar la estructura de un documento XML de acuerdo con una especificación de tipos de datos, atributos, orden y anidamiento dada. Esta especificación de conformidad promueve la escritura correcta de los elementos contenidos en el documento. Para lograr esto el programador debe comprender los fundamentos de esquemas y los elementos de programa disponibles en Microsoft .NET Framework para escribir código de contraste entre la especificación de conformidad -esquema- y un archivo de documento XML.

2. Palabras Clave

  • Esquema
  • Validación
  • XML
  • XSD

3. Problema

Validar la estructura de un documento XML usando un esquema.

4. Solución

En .NET Framework se cuenta con la clase XmlReaderSettings para llevar a cabo la validación de un documento XML frente a un esquema de conformidad estructura.

5. Discusión de la Solución

5.1 Validación con esquema

Este mecanismo de validación consiste en una descripción de los tipos permitidos en un documento XML. Esta descripción incluye las restricciones de las estructuras de datos además del tipo de contenido de éstas. La validación de un documento XML facilita el intercambio de datos entre aplicaciones una vez hayan pasado por la prueba de conformidad frente a un esquema.
Validación con esquema
Figura 1. Validación con esquema.
Un esquema, por otra parte, permite la definición de reglas para establecer (Freeman ,2013):
  • Los elementos y atributos que pueden aparecer en el documento.
  • Los tipos de datos para elementos y atributos.
  • La estructura del documento XML y los elementos anidados.
  • El orden y el número de los elementos del documento.
  • Los requerimientos contenido, i.e., vacío, valores fijos, etc.
En el siguiente archivo de validación con esquema se presenta el tipo Empleado con las respectivas reglas de validación de tipo de dato para los elementos ID de empleado, nombre de empleado y correo electrónico empleado.

[Nota: Para saber más más acerca de diferentes esquemas de validación, recomiendo la lectura de XML con C# (C1A3): Validación de Documentos XML con Esquemas y Definición de Tipo de Documentos.]

6. Práctica: Validación de Documento XML

En este ejemplo práctico se crea un archivo de esquema para definir la estructura que debe seguir un archivo de catálogo de productos representado en XML.

El ejemplo consta de los siguientes elementos de programa:
  • Clase Validador: esta clase implementa la lógica para validar un archivo XML frente a un esquema.
  • Clase PruebaVlidador: clase de prueba del validador. Recibe como argumentos desde la línea de comandos el archivo XML a validar y el esquema.
Sobre la línea 10 se define el campo centinela (bandera) para señalar si ocurrió un error durante la validación del archivo XML.


Continuando, con el método ValidarXml(string, string) se llevan a cabo las siguientes operaciones:
  • Líneas  26-27: Se especifica el tipo de validación a realizar; en este caso el de tipo esquema.
  • Líneas 30-31: Carga de la configuración de esquema.
  • Línea 34: Especificación del archivo que contiene el esquema. El primer argumento del método Add indica que no se utilizará ningún namespace.
  • Línea 37: Agregación del manejador de eventos. El método declarado en las líneas 66-73 se encarga de mostrar en la salida estándar los errores de validación.
  • Línea 40: Crea un objeto XmlReader especificando un archivo XML la configuración del esquema.
  • Líneas 43-59: bloque try-catch-finally para la lectura del documento XML, y reporte de errores (si los hubiera).
Archivo C# PruebaValidador.cs [Enlace alternativo][Enlace alternativo]:

En la línea 9 se valida que el número de argumentos pasados desde la línea de comandos sea igual a 2; los cuales corresponden con el nombre del archivo del documento XML y el archivo del esquema de validación. Con la línea 11 se crea una instancia de Validador. Desde esa instancia recién creada se invoca al método ValidarXml (línea 14) con los argumentos de nombre del archivo del documento XML y el nombre del archivo de esquema pasados desde la línea de comandos.


Compilación del archivo Validador.cs:

csc /t:library Validador.cs


Compilación del archivo PruebaValidador.cs:

csc /t:exe /reference:Validador.dll PruebaValidador.cs


Prueba 1 | Prueba de validación sobre un documento XML válido


La primera prueba que se va a realizar incluye este esquema de validación (que será el mismo para la siguiente prueba):

Archivo XSD CatalogoProductos.xsd [Enlace alternativo]:

Ahora el archivo XML que contiene la estructura para un catálogo de productos:

Archivo XML CtalogoProductos.xml [Enlace alternativo]: 

Ejecución assembly:

.\PruebaValidador.exe CatalogoProductos.xml CatalogoProductos.xsd


> Prueba ejecución assembly (local):
Ejecución assembly PruebaValidador.exe
Figura 2. Ejecución assembly PruebaValidador.exe.



Prueba 1 | Prueba de validación sobre un documento XML inválido


El siguiente archivo XML no sigue la especificación de conformidad descrita en el archivo CatalogoProductos.xsd.

Archivo XML CatalogoProductos_Invalido.xml [Enlace alternativo]:

Ejecución assembly:

.\PruebaValidador.exe CatalogoProductos_Invalido.xml CatalogoProductos.xsd

> Prueba de ejecución assembly (local):
Ejecución assembly PruebaValidador.exe con XML inválido
Figura 3. Ejecución assembly PruebaValidador.exe con XML inválido.

7. Conclusiones

Se ha enseñado cómo llevar a cabo la validación de la estructura de un documento XML usando un esquema -este esquema describe el orden, los tipos de datos, atributos, el número de elementos que deben encontrarse en un documento XML, entre otros específicos de estructura-. Este tipo de validación garantiza que los datos intercambiados entre aplicaciones sigan un estándar establecido por las reglas de negocio.

La próxima receta C# describe cómo usar la serialización XML con objetos particulares y personalizados.

8. Literatura & Enlaces

Jones, A., Freeman (2010). Visual C# 2010 Recipes: A Problem-Solution Approach. United States: Apress.
XML con C# (C1A3): Validación de Documentos XML con Esquemas y Definición de Tipo de Documentos (2016, junio 3). Recuperado desde: http://ortizol.blogspot.com.co/2014/08/xml-con-csharp-c1a3-validacion-de-documentos-xml-con-esquemas-y-definicion-de-tipo-de-documentos.html


V

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.