| Gustavo님의 프로필Gustavo Bonansea블로그리스트 | 도움말 |
|
7월 1일 Tutorial de XPath 2.0 - Parte 1TUTORIAL DE XPATH 2.0 - Parte 1
En un entorno donde todas las tecnologías relacionadas con XML se encuentran en constante expansión, es cada vez más necesario profesionales que tengan acabados conocimientos en ellas. Este tutorial es una guía para que pueda conocer las funcionalidades que XPath puede ofrecerle.
En esta parte uno veremos los conceptos más básicos de XPath que luego serán completados con las subsiguientes partes del tutorial, las cuales estarán disponibles proximamente en este sitio. 1. IntroducciónDebido a la estructura jerárquica de los 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 xml para su posterior procesamiento. Nos sirve para poder identificar partes específicas de un documento Xml. Xml es ampliamente utilizado para transportar información debido a su alta compatibilidad, sobre todo entre plataformas heterogéneas. Es utilizado como un aglutinante para interconectar aplicaciones y facilitar su interacción, inclusive aquellas que se encuentren geográficamente separadas y que utilicen un medio en constante evolución como Internet para comunicarse. Cada vez se utiliza más exhaustivamente y con volúmenes de información mayores, no solo para transportar información sino también para almacenarla. A medida que crece la cantidad y variedad de información se hacen necesarias técnicas más poderosas para encontrarla. Para cubrir esta necesidad nació XPath el cual puede compararse con el lenguaje SQL que se utiliza para recuperar información almacenada en bases de datos relacionales. XPath 1.0 (http://www.w3.org/TR/xpath) es un estándar de la W3C, es una parte integral de XSLT y puede ser utilizado con DOM para poder seleccionar conjuntos de nodos. Para el tiempo en que se escribió este artículo se encuentra en Working Draft (borrador) la versión 2.0 (http://www.w3.org/TR/xpath20) y comparte el mismo modelo de datos con XQuery 1.0. Este artículo está basado en él y puede cambiar para cuando se publique la versión final. El sistema de tipos de datos está basado en Xml Schema. Posee una nutrida librería de funciones y operadores para poder ser utilizados en la evaluación de las expresiones. 2. ExpresionesEl bloque básico de construcción del lenguaje son las expresiones, que son construidas a través de palabras claves, símbolos y operadores. XPath es un lenguaje que distingue entre mayúsculas y minúsculas de la misma forma que XML. Las expresiones pueden retornar valores escalares: que pueden ser booleanos, numéricos o cadenas (en XPath 2.0 pueden ser de cualquier tipo definido en el Xml Schema), o un conjunto de nodos (node-set) 3. 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 y dinámico. El contexto estático esta conformado por toda la información disponible en el análisis estático, es decir, antes de la ejecución de la expresión; como por ejemplo las variables que tienen alcance dentro de la misma y que pueden ser utilizadas por la misma. El contexto dinámico está compuesto por toda la información disponible cuando se está evaluando la expresión, por ejemplo, el ítem que está siendo evaluado actualmente (podría compararse con el concepto de directorio actual en las expresiones para definir la ruta relativa de un archivo), los valores actuales de las variables, la fecha y hora actual, etc. 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. Cuando se ejecuta una instrucción xsl:for-each de un XSLT el contexto está formado por toda la información del nodo que se está procesando actualmente. De la misma forma la instrucción xsl:template match="/" nos indica que nos encontramos en el contexto del nodo raíz del documento. 4. Expresiones primariasSon las construcciones más simples del lenguaje, incluyen literales, variables, expresiones de contexto y llamados 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 “.” como en el ejemplo 1
/Libros/Libro[count(./Autores/Autor)>1] Ejemplo 1: Esta expresión devuelve todos los libros que poseen más de un autor. El “.” puede omitirse y la expresión entre paréntesis puede resumirse a: Autores/Autor 4.1 LiteralesRepresentan valores atómicos de tipo numérico o de cadena:
/Libros/Libro[Titulo=”La Conspiración”]/Precio*1.3 Ejemplo 2: Esta expresión devuelve el precio del libro “La Conspiracion” y le aumenta un 30%. En esta expresión la cadena “La Conspiracion” y el valor 1.3 son literales
Para representar valores de otros tipos deben utilizarse funciones:
4.2 VariablesEl 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.
//Libro[Precio > $preciominimo]/Titulo Ejemplo 3: Obtiene el título de todos los libros cuyo precio supera el precio mínimo definido en la variable $preciominimo. 4.3 Llamados a funcionesEste concepto también es análogo al de las funciones definidas en cualquier lenguaje. Las funciones tienen un nombre, seguido de la lista de parámetros entre paréntesis. Como se ve en el ejemplo 4 se realiza un llamado a la función count() que recibe como parámetro un node-set y devuelve la cantidad de nodos del mismo.
count(/Libros/Libro) Ejemplo 4: Esta expresión devuelve la cantidad de libros /Libros/Libro/string-length(Titulo) Ejemplo 5: Retorna la cantidad de caracteres del titulo de cada libro /Libros/Libro/round(number(Precio/text())) Ejemplo 6: Devuelve el precio redondeado a entero de cada libro 5. OperadoresXPath provee operadores aritméticos para las principales operaciones matemáticas como suma, resta, multiplicación, división y módulo. También provee operadores lógicos como conjunción (and), disyunción (or) y una función (fn:not) para realizar la negación. En la tabla 1 se enumeran todos los operadores.
Tabla 1. /Libros/Libro[1]/Precio + /Libros/Libro[2]/Precio Ejemplo 7:Obtiene la suma del precios del primer y segundo libro /Libros/Libro[1]/Precio * $preciodolar Ejemplo 8: Convierte el precio del primer libro que se encuentra en pesos a dólares /Libros/Libro[Precio/text() > 66 and Precio/@moneda='dolares']/Titulo Ejemplo 9 :Devuelve el título de los libros cuyo precio es mayor de U$S 66 6. ComparacionesLas comparaciones en XPath se realizan con los símbolos =, !=, <, <=, >, >=. Estos operadores de comparación son de propósito general, es decir que pueden utilizarse con cualquier tipo de datos, pero tienen equivalentes que sirven solo para comparar valores simples: eq, ne, lt, le, gt, ge. La diferencia radica en que si los operandos no son comparables (como en el caso de comparar un nodo con un número) y utilizamos comparadores de valores como el eq se produce un error. Por otro lado, los comparadores generales siempre devuelven verdadero o falso, nunca un error. Si en el ejemplo 11 se utilizara el operador gt en vez de >, la expresión se evaluaría con error debido a que no se puede comparar el nodo “Publicación” con un valor numérico. Existen otros operadores de comparación especiales para utilizar con nodos. El operador is devuelve verdadero en el caso que dos expresiones devuelvan exactamente el mismo nodo. Los operadores << y >> sirven para comparar el orden de los nodos en el documento. El primero retorna verdadero si un nodo ocurre antes que otro en el orden y el segundo devuelve verdadero si ocurre después.
/Libros/Libro[position() = 2 ] is /Libros/Libro[2] Ejemplo 10: Esta expresión devuelve verdadero ya que las dos subexpresiones separadas por el signo = son equivalentes (es decir que referencian al mismo nodo) /Libros/Libro[Publicacion > 2003]/Titulo Ejemplo 11: Esta expresión retorna los libros que fueron publicados después del año 2003. 트랙백이 블로그의 트랙백 URL은 다음과 같습니다. http://misopiniones.spaces.live.com/blog/cns!2737DC89A4AAB26B!199.trak 이 블로그를 참조하는 웹 로그
|
|||||||||||||||||||||||||
|
|