Está en la página 1de 31

Tutorial de XML

Introduccin al xml y estructura de un documento xml


XML (eXtensible Markup Language) no es, como su nombre podra sugerir, un lenguaje de marcado. XML es un meta-lenguaje que nos permite definir lenguajes de marcado adecuados a usos determinados. El !ML ( "per!e#t Markup Language) se $a con%ertido en el lenguaje est&ndar (o lingua franca) del 'orld 'ide 'eb. En sus casi die( a)os de andadura, " tras una fase de desarrollo m&s o menos turbulento, se $a confirmado como un est&ndar aceptado " aprobado por la industria. !ML se puede considerar una aplicaci*n de +,ML (+tandard ,eneralised Markup Language) a" que desterrar ideas del tipo -XML es !ML mejoradoo -XML es !ML ampliable " personali(able.Los fundamentos de XML son mu" sencillos. En las siguientes p&ginas aprenderemos c*mo crear documentos XML bien-formados, " que adem&s sean %&lidos, es decir, que est.n conformes a una /efinici*n de !ipo de /ocumento (/!/) dada. 0dem&s %eremos la creaci*n " uso de $ojas de estilo (X+L) para la presentaci*n de los datos, as como diferentes aplicaciones actuales de XML. Estructura de un documento XML 0unque a primera %ista, un documento XML puede parecer similar a !ML, $a" una diferencia principal. 1n documento XML contiene datos que se autodefinen, e#clusi%amente. 1n documento !ML contiene datos mal definidos, me(clados con elementos de formato. En XML se separa el contenido de la presentaci*n de forma total. 1na forma de entender r&pidamente la estructura de un documento XML, es %iendo un peque)o ejemplo2 34#ml %ersion5-6.7-48 39/:;!<=E ME>+0?E +<+!EM -mensaje.dtd-8 3mensaje8 3remite8 3nombre80lfredo @eino3Anombre8 3email8alfBibium.com3Aemail8 3Aremite8 3destinatario8 3nombre8Cill ;linton3Anombre8

3email8presidentBD$ite$ouse.go%3Aemail8 3Adestinatario8 3asunto8 ola Cill3Aasunto8 3te#to8 3parrafo8E ola qu. tal4 ace 3enfasis8muc$o3Aenfasis8 que no escribes. 0 %er si llamas " quedamos para tomar algo.3Aparrafo8 3Ate#to8 3Amensaje8 Este mismo documento puede ser %isto de forma gr&fica, para comprender mejor la estructura de un documento XML.

Documentos XML bien formados


E#isten un nFmero de diferencias entre la sinta#is de !ML " XML. Es Ftil, para aquellos que saben !ML " quieren usar XML, conocerlas perfectamente, para poder crear documentos XML bienformados. Estructura jerrquica de elementos Los documentos XML deben seguir una estructura estrictamente jer&rquica con lo que respecta a las etiquetas que delimitan sus elementos. 1na etiqueta debe estar correctamente -incluida- en otra. 0dem&s, los elementos con contenido, deben estar correctamente -cerrados-. En el siguiente ejemplo, la primera lnea sera incorrecta en XML, no as la segunda2 3LG8 !ML 3C8permite 3G8esto3AC83AG8. 3LG8En XML la 3C8estructura 3G8es3AG8 jer&rquica3AC8.3ALG8 Etiquetas vacas

!ML permite elementos sin contenido. ;omo %eremos m&s adelante, XML tambien, pero la etiqueta debe ser de la siguiente forma2 En el siguiente ejemplo, la primera lnea sera incorrecta en XML, no as la segunda2 3LG8Esto es !ML3C@8en el que casi todo est& permitido3ALG8 3LG8En XML, somos3C@A8 m&s restricti%os.3ALG8 n solo elemento rai! Los documentos XML s*lo permiten un elemento rai(, del que todos los dem&s sean parte. Es decir, la jerarqua de elementos de un documento XML bien-formado s*lo puede tener un elemento inicial. "alores de atributos Los %alores de atributos en XML, al contrario de !ML, siempre deben estar encerradas en comillas simples ( H ) o dobles ( - ). En el siguiente ejemplo, la primera lnea sera incorrecta en XML, no as la segunda2 30 @EI5$ttp2AADDD.disne".comA8 30 @EI5-$ttp2AADDD.de%eloper.comA-8 Ti#o de letra$ es#acios en blanco El XML es sensible al tipo de letra utili(ado, es decir, trata las ma"Fsculas " minFsculas como caracteres diferentes. +i un elemento de XML est& definido como -ELEME>!:-, no podemos usar -elemento-, ni -Elemento-, ni -eleME>to- para referirnos a .l. E#iste unconjunto de caracteres denominados -espacios en blanco- que los procesadores XML tratan de forma diferente en el marcado XML. Estos caracteres son los -espacios- (1nicodeA0+;GG JK), tabuladores (1nicodeA0+;GG L), retornos de carro (1nicodeA0+;GG 6J) " los saltos de lnea (1nicodeA0+;GG 67). La especificaci*n XML 6.7 permite el uso de esos -espacios en blanco- para $acer m&s legible el c*digo, " en general son ignorados por los procesadores XML. En otros casos, sin embargo, los -espacios en blanco- resultan mu" significati%os, por ejemplo, para separar las palabras en un te#to, o separar lineas de p&rrafos diferentes. %ombrando cosas 0l utili(ar XML, es necesario asignar nombres a las estructuras, tipos de elementos, entidades,

elementos particulares, etc. En XML los nombres tienen algunas caractersticas en comFn. +egFn la especificaci*n XML 6.7 1n nombre Mempie(aN con una letra o uno o m&s signos de puntuaci*n, " McontinFaN con letras, dgitos, guiones, ra"as, dos puntos o puntos, denominados de forma global como caracteres de nombre. Los nombres que empie(an con la cadena -#ml-, se reser%an para la estandari(aci*n de esta o de futuras %ersiones de esta especificaci*n. @esumiendo, no se pueden crear nombres que empiecen con la cadena -#ml-, -#Ml-, -XML- o cualquier otra %ariante. Las letras " ra"as se pueden usar en cualquier parte del nombre. !ambi.n se pueden incluir dgitos, guiones " caracteres de punto, pero no se puede empe(ar por ninguno de ellos. El resto de caracteres, como algunos smbolos, " espacios en blanco, no se pueden usar. Marcado y datos Las construcciones como etiquetas, referencias de entidad " declaraciones se denominan -marcas-. Ostas son las partes del documento que el procesador XML espera entender. El resto del documento que se encuentra entre las marcas, son los datos que resultan entendibles por las personas. Es sencillo reconocer las marcas en un documento XML. +on aquellas porciones que empie(an con -3- " acaban con -8-, o bien, en el caso de las referencias de entidad, empie(an por -P- " acaban con -Q-.

Estructuras XML
Entidades #redefinidas En XML 6.7, se definen cinco entidades para representar caracteres especiales " que no se interpreten como marcado por el procesador XML. Es decir, que as podemos usar el car&cter -3- sin que se interprete como el comien(o de una etiqueta XML, por ejemplo. Entidad PampQ PltQ PgtQ PaposQ PquotQ ;aracter P 3 8 H -

&ecciones 'D(T(

E#iste otra construcci*n en XML que permite especificar datos, utili(ando cualquier car&cter, especial o no, sin que se interprete como marcado XML. La ra(*n de esta construcci*n llamada ;/0!0 (;$aracter /ata) es que a %eces es necesario para los autores de documentos XML, poder leerlo facilmente sin tener que descifrar los c*digos de entidades. Especialmente cuando son muc$as. ;omo ejemplo, el siguiente (primero usando entidades predefinidas, " luego con un bloque ;/0!0) 3parrafo8Lo siguiente es un ejemplo de !ML.3A$tml8 3ejemplo8 PltQ !ML8 PltQ E0/8PltQ!G!LE8@ock PampQ @ollPltQA!G!LE8PltQA E0/8 3Aejemplo8 3ejemplo8 39M;/0!0M 3 !ML8 3 E0/83!G!LE8@ock P @oll3A!G!LE83A E0/8 NN8 3Aejemplo8 ;omo $emos %isto, dentro de una secci*n ;/0!0 podemos poner cualquier cosa, que no ser& interpretada como algo que no es. E#iste empero una e#cepci*n, " es la cadena -NN 8con la que termina el bloque ;/0!0. Esta cadena no puede utili(arse dentro de una secci*n ;/0!0. 'omentarios 0 %eces es con%eniente insertar comentarios en el documento XML, que sean ignorados por el procesado de la informaci*n " las reproducciones del documento. Los comentarios tienen el mismo formato que los comentarios de !ML. Es decir, comien(an por la cadena -39--- " terminan con ---8-. 34#ml %ersion5-6.7-48 39-- 0qu %a el tipo de documento --8 39/:;!<=E E?EM=L: M 39-- Esto es un comentario --8

39ELEME>!: E?EM=L: (R=;/0!0)8 39-- SEso es todo por a$ora9 --8 N8 3E?EM=L:8te#to te#to te#to bla bla bla 39-- :tro comentario --8 3AE?EM=L:8 39-- <a acabamos --8 +e pueden introducir comentarios en cualquier lugar de la instancia o del pr*logo, pero nunca dentro de las declaraciones, etiquetas, u otros comentarios.

Document Ty#e Definitions )DTDs*


=or ejemplo, podramos crear un /!/ que defina una tarjeta de %isita. 0 partir de ese /!/, tendramos una serie de elementos XML que nos permitiran definir tarjetas de %isita. La /!/ define los tipos de elementos, atributos " entidades permitidas, " puede e#presar algunas limitaciones para combinarlos. Los documentos XML que se ajustan a su /!/, se denominan -%&lidos-. El concepto de -%alide(- no tiene nada que %er con el de estar -bien-formado-. 1n documento -bienfomado- simplemente respeta la estructura " sinta#is definidas por la especificaci*n de XML. 1n documento -bienformado- puede adem&s ser -%&lido- si cumple las reglas de una /!/ determinada. !ambi.n e#isten documentos XML sin una /!/ asociada, en ese caso no son -%&lidos-, pero tampoco -in%&lidos-T simplemente -bien-formados-T o no. La /!/ puede residir en un fic$ero e#terno, " qui(& compartido por %arios (puede que miles) de documentos. : bien, puede estar contenida en el propio documento XML, como parte de su declaraci*n de tipo de documento. "eamos un ejem#lo+ 39ELEME>!: E?EM=L: (R=;/0!0)8 39-- SEso es todo por a$ora9 --8 N8 3E?EM=L:8te#to te#to te#to bla bla bla 39-- :tro comentario --8 3AE?EM=L:8 39-- <a acabamos --8 39/:;!<=E etiquetaM 39ELEME>! etiqueta (nombre, calle, ciudad, pais, codigo)8

39ELEME>! nombre (R=;/0!0)8 39ELEME>! calle (R=;/0!0)8 39ELEME>! ciudad (R=;/0!0)8 39ELEME>! pais (R=;/0!0)8 39ELEME>! codigo (R=;/0!0)8 N8 3etiqueta8 3nombre8Iulano Meng&ne(3Anombre8 3calle8cA Ma"or, KU3Acalle8 3ciudad8Valderredible3Aciudad8 3pais8Espa)a3Apais8 3codigo8JLJWJ3Acodigo8 3Aetiqueta8 La declaraci*n del tipo de documento comien(a en la primera lnea " termina con -N8-. Las declaraciones /!/ son las lneas que empie(an con -39ELEME>!- " se denominan declaraciones de tipo elemento. !ambi.n se pueden declarar atributos, entidades " anotaciones para una /!/. En el ejemplo anterior, todas las declaraciones /!/ que definen -etiqueta- residen dentro del documento. +in embargo, la /!/ se puede definir parcial o completamente en otro lugar. =or ejemplo2 34#ml %ersion5-6.7-48 39/:;!<=E coc$e +<+!EM -$ttp2AADDD.sitio.comAdtdAcoc$e.dtd-8 3coc$e8 3modelo8...3Amodelo8 ... 3Acoc$e8

Declaraciones ti#o elemento


Las declaraciones de tipo de elemento deben empe(ar con -39ELEME>!- seguidas por el identificador gen.rico del elemento que se declara. 0 continuaci*n tienen una especificaci*n de contenido. =or ejemplo2 39ELEME>! receta (titulo, ingredientes, procedimiento)8 En este ejemplo, el elemento 3receta8 puede contener dentro elementos 3titulo8, 3ingredientes8 " 3procedimiento8, que, a su %e(, estar&n definidos tambi.n en la /!/ " podr&n contener m&s elementos.

+iguiendo la definici*n de elemento anterior, este ejemplo de documento XML sera %&lido2 3receta8 3titulo8...3Atitulo8 3ingredientes8...3Aingredientes8 3procedimiento8...3Aprocedimiento8 3Areceta8 =ero no este2 3receta8 3parrafo8Esto es un p&rrafo3Aparrafo8 3titulo8...3Atitulo8 3ingredientes8...3Aingredientes8 3procedimiento8...3Aprocedimiento8 3Areceta8 La especificaci*n de contenido puede ser de cuatro tipos2 EM,T=uede no tener contenido. +uele usarse para los atributos. 39ELEME>! salto-de-pagina EM=!<8 (%=uede tener cualquier contenido. >o se suele utili(ar, "a que es con%eniente estructurar adecuadamente nuestros documentos XML. 39ELEME>! batiburrillo 0><8 Mixed =uede tener caracteres de tipo datos o una me(cla de caracteres " sub-elementos especificados en la especificaci*n de contenido mi#to. 39ELEME>! enfasis (R=;/0!0)8 39ELEME>! parrafo (R=;/0!0Xenfasis)Y8 =or ejemplo, el primer elemento definido en el ejemplo (3enfasis8) puede contener datos de

car&cter (R=;/0!0). < el segundo (3parrafo8) puede contener tanto datos de car&cter (R=;/0!0) como sub-elementos de tipo 3enfasis8. Element +*lo puede contener sub-elementos especificados en la especificaci*n de contenido. 39ELEME>! mensaje (remite, destinatario, te#to)8 =ara declarar que un tipo de elemento tenga contenido de elementos se especifica un modelo de contenido en lugar de una especificaci*n de contenido mi#to o una de las cla%es "a descritas.

Modelos de contenido
1n modelo sencillo puede tener un solo tipo de sub-elemento2 39ELEME>! a%iso (parrafo)8 Esto indica que 3a%iso8 s*lo puede contener un solo 3parrafo8. 39ELEME>! a%iso (titulo, parrafo)8 La coma, en este caso, denota una secuencia. Es decir, el elemento 3a%iso8 debe contener un 3titulo8 seguido de un 3parrafo8. 39ELEME>! a%iso (parrafo X grafico)8 La barra %ertical -X- indica una opci*n. Es decir, 3a%iso8 puede contener o bien un 3parrafo8 o bien un 3grafico8. El nFmero de opciones no est& limitado a dos, " se pueden agrupar usando par.ntesis. 39ELEME>! a%iso (titulo, (parrafo X grafico))8 En este Fltimo caso, el 3a%iso8 debe contener un 3titulo8 seguido de un 3parrafo8 o de un 3grafico8. 0dem&s, cada partcula de contenido puede lle%ar un indicador de frecuencia, que siguen directamente a un identificador general, una secuencia o una opci*n, " no pueden ir precedidos por espacios en blanco. Gndicadores de frecuencia 4 :pcional (7 o 6 %e() Y :pcional " repetible (7 o m&s %eces) Z >ecesario " repetible (6 o %eces)

=ara entender esto, %amos a %er un ejemplo. 39ELEME>! a%iso (titulo4, (parrafoZ, grafico)Y)8 En este caso, 3a%iso8 puede tener 3titulo8, o no (pero s*lo uno), " puede tener cero o m&s conjuntos3parrafo83grafico8, 3parrafo83parrafo83grafico8, etc. DE'L(.('I/%E& DE LI&T( DE (T.I0 T/& Los atributos permiten a)adir informaci*n adicional a los elementos de un documento. La principal diferencia entre los elementos " los atributos, es que los atributos no pueden contener sub-atributos. +e usan para a)adir informaci*n corta, sencilla " desestructurada. 3mensaje prioridad5-urgente-8 3de80lfredo @eino3Ade8 3a8 ans %an =arijs3Aa8 3te#to idioma5-$oland.s-8 allo ans, $oe gaat $et4 ... 3Ate#to8 3Amensaje8 :tra diferencia entre los atributos " los elementos, es que cada uno de los atributos s*lo se puede especificar una %e(, " en cualquier orden. En el ejemplo anterior, para declarar la lista de atributos de los elementos 3mensaje8 " 3te#to8 $aramos lo siguiente2 39ELEME>! mensaje (de, a, te#to)8 390!!LG+! mensaje prioridad (normal X urgente) normal8 39ELEME>! te#to(R=;/0!0)8 390!!LG+! te#to idioma ;/0!0 R@E[1G@E/8 Las declaraciones de los atributos empie(an con -390!!LG+!-, " a continuaci*n del espacio en blanco %iene el identificador del elemento al que se aplica el atributo. /espues %iene el nombre del atributo, su tipo " su %alor por defecto. En elejemplo anterior, el atributo -prioridad- puede estar en el elemento 3mensaje8 " puede tener el %alor -normal- o -urgente-, siendo -normal- el %alor por defecto si no especificamos el atributo. El atributo

-idioma-, pertenece al elemento te#to, " puede contener datos de car&cter (;/0!0). Es m&s, la palabra R@E[1G@E/ significa que no tiene %alor por defecto, "a que es obligatorio especificar este atributo. 0 menudo interesa que se pueda omitir un atributo, sin que se adopte autom&ticamente un %alor por defecto. =ara esto se usa la condici*n -RGM=LGE/-. =or ejemplo, en una supuesta /!/ que defina la etiqueta 3GM,8 de !ML2 390!!LG+! GM, 1@L ;/0!0 R@E[1G@E/ 0L! ;/0!E RGM=LGE/8 Es decir, el atributo -1@L- es obligatorio, mientras que el -0L!- es opcional (" si se omite, no toma ningFn %alor por defecto).

Ti#os de atributos en XML


Los atributos ;/0!0 (c$aracter data) son los m&s sencillos, " pueden contener casi cualquier cosa. Los atributos >M!:\E> (name token) son parecidos, pero s*lo aceptan los caracteres %&lidos para nombrar cosas (letras, nFmeros, puntos, guiones, subra"ados " los dos puntos). 390!!LG+! mensaje fec$a ;/0!0 R@E[1G@E/8 3mensaje fec$a5-6] de ?ulio de 6LLL-8 390!!LG+! mensaje fec$a >M!:\E> R@E[1G@E/8 3mensaje fec$a5-6]-U-6LLL-8 (tributos enumerados y notaciones Los atributos enumerados son aquellos que s*lo pueden contener un %alor de entre un nFmero reducido de opciones. 390!!LG+! mensaje prioridad (normal X urgente) normal8 E#iste otro tipo de atributo parecido, llamado de notaci*n (>:!0!G:>). Este tipo de atributo permite al autor declarar que su %alor se ajusta a una notaci*n declarada. 390!!LG+! mensaje fec$a >:!0!G:> (G+:-/0!E X E1@:=E0>-/0!E) R@E[1G@E/8 =ara declarar las notaciones, se utili(a -39>:!0!G:>-, con una definici*n e#terna de la notaci*n. La definici*n e#terna puede ser pFblica o un identificador del sistema para la documentaci*n de la notaci*n, una especificaci*n formal o un asistente de la aplicaci*n que contenga objetos representados en la notaci*n.

39>:!0!G:> !ML +<+!EM -$ttp2AADDD.DJ.orgAMarkup-8 39>:!0!G:> !ML =1CLG; --AA'J;AA/!/ !ML W.7 !ransitionalAAE>-8 (tributos ID e ID.E1 El tipo G/ permite que un atributo determinado tenga un nombre Fnico que podr& ser referenciado por un atributo de otro elemento que sea de tipo G/@EI. =or ejemplo, para implementar un sencillo sistema de $iper%nculos en un documento2 39ELEME>! enlace EM=!<8 390!!LG+! enlace destino G/@EI R@E[1G@E/8 39ELEME>! capitulo (parrafo)Y8 390!!LG+! capitulo referencia G/ RGM=LGE/8 En este caso, una etiqueta 3enlace destino5-seccion-J-8 $ara referencia a un 3capitulo referencia5-seccion-J-8, de forma que el procesador XML lo podra con%ertir en un $iper%nculo, u otra cosa.

Declaracin de entidades
XML $ace referencia a objetos (fic$eros, p&ginas Deb, im&genes, cualquier cosa) que no deben ser anali(ados sint&cticamente segFn las reglas de XML, mediante el uso de entidades. +e declaran en la /!/ mediante el uso de -39E>!G!<1na entidad puede no ser m&s que una abre%iatura que se utili(a como una forma corta de algunos te#tos. 0l usar una referencia a esta entidad, el anali(ador sint&ctico reempla(a la referencia con su contenido. En otras ocasiones es una referencia a un objeto e#terno o local. Las entidades pueden ser2 Gnternas o E#ternas 0nali(adas o >o anali(adas ,enerales o =ar&metro Entidades 2enerales internas +on las m&s sencillas. +on b&sicamente abre%iaturas definidas en la secci*n de la /!/ del documento XML. +on siempre entidades anali(adas, es decir, una %e( reempla(ada la referencia a la entidad por su contenido, pasa a ser parte del documento XML " como tal, es anali(ada por el procesador XML.

39/:;!<=E te#toM 39E>!G!< alf -0lien Life Iorm-8 N8 3te#to83titulo81n da en la %ida de un PalfQ3Atitulo83Ate#to8 Entidades 2enerales externas anali!adas Las entidades e#ternas obtienen su contenido en cualquier otro sitio del sistema, "a sea otro arc$i%o del disco duro, una p&gina Deb o un objeto de una base de datos. +e $ace referencia al contenido de una entidad as mediante la palabra +<+!EM seguida de un 1@G (1ni%ersal @esource Gdentifier) 39E>!G!< intro +<+!EM -$ttp2AADDD.miser%idor.comAintro.#ml-8 Entidades no anali!adas E%identemente, si el contenido de la entidad es un arc$i%o M=, o una imagen ,GI o un fic$ero ejecutable EXE, el procesador XML no debera intentar interpretarlo como si fuera te#to XML. Este tipo de entidades siempre son generales " e#ternas. 39E>!G!< logo +<+!EM -$ttp2AADDD.miser%idor.comAlogo.gif-8 Entidades #armetro internas y externas +e denominan entidades par&metro a aquellas que s*lo pueden usarse en la /!/, " no en el documento XML. +e pueden utili(ar para agrupar ciertos elementos del /!/ que se repitan muc$o. +e diferencian las entidades par&metro de las generales, en que para $acer referencia a ellas, se usa el smbolo -^- en lugar de -P- tanto como para declararlas como para usarlas. 39/:;!<=E te#toM 39E>!G!< ^ elemento-alf -39ELEME>! 0LI (R=;/0!0)8-8 ... ^elemento-alfQ N8 !ambien puede ser e#terna2 39/:;!<=E te#toM 39E>!G!< ^ elemento-alf +<+!EM -alf.ent-8 ... ^elemento-alfQ N8

E3EM,L/ DE DTD 1n ejemplo de /!/ que puede ser%ir para resumir todo lo %isto $asta a$ora podra ser un /!/ que nos defina un lenguaje de marcado para una base de datos de personas con direcciones e-mail. El fic$ero LG+!G>./!/ podra ser algo as2 34#ml encoding5-1!I-_-48 39ELEME>! listin (persona)Z8 39ELEME>! persona (nombre, emailY, relacion4)8 390!!LG+! persona id G/ R@E[1G@E/8 390!!LG+! persona se#o ($ombre X mujer) RGM=LGE/8 39ELEME>! nombre (R=;/0!0)8 39ELEME>! email (R=;/0!0)8 39ELEME>! relacion EM=!<8 390!!LG+! relacion amigo-de G/@EI+ RGM=LGE/ enemigo-de G/@EI+ RGM=LGE/8 Cas&ndonos en este /!/, podramos escribir nuestro primer listn en XML de la siguiente manera2 34#ml %ersion5-6.7-48 39/:;!<=E listin +<+!EM -LG+!G>./!/-8 3listin8 3persona se#o5-$ombre- id5-rick"-8 3nombre8@ick" Martin3Anombre8 3email8rick"Bpuerto-rico.com3Aemail8 3relacion amigo-de5-laetitia-8 3Apersona8 3persona se#o5-mujer- id5-laetitia-8 3nombre8Laetitia ;asta3Anombre8 3email8castalBmicasa.com3Aemail8 3Apersona8 3Alistin8

XML &c4emas
La %entaja de los sc$emas con respecto a los /!/s son2 1san sinta#is de XML, al contrario que los /!/s. =ermiten especificar los tipos de datos. +on e#tensibles.

=or ejemplo, un sc$ema nos permite definir el tipo del contenido de un elemento o de un atributo, " especificar si debe ser un nFmero entero, o una cadena de te#to, o una fec$a, etc. Los /!/s no nos permiten $acer estas cosas. Veamos un ejemplo de un documento XML, " su sc$ema correspondiente2 3documento #mlns5-#-sc$ema2persona+c$ema.#ml-8 3persona id5-fulano-8 3nombre8Iulano Mengane(3Anombre8 3Apersona8 3Adocumento8 ;omo podemos %er en el documento XML anterior, se $ace referencia a un espacio de nombres (namespace) llamado -#-sc$ema2persona+c$ema.#ml-. Es decir, le estamos diciendo al anali(ador sint&ctico XML (parser) que %alide el documento contra el sc$ema -persona+c$ema.#ml-. El sc$ema sera algo parecido a esto2 3+c$ema #mlns5-urn2sc$emas-microsoft-com2#ml-data- #mlns2dt5-urn2sc$emasmicrosoft-com2datat"pes-8 30ttribute!"pe name5HidH dt2t"pe5HstringH required5H"esHA8 3Element!"pe name5HnombreH content5Hte#t:nl"HA8 3Element!"pe name5HpersonaH content5Hmi#edH8 3attribute t"pe5HidHA8 3element t"pe5HnombreHA8 3AElement!"pe8 3Element!"pe name5HdocumentoH content5Helt:nl"H8 3element t"pe5HpersonaHA8 3AElement!"pe8 3A+c$ema8 El primer elemento del sc$ema define dos espacios de nombre. El primero -#ml-data- le dice al anali(ador que esto es un sc$ema " no otro documento XML cualquiera. El segundo -datat"pes- nos permite definir el tipo de elementos " atributos utili(ando el prefijo -dt-. ElementTy#e /efine el tipo " contenido de un elemento, inclu"endo los sub-elementos que pueda

contener. (ttributeTy#e 0signa un tipo " condiciones a un atributo. attribute /eclara que un atributo pre%iamente definido por 0ttribute!"pe puede aparecer como atributo de un elemento determinado. element /eclara que un elemento pre%iamente definido por Element!"pe puede aparecer como contenido de otro elemento. !al como $emos %isto, es necesario empe(ar el sc$ema definiendo los elementos m&s profundamente anidados dentro de la estructura jer&rquica de elementos del documentoXML. Es decir, tenemos que trabajar -de dentro $acia fuera-. Visto de otra manera, las declaraciones de tipo Element!"pe " 0ttribute!"pe deben preceder a las declaraciones de contenido element " attribute correspondientes. ;onsulta la referencia de sc$emas XML de Microsoft ($ttp2AAmsdn.microsoft.comA#mlA) para m&s informaci*n.

Extended style lan2ua2e )X&L*


1n mismo documento XML puede tener %arias $ojas de estilo X+L que lo muestren en diferentes formatos ( !ML, =/I, @!I, V@ML, =ost+cript, sonido, etc.) La aplicaci*n de una $oja de estilo X+L a un documento XML puede ocurrir tanto en el origen (por ejemplo, un ser%let que con%ierta de XML a !ML para que sea mostrado a un na%egador conectado a un ser%idor de Deb), o en el mismo na%egador (como es el caso del M+ GE], " en bre%e, >etscape ]). C&sicamente, X+L es un lenguaje que define una transformaci*n entre un documento XML de entrada, " otro documento XML de salida. 1na $oja de estilo X+L es una serie de reglas que determinan c*mo %a a ocurrir la transformaci*n. ;ada regla se compone de un patr*n (pattern) " una acci*n o plantilla (template). /e este modo, cada regla afecta a uno o %arios elementos del documento XML. El efecto de las

reglas es recursi%o, para que un elemento situado dentro de otro elemento pueda ser tambi.n transformado. La $oja de estilo tiene una regla rai( que, adem&s de ser procesada, llama a las reglas adecuadas para los elementos $ijos. Vamos a %er un ejemplo de todo esto2 3libro8 3titulo81n ttulo cualquiera3Atitulo8 3capitulos8 3capitulo8 3titulo8;aptulo 63Atitulo8 3parrafo8....3Aparrafo8 3parrafo8....3Aparrafo8 3Acapitulo8 3capitulo8 3titulo8;aptulo K3Atitulo8 ... 3Acapitulo8 3Acapitulos8 3Alibro8 [ueremos con%ertir este documento XML en !ML bien-formado, de la siguiente manera2 3 !ML8 3 E0/8 3!G!LE81n ttulo cualquiera3A!G!LE8 3A E0/8 3C:/<8 3 681n ttulo cualquiera3A 68 3 @8 3 K8;aptulo 63A K8 3=8...3A=8 3=8...3A=8 3 @8 3 K8;aptulo K3A K8 3=8...3A=8 3AC:/<8 3A !ML8 La $oja de estilo X+L necesaria sera algo parecido a lo siguiente2 34#ml %ersion5-6.7-48 3#sl2st"les$eet #mlns2#sl5-$ttp2AADDD.DJ.orgA!@A'/-#sl-8 3#sl2template matc$5-libro-8

3 !ML8 3 E0/8 3!G!LE83#sl2process select5-titulo-A83A!G!LE8 3A E0/8 3C:/<8 3 683#sl2process select5-titulo-A83A 68 3#sl2process select5-capitulos-A8 3AC:/<8 3A !ML8 3A#sl2template8 3#sl2template matc$5-capitulos-8 3#sl2process select5-capitulo-8 3A#sl2template8 3#sl2template matc$5-capitulo-8 3 @A8 3 K83#sl2process select5-titulo-A83A K8 3#sl2process select5-parrafo-A8 3A#sl2template8 3#sl2template matc$5-parrafo-8 3=83#sl2process-c$ildrenA83A=8 3A#sl2template8 3A#sl2st"les$eet8

XML Document /bject Model y "isual0asic


0unque los detalles puedan cambiar, la forma de trabajar %a aser similiar para otros parsers en otras plataformas de desarrollo (V;ZZ, ?a%a, etc.) El parser o anali(ador de XML es el programa que lee el documento XML " $ace que los datos que contiene est.n accesibles de una manera u otra. 0dem&s, el parser puede tener otras funcionalidades, como %alidar el documento contra una /!/ o un sc$ema. El parser de Microsoft (ms#ml.dll), que se distribu"e con el GE], $ace eso mismo, $aciendo que los datos est.n disponibles a tra%.s de una serie de objetos que el programador puede utili(ar. La especificaci*n -/:M Le%el 6- en la que esta basada esta implementaci*n se puede encontrar en $ttp2AADDD.DJ.orgA!@A@E;-/:M-Le%el-6 Este parser podemos utili(arlo tanto en programas VC+cript que se ejecuten en un ser%idor Deb (0+=, 0cti%e +er%er =ages) o en un programa Visual Casic. =or ejemplo, para crear una instancia del parser en un 0+=, $acemos lo siguiente2 +et obj=arser 5 +er%er.;reate:bject(-Microsoft.XML/:M-)

=ara utili(arlo en Visual Casic, tenemos que a)adir el objeto ;:M Microsoft XML, %ersion K.7, en las referencias del pro"ecto, " luego crear una instancia del objeto2 /im obj=arser 0s M+XML./:M/ocument +et obj=arser 5 >eD M+XML./:M/ocument =ara cargar un documento XML, usamos el m.todo .Load del objeto, especificando la ruta del documento, o bien mediante un 1@L que indique d*nde se encuentra en la red. Gf obj=arser.Load(-c2`temp`#ml`documento.#ml-) !$en H a funcionado Else H a ocurrido un error End Gf H 0$ora destruimos el objeto parser +et obj=arser 5 not$ing El m.todo .Load puede fallar porque el nombre o ubicaci*n del documento sea erronea, o bien porque el documento es in%&lido (no cumple las condiciones impuestas en su /!/ o sc$ema) La %alidaci*n del documento se puede suprimir si $acemos lo siguiente antes de cargar el documento2 obj=arser.%alidate:n=arse 5 Ialse 1na %e( cargado, anali(ado " %alidado el documento, podemos empe(ar a utili(ar la informaci*n que contiene. =ara eso utili(amos la interface GXML/:M>ode del parser, que nos permite acceder a los diferentes nodos (elementos, atributos, te#to, etc.) del documento. Este interface nos pro%ee de ciertos m.todos " propiedades para acceder con comodidad a los contenidos del documento, tanto para lectura como para escritura. nodeTy#e >os da informaci*n sobre el tipo de un nodo. Este parser soporta 6J tipos diferentes de nodo. (Est&n marcados en negrita los que m&s se usan) 'onstantes de ti#os de nodo >:/Ea0!!@GC1!E >:/Ea;/0!0a+E;!G:>

>:/Ea;:MME>! >:/Ea/:;1ME>! >:/Ea/:;1ME>!aI@0,ME>! >:/Ea/:;1ME>!a!<=E >:/EaELEME>! >:/EaE>!G!< >:/EaE>!G!<a@EIE@E>;E >:/EaG>V0LG/ >:/Ea>:!0!G:> >:/Ea=@:;E++G>,aG>+!@1;!G:> >:/Ea!EX! node%ame +i el tipo de nodo es adecuado, node>ame nos de%uel%e el nombre del nodo. =or ejemplo un nodo tipo >:/EaELEME>! contendra en node>ame el nombre de un elemento de un documento XML. node"alue >os de%uel%e el %alor que contiene ese nodo, si es aplicable. c$ild>odes ;ontiene una colecci*n de nodos -$ijos- del nodo que estamos considerando. Esta colecci*n puede ser iterada por una construcci*n for eac$ de Visual Casic. 4as'4ild%odes =ropiedad booleana que nos dice si un nodo tiene -$ijos-. first;$ild A last;$ild ;ontienen referencias al primer " Fltimo -$ijos- de un nodo. #arent%ode >os de%uel%e una referencia al -padre- del nodo. ne#t+ibling A pre%ious+ibling >os de%uel%e una referencia al siguienteAanterior -$ermano- del nodo, es decir, al siguienteAanterior nodo con el mismo -padre-.

attributes >os de%uel%e una colecci*n de los nodos tipo >:/Ea0!!@GC1!E del nodo. Vamos a %er un ejemplo de un sencillo programa que selecciona todos los nodos tipo te#to (>:/Ea!EX!) de un documento XML de una forma recursi%a. =ublic +ub ;arga/oc() /im o=arser 0s M+XML./:M/ocument +et o=arser 5 >eD M+XML./:M/ocument Gf o=arser.Load(-test.#ml-) !$en Muestra>odos o=arser.c$ild>odes Else MsgCo# - a ocurrido un error.End Gf End +ub =ublic +ub Muestra>odos(C"@ef >odos 0s M+XML.GXML/:M>odeList) /im o>odo 0s M+XML.GXML/:M>ode Ior Eac$ o>odo Gn >odos Gf o>odo.node!"pe 5 >:/Ea!EX! !$en /ebug.=rint o>odo.parent>ode.node>ame P -5- P o>odo.nodeValue End Gf Gf o>odo.$as;$ild>odes !$en Muestra>odos o>odo.c$ild>odes End Gf >e#t o>odo End +ub +i el fic$ero test.#ml que usa este programa fuera el siguiente2 34#ml %ersion5-6.7-48 3documento8 3titulo81n documento cualquiera3Atitulo8 3fec$a83dia863Adia83mes86K3Ames83a)o86LLL3Aa)o83Afec$a8 3Adocumento8 El resultado sera2

titulo51n documento cualquiera dia56 mes56K a)o56LLL =ara m&s informaci*n sobre el parser M+XML, %isita el M+/> :nline XML /e%eloper ;enter

XML Document /bject Model y 3ava


;omo "a $emos podido suponer, el empleo de tecnologa XML, al ser un est&ndar internacional " pFblico, no nos ata a una plataforma o sistema de desarrollo concreto. Lo mismo se puede usar =erl bajo 1>GX para generar documentos XML a partir de una base de datos, como usar ="t$on en 'indoDs >! para ser%ir documentos !MLW a na%egadores Deb a partir de un documento XML. /ic$o esto, $a" que decir que ?0V0 se posiciona como una opci*n interesante a la $ora de desarrollar aplicaciones usando XML. =or ejemplo, a partir de fuentes de datos en XML, podemos escribir un ser%let que analice sint&cticamente el XML, " que genere un &rbol /:M (/ocument :bject Model). 1na %e( generado el &rbol /:M, podemos ir e#tra"endo la informaci*n que contiene e ir generando un documento !ML de acuerdo con ciertas reglas de formato, de modo que pueda ser %isuali(ado por un na%egador Deb. Vamos a suponer que nuestro ser%let carga ese fic$ero XML en un objeto string de ?a%a, que nos %amos a disponer a anali(ar. Lo primero que debemos $acer es crear un anali(ador sint&ctico XML. 1samos el objeto com.ibm.#ml.=arser para ello. =arser parser 5 neD =arser(-#slparse.err-)Q El fic$ero -#slparse.err- ser& el registro de cualquier error que ocurra mientras procesamos el documento XML, que debe ser con%ertido a un Gnput+tream. C"te0rra"Gnput+tream bais 5 neD C"te0rra"Gnput+tream(#ml+tring.getC"tes())Q 0$ora le decimos al parser que ignore las declaraciones de tipo de documento, los comentarios, etc. parser.set'arning>oXML/ecl(false)Q

parser.set'arning>o/oct"pe/ecl(false)Q parser.set\eep;omment(false)Q parser.set=rocess>amespace(false)Q 0nali(amos el documento, " cerramos el Gnput+tream. doc 5 parser.read+treamQ bais.close()Q 0$ora contenemos el &rbol /:M en el objeto -doc-, " lo que tenemos que $acer es mo%ernos por el &rbol /:M e ir sacando los datos que contiene. Vamos a %er los m.todos que tenemos para na%egar el /:M (definidos en org.DJc.dom.>ode) get/ocumentElement() /e%uel%e el elemento rai( getIirst;$ild() /e%uel%e el nodo que es el primer -$ijo- de este nodo. get>e#t+ibling() /e%uel%e el nodo que es el siguiente -$ermano- de este nodo. getLast;$ild() /e%uel%e el nodo que es el Fltimo -$ijo- de este nodo. get=re%ious+ibling() /e%uel%e el nodo que es el Fltimo -$ermano- de este nodo. get0ttribute(ja%a.lang.+tring attr>ame) /e%uel%e un objeto string que representa el %alor de un atributo. E#isten m&s m.todos para manipular el /:M. La especificaci*n -/:M Le%el 6($ttp2AADDD.DJ.orgA!@A@E;-/:M-Le%el-6) aporta m&s informaci*n sobre m.todos del /:M. LE%5 (3E DE E%L('E XML )XLI%6* XLink es una aplicaci*n XML que intenta superar las limitaciones que tienen los enlaces de $iperte#to en !ML. Es una especificaci*n que toda%a est& en desarrollo, " que toda%a no tiene -rodaje- en el mundo real. Los enlaces en !ML tienen una serie de limitaciones, que los $acen bastante pobres. =orejemplo, s*lo tienen dos e#tremos, la terminaci*n origen " la destino, " son unidireccionales. +i "o creo un enlace en mi p&gina Deb personal que me lle%e $asta la p&gina principal de ;oca;ola, esto" creando un -%nculo- entre esta p&gina " la mia.

3a $ref5-$ttp2AADDD.coca-cola.comA-8;oca-;ola3Aa8 Este %nculo es unidireccional, porque un %isitante cualquiera que entre en la p&gina de ;oca-;ola, no tiene forma de saber que mi p&gina (as como otros cientos de miles) enla(a con ella. El objeti%o de XLink es crear enlaces entre recursos, de una forma de la que !ML no es capa(. =or ejemplo, un estudiante podra $acer anotaciones a los apuntes que un profesor tiene disponibles en la red, por el m.todo de insertar un enlace desde los apuntes (a los que no tiene acceso de escritura o modificaci*n) " su propia p&gina de anotaciones " comentarios. : bien, podremos %incular dos p&ginas cualquiera, por ejemplo enla(ando el te#to de una noticia en un diario on-line, con el te#to de la noticia equi%alente en el diario competidor. < no $a" porqu. quedarse en enlaces con dos e#tremos. Los enlaces e#tendidos permiten muc$o m&s que eso. En el momento actual, la tecnologa para poder mantener una base de datos de enlaces mundial, no est& desarrollada, pero se puede $acer a ni%el local. =or ejemplo, nuestra empresa quiere comprar ciertos productos de un suministrador. Los trabajadores de la empresa podr&n %isitar la p&gina Deb del pro%eedor " $acer enlaces e#ternos a comentarios sobre las especificaciones de tal producto. ;uando otro compa)ero de la empresa %isite la p&gina, el ser%idor de enlaces de nuestra empresa le mostrar& la p&gina junto con los enlaces e#ternos creados, " mostrar nuestros comentarios como si fueran parte del documento original.

Etiquetas bsicas
,rrafos Los p&rrafos estructuran el contenido. ;ontienen una o m&s frases relacionadas entre s, igual que en el mundo real. +i queremos crear un p&rrafo, metemos el te#to entre las etiquetas 3p8 " 3Ap8 . =or ejemplo2 3p8 ola, me llamo Luke +k"Dalker " so" piloto de una X- 'ing en el @ogue +quadron. !ambi.n so" un ?edi del Lado Luminoso de la Iuer(a. Mis maestros $an sido <oda " :bi -'an \enobi. 3Ap8

+i pruebas este ejemplo en el na%egador, notar&s que pasa por alto los saltos de lnea. =odras $aber puesto todo el p&rrafo en la misma lnea " $ubieras obtenido el mismo resultado. &altos de lnea a" %eces que necesitamos for(ar un salto de lnea dentro de un p&rrafo. =ara ello, usamos la etiqueta 3br A8 , as2 3p8 /ark ;$est of 'onders 3br A8 +een troug$t t$e e"es 3br A8 :f t$e one Dit$ pure $eart 3br A8 :nce , so long ago. 3Ap8 0unque est.ticamente podamos obtener el mismo resultado mediante p&rrafos (con 3p8 ) que con saltos de lnea ( 3br A8 ) de forma indiscriminada, debemos recordar que un documento X !ML utili(a un lenguaje sem&ntico, es decir que lo importante para que est. bien estructurado es el significado de las etiquetas que utili(amos " no el efecto est.tico que generan. Los ttulos )4eadin2s* Los ttulos agrupan " ordenan informaci*n. Gmaginemos la secci*n de enlaces de nuestra p&gina. El ttulo principal podra ser Mis links fa%oritos. Luego tendramos los links clasificados por secciones, cada una de ellas bajo un subttulo diferente2 Clogs, descargas " %ideojuegos. Gncluso podramos tener subcategoras dentro de una misma secci*n, como por ejemplo @=,bs, 0%enturas ,r&ficas " 0rcades. =ara conseguir esto, tenemos las etiquetas 3$#8 " 3A$#8 , donde # es un nFmero del 6 al c. 3$68 corresponde al ttulo m&s importante " s*lo debera $aber uno por p&gina. Luego le siguen 3$K8 , 3$J8 , " as sucesi%amente. Los elementos de encabe(ado, deben guardar un orden l*gico " no debemos saltar ninguno de los ni%eles. Ejemplo2 3$68Mis links fa%oritos3A$68 3$K8Clogs3A$K8 39 -- bla bla bla --8 3$K8Videojuegos3A$K8 3$J8@=, 4s3A$J8 39 -- bla bla bla --8

3$J80rcades3A$J8 39 -- bla bla bla --8 +i %es el c*digo anterior en un na%egador, aparecer&n los ttulos m&s importantes de ma"or tama)o que los menos importantes (pero el tama)o de cada ttulo siempre puede cambiarse con ;++). 'itas a" tres etiquetas diferentes para escribir citas2 3blockquote8 , 3q8 " 3cite8 . ;on 3blockquote8 " 3q8 escribimos la cita en s, mientras que con 3cite8 marcamos su origen (persona, libro, canci*n, etc.). La diferencia entre 3blockquote8 " 3q8 es que 3blockquote8 se emplea para escribir citas largas, esta etiqueta contiene p&rrafos, en cambi* 3q8 funciona a la in%ersa porque est& $ec$a para escribir citas cortas, entonces %a dentro de p&rrafos. !.cnicamente $ablando, 3blockquote8 es un elemento block, " 3q8 es inline, los elementos inline no pueden ir dsueltose en un documento #$tml. =ara ejemplificar todo lo anterior2 3p80qu os dejo un fragmento de la canci*n 3cite8/ie for @ock 4n4 @oll 3Acite8, de /o%er23Ap8 3blockquote8 3p8 E%er"bod" danced (D$ile)3br A8 G Das l"ing on t$e floor 3br A8 G Das read" to die 3br A8 for @ock 4n4 @oll 3br A8 3Ap8 3Ablockquote8 3p8Mi parte preferida es cuando dice lo de 3q8G Das read" to die M...N 3Aq8.3Ap8 &e#aradores 4ori!ontales =ara los separadores $ori(ontales se emplea la etiqueta 3$r A8 ($ori(ontal rules), pero actualmente casi no son utili(ados gracias a que el empleo de estilos ;++ permite crear bordes delimitadores mu" interesantes.

Ejemplo2 3$K8Los %ideojuegos3A$K8 3p8Cla bla bla43Ap8 3$r A8 3$K8MFsica3A$K8 3p8Cla bla bla43Ap8

'omentarios Los comentarios se utili(an para indicar partes del c*digo de una p&gina a modo de nota, pero son in%isibles para el na%egador. +ir%en como gua para el desarrollador o como a"uda para usuarios que utili(an na%egadores especiales, como por ejemplo los no %identes. =ara escribir un comentario en el c*digo fuente, lo $acemos entre 39-- " --8, recordando siempre de $acerlo en una sola lnea2 39-- Esto es un comentario --8

Etiquetas de formato
@ecuerda que siempre nos referimos a destacar sem&nticamente, el aspecto de todos los formatos se controla con ;++. (cerca de 7b8 y sus secuaces +i eres de la %ieja escuela de Debmasters, probablemente est.s acostumbrado a usar etiquetas como 3b8 , 3i8 " compa)a para poner negrita, cursi%a, subra"ado, monoespaciado, etc. S:l%dalo9 El !ML W nos permita controlar el aspecto con el que se iba a mostrar el te#to con etiquetas como 3font8 con la que cambi&bamos tama)o, fuente " color del te#to. ;on X !ML nos limitamos a estructurar el contenido " a asegurarnos de que sea sem&ntico. E[u. es esto de la sem&ntica4 +era algo as como lograr que una m&quina pueda entender un te#to. =or ejemplo, un ordenador no sabe qu. significa el que algo est. en negrita. =ero s entiende que algo que tiene .nfasis es dimportantee, " debe ser destacado de alguna manera. =uede parecer una tontera, pero a la $ora de trabajar con na%egadores aurales (para ciegos), de te#to, o desde m*%iles, la cosa cobra importancia. 9nfasis

=ara dar .nfasis a un te#to o parte de te#to usaremos la etiqueta 3em8 " si queremos marcar un te#to en negritas utili(aremos 3strong8 . =or ejemplo, este c*digo2 3p8 3em8Iar3Aem8 is not t$e Dord because GHm ne%er far 3strong8enoug$3Astrong8. 3Ap8 +e %era en el na%egador as2 Iar is not t$e Dord because GHm ne%er far enoug$. Es importante que sepas que estas dos etiquetas %an dentro de elementos block, como p&rrafos. ,reformato +i $as practicado algo de los captulos anteriores, te $abr&s dado cuenta de que cuando el na%egador interpreta el c*digo X !ML, ignora mFltiples espacios en blanco, saltos de lnea, tabuladores, etc. del c*digo. a" ocasiones en las que necesitamos mantener este dformatoe, por ejemplo cuando queremos mostrar c*digo fuente. =ara eso e#iste la etiqueta 3pre8 , que tampoco se utili(a muc$o actualmente. 1n S ola mundo9 en ; nos quedara as2 3pre8Rinclude 3stdio.$8 int main() f printf(- ello 'orld9n-)Q return(7)Q g3Apre8 (crnimos y abreviaturas =ara utili(ar acr*nimos " abre%iaturas tenemos las etiquetas 3acron"m8 " 3abbr8 respecti%amente. En el na%egador se genera el mismo efectoQ se muestra su significado al pasar el mouse por encima. =ara que funcionen, estas etiquetas necesitan el atributo title donde colocamos su significado.

Ejemplo2 3p8 Mi ordenador tiene ]6K 3abbr title5-Megab"tes-8MC3Aabbr8 de memoria 3acron"m title5-@andom 0ccess Memor"-8@0M3Aacron"m8. 3Ap8 +i no conoces la diferencia entre acr*nimo " abre%iatura, en nuestro manual de accesibilidad encontrar&s una a"uda.

,a2inacin de re2istros con XML


o" en da es mu" conocido el XML como fuente de datos ", no tanto el acceso a datos mediante @/+ (@emote /ata +er%ice). El ejemplo que %o" a poner a$ora lo $e reali(ado con XML en %e( de con @/+ por este moti%o. 3$tml8 3$ead8 3title8=rueba de paginaci*n3Atitle8 3A$ead8 3#ml id5-#ml=rueba-8 3LG+!0/:8 3@E,G+!@:8 3>:MC@E8Gsmael3A>:MC@E8 30=ELLG/:+8hori Martine(3A0=ELLG/:+8 3A@E,G+!@:8 3@E,G+!@:8 3>:MC@E80licia3A>:MC@E8 30=ELLG/:+8;ampos :rtega3A0=ELLG/:+8 3A@E,G+!@:8 3@E,G+!@:8 3>:MC@E8?ulio3A>:MC@E8 30=ELLG/:+8;amino del Cosque3A0=ELLG/:+8 3A@E,G+!@:8 3@E,G+!@:8 3>:MC@E8?uan3A>:MC@E8 30=ELLG/:+8/iges +ierra3A0=ELLG/:+8 3A@E,G+!@:8 3@E,G+!@:8 3>:MC@E8@oberto3A>:MC@E8

30=ELLG/:+8;abe(a Cenito3A0=ELLG/:+8 3A@E,G+!@:8 3@E,G+!@:8 3>:MC@E8@osa3A>:MC@E8 30=ELLG/:+8?imene( +anc$o3A0=ELLG/:+8 3A@E,G+!@:8 3@E,G+!@:8 3>:MC@E8E%a3A>:MC@E8 30=ELLG/:+8+oria del =inar3A0=ELLG/:+8 3A@E,G+!@:8 3@E,G+!@:8 3>:MC@E8=edro3A>:MC@E8 30=ELLG/:+8hamora @einoso3A0=ELLG/:+8 3A@E,G+!@:8 3ALG+!0/:8 3A#ml8 3script language5-?a%a+cript-8 function go(num/onde) f sDitc$ (num/onde) f case 72 tabla=rueba.first=age()Q breakQ case 62 tabla=rueba.pre%ious=age()Q breakQ case K2 tabla=rueba.ne#t=age()Q breakQ case J2 tabla=rueba.last=age()Q breakQ default2 alert(-:pci*n de na%egaci*n incorrecta. Iallo de programaci*n-)Q g g 3Ascript8 3bod"8 3center8

3table datasrc5-R#ml=rueba- datapagesi(e5-]- id5-tabla=rueba- border5-6- cellpadding5-6cellspacing5-7-8 3t$ead8 3tr8 3td align5-center-83b8>ombre3Ab83Atd8 3td align5-center-83b80pellidos3Ab83Atd8 3Atr8 3At$ead8 3tr8 3td83span datafld5->:MC@E-83Aspan83Atd8 3td83span datafld5-0=ELLG/:+-83Aspan83Atd8 3Atr8 3Atable8 3br83br8 3input t"pe5-button- name5-btn=rimero- %alue5-X3- onclick5-go(7)-8 3input t"pe5-button- name5-btn0nterior- %alue5-3- onclick5-go(6)-8 3input t"pe5-button- name5-btn+iguiente- %alue5-8- onclick5-go(K)-8 3input t"pe5-button- name5-btn1ltimo- %alue5-8X- onclick5-go(J)-8 3Acenter8 3Abod"8 3A$tml8 =or desgracia los registros te los tienes que traer todos del ser%idor por lo que la p&gina ocupa muc$o, pero no $ace falta que el XML %a"a en la p&gina, puede estar en un fic$ero.XML, en ese caso en %e( de poner 3XML id5-#ml=rueba-83LG+!0/:8........3ALG+!0/:83AXML8 podemos poner 3XML id5-#ml=rueba- src5-fic$ero.#ml-83AXML8

También podría gustarte