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:

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.

  1. Descargar el paquete

  2. Descomprimir el paquete:

    tar xzf libbslxml.0.2.1.tar.gz

  3. Compilar:

    make

  4. Para 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 ;
}