xpath

23
Un documento XML crea una estructura de datos que puede estar sujeta o no a unas reglas (DTD o XSD). Esa estructura de datos será tratada por otros lenguajes con el fin de obtener un nuevo archivo XML o un archivo con formato (HTML, PDF, Excel, etc.). Para ello utilizaremos básicamente una tecnología: XSL (hojas de estilo de XSL). XSL (eXtensible Style Language) es el “estilista” del XML, el lenguaje que le va a dar formato al XML proporcionando un estilo de presentación de los datos almacenados en XML. Se obtine una gran versatilidad al tener separados los datos de la presentación. Los mismos datos XML serán presentados de tantas formas diferentes como archivos XSL le hayamos asociado.

Upload: aurora-gomez

Post on 19-Mar-2016

235 views

Category:

Documents


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: XPath

● Un documento XML crea una estructura de datos que puede estar sujeta o no a unas reglas

(DTD o XSD).

● Esa estructura de datos será tratada por otros lenguajes con el fin de obtener un nuevo archivo

XML o un archivo con formato (HTML, PDF, Excel, etc.). Para ello utilizaremos básicamente una

tecnología: XSL (hojas de estilo de XSL).

● XSL (eXtensible Style Language) es el “estilista” del XML, el lenguaje que le va a dar formato al

XML proporcionando un estilo de presentación de los datos almacenados en XML.

● Se obtine una gran versatilidad al tener separados los datos de la presentación. Los mismos

datos XML serán presentados de tantas formas diferentes como archivos XSL le hayamos

asociado.

Page 2: XPath

XSL es un conjunto de tecnologías orientadas a dar formato a documentos XML. Esta compuesto,

entre otras, por:

● XPath: Lenguaje que permite escribir expresiones (caminos) para la búsqueda de nodos dentro

del árbol XML

● XSLT: Reglas o patrones para la transformación del contenido de los nodos XML sobre los

cuales se consigue una correspondencia gracias a XPath. Si lo que queremos es generar

páginas XHTML a partir de documentos XML, podemos complementar/sustituir XSL por CSS.

● XSL-FO: Reglas o Patrones que permiten transformar un documento XML en un documento

PDF.

Page 3: XPath

XPath

❏ Nos permite acceder a los diferentes elementos (nodos o atributos) de un archivo XML y

seleccionar aquel al que le aplicaremos el formato con XSLT o seleccionar otros elementos

(nodos o atributos) en función del valor de un nodo o atributo concreto.

❏ También lo podremos aplicar a otra tecnología XML de recuperación de información llamada

XQuery. De hecho se puede decir que XPath 2.0 es la intersección entre XSLT 2.0 y XQuery, es

la parte común de ambas tecnologías.

Page 4: XPath

XPath

❏ Debido a la estructura jerárquica de los documentos XML, al igual que la de los archivos y

carpetas en el disco, podría decirse que XPath es la versión para XML de los paths que

escribimos para identificar archivos en una estructura de directorios. Tiene como fin el

que podamos definir un subconjunto de nodos de un documento XML para su posterior

procesamiento. Nos sirve para poder identificar partes específicas de un documento XML.

Page 5: XPath

Elementos básicos

ExpresionesEl bloque básico de construcción del lenguaje son las expresiones, son construidas a través de

palabras claves, símbolos y operadores.

Las expresiones pueden retornar valores booleanos, numéricos, cadenas (en XPath 2.0 pueden ser

de cualquier tipo definido en el XML Schema) o un conjunto de nodos (node-set)

XPath es un lenguaje que distingue entre mayúsculas y minúsculas de la misma forma que XML.

Page 6: XPath

ContextosEl contexto de una expresión es toda aquella información que puede incidir en el resultado de la

evaluación de la misma.

Se divide en estático (información antes de la ejecución de la expresión) y dinámico (información

disponible cuando se esta evaluando la expresión)

Puede hacerse una analogía entre el contexto estático y dinámico con cualquier lenguaje de

programación y la información que está disponible en tiempo de compilación y en tiempo de

ejecución.

Page 7: XPath

Expresiones primariasSon las construcciones más simples del lenguaje, incluyen:

● literales,

● variables,

● expresiones de contexto

● Llamadas a funciones.

Pueden utilizarse paréntesis para forzar la ejecución de una serie de operadores en un orden

específico.

Se puede hacer referencia al contexto del ítem actual con la expresión “.”

Page 8: XPath

Expresiones primarias. LiteralesRepresentan valores atómicos de tipo numérico o de cadena:

"Hola mundo", representa un literal de cadena

100, representa el valor entero cien

100.13, representa un valor decimal

Para representar valores de otros tipos deben utilizarse funciones:

fn:true() o fn:false(), representan valores del tipo xs:boolean

xs:date("2015-06-20"), representa el 20 de Junio del año 2015

Page 9: XPath

Expresiones primarias. Variables

El concepto de variable es análogo al de cualquier lenguaje de programación. En XPath las variables

están precedidas por el símbolo $.

Si existen dos variables con el mismo nombre que tienen alcance en el contexto se opta por la más

cercana.

Page 10: XPath

Expresiones primarias. Llamadas a funcionesSimilar a las funciones definidas en cualquier lenguaje.

