Gustavo님의 프로필Gustavo Bonansea블로그리스트 도구 도움말
    7월 1일

    Tutorial de XPath 2.0 - Parte 1

    TUTORIAL 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ón

    Debido 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.    Expresiones

    El 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.    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 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 primarias

    Son 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             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

     

    /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:

    • fn:true() o fn:false, representan valores del tipo xs:boolean
    • xs:date("2005-06-20"), representa el 20 de Junio del año 2005

    4.2             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.

     

    //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 funciones

    Este 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.    Operadores

    XPath 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.

     

    Operadores Aritméticos

    Símbolo

    Operación

    +

    suma

    -

    resta

    div

    división

    idiv

    división entera

    mod

    módulo

    *

    multiplicación

    Operadores Lógicos

    and

    conjunción lógica “y”

    or

    disyunción lógico “o”

    not

    negación lógica (en realidad no es un operador sino una función unaria “fn:not()”

     

    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.    Comparaciones

    Las 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.

     
    GB

    댓글

    잠시만 기다려 주세요...
    죄송합니다. 입력한 댓글이 너무 깁니다. 내용을 줄여 보세요.
    입력한 내용이 없습니다. 다시 시도해 보세요.
    죄송합니다. 지금은 댓글을 추가할 수 없습니다. 나중에 다시 시도해 보세요.
    댓글을 추가하려면 부모님의 사용 허락이 필요합니다. 허용 요청
    부모님이 댓글 기능을 해제한 상태입니다.
    죄송합니다. 지금은 댓글을 삭제할 수 없습니다. 나중에 다시 시도해 보세요.
    하루에 남길 수 있는 댓글의 최대 한도를 초과했습니다. 24시간 후에 다시 시도해 보세요.
    회원님의 계정은 다른 사용자에게 스팸 메일을 보낼 수 있다고 여겨지므로 댓글 기능이 비활성화되어 있습니다. 이 설정에 문제가 있다고 생각되면 Windows Live 지원에 문의하시기 바랍니다.
    댓글을 남기려면 아래 보안 검사를 완료해야 합니다.
    보안 검사에 입력한 글자는 그림 또는 오디오에 있는 글자와 일치해야 합니다.

    댓글을 추가하려면 Windows Live ID로 로그인하세요. 핫메일, 메신저 또는 Xbox LIVE를 사용하는 경우 해당 계정을 Windows Live ID로 사용할 수 있습니다.로그인


    Windows Live ID가 없으신가요? 등록

    트랙백

    이 블로그의 트랙백 URL은 다음과 같습니다.
    http://misopiniones.spaces.live.com/blog/cns!2737DC89A4AAB26B!199.trak
    이 블로그를 참조하는 웹 로그
    • 없음