4.6.- Predicados.
Un predicado es una expresión booleana que añade un nivel de verificación al paso de localización.
En estas expresiones podemos incorporar funciones XPath.
¿Qué ventajas nos da el uso de predicados?
Mediante las rutas de localización se pueden seleccionar varios nodos a la vez, pero el uso de predicados permite seleccionar un nodo que cumple ciertas características.
Los predicados se incluyen dentro de una ruta de localización utilizando los corchetes, por ejemplo:
/receta/ingredientes/ingrediente[@codigo=“1”]/nombre
En este caso se está indicando al intérprete que escoja, dentro de un fichero XML de recetas, el nombre del ingrediente cuyo código tiene el valor “1”.
Veamos que es lo que podemos incluir en un predicado.
- Ejes, permiten seleccionar el subárbol dentro del nodo contexto que cumple un patrón. Pueden ser o no de contenido.
child
, es el eje utilizado por defecto. Su forma habitual es la barra,“/”
, aunque también puede ponerse:/child::
attribute
, permite seleccionar los atributos que deseemos. Es el único eje que veremos que no es de contenido.descendant
, permite seleccionar todos los nodos que descienden del conjunto de nodos contextos. Se corresponde con la doble barra,“//”
, aunque se puede usar:descendant::
self
, se refiere al nodo contexto y se corresponde con el punto”.”
.parent
, selecciona los nodos padre, para referirnos a él usamos los dos puntos,”..”
.ancestor
, devuelve todos los nodos de los que el nodo contexto es descendiente.
- Nodos test, permiten restringir lo que devuelve una expresión XPath. Podemos agruparlos en función de los ejes a los que se puede aplicar.
- Aplicable a cualquier eje:
“*”
, solo devuelve elementos, atributos o espacios de nombres pero no permite obtener nodos de texto, o comentarios de cualquier tipo.nod()
, devuelve los nodos de todos los tipos.
- Solo aplicables a ejes de contenido:
text()
, devuelve cualquier nodo de tipo texto.comment()
, devuelve cualquier nodo de tipo comentario.processing-instruction()
, devuelven cualquier tipo de instrucción de proceso.
- Aplicable a cualquier eje:
Varios predicados pueden unirse mediante los operadores lógicos and, or
o not
.
Autoevaluación
Relaciona los ejes siguientes con sus equivalentes.
Debes elegir entre las siguientes representaciones y escribirlas en el hueco correspondiente: @ , / , // , ..