SlideShare una empresa de Scribd logo
XPath Diego Berrueta [email_address]
Contenido Introducción Expresiones, rutas, ejes y pasos Funciones Ejercicios
Introducción a XPath Recomendación del W3C, desarrollada en paralelo con XSLT Se usa también en XPointer y XLink Objetivo: seleccionar fragmentos de un documento XML Objetivo complementario: definir patrones para las plantillas Sintaxis no-XML Opera sobre una estructura abstracta (árbol), no sobre la sintaxis
Parecidos razonables Rutas de directorios DOM XML Information Set (Infoset) Expresiones regulares
Modelo de datos (I) XPath trabaja con el XML modelado como un árbol Los  nodos  del árbol pueden ser: Nodo raíz Nodo elemento Nodo texto Nodo atributo Nodo instrucción de procesamiento Nodo comentario
Modelo de datos (II) Existen dos  recorridos  del árbol: En el orden del documento (document-order) En el orden inverso (reverse-order) Valor-cadena  de distintos nodos: Elementos: concatenación de todos los nodos de texto descendientes Atributos: valor normalizado Texto: valor literal
Cuestiones sintácticas Las expresiones XPath suelen ir dentro de atributos XML (p.e.: select, match). Por tanto: Se aplican las normas de codificación de cadenas de texto (“<” es “&lt;”) Se pueden alternar comillas simples y dobles, o codificarlas (&quot; y &apos;) Se usan muchas comodidades sintácticas para abreviar las expresiones
Funcionamiento general El componente básico es la  expresión Una expresión se evalúa respecto a un  contexto ... ... para devolver un objeto, cuyo tipo puede ser: Node-set (conjunto no ordenado de nodos, sin duplicados) Booleano (true() / false()) Número Cadena de texto
Contexto de evaluación Un nodo de contexto La posición en el contexto (entero) El tamaño del contexto (entero) Inmutables: Ligaduras de variables (no hay asignación) Biblioteca de funciones Declaraciones de espacios de nombres
Expresiones Unión de dos node-sets: '|' Referencia a una variable ($variable) Valor literal (cadena o número) Llamada a una función u operador Ruta de localización
Rutas de localización Las  rutas de localización  son las expresiones más importantes Una ruta se compone de varios  pasos de localización Los pasos se separan por '/': paso1 / paso2 ... Una ruta puede ser: Relativa: se evalúa desde el nodo de contexto Absoluta (comienza por '/'): se evalúa desde el nodo raíz
Evaluación de una ruta Se evalúa de izquierda a derecha El paso más a la izquierda se evalúa primero respecto al contexto actual Se genera un nuevo resultado (habitualmente un node-set) Para cada nodo del node-set, se evalúa recursivamente el resto de la ruta, modificando el contexto, y se concatenan los resultados
Pasos de localización Cada paso se compone de: Un eje Una prueba de nodo Opcionalmente, varios predicados Sintaxis: eje :: prueba_nodo [pred1] [pred2] ...
Evaluación de un paso Se construye un node-set con todos los nodos que están relacionados con el nodo de contexto en el eje indicado Se refina el node-set, descartando todos los que no tengan el tipo o nombre indicado Se refina de nuevo el node-set, seleccionando sólo los que verifiquen los predicados
Ejes (I) child::  Hijos directos (pero no atributos) descendant::  Descendientes following-sibling::  Hermanos posteriores following::  Posteriores (excluyendo descendientes) parent::  Padre directo (si existe) ancestor::  Antecesores preceding-sibling::  Hermanos precedentes preceding::  Precedentes (excluyendo antecesores)
Ejes (II) self::  El nodo de contexto ancestor-or-self:: descendant-or-self:: Ejes de tipo especial (no elementos): attribute::  Atributos del nodo de contexto namespace::  Espacios de nombres del nodo de contexto
Abreviaturas de ejes child:: es el eje por omisión attribute:: se abrevia '@' '.' equivale a “self::node()” '..' equivale a “parent::node()” '//' equivale a “/descendant-or-self::node()/”
Pruebas de nodo Nombre cualificado: se verifica para los nodos que tienen ese nombre ' * ': se verifica para todos los nodos del tipo del eje (elementos, atributos, NS) node() : se verifica para cualquier tipo de nodo  [por tanto, *  ⊆  node() ] text() : se verifica para los nodos de tipo texto comment()  y  processing-instruction() : se verifica para los nodos de esos tipos
Predicados Actúan como filtros Un  predicado  puede ser: Un número: sólo se verifica si coincide con la posición en el contexto. Atención: la numeración comienza en 1, no en 0 (Java, C#) Una expresión booleana o convertible a booleana (función boolean()) El orden es significativo
Funciones Conversión de tipos : string(), number() y boolean() Operadores booleanos : and, or, not()  [en realidad, not() es una función] Operadores aritméticos : +, -, *, div, mod  [un espacio debe preceder a '-'] Operadores de comparación : =, !=, <, >, <=, >=  [igualdad con =, no ==] Funciones de biblioteca
Funciones de conversión de tipos (I) string() number() boolean() Si el argumento de una función no es del tipo esperado, se realiza una conversión implícita usando una de estas tres funciones Observación: no hay conversión a node-sets
Funciones de conversión de tipos (II) string() : convierte a cadena de texto Si es un número, se devuelve su representación como cadena de texto (es mejor utilizar la función format-number) Si es un booleano, se devuelve “true” o “false” Si es un node-set, se aplica al primer nodo Si es un nodo, se devuelve el valor-cadena
Funciones de conversión de tipos (III) number() : convierte a un número flotante Si es una cadena, trata de parsearla Si es un booleano, true() es 1 y false() es 0 Si es un node-set, se convierte primero a cadena mediante string()
Funciones de conversión de tipos (IV) boolean() : convierte a un booleano Si es un número, es true() si distinto de cero Si es un node-set, es true() si contiene algún elemento (muy útil en predicados) Si es una cadena, es true() si no es la cadena vacía
Funciones de biblioteca (I) Matemáticas sum() floor() ceiling() round()
Funciones de biblioteca (II) Manipulación de cadenas: concat() substring() substring-before(), substring-after() translate() normalize-space() string-length()  [resultado: entero] Predicados sobre cadenas: contains() starts-with()  [pero no hay ends-with()]
Funciones de biblioteca (III) Relativas al node-set o el contexto: position() last() count(node-set) id()  [devuelve un node-set] Propiedades de los nodos: name() local-name() namespace-uri() lang()
Carga de documentos externos document()  permite cargar un documento XML en tiempo de ejecución Esto permite extraer y combinar información de múltiples ficheros Advertencia: suele presentar problemas de rendimiento
XPath como lenguaje de patrones XSLT reaprovecha XPath como lenguaje para definir los patrones de las plantillas No todas las expresiones XPath pueden ser patrones: Debe devolver un node-set Sólo valen los ejes child:: y attribute::  (y '//') Un nodo “encaja” con el patrón si pertenece al node-set resultante de evaluar la expresión con respecto a algún contexto formado por él mismo o por sus antecesores
EJERCICIOS
Fichero RSS (ej: Barrapunto) Obtener el título del canal Obtener el título de la primera noticia Contar el número de noticias Contar cuántas noticias han sido editadas por “Yonderboy” Contar cuántas noticias tienen más de 50 comentarios Sumar los comentarios de todas las noticias Contar cuántas noticias fueron editadas el mismo día que la más reciente
Población provincias (I) Contar cuántas provincias hay Obtener la población de la provincia más poblada (están ordenadas de mayor a menor) Contar cuántas provincias superan el millón de habitantes Sumar la población de todas las provincias Sumar la población de las provincias de menos de un millón de habitantes Sumar la población de las 5 provincias más pobladas
Población provincias (II) Sumar la población de las provincias que ocupen una posición par Provincias que comienzan por 'A' Provincias que contienen la letra 'a' (minúscula) Provincias que contienen la letra 'a' (minúscula o mayúscula) Provincias que contienen alguna de estas letras: 'b, d, g' (sin usar OR)
Población provincias (III) Provincias que terminan en 's' Provincias que tienen al menos una 'a' y además tienen al menos una 'e' antes de la primera 'a' Provincias que tienen una 'e' entre sus primeras 4 letras Provincias que van justo después de otra que contiene la letra 'i'
Superficie comunidades (I) Superficie de la comunidad más grande Están ordenadas de mayor a menor Calcular la superficie de España PRIMER INTENTO: eliminar las unidades SEGUNDO INTENTO: usar otro fichero Sumar la superficie de las comunidades uniprovinciales Comunidades más grandes que Asturias Comunidades uniprovinciales con el mismo nombre que la provincia
Superficie comunidades (II) Comunidades que tienen un número par de provincias Comunidades que tienen más de una palabra en el nombre La segunda comunidad (por población) que tiene más de una palabra en el nombre Atención al orden de los predicados Comunidades cuyas provincias tienen  todas  una 'a' Sugerencia: probar primero con  alguna
Superficie comunidades (III) Provincias que son primeras o últimas en sus comunidades Lo mismo, pero sin usar position() ni last() Lo mismo, pero sólo en comunidades con al menos tres provincias Comunidades cuya superficie media por provincia sea al menos de 10.000 km2
Otros ejercicios Redondear un número real con una cantidad fija de decimales Expresión absoluta que selecciona todos los nodos Expresión relativa que selecciona todos los nodos
Limitaciones de XPath Xpath es demasiado pobre para expresar algunas consultas: Join Map Ordenación de resultados ... Sin embargo, la combinación de XPath + XSLT es mucho más potente Algunos procesadores de XPath + XSLT permiten acoplar extensiones
Referencias XML Path Language (XPath) [W3C Recommendation] Página de XPath en la Wikipedia XSLT Cookbook [Sal Mangano, O'Reilly]
F I N

Más contenido relacionado

PDF
PDF
U7 1 xslt-curso2018-19
PDF
Datos En La Web - Clase 2
PPT
PERSISTENCIA BASADA EN ARCHIVOS
PPTX
SAX (con PHP)
PPT
Entrada y salida de datos en java
PDF
Manejo de archivos en JAVA
U7 1 xslt-curso2018-19
Datos En La Web - Clase 2
PERSISTENCIA BASADA EN ARCHIVOS
SAX (con PHP)
Entrada y salida de datos en java
Manejo de archivos en JAVA

La actualidad más candente (17)

PPTX
16 Alternativas XML
PDF
Flujo datos
PDF
Apuntes de XSD
PPTX
PDF
PDF
Ejercicio - Personal de departamentos (XSD - XML Schema)
PPTX
Json short manual
PPT
ED Listas, Pilas y Colas
PPSX
PPTX
Unidad tres estructura de datos
PDF
Chuleta de XML
PDF
Chuleta de DTD
PPTX
Tipos de java...
PPT
Introducción a la Programaciónen Java
PDF
Apuntes de XML
PPTX
PPTX
LENGUAJE TRANSACT SQL
16 Alternativas XML
Flujo datos
Apuntes de XSD
Ejercicio - Personal de departamentos (XSD - XML Schema)
Json short manual
ED Listas, Pilas y Colas
Unidad tres estructura de datos
Chuleta de XML
Chuleta de DTD
Tipos de java...
Introducción a la Programaciónen Java
Apuntes de XML
LENGUAJE TRANSACT SQL
Publicidad

Destacado (8)

PDF
Web Semantica En Minuscula Microformatos Y Otras Tecnologias
PDF
Bases de Datos - Parte 10/10 XPath
PPT
PDF
2 8 cookiesy_sesionesphp
PPTX
Funciones del telemarketing
PPTX
TELEMARKETING Y SUS DIFERENTES FUNCIONES
Web Semantica En Minuscula Microformatos Y Otras Tecnologias
Bases de Datos - Parte 10/10 XPath
2 8 cookiesy_sesionesphp
Funciones del telemarketing
TELEMARKETING Y SUS DIFERENTES FUNCIONES
Publicidad

Similar a XPath (20)

PPTX
PDF
Introducciขn a XQuery.pdf
PPTX
Blind X Path Injection
PDF
Curso de Python
PPTX
Clase 02 - Preparacion de datos para ciencia de datos.pptx
PDF
Eloquent_JavaScript.pdf
PPTX
data_collection-es.pptx
PDF
Datos En La Web - Clase 1
PDF
adalsus Prep-Course - soyHenry mis apuntes JS.pdf
PDF
Programacion en python_1
PDF
PHP mode on
PDF
Web semántica y lógica
PPTX
Exposicion de estructuras discretas
PDF
Introduccion a xhtml
PDF
Introduccion a xhtml
PDF
5. desarrollador web profesional
PDF
Introduccion a xhtml
Introducciขn a XQuery.pdf
Blind X Path Injection
Curso de Python
Clase 02 - Preparacion de datos para ciencia de datos.pptx
Eloquent_JavaScript.pdf
data_collection-es.pptx
Datos En La Web - Clase 1
adalsus Prep-Course - soyHenry mis apuntes JS.pdf
Programacion en python_1
PHP mode on
Web semántica y lógica
Exposicion de estructuras discretas
Introduccion a xhtml
Introduccion a xhtml
5. desarrollador web profesional
Introduccion a xhtml

Más de Diego Berrueta (7)

PDF
Scaling towards a thousand micro services
PDF
Linked Data en España
PDF
Introducción a RDFa
ODP
Aplicaciones de la web semántica
ODP
GnuPG: criptografía para todos
ZIP
XSLT+SPARQL: Scripting the Semantic Web with SPARQL embedded into XSLT styles...
ZIP
Introducción al Software Libre
Scaling towards a thousand micro services
Linked Data en España
Introducción a RDFa
Aplicaciones de la web semántica
GnuPG: criptografía para todos
XSLT+SPARQL: Scripting the Semantic Web with SPARQL embedded into XSLT styles...
Introducción al Software Libre

Último (20)

PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
DOCX
Zarate Quispe Alex aldayir aplicaciones de internet .docx
PPTX
Sesion 1 de microsoft power point - Clase 1
PDF
SAP Transportation Management para LSP, TM140 Col18
PPTX
Propuesta BKP servidores con Acronis1.pptx
PDF
Maste clas de estructura metálica y arquitectura
PDF
CyberOps Associate - Cisco Networking Academy
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
PDF
taller de informática - LEY DE OHM
PDF
Estrategia de apoyo tecnología miguel angel solis
PDF
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
PDF
Calidad desde el Docente y la mejora continua .pdf
PPTX
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
PPTX
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
PPTX
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
PPT
Que son las redes de computadores y sus partes
PDF
Plantilla para Diseño de Narrativas Transmedia.pdf
PPT
introduccion a las_web en el 2025_mejoras.ppt
PPTX
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PDF
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
Zarate Quispe Alex aldayir aplicaciones de internet .docx
Sesion 1 de microsoft power point - Clase 1
SAP Transportation Management para LSP, TM140 Col18
Propuesta BKP servidores con Acronis1.pptx
Maste clas de estructura metálica y arquitectura
CyberOps Associate - Cisco Networking Academy
historia_web de la creacion de un navegador_presentacion.pptx
taller de informática - LEY DE OHM
Estrategia de apoyo tecnología miguel angel solis
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
Calidad desde el Docente y la mejora continua .pdf
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
Que son las redes de computadores y sus partes
Plantilla para Diseño de Narrativas Transmedia.pdf
introduccion a las_web en el 2025_mejoras.ppt
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL

XPath

  • 1. XPath Diego Berrueta [email_address]
  • 2. Contenido Introducción Expresiones, rutas, ejes y pasos Funciones Ejercicios
  • 3. Introducción a XPath Recomendación del W3C, desarrollada en paralelo con XSLT Se usa también en XPointer y XLink Objetivo: seleccionar fragmentos de un documento XML Objetivo complementario: definir patrones para las plantillas Sintaxis no-XML Opera sobre una estructura abstracta (árbol), no sobre la sintaxis
  • 4. Parecidos razonables Rutas de directorios DOM XML Information Set (Infoset) Expresiones regulares
  • 5. Modelo de datos (I) XPath trabaja con el XML modelado como un árbol Los nodos del árbol pueden ser: Nodo raíz Nodo elemento Nodo texto Nodo atributo Nodo instrucción de procesamiento Nodo comentario
  • 6. Modelo de datos (II) Existen dos recorridos del árbol: En el orden del documento (document-order) En el orden inverso (reverse-order) Valor-cadena de distintos nodos: Elementos: concatenación de todos los nodos de texto descendientes Atributos: valor normalizado Texto: valor literal
  • 7. Cuestiones sintácticas Las expresiones XPath suelen ir dentro de atributos XML (p.e.: select, match). Por tanto: Se aplican las normas de codificación de cadenas de texto (“<” es “&lt;”) Se pueden alternar comillas simples y dobles, o codificarlas (&quot; y &apos;) Se usan muchas comodidades sintácticas para abreviar las expresiones
  • 8. Funcionamiento general El componente básico es la expresión Una expresión se evalúa respecto a un contexto ... ... para devolver un objeto, cuyo tipo puede ser: Node-set (conjunto no ordenado de nodos, sin duplicados) Booleano (true() / false()) Número Cadena de texto
  • 9. Contexto de evaluación Un nodo de contexto La posición en el contexto (entero) El tamaño del contexto (entero) Inmutables: Ligaduras de variables (no hay asignación) Biblioteca de funciones Declaraciones de espacios de nombres
  • 10. Expresiones Unión de dos node-sets: '|' Referencia a una variable ($variable) Valor literal (cadena o número) Llamada a una función u operador Ruta de localización
  • 11. Rutas de localización Las rutas de localización son las expresiones más importantes Una ruta se compone de varios pasos de localización Los pasos se separan por '/': paso1 / paso2 ... Una ruta puede ser: Relativa: se evalúa desde el nodo de contexto Absoluta (comienza por '/'): se evalúa desde el nodo raíz
  • 12. Evaluación de una ruta Se evalúa de izquierda a derecha El paso más a la izquierda se evalúa primero respecto al contexto actual Se genera un nuevo resultado (habitualmente un node-set) Para cada nodo del node-set, se evalúa recursivamente el resto de la ruta, modificando el contexto, y se concatenan los resultados
  • 13. Pasos de localización Cada paso se compone de: Un eje Una prueba de nodo Opcionalmente, varios predicados Sintaxis: eje :: prueba_nodo [pred1] [pred2] ...
  • 14. Evaluación de un paso Se construye un node-set con todos los nodos que están relacionados con el nodo de contexto en el eje indicado Se refina el node-set, descartando todos los que no tengan el tipo o nombre indicado Se refina de nuevo el node-set, seleccionando sólo los que verifiquen los predicados
  • 15. Ejes (I) child:: Hijos directos (pero no atributos) descendant:: Descendientes following-sibling:: Hermanos posteriores following:: Posteriores (excluyendo descendientes) parent:: Padre directo (si existe) ancestor:: Antecesores preceding-sibling:: Hermanos precedentes preceding:: Precedentes (excluyendo antecesores)
  • 16. Ejes (II) self:: El nodo de contexto ancestor-or-self:: descendant-or-self:: Ejes de tipo especial (no elementos): attribute:: Atributos del nodo de contexto namespace:: Espacios de nombres del nodo de contexto
  • 17. Abreviaturas de ejes child:: es el eje por omisión attribute:: se abrevia '@' '.' equivale a “self::node()” '..' equivale a “parent::node()” '//' equivale a “/descendant-or-self::node()/”
  • 18. Pruebas de nodo Nombre cualificado: se verifica para los nodos que tienen ese nombre ' * ': se verifica para todos los nodos del tipo del eje (elementos, atributos, NS) node() : se verifica para cualquier tipo de nodo [por tanto, * ⊆ node() ] text() : se verifica para los nodos de tipo texto comment() y processing-instruction() : se verifica para los nodos de esos tipos
  • 19. Predicados Actúan como filtros Un predicado puede ser: Un número: sólo se verifica si coincide con la posición en el contexto. Atención: la numeración comienza en 1, no en 0 (Java, C#) Una expresión booleana o convertible a booleana (función boolean()) El orden es significativo
  • 20. Funciones Conversión de tipos : string(), number() y boolean() Operadores booleanos : and, or, not() [en realidad, not() es una función] Operadores aritméticos : +, -, *, div, mod [un espacio debe preceder a '-'] Operadores de comparación : =, !=, <, >, <=, >= [igualdad con =, no ==] Funciones de biblioteca
  • 21. Funciones de conversión de tipos (I) string() number() boolean() Si el argumento de una función no es del tipo esperado, se realiza una conversión implícita usando una de estas tres funciones Observación: no hay conversión a node-sets
  • 22. Funciones de conversión de tipos (II) string() : convierte a cadena de texto Si es un número, se devuelve su representación como cadena de texto (es mejor utilizar la función format-number) Si es un booleano, se devuelve “true” o “false” Si es un node-set, se aplica al primer nodo Si es un nodo, se devuelve el valor-cadena
  • 23. Funciones de conversión de tipos (III) number() : convierte a un número flotante Si es una cadena, trata de parsearla Si es un booleano, true() es 1 y false() es 0 Si es un node-set, se convierte primero a cadena mediante string()
  • 24. Funciones de conversión de tipos (IV) boolean() : convierte a un booleano Si es un número, es true() si distinto de cero Si es un node-set, es true() si contiene algún elemento (muy útil en predicados) Si es una cadena, es true() si no es la cadena vacía
  • 25. Funciones de biblioteca (I) Matemáticas sum() floor() ceiling() round()
  • 26. Funciones de biblioteca (II) Manipulación de cadenas: concat() substring() substring-before(), substring-after() translate() normalize-space() string-length() [resultado: entero] Predicados sobre cadenas: contains() starts-with() [pero no hay ends-with()]
  • 27. Funciones de biblioteca (III) Relativas al node-set o el contexto: position() last() count(node-set) id() [devuelve un node-set] Propiedades de los nodos: name() local-name() namespace-uri() lang()
  • 28. Carga de documentos externos document() permite cargar un documento XML en tiempo de ejecución Esto permite extraer y combinar información de múltiples ficheros Advertencia: suele presentar problemas de rendimiento
  • 29. XPath como lenguaje de patrones XSLT reaprovecha XPath como lenguaje para definir los patrones de las plantillas No todas las expresiones XPath pueden ser patrones: Debe devolver un node-set Sólo valen los ejes child:: y attribute:: (y '//') Un nodo “encaja” con el patrón si pertenece al node-set resultante de evaluar la expresión con respecto a algún contexto formado por él mismo o por sus antecesores
  • 31. Fichero RSS (ej: Barrapunto) Obtener el título del canal Obtener el título de la primera noticia Contar el número de noticias Contar cuántas noticias han sido editadas por “Yonderboy” Contar cuántas noticias tienen más de 50 comentarios Sumar los comentarios de todas las noticias Contar cuántas noticias fueron editadas el mismo día que la más reciente
  • 32. Población provincias (I) Contar cuántas provincias hay Obtener la población de la provincia más poblada (están ordenadas de mayor a menor) Contar cuántas provincias superan el millón de habitantes Sumar la población de todas las provincias Sumar la población de las provincias de menos de un millón de habitantes Sumar la población de las 5 provincias más pobladas
  • 33. Población provincias (II) Sumar la población de las provincias que ocupen una posición par Provincias que comienzan por 'A' Provincias que contienen la letra 'a' (minúscula) Provincias que contienen la letra 'a' (minúscula o mayúscula) Provincias que contienen alguna de estas letras: 'b, d, g' (sin usar OR)
  • 34. Población provincias (III) Provincias que terminan en 's' Provincias que tienen al menos una 'a' y además tienen al menos una 'e' antes de la primera 'a' Provincias que tienen una 'e' entre sus primeras 4 letras Provincias que van justo después de otra que contiene la letra 'i'
  • 35. Superficie comunidades (I) Superficie de la comunidad más grande Están ordenadas de mayor a menor Calcular la superficie de España PRIMER INTENTO: eliminar las unidades SEGUNDO INTENTO: usar otro fichero Sumar la superficie de las comunidades uniprovinciales Comunidades más grandes que Asturias Comunidades uniprovinciales con el mismo nombre que la provincia
  • 36. Superficie comunidades (II) Comunidades que tienen un número par de provincias Comunidades que tienen más de una palabra en el nombre La segunda comunidad (por población) que tiene más de una palabra en el nombre Atención al orden de los predicados Comunidades cuyas provincias tienen todas una 'a' Sugerencia: probar primero con alguna
  • 37. Superficie comunidades (III) Provincias que son primeras o últimas en sus comunidades Lo mismo, pero sin usar position() ni last() Lo mismo, pero sólo en comunidades con al menos tres provincias Comunidades cuya superficie media por provincia sea al menos de 10.000 km2
  • 38. Otros ejercicios Redondear un número real con una cantidad fija de decimales Expresión absoluta que selecciona todos los nodos Expresión relativa que selecciona todos los nodos
  • 39. Limitaciones de XPath Xpath es demasiado pobre para expresar algunas consultas: Join Map Ordenación de resultados ... Sin embargo, la combinación de XPath + XSLT es mucho más potente Algunos procesadores de XPath + XSLT permiten acoplar extensiones
  • 40. Referencias XML Path Language (XPath) [W3C Recommendation] Página de XPath en la Wikipedia XSLT Cookbook [Sal Mangano, O'Reilly]
  • 41. F I N