• Publicidad

Consulta sobre XML

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Consulta sobre XML

Notapor panterozo » 2010-10-05 17:26 @768

Buenas...

Tengo que hacer un programa, que analice documentos XML, y que genere procesos con la información obtenida. El XML puede ser de miles de líneas, como puede no serlo (mínimo 40 o 50 líneas). Para esto, estaba utilizando XML::LibXML, pero hoy encontré XML::Simple, con la gracia de pasar toda la información a un super %hash XMLin(). Al parecer dejaré de lado XML::LibXML por un rato, para ver cómo va el avance con respecto al análisis del XML. Por otra parte, XMLbeans de Java, al parecer realiza un trabajo completo sobre los .xsd (schema) del documento (crea las clases a partir del esquema del documento xml).

Estoy en una disyuntiva, porque no sé ahora si será lo mejor trabajar con Perl, o comenzar a buscar otros lenguajes que tengan una mejor disposición en cuanto a lectura de documentos XML.

¿Sugerencias o consejos?

Gracias
panterozo
Perlero nuevo
Perlero nuevo
 
Mensajes: 160
Registrado: 2010-01-26 08:36 @400

Publicidad

Re: Consulta sobre XML

Notapor explorer » 2010-10-05 17:54 @787

Yo no usaría XML::Simple para tratar un xml de miles de líneas. Ya lo hice una vez, y casi me quedo sin memoria...

Yo usaría un módulo que analizara el xml paso a paso, para no tenerlo todo en memoria, por ejemplo, XML::LibXML::SAX. XML::Simple me parece que puede hacer algo parecido. De todas maneras, está sin actualizar desde hace tres años. Y lo mismo XML::Smart, que está sin tocar desde hace más tiempo.

Si tienes que lidiar con XML muy, muy grandes, puedes usar XML::Twig, que lo mismo le da que sean tan pequeños que entren en memoria, como aquellos que no.

Dices que hay otros lenguajes con mejor disposición para leer XML... Pues no lo entiendo, ya que en Perl hay centenares.

Pero siempre puedes probar a hacerlo con otros lenguajes, y ver cuál es el mejor.

En cuanto a lo del XSD, hay (al menos) un programa que hace algo así, pero para Perl, naturalmente: pastorize.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Consulta sobre XML

Notapor panterozo » 2010-10-06 21:48 @950

explorer escribiste:Yo no usaría XML::Simple para tratar un xml de miles de líneas. Ya lo hice una vez, y casi me quedo sin memoria...


Por mi parte, una vez hice un programa con 9 funciones recursivas en C, y se quedó sin memoria en la décima, aunque hay que considerar que era un equipo con 64MB en RAM y 400 MHz. Hoy en día, ¿qué tan común será quedarse sin memoria?. Si llegase a utilizar XML::Simple, ¿cómo podría saber cuanta memoria estoy utilizando en el proceso?

Tengo la definición del xml en un DTD, y además su Schema. El Schema, cuando lo valido con XML::LibXML, indica que tiene un error en su estructura, así que no puedo utilizarlo para ello. El DTD está ok, y el documento XML lo valido con XML::LibXML::DTD. No encontré en XML::Twig un validador contra DTD. Me parece poco claro utilizar XML::LibXML para una cosa, y XML::Twig (solamente si lo llegase a utilizar) para otra. Hace poco más de 6 meses que estoy programando en Perl, pero no sé qué tan común serán esas prácticas para programadores "pro".

El XML que deseo parsear, y sacar su información es el que corresponde a MusicXML. En ésta, están los DTD's y Schema que tengo.

El programa Lilypond, incluye dentro de sí, unos scripts en Python, musicxml2ly, que parsean la información de MusicXML y la convierten a expresiones Lilypond. Ver Unofficial MusicXML.

Estoy modificando el parser de musicxml2ly, para entregar cierta información relevante. He probado Perthon para entender lo que está escrito en Python, pero es un rompecabezas aún.

He hecho unas pruebas con varios módulos, incluso para realizar gráficos, App::Guiio (no he podido correr make), e Imager.

También deseo resolver un problema tipo CSP y trabajar con MIDI (que hay bastantes módulos en CPAN para trabajarlos).

Para el análisis completo que deseo hacer de este estándar MusicXML, debo tomar una decisión con respecto a los módulos a utilizar e incluso el lenguaje.

Yo creo que es factible hacerlo todo en Perl, pero tengo mis dudas (solo por la inexperiencia de trabajar con programas tan extensos).

Espero que me puedan ayudar en cuanto a tomar la determinación. Quienes hayan trabajado con programas con tantos datos o variables distintas, alguna especie de opinión venida de la experiencia de cada uno que lleve programando más tiempo que yo en Perl.

Espero sus comentarios ;)
¡¡Muchas gracias!!
panterozo
Perlero nuevo
Perlero nuevo
 
Mensajes: 160
Registrado: 2010-01-26 08:36 @400

Re: Consulta sobre XML

Notapor explorer » 2010-10-07 04:54 @246

Sobre MusicXML sólo veo un módulo: Music::Note (de MusicXML y Perl hay más en Google, desde luego), pero está sin tocar desde hace muchos años, está en la versión 0.01, y apenas sirve para representar notas (y alguna cosilla más).

Eso también puede ser un aliciente: si consigues hacer este trabajo en Perl, puedes obtener la experiencia necesaria para modular o empaquetar funciones que traten MusicXML y publicarlos en CPAN (y luego contarlo en conferencias Perl por todo el mundo y recibir el correspondiente reconocimiento).

Si lo ves muy complicado, pues ya lo tienes hecho en otros lenguajes. Así que, ¿para qué preocuparse? Las alternativas son: o tomo lo que está hecho, o me lo hago. Y si me lo hago, ¿cómo?.

Hoy en día no se puede hablar de una herramienta única que resuelva todos los problemas (aunque Perl...;)) Por eso, es común ver en desarrollos grandes el uso de varios lenguajes o técnicas. Si tienes un programa en Python que resuelve una parte del problema, úsalo.

Yo hace años uní con Perl binarios compilados desde Fortran y C, con código Java y Shell (casi un centenar de programas distintos). Con el tiempo, sustituí todo el código Shell por Perl (lógicamente, era más sencillo). Los programas compilados en C, que realizaban procesamiento matemático de miles de millones de datos, fueron sustituidos por PDL, haciendo los códigos muchísimo más cortos (a pesar de disminuir un poco la legibilidad). No pudimos reemplazar con Perl los códigos en Fortran y Java porque venían de otras empresas y administraciones (NASA, ESA), y, o bien no teníamos el código (caso de la ESA), o el resultado compilado era perfecto (en el caso del Fortran de la NASA).

Sería interesante saber qué error encuentra el validador XML::LibXML::DTD.

Quien te puede informar de la ocupación de un proceso en memoria, es el propio sistema operativo. Si estás en Linux/UNIX, programas como top; o si estás en Windows, el Administrador de Tareas. Notarás que te quedas sin memoria cuando el sistema empiece a hacer uso de la memoria swap o memoria de intercambio.

Hay módulos en Perl que te pueden decir, exactamente, lo que está consumiendo el programa. Son de la familia Devel::*. Y, desde el pasado día 1 de octubre, Memory::Usage (es lo bueno que tiene este lenguaje, que constantemente salen cosas nuevas :D)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 29 invitados