●
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.
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.
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.
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.
Elementos básicos Expresiones El 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.
Contextos El 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.
Expresiones primarias Son 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 “.”
Expresiones primarias. Literales Representan 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
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.
Expresiones primarias. Llamadas a funciones Similar 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() abs() floor() ceiling()
redondeo valor absoluto valor entero más bajo valor entero más alto
Funciones de cadena substring() stars-with() contains() normalize-space() translate() string-length()
subcadena substring(“paralelogramo”, 1, 8) = paralelo cadena comienza por …. starts-with(“paralelogramo”, “p”) = true cadena contiene… contains(“paralelogramo”, “gramo”) = true espacios normalizados normalize-space(“ La casa blanca”) =”La casa blanca” cambia caracteres en una cadena longitud de una cadena string-length(“paralelogramo”) = 13
Funciones que devuelven elementos por su posición position()=n elemento[n] last() last()-i
Elemento que se encuentra en la enésima posición El último elemento de un conjunto El último elemento - i
Funciones que devuelven nodos name() root() node() comment() processing-instruction()
nombre del nodo actual elemento raĂz nodos descendientes del actual comentarios Instrucciones de procesamiento
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()
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
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.
Expresiones de ruta Una 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.
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)
Expresiones
de
ruta.
Ejes El 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.
Expresiones
de
ruta.
Filtros Los 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)
Expresiones de ruta. Predicados Los 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.
Expresiones de ruta. Predicados Si 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.
Expresiones de ruta. Predicados notaci贸n reducida
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, â&#x20AC;Ś) 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