apuntes_vallesquino_03_04_09

=Apuntes de clase 30-3-09 =

Como siempre comenzamos con el resumen de la clase anterior, esta vez por AlejandroFH.

Vimos los ejercicios de autoevaluación bloqueT2.4 por Alexmb y [|Pakitochus].

Continuamos con la parte de teoría: __**2.7-. Procesado de XML**__ Lo primero que necesitamos el el código bien formado y el árbol generado se puede procesar con cualquier lenguaje. Ruby: utiliza la librería rexml. Ejemplo: code format="ruby" require 'rexml/document' //Carga la librería rexml

include REXML //Incluye en el espacio de nombres local toda la librería rexml

documento = ARGV[0] //Primer argumento que le pasamos por linea de comandos

file = File.new(documento) //Carga el fichero(documento) y lo mete en file

doc = Document.new(file) puts doc //Carga el contenido del fichero, lo analice y lo meta como una estructura interna de ruby en “doc”. NOTA: Document.new es de la librería rexml code ====Vemos los ejemplos de ruby para procesar XML: En este primero a partir de un fichero XML como el ej3.xml podemos acceder a cada elemento habitación e imprimir por pantalla cada subelemento mueble de cada habitación:  ====

code format="ruby"
 * 1) !/usr/bin/ruby

require 'rexml/document' include REXML documento = ARGV[0] file = File.new(documento) doc = Document.new(file) doc.root.each_element('habitacion') { |habitacion|#Itera para cada elemento habitación puts "Habitacion\n" habitacion.each_element('mueble') { |mueble| puts "\tMueble -"+mueble.text } } code Ahora el mismo ejemplo en PERL:
 * 1) Si habitacion tuviese tipo podemos acceder a ese tipo con puts habitacion.element("tipo")

code format="perl" use XML::Simple; my $documento = $ARGV[0]; my $muebles = XMLin($documento); for my $h ( @{$muebles->{habitacion}->{mueble}} ) { print "$h\n"; } code NOTA:servidor centralizado de librerias de PERL: CPAN Hicimos una pausa para hacer el ejercicio T2.5 y vimos el ejemplo de Vallesquino y [|Pakitochus]
 * 1) En este caso h será el iterador que en cada caso contendrá el mueble de cada habitación.

__**2.8-. Formato XML específico**__ Generalmente el XML sigue un DTD estándar, salvo que se trate de una aplicación específica. Algunos formatos conocidos son el [|SVG] (para gráficos vectoriales), [|XHTML], [|RSS] (para sindicación de noticias),etc. En este capítulo vamos a fijarnos especialmente en el RSS. En la práctica a cada RSS se le asigna un canal y le podemos meter varios atributos(titulo,enlace,fecha modificación,etc...) El formato de XML de RSS esta definido como el DTD de un XML general. En resumen el RSS lo podemos procesar como un XML con la ventaja de que sabemos su estructura. En Ruby tenemos la librería rss/1.0 o 2.0(nos aseguramos para todo documento RSS). Vemos el ejemplo para leer el titulo de todos los canales de un XML de RSS. Lo vemos con y sin la librería rss de Ruby. Por último hicimos el ejercicio bloque_T2.7 y vimos la solución de Vallesquino que como posible mejora se podría haber pedido la URL del feed por linea de comandos (como argumento).