Importar ficheros XML con SAS


En otra entrada previa hemos visto cómo importar ficheros json, en esta nos vamos a fijar en la importación de ficheros xml.

Empezaré diciendo que XML significa «Extensible Markup Language». Son ficheros de texto donde el contenido viene marcado con unas etiquetas con una sintaxis parecida a la del HTML, lo que le confiere una estructura a la información que contiene. En realidad XML es la generalización del lenguaje HTML. El contenido de un fichero XML puede ser tan complejo que más que ser una tabla es más bien una pequeña base de datos con varias tablas relacionadas entre si.

El procedimiento de importación de un XML es parecido al de un json. Se crea una librería donde se importan las distintas tablas de la estructura del fichero.

Para este ejemplo tomaré un fichero de la Agencia Española de Meteorología que publica a través de su web Opendata y revisando la documentación del fichero que publica una organización de estándares llamada OASIS obtengo un fichero XSD que contiene la definición del fichero XML.

Con todo ello cargo los dos ficheros XML y XSD con un filename y a través de un libname creo la librería AEMET que contendrá los ficheros. Estos pueden ser copiados luego normalmente a cualquier otra librería si tienen que ser manipulados.

filename AEMET "&ruta/input/Z_CAP_C_LEMM_20200322101800_AFAZ691703COCO2321.xml";
filename map "&ruta/CAP.xsd";
libname AEMET xmlv2 xmlmap=map automap=replace;

Lo importante aquí en el comando libname es que el parámetro que indica el motor (o tipo) de la librería puede ser xml o xmlv2. Yo he conseguido hacerlo funcionar con la versión 2 y además he tenido que añadir el parámetro automap porque tras varios intentos de importar el XML no me estaba funcionando porque el mapeo del fichero que hizo SAS en un principio parece que no se refrescaba. Esta opción fuerza que vuelva a mapear el fichero con el fichero que le pasamos con el xmlmap.

Este es el resultado de la importación del fichero: una nueva librería AEMET con seis tablas:

libreria_AEMET

El fichero XSD sirve además, normalmente, para hacer una validación del contenido y estructura del XML. Lamentablemente libname no realiza esa función en SAS 9.4.