1 / 27

XPath

XML. XPath. ¿Qué es Xpath?. Lenguaje para identificar partes de documento XML No es XML Es parte de XSL (XSLT, XSL-FO) Utilizado fuera de XSL: XPointer, XForms. Estructura en árbol (II). Todo documento XML es un árbol de nodos Cada nodo contiene otros nodos

lucas
Télécharger la présentation

XPath

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. XML XPath

  2. ¿Qué es Xpath? • Lenguaje para identificar partes de documento XML • No es XML • Es parte de XSL (XSLT, XSL-FO) • Utilizado fuera de XSL: XPointer, XForms

  3. Estructura en árbol (II) • Todo documento XML es un árbol de nodos • Cada nodo contiene otros nodos • Nodo raíz  Nodo imaginario del que cuelgan los demás. No es el elemento raíz • Nodo hoja  Si no tiene descendientes (p.e. texto, comentario, elemento sin atributos ni contenido) • Resto de nodos: • Nodo elemento • Nodo de texto • Nodo de atributo • Nodo de comentario • Nodo de PI • Nodo de namespace

  4. Estructura en árbol (III) • Veamos un fichero XML y su representación en árbol:

  5. Estructura en árbol (IV) • Algunas consideraciones • Los elementos <!DOCTYPE >, <![CDATA[ ]]> no se incluyen en el árbol  No direccionables por Xpath • Las entidades se resuelven previamente  Es posible que haya atributos tipo #FIXED añadidos por DTD que no estén físicamente en XML • Los atributos xmlns y xmlns:prefijo no se tienen en cuenta

  6. Location Paths • ¿Qué es un location path? • Una expresión que localiza uno o varios nodos dentro de un documento • Compuesta por location steps que se evalúan relativamente al nodo “actual” denominado context node • Location path raíz • Sintaxis: / • Sitúa el context node en el nodo raíz • Localización de elementos hijos • Sintaxis: nombre-hijo • Ejemplo. Si el nodo contexto es DDD y evaluamos la expresión Xpath: BBB, seleccionaría: <AAA> <BBB/>   <CCC/>   <BBB/>   <BBB/>   <DDD> <BBB/>  </DDD>   <CCC/> </AAA>

  7. Location Paths (II) • Localización de atributos • Sintaxis: @nombre-atributo • Ejemplo. Selección de todos los atributos “id”. • Se introduce localización desde nodo raíz “/” • Doble barra implica todo el documento “//” • XPath: //@id <AAA> <BBB id = "b1"/> <BBB id = "b2"/> <BBB name = "bbb"/>  <BBB/> </AAA>

  8. Location Paths (III) • Localización de comentarios, PI, texto • Sintaxis respect.: comment() text() processing-instruction() • Ejemplo. Selección de comentarios del texto. Nodo contexto  Nodo raíz. • XPath:comment() <!-- Primer comentario --> <AAA> <BBB/> <BBB/> <BBB/> <!-- Segundo comentario --> <BBB/> </AAA>

  9. Location Paths (IV) • Comodines • Ejemplo. Supongamos que nodo contexto es el nodo raíz. • XPath: node() <!-- Un comentario al principio --> <AAA>  <XXX> <DDD> <!-- Un comentario --> <BBB/> <BBB/> <EEE/>  <FFF/> <?pi una pi cualquiera?>   </DDD>   </XXX> <YYY/> </AAA>

  10. Location Paths (V) • Grupos de Location Paths • Sintaxis: path1 | path2 | path3 • Ejemplo • Path de contexto  AAA • Xpath: CCC | EEE <AAA> <BBB/> <CCC/> <DDD> <CCC/> </DDD> <EEE/> </AAA>

  11. Paths compuestos • Los location Paths pueden concatenarse con “/” • Ejemplos • Xpath: /AAA/*/* • <AAA> • <BBB/> • <CCC> • <DDD> • <EEE/> • </DDD> • </CCC> • <BBB/> • <BBB/> • <DDD> • <BBB/> • </DDD> • <CCC/> • </AAA> • Xpath: /AAA/DDD/BBB • <AAA> • <BBB/> • <CCC/> • <BBB/> • <BBB/> • <DDD> • <BBB/> • </DDD> • <CCC/> • </AAA>

  12. Paths compuestos (II) • Selección de todos los descendientes • Sintaxis: // • Si se expresa en primer lugar indica todos los descendientes desde el raíz • Ejemplos Xpath: /AAA/DDD//* <AAA> <BBB/> <CCC/> <BBB/> <DDD> <CCC> <EEE> <XXX/> </EEE> </CCC> </DDD> <CCC> <DDD> <BBB/> <BBB/> <CCC/> </DDD> </CCC> </AAA> • Xpath: //BBB • <AAA> • <BBB/> • <CCC/> • <BBB/> • <BBB/> • <DDD> • <BBB/> • </DDD> • <CCC/> • </AAA>

  13. Paths compuestos (III) • Selección del nodo padre • Sintaxis: .. • Ejemplos • Xpath: //BBB/.. • <AAA> • <BBB/> • <CCC/> • <BBB/> • <BBB/> • <DDD> • <BBB/> • </DDD> • <CCC/> • </AAA> • Xpath: /AAA/DDD/CCC/.. • <AAA> • <BBB/> • <CCC/> • <BBB/> • <DDD> • <CCC> • <EEE/> • </CCC> • </DDD> • <DDD> • <DDD> • <BBB/> • <BBB/> • <CCC/> • </DDD> • </DDD> • </AAA>

  14. Paths compuestos (IV) • Selección del nodo contexto • Sintaxis: . • Ejemplos • Xpath: //BBB/. • <AAA> • <BBB/> • <CCC/> • <BBB/> • <BBB/> • <DDD> • <BBB/> • </DDD> • <CCC/> • </AAA> • Xpath: /AAA/DDD/. • <AAA> • <BBB/> • <CCC/> • <BBB/> • <DDD> • <CCC> • <EEE/> • </CCC> • </DDD> • <DDD> • <DDD> • <BBB/> • <BBB/> • <CCC/> • </DDD> • </DDD> • </AAA>

  15. Predicados • Filtros para refinar más un location path • Consisten en expresiones booleanas • Se aplican a cada Location path por separado • Sintaxis: path[expresion-booleana] • Ejemplos: • Primer nodo AAA en todo el documento • //AAA[1] • Evaluación del contenido del nodo elemento • //AAA[.=“contenido”] • Evaluación de nodos con atributo dado o atributo con valor dado • //AAA[@id] • //AAA[@id=‘1234’] • Nodos con nombre de elemento dado • //*[name()=‘AAA’]  //AAA • Comparación de valores: < > <= >= = != • //AAA[@id >= 12] • Ojo: Si Xpath detro de XML: ‘<‘  ‘&lt;’ • Concatenaciones booleanas: and, or • //AAA[@id >= 12 and @id < 20]

  16. Location Paths sin abreviar • Hasta ahora hemos visto forma abreviada (/, .., //, .)  La más utilizada • Location path completo compuesto por: eje::test-nodos[predicado] • Partes • eje: Indica la dirección en la que viajar • test-nodos: Condición que han de cumplir los nodos • predicado: Expresiones booleanas adicionales. Opcional • Ejemplo • Versión abreviada: AAA/BBB/CCC/@id • Versión sin abreviar: child::AAA/child::BBB/child::CCC/attribute::id

  17. Location Paths sin abreviar (II) • Tipos de ejes • Equivalentes a forma abreviada: child (nombre), self (self::*.), parent (parent::*  ..) • Nuevos. Siempre con referencia del nodo de contexto • ancestor nodo padre y ascendencia hasta raíz • ancestor-or-self incluye el nodo contexto • descendant nodos hijos y descendencia • descendant-or-self incluye el nodo contexto • following-sibling siguientes nodos al mismo nivel que el de contexto hijos del mismo padre • preceding-sibling como el anterior pero anteriores al nodo contexto • preceding anteriores nodos hasta ppio del doc a cualquier nivel • following siguientes nodos hasta fin del doc a cualquier nivel • namespace todos los nodos de un namespace

  18. Location Paths sin abreviar (III) • Ejemplos forma completa • Xpath: /AAA/BBB/descendant::*<AAA> • <BBB> • <DDD> • <CCC> • <DDD/> • <EEE/> • </CCC> • </DDD> • </BBB> • <CCC> • <DDD> • <EEE> • <DDD> • <FFF/> • </DDD> • </EEE> • </DDD> • </CCC> • </AAA> • Xpath:/AAA/BBB/DDD/CCC/ancestor::*<AAA> • <BBB> • <DDD> • <CCC> • <DDD/> • <EEE/> • </CCC> • </DDD> • </BBB> • <CCC> • <DDD> • <EEE> • <DDD> • <FFF/> • </DDD> • </EEE> • </DDD> • </CCC> • </AAA> • Xpath://CCC/preceding-sibling::* • <AAA> • <BBB> • <DDD> • <EEE/> • <CCC> • <DDD/> • <EEE/> • </CCC> • </DDD> • </BBB> • <CCC> • <DDD> • <EEE> • <DDD> • <FFF/> • </DDD> • </EEE> • </DDD> • </CCC> • </AAA>

  19. Expresiones generales • Otras expresiones aparte de Location Paths • Numéricas • Cadenas • Booleanas • Números • Expresión Xpath válida: 3.141529 • Todos los números Xpath se consideran 8-byte, IEEE 754 (doubles de Java). ±4.94065645841246544e-324 ~ ±1.79769313486231570e+308 • Operaciones permitidas: + - * div mod • Ejemplo expresión XPath: • (8.5E45 * 2) mod @id

  20. Expresiones generales (II) • Cadenas • Cualquier cadena unicode es una expresión Xpath válida • Únicamente no puede contener el carácter que la delimite (‘ ó “). • Ejemplos: “hola” “τσπξχ” “ضغلمنسش” • Las cadenas se pueden comparar  “hola” != “Hola” • Booleanos • Valores: true() false() • Las comparaciones devuelven booleanos: “1.5” >= “-1.2” • Los operadores lógicos agrupan booleanos: • not( (1.5 < 5) and true() ) or false()

  21. Funciones • Xpath dispone de varias funciones. Las funciones pueden devolver: booleanos, números, grupos de nodos, cadenas • Las conversiones automáticas son posibles excepto desde y hacia grupos de nodos • Funciones de nodos • position() Devuelve número de nodo dentro de la lista de nodos de contexto (XSLT) <xsl:template match="person"> Person <xsl:value-of select="position( )"/>, <xsl:value-of select="name"/> </xsl:template> • last()  Devuelve el último nodo de la lista de contexto • count(nodeset) Cuenta el nº de nodos del conjunto pasado como argumento • Ej. count(//BBB)  2

  22. Funciones (II) • Funciones de nodos (II) • id(nodeset) Devuelve nodo con atributo definido como ID en DTD igual a argumento • Ej. id(“a1234”)  <persona identidad=“a1234”> • local-name(nodeset)  Nombre de primer nodo en nodeset sin prefijo • name(nodeset)  Nombre de primer nodo completo • Ejemplo: name(//aa:AAA) = “aa:AAA”, local-name(//aa:AAA) = “AAA” • namespace-uri(nodeset)  Devuelve uri de namespace de primer nodo en nodeset

  23. Funciones (III) • Ejemplos funciones de nodo • XPath: //BBB[position() mod 2 = 0] • <AAA> • <DDD> • <BBB id="a1"/> • <BBB id="a2"/> • <BBB id="a3"/> • <BBB id="a4"/> • <BBB id="a5"/> • <CCC/> • <CCC/> • </DDD> • <DDD> • <CCC/> • <BBB id="b1"/> • <BBB id="b2"/> • <BBB id="b3"/> • <BBB id="b4"/> • </DDD> • </AAA> • XPath: //BBB[last()] • <AAA> • <DDD> • <BBB id="a1"/> • <BBB id="a2"/> • <BBB id="a3"/> • <BBB id="a4"/> • <BBB id="a5"/> • <CCC/> • <CCC/> • </DDD> • <DDD> • <CCC/> • <BBB id="b1"/> • <BBB id="b2"/> • <BBB id="b3"/> • <BBB id="b4"/> • </DDD> • </AAA>

  24. Funciones (IV) • Funciones de cadena • string(cualquier-cosa) Convierte a cadena • Ej. string(true())  “true” • Con nodesets saca texto de primer nodo • <a>aa<b>bb</b></a>  string(//*) = “aa” • starts-with(cadena-completa,subcadena) • Ej. starts-with(“Pepelui”, “Pe”)  true() • contains(cadena-completa,subcadena) • Ej: contains(“aeIou”, “eI”)  true() • substring-before(cadena, subcadena) • Ej: substring-before(“DD/MM/AAAA”, “/”)  “DD” • substring-after(cadena, subcadena) • Ej: substring-after(“DD/MM/AAAA”, “/”)  “MM/AAAA” • substring (cadena, inicio [,longitud]) • Ej: substring(“DD/MM/AAAA”, 3)  “/MM/AAAA” • string-length(cadena) • Ej: substring(“DD/MM/AAAA”, 3)  “/MM/AAAA” • normalize-space(cadena)  Elimina espacios extra

  25. Funciones (V) • Ejemplos funciones cadenas • XPath: //*[string-length(name()) > 3] • <AAA> • <Q/> • <SSSS/> • <BB/> • <CCC/> • <DDDDDDDD/> • <EEEE/> • </AAA> • XPath: //@*[substring(.,2) > 2] • <AAA> • <DDD> • <BBB id="a1"/> • <BBB id="a2"/> • <BBB id="a3"/> • <BBB id="a4"/> • <BBB id="a5"/> • <CCC/> • <CCC/> • </DDD> • <DDD> • <CCC/> • <BBB id="b1"/> • <BBB id="b2"/> • <BBB id="b3"/> • <BBB id="b4"/> • </DDD> • </AAA>

  26. Funciones (VI) • Funciones booleanas • true() false() not(expr) • Funciones numéricas • number()  convierte a número • number(nodeset) = number(string(nodeset)) • Ej.: number(“7.5”) = 7.5 number(“Pedro”) = NaN • Extracción de parte entera • round(4.6) = 5 • floor(4.6) = 4 • ceiling(4.2) = 5 • sum(nodeset)  Convierte cada nodo en número y lo suma

  27. Funciones (VII) • Ejemplo funciones numéricas • XPath: //BBB[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ] • <AAA> • <BBB id="1"/> • <BBB id="2"/> • <BBB id="3"/> • <BBB id="4"/> • <BBB id="5"/> • <BBB id="6"/> • <BBB id="7"/> • <BBB id="8"/> • <CCC/> • <CCC/> • <CCC/> • </AAA>

More Related