Está en la página 1de 23
Conversion y adaptacién de documentos XML Hojas de estilo para XML CSS con XML mensaje xml mensaje ess [=taml version="t.0" encoding="ise-6056-1 > [mensaje ( border: Spx sold: ) -<2aml-siylesheet type="textcss™ destino (color: biue,} href=*mensaje css" 2> Iremitente (colo: red} texto { merain: Sem, cdestino=Juanto al Loco=/destino> -remitente~Maria la Impaciente Recuerda que nos tenemos ia oar + weir rome ha . Jque ver en la slacena, DG @ @ @ G——— @ ftoxto> -imensaie> Fosbiidades limitadas Por otra parte, XSLT se basa en XPath para realizar la busqueda de informacion a través del documento XML. Las expresiones XPath son cadenas que son expresiones regulares, las cuales hacen referencia a alguna estructura dentro del documento XML. A continuacién estudiaremos las expresiones XPath y a cont nel lenguaje XSLT. XPath Todo el procesamiento realizado con un fichero XML esta basado en la posibilidad de direccionar 0 acceder a cada una de las partes que lo componen, de modo que podamos tratar cada uno de los elementos de forma diferenciada. Eltratamiento del fichero XML comienza por la localizacién del mismo a lo largo del conjunto de documentos existentes en el mundo. Para llevar a cabo esta localizacién de forma univoca, se utilizan, los URI (Unifom Resource Identifiers), de los cuales los URL (Unifom Resource Locators) son sin duda los mas conocidos. Una vez localizado el documento XML, la forma de seleccionar informacion dentro de él.es mediante el uso de XPath, que es la abreviacién de lo que se conoce como XML Conversion y adaptacién de documentos XML Path Language. Con XPath podremos seleccionar y hacer referencia a texto, elementos, atributos y cualquier otra informacién contenida dentro de un fichero XML. XPath en si es un lenguaje sofisticado y complejo, pero distinto de los lenguajes procedurales que solemos usar (C, C++, Basic, Java...). Fue desarrollado en 1999 como parte de XSL (extensible Stylesheet Language). En el afio 2007 fue publicada la version XPath 2.0 que se basa en XML Schema y por tanto tiene en cuenta nuevos tipos de datos como los valores enteros, decimales y los reales de simple precision, fechas, horas e intervalos, secuencias de nodos o de valores atémicos y también introduce un gran numero de nuevas funciones. XPath es a su vez la base sobre la que se han especificado nuevas herramientas que aprovehcar para el tratamiento de documentos XML. Herramientas tales como XMLSchema, XPointer, XLink y XQuery (el lenguaje que maneja los documentos XML como si de una base de datos se tratase), que sin duda cambiaran el modo en que actualmente concebimos la navegacién por la Web. Asi, XPath sirve para decir como debe procesar una hoja de estilo el contenido de una pagina XML, pero también para poder poner enlaces o cargar en un navegador zonas determinadas de una pagina XML, en vez de toda la pagina. Construccién del Arbol de Nodos Un documento XML es procesado por un analizador (0 parser) construyendo un arbol de nodos. Este arbol comienza con un elemento raiz, que se diversifica a lo largo de los elementos que cuelgan de él y acaba en nodos hoja, que contienen solo texto, comentarios, intrucciones de proceso o incluso que estan vacios y solo tienen atributos La forma en que XPath selecciona partes del documento XML se basa precisamente en a representacién arborea que se genera del documento. De hecho, los "operadores" de que consta este lenguaje nos recordaran la terminologia que se utiliza a la hora de hablar de arboles en informatica: raiz, hijo, ancestro, descendiente, etc Un caso especial de nodo son los nodos atributo. Un nodo puede tener tantos atributos como desee, y para cada uno se le creara un nodo atributo. No obstante, dichos nodos atributo NO se consideran como hijos suyos, sino mas bien como etiquetas afiadidas al nodo elemento. A continuacién se muestra un ejemplo de como se convierte en arbol un documento XML. Este mismo ejemplo sera usado a lo largo de todo el tutorial. En primer lugar se muestra el documento XML y a continuacién el arbol que genera. Conversion y adaptacién de documentos XML Alba Mi corazén oprimido Siente junto a la alborada El dolor de sus amores Y el suefio de las distancias Tipos de Nodos Existen distintos tipos de nodos en un arbol generado a partir de un documento XML, a saber: © Nodo raiz (root) ‘+ Elementos (elements) © Atributos (attributes) © Texto (text) ‘* Comentarios (comments) ‘+ Instruccién de procesamiento (processing instruction) ‘+ Espacios de nombres (namespaces) Nodo Raiz Se identifica por /. No se debe confundir el nodo raiz con el elemento raiz del documento. Asi, si el documento XML de nuestro ejemplo tiene por elemento r: libro, éste sera el primer nodo que cuelgue del nodo raiz del arbol, el cual es: /. 5. Conversion y adaptacién de documentos XML El nodo raiz del arbol contiene a todo el documento, que incluye el elemento raiz asi como cualquier comentario e instrucciones de procesamiento que se produzcan antes de la etiqueta de inicio del elemento rai Asi en el documento siguiente: El nodo raiz contiene la instruccién de procesamiento xml-stylesheet asi como al elemento persona. La declaracion xml no es considerada un nodo. Nodo Elemento Cualquier elemento de un documento XML se convierte en un nodo elemento dentro del arbol. Cada elemento tiene su nodo padre. El nodo padre de cualquier elemento es, a su vez, un elemento, excepto el elemento raiz, cuyo padre es el nodo raiz. Los nodos elemento 5, que son: nodos elemento, nodos texto, nodos comentario y nodos de intrucciones de proceso. Los nodos elemento también tienen propiedades tales como su nombre, sus atributos e informacion sobre los "espacios de nombre" que tiene activos Una propiedad interesante de los nodos elemento es que pueden tener identificadores nicos (para ello deben ir acompafiados de un DTD que especifique dicho atributo toma valores tnicos), esto permite referenciar a dichos elementos de una forma mucho més directa. Nodos texto Por texto vamos a hacer referencia a todos los caracteres del documento que no esta marcados con alguna etiqueta. Un nodo texto no tiene hijos, es decir, los distintos caracteres que lo forman no se consideran hijos suyos. Nodos atributo ‘Como ya hemos indicado, los nodo atributo no se con: que los contiene sino que se ven como etiquetas afiadidas a Cada nodo atributo consta de un nombre, un valor (que es siempre una cadena) y un posible "espacio de nombres". Conversion y adaptacién de documentos XML Aquellos atributos que tienen valor por defecto asignado en el DTD se tratarén como si el valor se le hubiese al escribir el documento XML. Al contrario, no se crea nodo para atributos no especificados en el documento XML, y con la propiedad #IMPLIED definida en su DTD. Tampoco se crean nodos atributo para las definiciones de los espacios de nombre. Todo esto es normal sitenemos en cuenta que no es necesario tener un DTD. para procesar un documento XML. Lee er ‘The root node is the root of the DOM tree. The document element (the root element) is a child of the root node. The ‘root node also has the processing instructions and com- ments as child nodes. Tees eae! ing instruction, and comments in an element are the child nodes of the element nod It represents an attribute other than the xminsprefixed attribute that declares a namespace. cots The character data in an element is a text node. A text node has at least one character of data. A whitespace is Eee Com eM cea able whitespace at the end of an element and before the start of the next element is also a text node. The ignorable whitespace can be excluded from the DOM tree built by Pe EEO ee ones) eee es wu Car eure It represents a comment in an XML document, except the comments in the DOCTYPE declaration. Teer er rr ere o ons ept the processing instruction in the DOCTYPE dectara tion. The XML declaration isn’t considered as a processing saci Itrepresents a namespace mapping that consists of a sonlnssprefixed attribute such as xmlns-xsd="hitip: wn w3.0rg/2001/XMLSchema”. A namespace node consists of ‘a namespace prefix (xs in the example) and a namespace {URI (hitp:// wwww.w3.0rg/2001 /XMLSchema in the example). Table 1 Nodos comentario y de instrucciones de proceso Aparte de los nodos indicados, en el arbol también se generan nodos para cada item con comentarios y con intrucciones de proceso. Al contenido de estos nodos se puede acceder con la propiedad string-value. Nodos de espacios de nombres Cada elemento tiene un conjunto de nodos de espacios de nombres asociado, uno para cada prefijo de espacio de nombres distinto que esté ligado a un identificador URI a Conversion y adaptacién de documentos XML de espacio de nombres en el ambito del elemento (incluido el prefijo XML ligado al espacio de nombres http://www.w3.org/XML/1998/namespace, que se declara de forma implicita en cada documento XML) y uno para el espacio de nombres predeterminado si hay uno en el émbito del elemento, Expresiones struccién" en lenguaje XPath se denomina una expresin. Y pongo entre comillas lo de "instruccién" porque XPath es un lenguaje declarativo, por lo que las instrucciones no son exactamente como estamos acostumbrados a ver. has expresiones pueden incluir cierta variedad de operaciones sobre distintos tipos de operandos. En nuestro caso nos vamos a cefiir a dos tipos de operandos: Ilamadas a funciones y location paths (algo asi como caminos de localizacién). Un location path es la mas importante de los tipos de expresiones que se pueden especificar en notacién XPath. La sintaxis de un location path es simliar a la usada a la hora de describir los directorios que forman una unidad de disco en Unix o Linux (y imilar a la de los sistemas basados en MS-DOS y Windows, si exceptuamos la unidad de disco C:, A: y que las barras usadas son / en vez de las tipicas \ de estos ultimos sistemas operativos). Sin embargo, solo la sintaxis es lo similar al sistema de archivos. El significado de las expresiones es totalmente diferente. Por ejemplo, el siguiente path en Unix: fasrmhome/pepeillo/docs hace referencia a un unico directorio: docs el cual cuelga de el conjunto de directorios fasrhome/pepeillo sin embargo, la siguiente expresion en XPath: Nibro/capitulofparrafo hace referencia a TODOS los elementos parrafo que cuelguen directamente de CUALQUIER elemento capitulo que cuelgue de CUALQUIER elemento libro que, finalmente, cuelguen del nodo raiz, /., del documento que sigue: Dos por tres calles Josefa Santos 23.45 La primera calle Conversion y adaptacién de documentos XML Era una sombria noche del mes de agosto. Ella, inocente cual mariposa que surca al cielo en busca de libaciones. La segunda calle Era una obscura noche del mes de septiembre. Ella, inocente cual abejilla que surca el viento en busca del néctar de las flores La tercera calle Era una densa noche del mes de diciembre Ella, candida cual abgjlla que surca el espacio en busca de bichejos para comer Hay que tener en cuenta que una expresién en XPath no devuelve los elementos que cumplen con el patrén que representa dicha expresién, sino que devuelve una referencia a dichos elementos; es decir, una expresion XPath nos devuelve una lista de apuntadores alos elementos que encajan en el patron. Dicha lista puede estar vacia 0 contener uno 0 mas nodos. Conversién y adaptacién de documentos XML Nodo contexto Un location path siempre tiene un punto de partida llamado nodo contexto. Para entendernos es como el directorio actual si nos referimos a un sistema de ficheros. A: si estando en Unix, damos una orden Is obtendremos los ficheros que existen en el directorio actual, mientras que si decimos Is /usr/bin obtendremos el listado de los icheros existentes en el directorio /usr/bin con independencia del director estemos colocados al dar la orden. En los location path ocurre lo mismo. A menos que se indique un camino explicito, se entender que el location path parte del nodo que en cada momento se esté procesando. El concepto de "nodo contexto" es imprescindible para comprender como se lleva a cabo la eleccién de los nodos que ajustan con el patron indicado en el location path. para explicar esto, veamos como actuaria un motor de evaluacién de expresiones XPath al leer la siguiente expresion aplicada al documento XML que estamos manejando: Nibro/capitulofparrafo (Aviso: lo que viene a continuacién requiere de pausada lectura, descansito para frigorifico a por algo de beber y pequefio masaje en los ojos... como minimo) En primer lugar comienza por leer /, lo cual le dice que debe seleccionar el nodo raiz, independientemente del nodo actual que en ese momento exista. En el momento en que el evaluador de XPath localiza el nodo raiz, éste pasa a ser el nodo contexto de dicha expresion. Siguiendo con nuestro ejemplo, el analizador leeria ahora libro, lo cual le dice que seleccione TODOS los elementos que cuelgan del nodo contexto (que atendiendo al parrafo anterior es el nodo raiz) que se llamen libro. Bueno... en este caso solo hay uno... porque (otra vez) solo puede haber un elemento raiz. igamos avanzando con nuestro ejemplo. A continuacion el analizador leeria capitulo, lo cual le dice que seleccione TODOS los elementos que cuelgan del nodo contexto (que atendiendo al parrafo anterior es el nodo libro). -lo- Conversién y adaptacién de documentos XML acitulosDos por tres calles Josefa Santos La primera calle Era una soubria noche del ues de agosto... mila, inocente cual mariposa<, que surca el cielo en busca de libaciones En un disco seria imposible que hubiera dos directorios con el mismo nombre colgando de un mismo directorio padre. Sin embargo, en nuestro documento XML podemos ver ‘como hay dos elementos capitulo colgando del elemento raiz libro. Por tanto, en estos momentos hay dos elementos que encajan con el patron /libro/capitulo. iY ahora viene lo mejor! El analizador continua leyendo la expresion XPath que le hemos dado y llega a parrafo. Con ello le estamos diciendo que seleccione TODOS los elementos parrafo que cuelgan del nodo contexto...iipero NO hay un nodo contexto, sino DOS! Bueno, no pasa nada, cada uno de los nodos de ese conjunto de nodos va a tener su momento de gloria, de forma que el evaluador de expresiones lo va a recorrer uno por uno haciendo que, mientras evaliia un determinado nodo, ése sea el nodo contexto de ese momento. En otras palabras, para localizar todos los elementos parrafo tal y como deseamos, se procesa el primer elemento capitulo y de él se extraen todos los elementos parrafo que contenga. A continuacién se pasa al préximo elemento capitulo del cual se vuelven a extraer todos los de tipo parrafo que tenga... y asi sucesivamente. El resultado final es un nuevo conjunto de nodos (o para ser mas precisos, conjunto de punteros a nodo) que encajan con el patrén buscado. Las siguientes son las expresiones mas utilizadas Expresion Descripcion nombre_nodo ‘Selecciona todos los nodos hijos del seffalado 7 Selecciona desde el nodo raiz 7 ‘Selecciona fos nodos en el documento que coincidan con el seffalado sin importar donde estén colocados ‘Selecciona el nodo actual Selecciona el padre del nodo actual @ ‘Selecciona atributos al- Conversién y adaptacién de documentos XML En la tabla siguiente hemos listado algunas expresiones y sus resultados. Expresion Resultado Tibro Selecciona todos los hijos del elemento libro Tibro Selecciona el elemento raiz libro Nota: Sila expresion comienza por la barra (/) siempre representa una ruta absoluta al elemento Tibro/capitulo Selecciona todos los elementos capitulo que son hijos de libro TTeapitulo Selecciona todos los elementos capitulo sin importar donde estan Tibro//capitulo Selecciona todos los elementos capitulo que son descendientes de libro sin importar que lugar ocupan en lajerarquia de libro 7/@ public ‘Selecciona todos los atributos denominados public Predicados Por lo poco que llevamos visto, podemos pensar que XPath es un gran mecanismo para seleccionar muchos nodos a la vez, lo cual es muy util. éPero qué pasa si solo queremos seleccionar un nodo que cumple ciertas caracteristicas? 20 mas de un nodo que cumple con un patrén pero no todos los que lo cumplen, sino solo aquellos con un atributo que les hemos afiadido para saber que los puede ver todo el mundo? Bueno, pues para todo esto se utilizan los predicados. Los predicados se incluyen dentro de un location path utilizando los corchetes, como por ejemplo: Aibro/capitulo[@num="1"]/parrafo Mediante el anterior location path estamos indicando que se escojan todos los elementos parrafo de todos los elementos capitulo que tengan un atributo llamado num al cual se le haya asignado el valor "1" (recordemos que en XML todos los atributos tienen valores de tipo cadena). Atendiendo a nuestro ejemplo, solo hay un capitulo que cumpla dichas condi por lo que solo los elementos parrado que él contiene seran seleccionados. Veamos algunos ejemplos 42- Conversién y adaptacién de documentos XML Expresion Resultado libro/capitulo[i] Primer elemento capitulo que es hijo de un elemento libro Tibro/capituloftast()] Ultimo capitulo de un elemento libro Tibro/capituloflast()-17 Peniiltimo capitulo Tibro/capitulo[position()<3] ‘Dos primeros elementos capitulo hijos de un elemento libro [/apendice[@num} Todos los elementos apendice que tengan un atributo num //capitulol@ public="si"] Todos los elementos capitulo con un atributo public="si” libro{precio>10] Todos los elementos libro con precio mayor de 10 ibro[precio>10)/titulo Eltitulo de todos los elementos libro con precio mayor de 10 Comodines Comodin Descripeién = Cualquier elemento oe Cualquier atributo nodel) Todos fos nodos de cualquier tipo Expresion Resultado Thibro/= Selecciona todos Tos hijos del elemento libro iF ‘Todos los elementos del documento [fapendicel@*] ‘Todos los elementos apéndice que tienen algin atributo Operador Para seleccionar varias rutas simultaneamente Expresion Resultado Tlibro/titulo | /ibro/capitulo Selecciona todos los titulos y capitulos del elemento libro Titulo | 7Teapitulo Selecciona todos los titulos y capitulos del documento /libro/capitulo/parrafo | //precio | Selecciona todos los elementos parrafo hijos de los elementos capitulo de libro y todos los elementos precio del documento Probando los ejemplos ‘Aunque mas tarde en este manual haremos las pruebas con XSLT, ahora vamos a usar la clase XMLHttpRequest de Javas ipt (Ajax). Para usar un objeto XMLHttpRequest en los nuevos navegadores deberemos: var amlhttp-new XMLHttpRequest() y en las versiones antiguas del IE (5 y 6) var amihttp=new A ctiveXObject("Microsoft XMLHTTP") 43- Conversion y adaptacién de documentos XML También hay diferencias en la seleccion de nodos entre el browser de Microsoft y el resto IE usa el método selectNodes() xmiDoc selectNodes(path), Mientras que Mozilla, Safari, Chrome usan el método evaluate() xmiDoc evaluate(xpath, xmlDoc, mull, XPathResult ANY_TYPE. null), Y el codigo completo para probar la consulta libro/capitulo es el siguiente: function leadXMLDoc(dname) { if (window XMLHttpRequest) { http-new XMLHttpRequest); } dse { szhttp-new ActiveX Object( "Microsoft XMLHTTP"), } xhttp open("GET",dname, false); xxhttp send(*"), retum zhttp responseXML; } sml=loadXMLD oo( "libro. xml"), document write("Resultado de la consulta: “+path+""), I codigo para IE if (window ActiveXObject) { var nodes=xml.selectNodes(path); for (=0;i"), } } Il codigo para Mozilla, Firefox, Opera, etc. else if (document implementation && document implementation createDocument) { ver nodes=xml.evaluate(path, xml, null, XPathResult ANY_TYPE, mull); var result=nodes iterateNext0), while (result) { document write(result childNodes[0] nodeValue), document write("
"), result=nodes iterateNext(), } } a4. Conversion y adaptacién de documentos XML Lo he podido ejecutar localmente solo con Mozilla Firefox B conte en Nate ES a Titer ik CBP SK 4 Fy seithescnsatiavssiptfjemplon/ConsltasXP ath cormulta Path hil (PMs viados _ Comensare usa Fefor times netics Formecn en Rede FY cuardar sito @ Rescha| Descubrr - cy Me gusta! (| #1] Favoritos G Info 6 Compartir | f Heramientas” = consuttas xPath 7 Resultado de la consulta: libro/capitulo La primera calle La segunda call Con ly Chrome debemos ejecutarlo desde el servidor web de permisos en el dominio en el que se ejecuta Ajax hhtp por un problema (B constas XPath - Wind 2) http://locathost/consuitasPath.html Edicién Ver Favoritos Herramientas Ayuda she Favoritos | yy @) Tuto. ~ GELMU.. hj Free... WR Engl... [MJ MARCA AY Inic. [ecumen Axes Los axes (ejes 0 hachas) son un conjunto de nodos seleccionados de manera relativa al nodo actual. Hasta ahora hemos usado direcciones 0 descriptores absolutos como en: 5- Conversién y adaptacién de documentos XML Nibro/capitulo orelativos librofcapitulo Hasta ahora solo hemos visto descriptores de caminos que bajan por el arbol. En general un camino se puede describir para partir en la raiz del arbol y luego ejecutar una secuencia de pasos para recorrerlo y encontrar los nodos que se necesitan. En cada paso se puede seguir una de varias direcciones (axes). La direccion por defecto es child:: — que significa “seguir por cualquiera de los hijos del elemento actual” El descriptor /libro/capitulo es realmente una forma abreviada del descriptor Hibro/child::capitulo. En este ultimo se ha hecho explicito el deseo de seguir por los “hijos” de libro, La @ es simplemente una abreviacion de la direccion attribute: El descriptor /libro/capitulo[@num="1"] es entonces una forma abreviada de Aibro/child::capitulofattribute::num = "1"). Existen muchas otras direcciones que se pueden seguir: para indicar a todos los descendientes y ‘+ descendant-or-self:: para indicar al nodo actual y todos sus descendientes (note que // resulta ser simplemente una abreviacion de esta scion). En general podemos usar los siguientes axes Nombre delaxes | Resultado ancestor ‘Selecciona todos los ascendientes (padre, abuelo ..) del nodo actual ancestor-or-self Selecciona el nodo actual y todos sus ascendientes (padre, abuelo ..) attribute Selecciona todos los atributos del nodo actual child Selecciona todos los hios del nodo actual descendant ‘Selecciona todos los descendientes (hijos, nietos ..) del nodo actual ‘descendant-or self | Selecciona el nodo actual y todos sus descendientes (hijos, nietos .) following ‘Selecciona cualquier cosa en el documento posterior al cierre dela etiqueta correspondiente al nodo actual following-sibling | Selecciona todos los hermanos posteriors al nodo actual namespace Selecciona todos los nodos de nombres de espacios correspondientes al nodo actual parent Selecciona el padre del nodo actual preceding Selecciona cualquier cosa en el documento anterior ala apertura de la etiqueta correspondiente al nodo actual preceding sibling | Selecciona todos los hermanos anteriores al nodo actual self Selecciona el nodo actual 16- Conversién y adaptacién de documentos XML La sintaxis para usar un eje es: nombre_eje''seleccién_nodos(predicado] Por ejemplo: Expresion Resultado child::capitulo ‘Selecciona todos Tos nodos capitulo que son hijos del nodo actual attribute:;public ‘Selecciona los atributos public del nodo actual child::* ‘Selecciona todos los hijos del nodo actual attributers* ‘Selecciona todos los atributos del nodo actual child:text() ‘Selecciona todos los nodos text que son hijos del nodo actual ‘child::node() ‘Selecciona todos los nodos de cualquier tipo que son hijos del nodo adual descendanti:capitulo | Selecciona todos los nodos capitulo descendientes del nodo actual ‘ancestor::parrafo ‘Selecciona todos los nodos parrafo ascendientes del nodo actual ‘ancestor-or-sef:;parrafo | Selecciona el nodo actual y todos los nodos parrafo que son sus ascendientes ‘child::*/child:;parrafo | Selecciona todos fos nodos parrafo que son nietos del nodo actual a7- Conversién y adaptacién de documentos XML Operadores Una expresin XPath devuelve siempre un conjunto de nodos (node-set), una cadena un valor booleano o un numero. En las expresiones XPath podemos usar los siguientes operadores ‘Operador: Descripcién I ‘Computa dos node-set + Suma = Resta = Multiplicacion dv Division mod Resto dela division entera = igual i distinto menor Menor o igual > mayor Mayor o igual or Funciones La siguiente relacién corresponde con todas las funciones utilizadas en XPath 2.0, XQuery 2.0 y XSLT 2.0 Funciones para descriptores de acceso Nombre Descripcion fnznode-name(node) Devuelve el nombre del nodo fnznilled(node) Devuelve un booleano indicando si el argumento es nulo fn:data(item.item, Recoge una secuencia de elementos y devuelve sus valores fncbase-uri() Devuelve el valor de la propiedad base-uri del nodo actual fn:base-uri(node) fn:document-uri(node) _ | Devuelve el valor de la propiedad document-uri del nodo actual s- Conversién y adaptacién de documentos XML Funciones para errores y trazas (trace) Nombre Descripcin fncerror() Ejemplo: fncerror(error) error(fn:QName(‘http://example.com/test', fnzerror(error description) ‘err:toohigh’), 'Error: Price is too high’) fins rror(error,description, error-object) | Resultado: Devuelve http://example.com/test#toohigh and the string "Error: Price is too high" al entorno de procesamiento externo fn:trace(value,label) Usada en depuraciones: Funciones numéricas Nombre Descripcin fnnumber(arg) Devuelve el valor numérico del argumento fnzabs(num) Devuelve el valor absoluto del argumento fn:ceiling(num) Devuelve el menor entero que es mayor que el argumento fnfloor(num) Devuelve el mayor entero que es no es mayor que el argumento fn:round(num) Redondea al entero mas cercano fn:round-half-to-even() Ejemplo: round-half-to-even(0.5) Resultado: 0 Ejemplo: round-half-to-even(1.5) Result: 2 Funciones de cadenas Nombre Descripcion fnistring(arg) Devuelve el valor como cadena del argumento. fn:codepoints-to-string(intint,...) | Devuelve una string creada desde una sequencia de code points Ejemplo: codepoints-to-string(84, 104, 233, 114, 232, 115, 101) Resultado: ‘Therese! fn:stringto-codepoints(string) Inversa del anterior fn:codepoint-equal(comp1,comp2) | Devuelve cierto siel valor de compl es igual al valor de comp2, de acuerdo con una intercalacion Unicode fn:concat(string,string....) Concatena cadenas fnistringjoin((string,string,...) sep) | Devuelve una string formada por concatenacion de la secuencia de strings que se pasan como g- Conversién y adaptacién de documentos XML ‘argumento fn:substring(string start,len) fn:substring(string start) Extrae una subcadena fnistringTength(string) fn:string-tength() Devuelve la longitud de la cadena fnznormalize-space(string) fn:normalize-space() fn:normalize-unicode() Elimina espacios en blanco redundantes Ejemplo: normalize-space('The XML") Resultado: ‘The XML fncupper-case(string) Convierte a mayusculas fn:lower-case(string) Convierte a mindsculas fn:translate(stringl string2,string3) Reemplaza caracteres ranslate('12:30','30','45') 12:45" ranslate('12:30','0123','abcd!) Resultado: 'be:da’ fnzescape-uri(stringURI,esc-res) Ejempl escape-uri("http://example.com/test#tcar", true()) Resultado: "http%3A%2F%2Fexample.com%2Ftest#car" Ejempl escape-u false()) Resultado: "http://example.com/test#tcar" Ejempl escape-uri ("http://example.com/“bebé", false()) Resultado: "http://example.com/~b%C3%A9b%C3%A9" nttp://example.com/test#icar", fn:contains(stringl, string2) Devuelve cierto si stringl contiene a string2 fnistarts-with(stringl,string2) Devuelve cierto sistringl comienza con string2 fnzends-with(stringl, string2) Devuelve clerto sistringl finaliza con string2 fn:substring- before(string! string?) Ejemplo: substring-before('12/10',/’) Resultado: "12" fn:substring-after(st gL st Ejemplo: substring-after('12/10',/) Resultado: "10" fn:matches(string pattern) Devuelve true si string coincide con el patron Ejemplo: matches("Merano", "ran") Resultado: true fn:replace(string,pattern,replace) Reemplaza caracteres Ejemplo: replace("Bella Ital Resultado: 'Be**a Ita*ia’ ia", 4, =) fn:tokenize(string, pattern) Ejemplo: tokenize("xPath is fun", "\s+") Result: ("xPath", "is", "fun") 20- Conversién y adaptacién de documentos XML Funciones para usar con direcciones URI Nombre Descripcion fniresolve-uri(relative,base) Funciones para booleanos Nombre Descripcion fn:boolean(arg) Devuelve un booleano fnznot(arg) Valor resultante de aplicar el operador logico not fnctrue() Devuelve cierto fncfalse() Devuelve falso Funciones para fechas y horas Nombre Descripcion fnzdateTime(date, 1e) Convierte los argumentos a un valor datetime fn:years-from-duration(datetimedur) Devuelve los afios del argumento puesto en representacién léxica canénica fnzmonths-from-duration(datetimedur) _| Idem meses fn:days-from-duration(datetimedur) Idem dias fnchours-from-duration(datetimedur) Idem horas fn:minutes-from-duration(datetimedur) Idem minutos fn:seconds-from -duration(datetimedur) Idem segundos fn:year-from-dateTime(datetime) Devuelve los afios del argumento puesto en valor localizado: Ejemplo: year from-dateTime(xs:dateTime("2005- 01-10712:30-04:10")) Resultado: 2005 fnzmonth-from-dateTime(datetime) Idem meses fn:day-from-dateTime(datetime) Idem dias fnzhours-from-dateTime(datetime) Idem horas fn:minutes-from-dateTime(datetime) Idem minutos fn:seconds-from-dateTime(datetime) Idem segundos fn:timezone-from-dateTime(datetime) Devuelve el componente timezone (hora local) del argumento 21. Conversién y adaptacién de documentos XML fn:year-from-date(date) Devuelve los afios del argumento puesto en valor localizado de fecha: Ejemplo: year-from-date(xs:date("2005- 04-23") Resultado: 2005 fnzmonth-from-date(date) Idem con mes friday from-date(date) Idem con di fn:timezone-from-date(date) Idem con ti jezone fnzhours-from-time(time) Devuelve las horas del argumento puesto en valor localizado de hora: Ejemplo: hours-from- time(xs:time("10:22:00")) Resultado: 10 fn:minutes-from-time(time) Idem con minutos fn:seconds-from-time(time) Idem con segundos fn:timezone-from-time(time) Idem con timezone fn:adjust-dateTime-to-timezone (datetime,timezone) Siel argumento timezone esta vacio, devuelve dateTime sin timezone. De otro modo, devuelve dateTime con ti ezone fn:adjust-date-to-timezone (date,timezone) Siel argumento timezone esta vacio, devuelve date sin timezone. De otro modo, devuelve date con timezone fn:adjust-time-to-timezone {time,timezone) Siel argumento timezone esta vacio, devuelve time sin timezone. De otro modo, devuelve time con timezone Funciones relacionadas con el uso de nombres cualificados (QNames) Nombre Descripcion fn:QName() fnilocal-name-from-QName() fnznamespace-uri-from-QName() fnznamespace-uri-for-prefix() fnsin-scope-prefixes() fn:resolve-QName() 22- Conversién y adaptacién de documentos XML Funciones para nodos Nombre Descripcion fn:name() fniname(nodeset) Devuelve el nombre del nodo actual o el del primer nodo del node-set fnclocal-name() fn:local-name(nodeset) Idem anterior sin el prefijo fncnamespace-uri() fncnamespace-u jodeset) Devuelve el espacio de nombre del nodo actual o el del primer nodo del node-set fnclang(lang) Devuelve cierto si el lenguaje del nodo actual coincide con el especificado Ejemplo: Lang("en") es cierto para ...

fnzroot() fn:root(node) Devuelve la raiz del arbol en el que esta el nodo actual o el especificado. Normalmente corresponde al nodo documento Funciones para secuencias Nombre Descripcion fnzindex-of{(item, item...) Devuelve la posicion del elemento buscado Ejemplo: index-of ((15, 40, 25, 40, 10), 40) Resultado: (2, 4) Ejemplo: index-of ((15, 40, 25, 40, 10), 18) Resultado: () fn:remove((item,item,...) position) Devuelve una secuencia sin los elementos borrados Ejemplo: remove(("ab", "cd", "ef"), 1) Resultado: ("cd", "ef") Ejemplo: remove(("ab", "cd", "ef"), 4) Resultado: ("ab", "cd", "ef") fnempty(item,item,...) Devuelve cierto sila Secuencia esta vacia Ejemplo: empty(remove(("ab", "cd"), 1)) Resultado: false sts(item,item,. Devuelve cierto sila secuencia no esta vacia Ejemplo: exists(remove(("ab"), 1)) Resultado: false inct-values({item,item, collation) | Devuelve una secuencia que no tiene los valores repetidos Ejemplo: distinct-values((1, 2, 3, 1, 2)) Resultado: (1, 2, 3) 23- Conversién y adaptacién de documentos XML fniinsert-before ((item,item,...),pos,inserts) Devuelve una secuencia con los valores insertados Ejemplo: insert-before(("ab", "cd", 0, gh") Resultado: ("gh", "ab", "cd") Ejemplo: insert-before(("ab", "cd", 5, "gh") Resultado: ("ab", "cd", "gh") fnzreverse((item,item, )) Devuelve la secuencia invertida Ejemplo: reverse(("ab", "cd", "ef")) Resultado: ("ef", "cd", "ab") fn:subsequence((item,item,...) start,len) Devuelve subsecuencias Ejemplo: subsequence((sitem1, Sitem2, Sitem3,...), 3) Resultado: (Sites, Ejemplo: subsequence((sitem1, Sitem2, Sitem3, ...), 2,2) Resultado: (Sitem2, $item3) fncunordered{(item,item,...)) Devuelve los elementos en una implementcién dependiente del orden Funciones relacionadas con la cardinalidad de secuencias Nombre Descripci6n fn:zero-or-one(item,item, Devuelve la secuencia si contiene cero o un elemento o un error en caso contrario fnzone-or-more(item,item,. Idem con uno o mas fnzexactly-one(item,item,... Idem con un elemento Equals, Union, Intersection y Except Nombre Descripcion fn:deep-equal(param1,param2,collation) Devuelve cierto si paraml y param2 tienen la misma profundidad Funciones agregadas Nombre Descripcion fn:count((item,item,. )) Devuelve el numero de nodos fncaval(argarg, Devuelve la media aritmél f:max((argarg, Devuelve el valor maximo fn:min((argarg,. Devuelve el valor minimo fn:sum(argarg,. Devuelve la suma de los argumentos 24- Conversién y adaptacién de documentos XML Funciones que generan secuencias Nombre Descripcion fncid((string,strin; Devuelve una secuencia de nodos que tienen un ID igual al valor de uno o mas de los especificados en los argumentos string fncidref((string,string,..., node) Idem con IDREF fnzdoc(URI) fn:doc-available(URI) rto sila function doc() devuelve un nodo documento (string) Funciones de contexto Nombre Descripcion fnzposition() Devuelve la posicion del nodo que esta siendo procesado Ejemplo: //libro{position()<=3] Resultado: Selecciona los tres primeros elementos libro fnclast() Devuelve el numero de elementos en la lista del nodo procesado Ejemplo: //libroflast()] Resultado: Selecciona el ultimo element libro fn:current-dateTime() Devuelve la fecha-hora actual (con timezone) fn:current-date() Devuelve la fecha actual (con timezone) fnzcurrent-time() Devuelve la hora actual (con timezone) fn:implicit-timezone() Devuelve el valor de la timezone implicita fn:default-collation() Devuelve el valor del juego de caracteres por defecto fnistatic-base-uri() Devuelve el valor de base-uri Bibliografia + Wikipedia ‘+ Manual de XPath de Victor Manuel Rivas Santos.- (http://geneura.ugr.es/“victor/cursillos/xml/xPath/) ‘+ XML imprecindible. Elliotte Rusty Harold y otros. Editorial Anaya Multimedia ‘© http:/Avww.waschools.com ‘* Cursos de Emilio Labra.- Universidad de Oviedo 25-

También podría gustarte