viernes, 29 de agosto de 2014

XML con C# (C1A4): Analizadores (Parsers) de Documentos XML

Índice

0. Introducción
1. ¿Qué es un Analizador XML?
2. Categorías de los Analizadores
2.1 DOM (Document Object Model)
2.2 SAX (Simple API for XML)
2.3 Otras clasificaciones
3. Conclusiones
4. Glosario
5. Literatura & Enlaces

0. Introducción

A lo largo de este artículo de XML con C# vamos a conocer los esenciales acerca de uno de los componentes para la manipulación, escritura y lectura de documentos XML: los analizadores. Comprenderemos que estas piezas de software son fundamentales cuando se trata de analizar un documento XML para crear significado sobre los datos representados en la estructura del documento; y partir de esta operación crear conocimiento útil para un contexto de aplicación en particular.

1. ¿Qué es un Analizador XML?

Un analizador de un documento XML, también conocido por el término anglosajón parser, es una pieza de software que se encarga de leer, escribir y manipular los elementos que comprenden la estructura de todo el documento XML. Esta tarea va a permitir crear significado sobre el contenido del documento, además de extraer información para crear conocimiento útil para el contexto de la aplicación que estemos construyendo.


Por otro lado, un sinónimo para referirnos a este componente es el de procesador. Como su nombre lo indica, y para parafrasear el párrafo anterior, un procesador se encarga (valga el pleonasmo) de procesar las piezas (elementos) de información representados como una estructura de árbol propia de este lenguaje de marcado extensible (cfr. ¿Qué es XML?).


En la siguiente sección trataremos las dos categorías a nivel de procesamiento de un analizador XML:
  • Analizadores basados en DOM, y
  • Analizadores basados en SAX.

2. Categorías de los Analizadores

2.1 DOM (Document Object Model)

DOM [2] es una convención multiplataforma y de independencia de lenguaje para la manipulación (lectura, escritura) de un documento XML. Estas características han sido el producto de la estandarización dirigida por la organización de estándares abiertos W3C. DOM es el tipo de procesador o analizador de documentos más común y popular hoy en día. Esto se debe principalmente a:
  • Representación arbórea de su estructura
  • Constante evolución (cfr. [2])
  • Simplicidad de manipulación
  • Validación eficiente del documento XML
Para resaltar su representación arbórea observemos la Figura 1:
Estructura arbórea de un documento XML
Figura 1. Estructura arbórea de un documento XML.
Esta estructura arbórea invertida es útil para el análisis del documento. El analizador (parser) basado en DOM empieza carga toda esta estructura en memoria para las consiguientes tareas de manipulación, escritura, y lectura. Aquí hay que resaltar que el hecho de cargar en memoria todo el contenido de un documento XML puede representar poco viable a nivel de eficiencia cuando se trata de enormes cantidades de datos y se cuenta con una relativa baja disponibilidad de memoria de trabajo. Frente a este aspecto el programador debe ser un muy cuidadoso al dimensionar el o los servidores o máquinas clientes para este análisis.

Sin embargo, esto también puede representar una ganancia a la propiedad de acceso aleatorio del contenido del árbol: el programador puede dirigirse a cualquier área específica del documento sin estar atado a una única dirección de lectura (i.e., arriba-abajo).


Por otro lado, Microsoft cuenta con una implementación propia de este analizador DOM:
Parser DOM de Microsoft
Figura 2. Parser DOM de Microsoft [1].

2.2 SAX (Simple API for XML)

Otro de los analizadores (procesadores, o parsers) de documentos XML disponible es SAX [3]. A diferencia de su homólogo, DOM, SAX no carga todo el contenido del documento en memoria principal (o de trabajo), en su lugar realiza un análisis unidireccional (arriba-abajo) según vayan ocurriendo eventos (de ahí que también se le conozca analizador orientado a eventos).

Continuando, cuando el programador ha especificado un elemento de interés sobre el documento XML, el analizador SAX disparará un evento que puede ser manipulado por el programador para llevar a cabo una tarea específica. La manipulación sólo está restringida a la lectura. Esto se debe a su modelo de acceso: secuencial.

A lo dicho anteriormente, es decir, frente a la limitación de solo lectura del documento XML, esta idea también puede representar una ventaja cuando se trata de analizar un documento con una ingente cantidad de información, que en el caso de usar un analizador DOM podría eventualmente generarse problemas en el rendimiento a la escasez de memoria de trabajo [1].


Igualmente, Microsoft también cuenta con un componente disponible para este tipo de analizador:
Parser SAX de Microsoft
Figura 3. Parser SAX de Microsoft [1].

2.3 Otras clasificaciones

Los analizadores o procesadores de documentos XML también se pueden clasificar a nivel de validación como:
  • Analizadores de validación
  • Analizadores de no-validación
En el caso de los primeros (i.e., analizadores de validación) la operación de validación se lleva a cabo contrastando el documento XML frente una Definición de Tipo de Documento (DTD) o un esquema (cfrValidación de Documentos XML con Esquemas y Definición de Tipo de Documentos); propiedad de la que carecen los analizadores de no-validación.


En lo que respecta a la infraestructura de .NET Framework, este cuenta con lenguaje de consulta estructurado LINQ [5], el cual posee con un conjunto de extensiones para ofrecer los mecanismos necesarios para la lectura y escritura de documentos XML. Esto queda anotado en [1]:
LINQ de Microsoft .NET Framework
Figura 3. LINQ de Microsoft .NET Framework [1].

3. Conclusiones

Nos ha quedado claro que los procesadores, parsers, o analizadores comprenden un componente o artefacto de software para crear significado de los elementos integrales de un documento XML. Reconocimos que existen dos implementaciones comunes y populares de este tipo de analizadores: DOM y SAX. El primero orientado al acceso aleatorio para la manipulación, lectura y escritura de documentos XML; el segundo, con capacidades para el manejo de documentos XML con un ingente cantidad de datos y, además, orientado a eventos. Al final vimos otras tipologías de analizadores: con validación y sin validación. En el próximo artículo hablaremos acerca de la resolución de problemas de representación e intercambio de datos: XSLT.

4. Glosario

  • Acceso aleatorio
  • Acceso secuencial
  • Analizador
  • Documento
  • DOM
  • DTD
  • Esqumea
  • Evento
  • LINQ
  • Memoria de trabajo
  • Memoria principal
  • Orientado a eventos
  • Parser
  • SAX
  • XML

5. Literatura & Enlaces

[1]: Beginning XML with C# 2008 From Novice to Professional by Bipin Joshi. Copyright 2008 Bipin Joshi, 978-1-4302-0998-0.
[2]: Document Object Model - Wikipedia, the free encyclopedia - https://en.wikipedia.org/wiki/Document_Object_Model
[3]:  XML con C# (C1A1): ¿Qué es XML? | OrtizOL - Experiencias Construcción Software (xCSw) - http://ortizol.blogspot.com/2014/08/xml-con-csharp-c1a1-que-es-xml.html
[4]: XML con C# (C1A3): Validación de Documentos XML con Esquemas y Definición de Tipo de Documentos | OrtizOL - Experiencias Construcción Software (xCSw) - http://ortizol.blogspot.com/2014/08/xml-con-csharp-c1a3-validacion-de-documentos-xml-con-esquemas-y-definicion-de-tipo-de-documentos.html
[5]: LINQ (Language-Integrated Query) - http://msdn.microsoft.com/en-us/library/bb397926.aspx


A

No hay comentarios:

Publicar un comentario

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