Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath Jose Emilio Labra Gayo Noviembre 2006 Jose Emilio Labra Gayo XPath XPath 2.0 Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath Conversión de tipos Booleanas Matemáticas Cadenas Conjuntos de nodos XPath 2.0 Jose Emilio Labra Gayo XPath Funciones predefinidas en XPath XPath 2.0 Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0 Evolución de XPath I I Desarrollado en 1999 como parte de XSL (eXtensible Stylesheet Language) La especificación de XSL se dividió en: I I I I I I XPath: Lenguaje para identificar nodos del árbol XSLT: Lenguaje para transformar documentos XML XSL-FO: Lenguaje para definir objetos de formateo, páginas y contenidos de páginas. XPath se independizó como una notación para navegar por el árbol de un documento XML. Se utiliza en: XQuery, XPointer, XML Schema, Schematron, etc. XPath 2.0 propuesto en 2005 Jose Emilio Labra Gayo XPath Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath Lenguaje XPath No tiene sintaxis XML Trabaja sobre el árbol del documento La versión XPath 1.0 tiene 4 tipos de datos: I Booleanos I Cadenas I Números I Conjuntos de nodos Jose Emilio Labra Gayo XPath XPath 2.0 Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath Árbol del documento < t i t u l o>A l b a</ t i t u l o> <v e r s o>Mi c o r a z o n o p r i m i d o</ v e r s o> <v e r s o> s i e n t e j u n t o a l a a l b o r a d a</ v e r s o> <v e r s o> e l d o l o r de s u s amores . . . </ v e r s o> </poema> Jose Emilio Labra Gayo XPath XPath 2.0 Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Tipos de nodos Existen 7 tipos de nodos 1. Nodo raı́z 2. Elementos 3. Atributos 4. Comentarios 5. Instrucciones de procesamiento 6. Texto 7. Espacios de nombres Jose Emilio Labra Gayo XPath Funciones predefinidas en XPath XPath 2.0 Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0 Expresiones XPath I Las expresiones XPath suelen utilizarse en valores de atributos XML I Se aplican las normas para codificar cadenas en XML | // v e r s o // t i t u l o I Se pueden alternar comillas simples/dobles o codificarlas mediante &quot; ó &apos; // t i t u l o I Se usan diversas abreviaciones para facilitar la escritura Jose Emilio Labra Gayo XPath | // v e r s o Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath Expresiones XPath (1/2) Tipos de expresiones: I Unión de 2 conjuntos de nodos mediante |. // t i t u l o I | // v e r s o Llamada a una variable. $ pepe I Valor literal: una cadena o un número. ’ Hola ’ Jose Emilio Labra Gayo XPath 23.45 ” Adios ” XPath 2.0 Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Expresiones XPath (2/2) Tipos de expresiones: I Llamada a una función u operador. count (// v e r s o ) I Ruta de localización. / poemas /poema / v e r s o Jose Emilio Labra Gayo XPath Funciones predefinidas en XPath XPath 2.0 Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0 Valor de una expresión El valor de una expresión puede ser: I Una cadena I Un número I Un valor booleano I Un conjunto de nodos En XPath 2.0 se substituyen conjuntos de nodos por secuencias en general Jose Emilio Labra Gayo XPath Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath Contexto de evaluación I I Las expresiones se evalúan en función de un contexto El contexto contiene la siguiente información: I I I I Nodo actual del contexto Posición (entero) Tamaño (entero) Otra información del contexto I I I Valores de variables (no hay asignación destructiva) Biblioteca de funciones Declaraciones de espacios de nombres Jose Emilio Labra Gayo XPath XPath 2.0 Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath Ruta de localización I Una ruta se compone de varios pasos separados por / /poema/ v e r s o I La ruta puede ser: I I Relativa: se evalúa desde el nodo de contexto Absoluta: se evalúa desde en nodo raı́z. Comienza por / Jose Emilio Labra Gayo XPath XPath 2.0 Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath Pasos de localización I Cada paso se compone de: I I I Un eje Una prueba de nodo Opcionalmente, varios predicados I Sintaxis: eje :: pruebaNodo [pred1][pred2]... I Ejemplo: /descendant::verso[contains(.,’anochecer’)] Jose Emilio Labra Gayo XPath XPath 2.0 Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath Ejes I I I I I I I I I I child:: Hijos directos del nodo actual parent:: Padre del nodo actual descendant:: Descendientes ancestor:: Antecesores descendant-or-self:: Descendientes incluido el nodo actual ascestor-or-self:: Antecesores incluido el nodo actual following:: Los nodos siguientes (incluidos los descencientes) preceding:: Los precedentes (excluyendo los antecesores) following-sibling:: Hermanos siguientes preceding-sibling:: Hermanos precedentes Jose Emilio Labra Gayo XPath XPath 2.0 Contenidos Antecedentes Eje child Jose Emilio Labra Gayo XPath Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0 Contenidos Antecedentes Eje parent Jose Emilio Labra Gayo XPath Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0 Contenidos Antecedentes Eje ancestor Jose Emilio Labra Gayo XPath Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0 Contenidos Antecedentes Eje descendant Jose Emilio Labra Gayo XPath Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0 Contenidos Antecedentes Sintaxis XPath Eje following-sibling Jose Emilio Labra Gayo XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0 Contenidos Antecedentes Sintaxis XPath Eje preceding-sibling Jose Emilio Labra Gayo XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0 Contenidos Antecedentes Eje following Jose Emilio Labra Gayo XPath Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0 Contenidos Antecedentes Eje preceding Jose Emilio Labra Gayo XPath Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0 Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath Ejes (II) I attribute:: Atributos del nodo actual I namespace:: Nodos de espacio de nombres I self:: Localiza el nodo actual Jose Emilio Labra Gayo XPath XPath 2.0 Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0 Prueba de nodo I nombre se verifica para todos los nodos que tienen ese nombre I * todos los nodos del tipo del eje I node() cualquier nodo (sea del tipo que sea) I text() nodos de tipo texto I comment() nodos de tipo comentario I processing-instruction() instrucciones de procesamiento Jose Emilio Labra Gayo XPath Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath Predicados Un predicado es una función booleana que actúa como un filtro Ejemplo: /descendant::verso[position()=2] Puede haber más de un predicado y el orden es significativo. Ejemplo: /descendant::verso[position()=2][contains(.,’de’)] /descendant::verso[contains(.,’de’)][position()=2] Jose Emilio Labra Gayo XPath XPath 2.0 Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath Abreviaturas I child:: es el eje por defecto I attribute:: equivale a @ I . equivale a self::node() I .. equivale a parent::node() I // es /descendant-or-self::node()/ I [position()=no ] equivale a [no ] Jose Emilio Labra Gayo XPath XPath 2.0 Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0 Ejercicio Paı́ses Europeos En este fichero se muestra información sobre paı́ses de Europa en formato XML Construir expresiones XPath para realizar las siguientes consultas I Obtener el nombre del continente I Obtener información sobre España I Obtener PIB de España I Obtener paı́ses con más de 40 millones de habitantes I Obtener nombres de paı́ses con PIB mayor que España Puede utilizarse el programa XPath Explorer Jose Emilio Labra Gayo XPath Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0 Conversión de tipos string() Convierte a cadena de texto I Si es un número, se devuelve su representación como cadena (para controlar el formato, es preferible, format-number I Si es booleano, devuelve true ó false I Si es un conjunto de nodos, se aplica al primer nodo I Si es un nodo, devuelve el valor de cadena de dicho nodo Jose Emilio Labra Gayo XPath Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0 Conversión de tipos number() Convierte a un número I Si es una cadena, trata de analizarla para convertirla a número I Si es un booleano, devuelve 1 si es true y 0 si es false I Si es un conjunto de nodos, se convierte primero a cadena mediante string() Jose Emilio Labra Gayo XPath Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath Conversión de tipos boolean() Convierte a un valor booleano I Si es un número, es true si es distinto de cero I Si es un conjunto de nodos, es true si contiene algún nodo. I Si es una cadena, es true si no es la cadena vacı́a Jose Emilio Labra Gayo XPath XPath 2.0 Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Booleanas Funciones booleanas XPath incluye los operadores and y or También incluye la función not() Jose Emilio Labra Gayo XPath Funciones predefinidas en XPath XPath 2.0 Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0 Matemáticas Funciones matemáticas XPath contiene los operadores matemáticos habituales: +, - (debe estar precedido de un espacio), *, div (la división no es con / ) y mod También incluye los operadores de comparación: =, !=, <, >, <=, >= Otras funciones matemáticas: sum(), floor(), ceiling(), round() Jose Emilio Labra Gayo XPath Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath Cadenas Funciones de cadenas: concat I concat(cad1,cad2,cad*) devuelve el resultado de concatenar sus argumentos I Ejemplo: concat(’uno’,’dos’) = ’unodos’ Jose Emilio Labra Gayo XPath XPath 2.0 Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0 Cadenas Funciones de cadenas: substring I substring(cad,pos,long?) devuelve la subcadena de cad a partir de la posición pos y de longitud long I Ejemplo: substring(’camina’,3) = ’mina’ I Ejemplo: substring(’camina’,3,2) = ’mi’ Jose Emilio Labra Gayo XPath Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath Cadenas Funciones de cadenas: contains I contains(cad1,cad2) devuelve true si cad1 contiene la cadena cad2 I Ejemplo: contains(’camina’,’ca’) = true Jose Emilio Labra Gayo XPath XPath 2.0 Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0 Cadenas Funciones de cadenas: starts-with I starts-with(cad1,cad2) devuelve true si cad1 comienza con la cadena cad2 I Ejemplo: starts-with(’camina’,’ca’) = true I NOTA: En XPath 1.0 no existe ends-with Jose Emilio Labra Gayo XPath Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0 Cadenas Funciones de cadenas: substring-before/after I substring-before(cad1,cad2) devuelve el trozo de cadena de cad1 anterior a cad2 I Ejemplo: substring-before(’camina’,’mi’) = ’ca’ I substring-after(cad1,cad2) devuelve el trozo de cadena de cad1 posterior a cad2 I Ejemplo: substring-after(’camina’,’mi’) = ’na’ Jose Emilio Labra Gayo XPath Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath Cadenas Funciones de cadenas: string-length I string-length(cad) devuelve la longitud de cad I Ejemplo: string-length(’camina’) = 6 Jose Emilio Labra Gayo XPath XPath 2.0 Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0 Cadenas Funciones de cadenas: normalize I normalize-space(cad) devuelve el resultado de normalizar cad eliminando espacios en blanco redundantes I Ejemplo: n o r m a l i z e −s p a c e ( ’ un Jose Emilio Labra Gayo XPath espacio l a r g o ’ ) = ’ un e s p a c i o l a r g o ’ Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath Cadenas Funciones de cadenas: translate I translate(cad1,cad2,cad3) devuelve el resultado de traducir todos los caracteres de cad1 que aparecen en cad2 por sus correspondientes en cad3 I Ejemplo: t r a n s l a t e ( ’ camina ’ , ’ a e i o u ’ , ’ AEIOU ’ ) = ’ cAmInA ’ Jose Emilio Labra Gayo XPath XPath 2.0 Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0 Conjuntos de nodos Funciones de conjuntos de nodos I position(): posición del nodo actual I last() devuelve el tamaño del contexto actual I count(nodos) devuelve el número de nodos I id(objeto) selecciona elementos por su ID único (declarado en la DTD) I name(nodo?) devuelve el nombre del nodo I local-name(nodo?) devuelve el nombre local I namespace-uri(nodo?) devuelve la URI del espacio de nombres I lang(cad) devuelve true si el idioma del nodo actual es cad Jose Emilio Labra Gayo XPath Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath Conjuntos de nodos Ejercicio Paı́ses Europeos A partir de este fichero Realizar las siguientes consultas I Paı́ses que empiezan por E I Paı́ses que contienen la letra e I Paı́ses que contienen la letra e (mayúscula o minúscula) I Paı́ses que acaben por la letra e I PIB medio de paı́ses europeos I Paı́ses cuyo PIB está por encima de la media Jose Emilio Labra Gayo XPath XPath 2.0 Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath Conjuntos de nodos Carga de documentos externos I document(URI) permite cargar un fichero en tiempo de ejecución I Permite extraer y combinar información de varios ficheros Jose Emilio Labra Gayo XPath XPath 2.0 Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0 XPath 2.0 fue propuesto en 2005. Novedades: I Concepto de secuencias I Sentencias if y for I Cuantificadores I Soporte para tipos primitivos de XML Schema I Encaje de cadenas mediante expresiones regulares Jose Emilio Labra Gayo XPath XPath 2.0 Contenidos Antecedentes Sintaxis XPath Fin Fin de la presentación Jose Emilio Labra Gayo XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0