Las funciones tienen un nombre seguido de la lista de parámetros entre paréntesis.

Funciones numéricas

round() redondeoabs() valor absolutofloor() valor entero más bajoceiling() valor entero más alto

Page 11: XPath

Funciones de cadena

substring() subcadena substring(“paralelogramo”, 1, 8) = paralelo

stars-with() cadena comienza por …. starts-with(“paralelogramo”, “p”) = true

contains() cadena contiene… contains(“paralelogramo”, “gramo”) = true

normalize-space() espacios normalizados normalize-space(“ La casa blanca”) =”La casa blanca”

translate() cambia caracteres en una cadenastring-length() longitud de una cadena string-length(“paralelogramo”) = 13

Funciones que devuelven elementos por su posición

position()=n Elemento que se encuentra en la enésima posiciónelemento[n]last() El último elemento de un conjuntolast()-i El último elemento - i

Page 12: XPath

Funciones que devuelven nodos

name() nombre del nodo actualroot() elemento raíznode() nodos descendientes del actualcomment() comentariosprocessing-instruction() Instrucciones de procesamiento

Page 13: XPath

Expresiones primarias. Operadores

XPath provee operadores aritméticos para las principales operaciones matemáticas

● suma (+), resta (-), multiplicación (*), división (div), división entera (idiv) y módulo (mod)

También dispone de operadores lógicos

● conjunción (and), disyunción (or)

● Para la negación lógica se puede utilizar el operador not o la función unitaria fn:not()

Page 14: XPath

Expresiones primarias. Comparaciones

Operadores de comparación de propósito general, pueden utilizarse con cualquier tipo de datos

=, !=, <, <=, >, >=,

Tienen equivalentes que sirven sólo para comparar valores simples, en este caso, si los operandos

no son comparables (comparar un nodo con un número) se produce un error.

eq, ne, lt, le, gt, ge

Page 15: XPath

Expresiones primarias. Comparaciones

Otros operadores de comparación especiales para utilizar con nodos.

Operador is devuelve verdadero si dos expresiones devuelven exactamente el mismo nodo.

Operadores << y >> comparan el orden de los nodos en el documento.

<< retorna verdadero si un nodo ocurre antes que otro en el documento

>> devuelve verdadero si ocurre después.

Page 16: XPath

Expresiones de rutaUna expresión de ruta (path expression) sirve para localizar nodos dentro de la estructura jerárquica

propia de Xml.

Cada expresión de ruta consta de varios pasos separados por un símbolo “/” o “//”.

/ indica que el siguiente paso se encuentra adyacente en la jerarquía de nodos (referencia a un

hijo)

// puede localizar cualquier nodo que sea descendiente sin importar el nivel (es una abreviatura

de: descendant-or-self::node()).

Las rutas pueden ser absolutas o relativas. Si comienzan con el símbolo “/” son absolutas. / hace

referencia al nodo raíz. Si no comienzan por / hacen referencia al nodo actual.

Page 17: XPath

Sintaxis

paso1/paso2/paso3/…/…

Cada paso en una ruta puede ser:

● Un nodo

● Un eje con filtro

○ eje::filtro[predicado 1][predicado 2][…]

● Nodo con cero o más predicados (se evalúa con respecto al conjunto de nodos producidos por

el paso anterior)

Page 18: XPath

Expresiones de ruta.

EjesEl eje de un paso especifica la dirección en la

que se va a evaluar la ruta, es decir, si nos

vamos a mover hacia arriba en la jerarquía o

hacia abajo, si se va a incluir el nodo actual o

no, etc.

Page 19: XPath

Expresiones de ruta.

FiltrosLos filtros son utilizados para incluir o excluir

nodos dentro de un eje, ya sea por nombre o

por tipo. El resultado son todos los nodos que

cumplen con el filtro especificado. En el caso

de filtros por nombre se utiliza un QName

(nombre del nodo)

Page 20: XPath

Expresiones de ruta. PredicadosLos predicados son expresiones que permiten filtrar un conjunto de nodos utilizando un criterio

determinado.

Filtra los nodos que se obtienen como resultado de la expresión de ruta que se ejecutó hasta el

momento, dejando sólo aquellos para los cuales se cumple el criterio.

Los predicados se escriben entre corchetes.

Page 21: XPath

Expresiones de ruta. PredicadosSi el predicado consta de una expresión que se evalúa como entero entonces como resultado se

obtiene el nodo que se encuentra en esa posición (análogo a los índices de un Array comenzando en

1).

Cuando el resultado de la expresión de predicado no es un entero, el resultado de aplicar el

predicado, es el conjunto de nodos para los cuales la expresión es verdadera.

Page 22: XPath

Expresiones de ruta. Predicados notación reducida

Page 23: XPath

elemento elemento de nombre elemento

/elemento elemento de nombre elemento ubicado en la raíz del documento

e1/e2 elemento e2 hijo directo de elemento e1

e1//e2 elemento e2 descendiente (hijo, nieto, …) del elemento e1

//elemento elemento de nombre elemento ubicado en cualquier nivel por debajo de la raíz del

documento

@atributo atributo de nombre atributo

* cualquier elemento (todos los elementos)

@* cualquier atributo (todos los atributos)

. nodo actual

.. nodo padre