LibBslXML
La idea del acceso simple a estructuras de datos XML para programadores es un tema muy atractivo, pero más complejo de lo que parece a primera vista.
La cantidad de estructuras que se utilizan para programación hacen que una API completa, sin perder la limpieza, sea muy difícil de realizar.
Nuestra primera intención ha sido crear un modelo de acceso a los datos que emule las estructuras y vectores de los lenguajes imperativos mayoritarios. De esta manera, un programador acostumbrado a lenguajes de programación imperativos tendrá un período de aprendizaje casi nulo para las funciones básicas y de apenas una hora para funciones avanzadas.
Historia
La biblioteca libbslxml fue desarrollada inicialmente por Carlos Manzanedo y Jordi Polo en Blue Sock.
Actualmente dicha empresa no presta soporte sobre libbslxml, siendo Napsis la que mantiene y soluciona los problemas que afecten a la biblioteca.
Libbslxml fue utilizada como núcleo de muchos programas realizados en Blue Sock por Carlos Manzanedo y Jordi Polo. Entre otros, el particionador CoolDrive y el instalador CoolBlue de la distribución BSLinux.
Gran parte de los programas desarrollados por Napsis hacen uso intensivo de XML como lenguaje de modelado de datos e incluso de intercambio de datos entre programas. Por esta razón libbslxml se utiliza en programas como nTPV, dcopfx2000, nDisk, libnxmlparted o xmlmanage.
Uso
La biblioteca libbslxml está implementada en C++, pero crear una versión similar en C sería sencillo. Dada la actual dependencia de QT o TinyQT, la mayoría de las salidas proveen un QString. Libbslxml permite las siguientes funcionalidades:
- Acceso de lectura/escritura de datos a la manera de estructuras y vectores de lenguajes imperativos mayoritarios
- Ubicación a nivel de rutas relativas o rutas absolutas
- Posibilidad de crear y leer atributos de las etiquetas
- Funciones de búsqueda sobre el XML a nivel de contenidos e información
- Trabajo con Nodos y Atributos
- Formateo del XML en texto
- Funciones de creación y borrado de dominios y etiquetas
- Funciones de copia de secciones de un documento a otro
- Funciones que permiten contar etiquetas dentro de un dominio
- Validación contra DTDs (a través de libxml2)
Instalación
Para instalar libbslxml hay que seguir unos sencillos pasos:
Nota: Para compilar libbslxml es necesario tener instalada cualquier versión de la biblioteca libxml2 y sus cabeceras.
Descargar el paquete
Descomprimir el paquete:
tar xzf libbslxml.0.2.1.tar.gzCompilar:
makePara instalar la biblioteca, ejecutar como superusuario:
make install
Ejemplos
Para información acerca de la interfaz de programación de la biblioteca se puede consultar la API completa de la biblioteca.
Código de ejemplo para generar un XML:
XmlConfig *xml = new XmlConfig();
xml->createElementSetDomain("hardware.cpus.cpu");
xml->createElement("id","0");
xml->createElement("frequency","1546");
xml->delDomain();
xml->createElementSetDomain("hardware.cpus.cpu");
xml->createElement("id","1");
xml->createElement("frequency","2000");
xml->delDomain();
xml->save("/tmp/prueba.xml");
El fragmento de XML generado:
<?xml version = '1.0' encoding = 'UTF-8'?>
<AUTOMATICALLY_GENERATED_XML>
<hardware>
<cpus>
<cpu>
<id>0</id>
<frequency>1546</frequency>
</cpu>
<cpu>
<id>1</id>
<frequency>2000</frequency>
</cpu>
</cpus>
</hardware>
</AUTOMATICALLY_GENERATED_XML>
La lectura sería más o menos igual de simple. Por ejemplo:
xml->delDomain();
if (!xml->setDomain("hardware.cpus"){
cerr << "no existe dominio de CPUS" << endl;
)
for(int i=0;ihowManyTags("cpu");i++){
cout << "Cpu numero " << endl;
cout << (xml->readString("cpu["+QString::number(i)+"].id")).latin1() ;
cout << (xml->readString("cpu["+QString::number(i)+"].frequency")).latin1() << endl ;
}
