Podemos procesar documentos XML desde programas Cobol usando el mandato XML PARSE. Este mandato es el interface de alta velocidad del lenguaje Cobol, que es parte del “run-time” del compilador.
El tratamiento de un documento XML implica el control en ambos sentidos. XML PARSE especifica un procedimiento que recibe control desde el analizador de XML para manejar sus eventos. Tienes que usar registros especiales en el programa para cambiar información con el analizador.
Utiliza estas facilidades de COBOL para procesar documentos XML:
- Mandatos XML PARSE para comenzar el analizador XML e identificar el documento y procesar en la PROCEDURE.
- Procedimientos en la “PROCEDURE” para controlar el analizador: recibir y procesar eventos XML, y fragmentos de documentos asociados y opcionalmente manejar excepciones.
- Registros especiales para recibir y pasar información: XML-CODE para determinar el estado del analizador XML.
- XML-EVENT para recibir el nombre de cada evento XML.
- XML-TEXT para recibir fragmentos de documento desde un documento alfanumérico.
- XML-NTEXT para recibir fragmentos de documento XML desde datos nacionales.
XML PARSER en Cobol
El COBOL Enterprise proporciona un interface basado en eventos que le permite analizar documentos XML y transformarles a estructuras de datos Cobol. El analizador de XML busca fragmentos (asociados con eventos XML) dentro del documento, y los procesa (en la PROCEDURE) actuando sobre estos fragmentos.
En todas partes de esta operación, el control pasa hacia adelante y hacia atrás entre el analizador gramatical y su procedimiento.
Este cambio comienza usando el XML PARSE, que designa el nombre de la rutina que va a analizar el documento. Cada ejecución de la rutina analiza el documento e informa del siguiente evento, devolviendo a su rutina el fragmento encontrado, y así una y otra vez.
También podemos especificar en el mandato XML PARSE dos declaraciones imperativas al que queremos pasar el control al final del analizador:
- Uno para la terminación normal.
- Y otro si el mandato termina con salidas de excepción.
Flujo del analizador XML
Normalmente, el analizador continúa hasta que todo el documento XML ha sido analizado.
Cuando el analizador gramatical XML analiza documentos XML, los comprueba para la mayor parte de aspectos, tanto de forma, como de definición, en la especificación XML. Un documento está bien formado si se adhiere a la sintaxis XML y sigue algunas reglas adicionales, como el empleo apropiado de etiquetas de final y la unicidad de nombres de atributo.
Acceso a documentos XML
Antes de analizar un documento XML con el mandato XML PARSE, debe hacer que el documento esté accesible para nuestro programa.
El método más probable para la adquisición del documento es a través de un mensaje MQ SERIES, una cola TS o la COMMAREA de CICS, o un mensaje de IMS.
Si el documento XML que usted quiere analizar está soportado en un archivo, utilizaremos los mandatos que Cobol nos proporciona para colocar el documento en un área de datos en nuestro programa:
- Una entrada FILE-CONTROL para definir el fichero.
- El mandato OPEN para abrir el fichero.
- El mandato READ para leer todos los registros del fichero en un área de datos alfanumérica o datos que estarán definidos en la WORKING-STORAGE SECTION del programa.
- Opcionalmente un mandato STRING para concatenar todos los registros separados, juntos, en una corriente continua, para quitar espacios en blanco extraños, y manejar registros de longitud variable.
Análisis de Documentos XML
Para analizar documentos XML, usaremos el mandato XML PARSE:
XML PARSE XMLDOCUMENTO PROCESSING PROCEDURE XML-MANEJADOR-EVENTOS ON EXCEPTION DISPLAY 'XML error documento ' XML-ERROR STOP RUN NOT ON EXCEPTION DISPLAY 'XML documento bien analizado.' END-XML.
EL XML PARSE analiza el área de datos XMLDOCUMENTO (ver ejemplo) que contiene el documento XML. En la DATA DIVISION le declaramos como un campo alfanumérico (o campo nacional de datos).
Después especificamos el nombre de la Rutina de la PROCEDURE que va a analizar los eventos de XML desde el documento (en el ejemplo la rutina es XML-MANEJADOR-EVENTOS).
Además podemos especificar cada uno o ambas de las declaraciones imperativas para recibir el control al final del análisis:
ON EXCEPTION, para recibir el control si se produce una terminación excepcional NOT ON EXCEPTION, para recibir el control si el analizador termina bien.
Podemos finalizar el mandato XML PARSE con el terminador END-XML.
El intercambio de control entre su analizador XML y la rutina de la PROCEDURE continúa hasta que ocurren una de las siguientes cosas:
- Todo el documento XML ha sido analizado, indicado por el evento END-OF-DOCUMENT.
- El analizador detecta un error en el documento y lanza un evento EXCEPTION. Su rutina de la PROCEDURE no reinicializa el registro especial XML-CODE a cero antes de retornar al analizador gramatical.
- Terminamos el análisis deliberadamente poniendo el registro especial XML-CODE a -1 antes de retornar al analizador.