PDF de programación - XPath

Imágen de pdf XPath

XPathgráfica de visualizaciones

Publicado el 19 de Junio del 2018
450 visualizaciones desde el 19 de Junio del 2018
98,6 KB
41 paginas
Creado hace 17a (22/10/2006)
XPath
XPath

Diego Berrueta

[email protected]

Diego Berrueta

1

Contenido
Contenido

▶ Introducción
▶ Expresiones, rutas, ejes y pasos
▶ Funciones

▶ Ejercicios

Diego Berrueta

2

Introducción a XPath
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

Diego Berrueta

3

Parecidos razonables
Parecidos razonables

▶ Rutas de directorios
▶ DOM
▶ XML Information Set (Infoset)
▶ Expresiones regulares

Diego Berrueta

4

Modelo de datos (I)
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

Diego Berrueta

5

Modelo de datos (II)
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

Diego Berrueta

6

Cuestiones sintácticas
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

Diego Berrueta

7

Funcionamiento general
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

Diego Berrueta

8

Contexto de evaluación
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

Diego Berrueta

9

Expresiones
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

Diego Berrueta

10

Rutas 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

Diego Berrueta

11

Evaluación de una ruta
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

Diego Berrueta

12

Pasos de localización
Pasos de localización

▶ Cada paso se compone de:

⇨Un eje
⇨Una prueba de nodo
⇨Opcionalmente, varios predicados

▶ Sintaxis:

eje :: prueba_nodo [pred1] [pred2] ...

Diego Berrueta

13

Evaluación de un paso
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

Diego Berrueta

14

Ejes (I)
Ejes (I)

▶ child:: Hijos directos

▶ parent:: Padre

(pero no atributos)

directo (si existe)

▶ descendant::
Descendientes

▶ ancestor::
Antecesores

▶ following-sibling::

▶ preceding-sibling::

Hermanos
posteriores

▶ following::
Posteriores
(excluyendo
descendientes)

Hermanos
precedentes
▶ preceding::
Precedentes
(excluyendo
antecesores)

Diego Berrueta

15

Ejes (II)
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

Diego Berrueta

16

Abreviaturas de ejes
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()/”

Diego Berrueta

17

Pruebas de nodo
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

Diego Berrueta

18

Predicados
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

Diego Berrueta

19

Funciones
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

Diego Berrueta

20

Funciones de conversión de
Funciones de conversión de

tipos (I)
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

Diego Berrueta

21

Funciones de conversión de
Funciones de conversión de

tipos (II)
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

Diego Berrueta

22

Funciones de conversión de
Funciones de conversión de

tipos (III)
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()

Diego Berrueta

23

Funciones de conversión de
Funciones de conversión de

tipos (IV)
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

Diego Berrueta

24

Funciones de biblioteca (I)
Funciones de biblioteca (I)

▶ Matemáticas

⇨sum()
⇨floor()
⇨ceiling()
⇨round()

Diego Berrueta

25

Funciones de biblioteca (II)
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()]

Diego Berrueta

26

Funciones de biblioteca (III)
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()

Diego Berrueta

27

Carga de documentos
Carga de documentos

externos
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

Diego Berrueta

28

XPath como lenguaje de
XPath como lenguaje de

patrones
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

Diego Berrueta

29

EJERCICIOS

Diego Berrueta

30

Fichero RSS (ej: Barrapunto)
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

Diego Berrueta

31

Población provincias (I)
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

Diego Berrueta

32

Población provincias (II)
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)

Diego Berrueta

33

Población pr
  • Links de descarga
http://lwp-l.com/pdf11975

Comentarios de: XPath (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad