Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
��������� � ������ �������� �������� �� ����� �������������� � � ���������� � 73;34 !)C& *3� 2.5.1. Procesamiento de documentos XML. Un analizador o parser XML es una herramienta encargada de leer documentos XML [17] , poder acceder a sus elementos y comprobar si el documento es sintácticamente válido. Estas herramientas son módulos, bibliotecas o programas que se ocupan de transformar un archivo XML en una representación interna. Entre esos analizadores o parsers cabe destacar: • SAX (Simple API for XML): se encarga de recorrer la estructura del documento generando eventos que corresponden a los elementos que se va encontrando. • DOM (Document Object Model): representa el archivo en una estructura tipo árbol que usará para leer el documento. SAX y DOM permiten analizar el lenguaje XML y definir la estructura de un documento. La validación del documento XML consiste en comprobar que el documento, además de estar bien formado de acuerdo a las reglas de XML, responde a una estructura definida en una Definición del Tipo de Documento (DTD) o en un XMLSchema. Este procesamiento del documento XML se subdivide en dos fases: 1) Procesamiento de entrada XML: � Analizar y validar. � Reconocer/buscar información importante basándonse en su localización o en su etiquetado. � Extraer la información importante una vez que se ha localizado. � Opcionalmente, mapear/unir la información recuperada a objetos de negocio 2) Precesamiento de salida XML: � Construir un modelo del documento. � Aplicar hojas de estilo XSLT o serializar directamente a XML. Estas fases son diferentes en SAX y en DOM. La Tabla 36 muestra las fases para cada uno de los dos analizadores: ��������� � ������ �������� �������� �� ����� �������������� ���������� � Procesamiento Fase SAX DOM Entrada XML Analizar y validar Interno Interno o basado en SAX Reconocer y buscar Capturar eventos con manejadores de eventos Buscar en el árbol con buscadores. Extraer Capturar eventos Obtener valores de atributos, contenidos de nodos: métodos del API Mapear/unir Crear objetos de negocio desde la información extraída Crear objetos de negocio desde la información extraída Salida XML Construcción No hay soporte por defecto. Parte implícita del modelo: API de métodos factoría Serialización No hay soporte por defecto, pero puede hacerse con manejadores de eventos Soporte de implementación específico, o a través de transformaciones XSLT. Tabla 36.- Fases del procesamiento de un documento XML para SAX y DOM. 2.5.2. API SAX. 73;37323 �������������.��������������!��� !)3� Simple API for XML (SAX), es una interfaz simple que se encarga de procesar o analizar la información del documento XML por eventos. SAX lee el documento secuencialmente de principio a fin, sin cargarlo en memoria, de forma que cuando encuentra un elemento se encarga de lanzar su evento sociado. Cuando el evento es lanzado éste puede ser capturado para realizar una función determinada. Esta API está definida en el paquete: javax.xml.parsers. Para que estos eventos se puedan capturarse y realizar las operaciones que se deseen se debe usar un manejador de eventos. Un manejador es una clase con una serie de métodos y cada método se ejecutará cuando el analizador capture su evento asociado. Estos eventos se producen al leer un documento (al comienzo del documento, apertura o cierre de un elemento, al encontrar una instrucción de proceso o un comentario, etc.). SAX 2.0 define cuatro interfaces básicas de manejadores de eventos: • ContentHandler: se utiliza para tratar eventos generales del documento, como apertura y cierre de etiquetas o cuando aparecen bloques de texto. • DTDHandler: invocado para tratar eventos relacionados con las DTD’s. • EntityResolver: se utiliza para resolver referencias a entidades externas. • ErrorHandler: maneja los errores y warnings. Para poder hacer uso del analizador primero se debe obtener una instancia de una factoría de analizadores (SAXParserFactory). Con esta factoría se crea el analizador (SAXParser, javax.xml.parsers) que encapsula un objeto de la interfaz ��������� � ������ �������� �������� �� ����� �������������� � � ���������� � Parser (org.xml.sax). A este analizador se le asocia el/los manejador/es, que poseen los métodos que se deben ejecutar al capturar un evento lanzado por el analizador. Y, por último, se le pasa al analizador el documento para empezar a leerlo y validarlo. Ilustración 18.- Modelo de la API SAX. Los métodos del manejador no están implementados, luego se tendrán que codificar aquellos que se quieran utilizar. Representan la lógica que se debe ejecutar al llevarse a cabo cada evento, entre ellos destacan: Método Lanzamiento del evento startDocument() Invocado cuando comienza un documento. endDocument() Invocado cuando finaliza un documento. startElement(nombre, atributos) Invocado cuando se abre una etiqueta. endElement(nombre) Invocado cuando se cierra una etiqueta. characters(texto) Invocado al leer el texto contenido en cada elemento. Tabla 37.- Métodos del manejador. Lo explicado anteriormente es lo que se ha usado en este proyecto para realizar la validación y lectura de los ficheros de configuración y de GPC así como la validación de los documentos XML de Guías de Práctica Clínica con respecto a un XML-Schema. 73;37373 �����������������������!��� !)3� Las características generales que definen la API SAX se resumen en: • SAX define una API para un analizador basado en eventos. Ilustración 19.- Ejemplo de llamada de eventos en una línea de un documento XML. M/" 8$(&%"!N��'"0#�ME/" 8$(&%"!N� �* + � ��� �+������ �* + � ��� ��� �� �* + � ����+������ ��������� � ������ �������� �������� �� ����� �������������� ���������� � • El analizador lee un documento XML desde el principio hasta el final, y cada vez que reconoce una síntaxis de construcción, se lo notifica a la aplicación que lo está ejecutando. • Procesamiento de un documento fuente como un stream de eventos. • Los eventos son disparados mientras se analiza el documento como un flujo continuo de retrollamadas e invocaciones a métodos. • Los eventos están anidados de la misma forma que los elementos en el documento, por lo tanto, no se crea ningún modelo de documento intermedio. • Es más eficiente en cuanto al tiempo y la memoria empleados en el análisis ya que SAX no necesita la creación de un modelo de objeto como DOM. • Permite la validación de un documento XML. Estas características hacen que SAX sea apropiado para la lectura y validación de documentos en los que sólo sea necesario procesarlo una sola vez, ya que SAX no crea un modelo y lo mantiene en memoria para su posterior uso. También es ideal en el caso de tener archivos de gran tamaño ya que lee el documento sin ocupación de memoria. SAX, con estas características, es suficiente para las labores de validación del documento XML de GPC y de los ficheros de configuración así como para la lectura de estos últimos. Por ello SAX con un menor gasto de memoria y mayor rapidez es la mejor elección para el uso en este servicio de gestión. 2.5.3. API DOM. 73;39323 �������������.��������������!���& *3� El API "Document Object Model" (DOM) es un conjunto de interfaces que describen una estructura abstracta para un documento XML. DOM carga el documento XML entero en memoria con una estructura tipo árbol. Cada elemento del documento XML se representa con un nodo (DOMNode). DOM está definido en los paquetes org.w3c.dom y javax.xml.parsers. El árbol jerárquico de información en memoria permite que a través del manejador pueda manipularse la información: crear o eliminar información de un nodo en cualquier punto del árbol, acceder o cambiar su contenido y mover la herencia de nodos. Para poder hacer uso del parser se debe obtener una instancia de unafactoría analizadora (DocumentBuiderFactory). Con esta factoría se crea el analizador (DocumentBuilder) que es capaz de producir un nodo Document que cumple la especificación DOM, es decir, crear el inicio del árbol. Se puede crear un nodo Document vacío con el método newDocument() o crear el árbol completo de un ��������� � ������ �������� �������� �� ����� �������������� � � �������� � � documento XML pasándole éste al analizador con el método parser(documento_XML). A este analizador se le asocia/n el/los manejador/es, que indicarán las operaciones a realizar al capturar un evento lanzado por el analizador. Estas operaciones a realizar se encuentran definidas en sus métodos. Y, por último, se le pasa al analizador el documento para empezar a leer el documento y validarlo. Ilustración 20.- Modelo DOM. 73;39373 ����������������������!���& *3� Las características principales de la API DOM son las siguientes: • DOM representa en memoria el documento XML mediante una estructura tipo árbol. • Cada elemento del documento XML se representa con un nodo dentro del árbol. • Se proporcionan gran variedad de funciones para navegar a través del árbol DOM. • Permite manipular el árbol en memoria, añadiendo un nuevo elemento o eliminando uno existente, actualizándolo o únicamente consultarlo. • Permite la validación de un documento XML. DOM permite disponer de la estructura del documento XML en memoria, luego es apropiado para el manejo de documentos XML que no sean de gran tamaño, ya que implicaría un gasto de memoria considerable. Está orientado a aplicaciones en las que se quiere consultar el documento varias veces o incluso modificarlo gracias, también, a que el árbol permanece en memoria. Sin embargo hay que tener en cuenta que el almacenamiento del documento XML en memoria mediante la estructura en árbol requiere de un coste en tiempo adicional además del coste en memoria. ��������� � ������ �������� �������� �� ����� �������������� ���������� � 2.5.4. Diferencias entre SAX y DOM. La principal diferencia entre DOM y SAX es que mientras el primero tiene acceso al documento completo, es decir, que todos los elementos y atributos están disponibles a la vez, en SAX sólo está disponible el elemento actual. En las siguientes figuras se muestra el proceso de cada analizador: Ilustración 21.- Proceso al parsear con SAX. Ilustración 22.- Proceso al parsear con DOM. Las Tabla 38 se ilustran las diferencias entre las APIs de SAX y DOM: SAX DOM Modelo basado en eventos Estructura de datos tipo árbol Acceso serie (flujo de eventos) Acceso aleatorio (estructura de datos en memoria) Bajo uso de memoria (sólo se generan eventos) Alto uso de memoria (todo el documento se carga en memoria) Para procesar partes del documento (capturar eventos importantes) Para editar el documento (procesar la estructura de datos en memoria) Para procesar el documento sólo una vez (flujo de eventos temporal). Para procesar el documento múltiples veces (documento cargado en memoria). Tabla 38.- Diferencias entre SAX y DOM. � ��������� � ������ �������� �������� �� ����� �������������� � � ���������� � Y por último, la siguiente tabla muestra cuándo es más útil utilizar cada uno de los analizadores: SAX DOM Cuando no haya una modificación estructural del documento. Para modificar el documento. Menor gasto de memoria y mayor rapidez. Si se necesita realizar múltiples procesados. Si sólo se necesitan partes de documentos Evita tener que volver a analizar el documento Para documentos XML grandes, en donde sólo haya que procesar una pequeña parte de la información. Para documentos XML pequeños que necesiten ser procesados en su práctica totalidad. Permite recorrer secuencialmente un documento XML y responder a una serie de eventos. Evita tener que construir tu propio árbol. Tabla 39.- Casos en los que usar SAX o DOM. 2.5.5. Conclusión. Los analizadores son herramientas para el manejo de documentos XML, desde la lectura o modificación del documento hasta la validación del mismo. A lo largo de los distintos apartados se han ido mostrando las características y funcionamiento de cada uno de los analizadores. En ellos se aclara que SAX es el mejor para el servicio que se va a implementar: leer y validar los fichero XML de configuración y de GPC. Esta elección ha sido la seleccionada principalmente porque se trata de documentos que en esos casos sólo van a ser consultado una vez, luego el coste en memoria y tiempo va a ser positivo.
Compartir