alexbm8_apuntes_04-05-09

Resumen del 4 de Mayo
Como solemos hacer, comenzamos la clase leyendo el resumen del día anterior de alexbm8 y de Carlos. A continuación comentamos algo sobre cómo subir archivos al servidor swecai mediante aplicaciones SSH y nos pusimos manos a la obra con los ejercicios de autoevaluación. Vimos dos ejercicios de autoevaluación de alexbm8: [|bloque T2.8] y [|bloque T2.10]. Continuamos con el temario con el [|XPath]. Se trata de una forma estándar de referirnos a partes del documento a partir de una expresión que devuelve un conjunto de nodos. Hay expresiones XPath simples (conjunto de nodos con un atributo determinado, nodos que cumplen con una estructura determinada, etc.). Una de sus principales ventajas frente a otros métodos, como por ejemplo los filtros SAX es que permite acceder de forma bastante precisa a las distintas partes de un documento. En general está muy extendido y todo lo que se refiere a procesamiento XML en general, usará esta especificación. Por encontrarle algún parecido familiar, es similar al formato de directorios de UNIX. Es importante saber que existe un orden natural en los elementos devueltos por el XPath, con el fin de poder obtenerlos. Vimos el ejemplo en ruby y comentamos algunas cosillas sobre el mismo: Por ejemplo, la sentencia code format="ruby" doc.root.each_element('/rdf:RDF/item/title') { |titulo| puts "*"+titulo.text } code

devuelve un conjunto de nodos ("nodeset") que pertenecen a ese camino, de forma similar a un camino de directorios.

Algunos ejemplos útiles:
 * //item:// ** En este caso, la doble barra inclinada equivale a eliminar todos los pasos intermedios, e incluye todos los nodos con esa etiqueta, independientemente de cuál sea su nodo ascendente. (No tendríamos que especificar la ruta para llegar al elemento, por ejemplo haciendo title veríamos todo el documento).

Dentro de la siguiente [|página interactiva] hicimos varias pruebas con el XML de ejemplo: // devuelve todos los child cuyo id sea menor o igual que 2 //**child[grandchild]** devuelve sólo los child que poseen un grandchild en su interior
 * //child@id <=2// **
 * /parent/child/grandchild ** es lo mismo que **//grandchild**

Al finalizar la clase, nos ponemos con el bloque T2.12 y vimos el de draxus.