XML es una tecnología en realidad muy sencilla que tiene a su alrededor otras tecnologías que la complementan y la hacen mucho

más grande y con unas posibilidades mucho mayores. Vamos a ver a lo largo de varios capítulos una introducción al mundo XML, es decir, al lenguaje así como a las tecnologías que trabajan con él, sus usos, ventajas y modos de llevar a cabo las tareas. XML, con todas las tecnologías relacionadas, representa una manera distinta de hacer las cosas, más avanzada, cuya principal novedad consiste en permitir compartir los datos con los que se trabaja a todos los niveles, por todas las aplicaciones y soportes. Así pues, el XML juega un papel importantísimo en este mundo actual, que tien a la globalización y la de compatibilidad entre los sistemas, ya que es la tecnología que permitirá compartir la información de una manera segura, fiable, fácil. Además, XML permite al programador y los soportes dedicar sus esfuerzos a las tareas importantes cuando trabaja con los datos, ya que algunas tareas tediosas como la validación de estos o el recorrido de las estructuras corre a cargo del lenguaje y está especificado por el estándar, de modo que el programador no tiene que preocuparse por ello. Vemos que XML no está sólo, sino que hay un mundo de tecnologías alrededor de él, de posibilidades, maneras más fáciles e interesantes de trabajar con los datos y, en definitiva, un avance a la hora de tratar la información, que es en realidad el objetivo de l informática a en general. XML, o mejor dicho, el mundo XML no es un lenguaje, sino varios lenguajes, no es una sintaxis, sino varias y no es una manera totalmente nueva de trabajar, sino una manera más refinada que permitirá que todas las anteriores se pue dan comunicar entre si sin problemas, ya que los datos cobran sentido. Todo esto lo veremos con calma en la Introducción a XML. XML es interesante en el mundo de Internet y el e-bussiness, ya que existen muchos sistemas distintos que tienen que comunicarse entre si, pero como se ha podido imaginar, interesa por igual a todas las ramas de la informática y el tratamiento de datos, ya que permite muchos avances a la hora de trabajar con ellos. En la introducción a XML, a lo largo de los siguientes capítulos, vamos a ver algunas características importantes de la tecnología que nos permitirán comprender mejor el mundo XML y cómo soluciona nuestros problemas a la hora de trabajar con los datos. El XML proviene de un lenguaje que inventó IBM allá por los años 70. El lenguaje de IBM se llama GML (General Markup Language) y surgió por la necesidad que tenían en la empresa de almacenar grandes cantidades de información de temas diversos. Imaginar por un momento la cantidad de documentación que generaría IBM sobre todas las áreas en las que trabajaba e investigaba, y la cantidad de información que habrá generado hasta hoy. Así pues, necesitaban una manera de guar dar la información y los expertos de IBM se inventaron GML, un lenguaje con el que poder clasificarlo todo y escribir cualquier documento para que se pueda luego procesar adecuadamente. Este lenguaje gustó mucho a la gente de ISO, una entidad que se encarg de normalizar a cuantas cosas podáis imaginar para los procesos del mundo actual, de modo que allá por el 86 trabajaron para normalizar el lenguaje, creando el SGML, que no era más que el GML pero estándar (Standar en inglés).

SGML es un lenguaje muy trabajado, capaz de adaptarse a un gran abanico de problemas y a partir de él se han creado los siguientes sistemas para almacenar información. Por el año 89, para el ámbito de la red Internet, un usuario que había conocido el lenguaje de etiquetas (Markup) y los hiperenlaces creo un nuevo lenguaje llamado HTML, que fue utilizado para un nuevo servicio de Internet, la Web. Este lenguaje fue adoptado rápidamente por la comunidad y varias organizaciones comerciales crearon sus propios visores de HTML y riñeron entre ellos para hacer el visor más avanzado, inventándose etiquetas como su propia voluntad les decía. Desde el 96 hasta hoy una entidad llamada W3C ha tratado de poner orden en el HTMLy establecer sus reglas y etiquetas para que sea un estándar. Sin embargo el HTML creció de una manera descontrolada y no cumplió todos los problemas que planteaba la sociedad global de Internet. El mismo W3C en el 98 empezó y continúa, en el desarrollo de XML (Extended Markup Language). En este lenguaje se ha pensado mucho más y muchas personas con grandes conocimientos en la materia están trabajando todavía en su gestación. Pretendían solucionar los carencias del HTML en lo que se respecta al tratamiento de la información. Problemas del HTML como:

y y y

El contenido se mezcla con los estilos que se le quieren aplicar. No permite compartir información con todos los dispositivos, como pueden ser ordenadores o teléfonos móviles. La presentación en pantalla depende del visor que se utilice.

Imagínese, una persona que conoce el HTML y lo difícil que puede llegar a ser entender su código, que tuviese que procesarlo para extraer datos que necesite en otras aplicaciones. Sería muy difícil saber dónde está realmente la información que busca, siempre mezclada entre etiquetas <FONT>, <TABLE>, <TD>, etc... Esto es una mala gestión de la información y el XML la soluciona. Comentarios Los comentarios en los documentos XML empiezan por <!-- y acaban por -->. Pueden contener cualquier cadena de texto excepto el literal --. Pueden colocarse en cualquier parte del documento. Ej: <!-- Esto es comentario <ñññññ-d#dd --> Secciones CData Le indican al parser que ignore todos los caracteres de marcas que se encuentren en el interior de esta/s sección/es. (ed, son como comentarios a lo bestia) Son muy útiles cuando queremos (x ej. a modo de tutorial) visualizar código XML como parte del texto. Todos los caracteres que existan entre son pasados directamente a la aplicación sin interpretación. El único literal q no puede ser utilizado dentro de la sección es, lógicamente, el ]]>. Ej.
<![CDATA[ <!ENTITY amp "&"><!-- &= ampersand --> <CODIGO> *p=&q->campo; a=(x<y)?33:44; </CODIGO>

]]>

Elementos Son las etiquetas más frecuentemente utilizadas dentro de un documento XML. Están delimitadas por los símbolos < y >, sintaxis de todos conocida, puesto q era la usada en HTML. Si el contenido de la etiqueta es vacío (al igual q <BR> ó <IMG> en HTML), entonces se delimitan por los símbolos < y />. Las etiquetas de apertura (las que empiezan por >) pueden incluir atributos, los cuales son pares nombre/valor al estilo color="verde". (x ej, en HTML <font color="green">). OJO!! En XML los atributos siempre deben ir encerrados entre comillas dobles. Ejs:
<nombre id="surname">Perez</nombre> <vacia color="verde"/>

Referencias a entidades Las entidades(entity) se usan en XML básicamente como representación alternativa de los caracteres especiales (como por ejemplo las comillas dobles ó la marca de apertura en un elemento), aunque también pueden emplearse para incluir el contenido de otros documentos ó para hacer referencia a trozos de texto repetitivos. Sintaxis: &xxx; a la entidad. donde xxx es el nombre de la entidad, y ,&xxx; es la manera de referirse

Ej: &eacute; ----> Representa al símbolo é. Existe una referencia a entidades "especial", denominada referencia a caracteres. Ésta se usa para representar caracteres que no pueden ser escritos desde el tecl do. a No tienen un nombre de cadena (como eacute x ej) sino q su nombre es, ó un nº decimal, ó un nº hexadecimal. Ej: &#38; <!-- Ampersand --> Tambien se pueden crear constantes (ó macros) para que no nos tengamos q acordar de los numeross. Para ello usamos la definición "real" de entidad: Ej:
<!ENTITY amp "&#38;"&gt;

Para referenciarlo: &amp;

Dicen que el XML es un 10% del SGML y de verdad lo es, porque en realidad las normas que tiene son muy simples. Se escribe en un documento de texto ASCII, igual que el HTML y en la cabecera del documento se tiene que poner el texto <?xml version="1.0"?>

nos hemos inventado las etiquetas que nos venían en gana para poner este ejemplo y las hemos anidado de manera que la etiqueta más grande es la PELICULA y dentro de ella tenemos el PRESONAL y el ARGUMENTO. por eso el lenguaje se llama XML.0"?> <PELICULA nombre="El Padrino" año=1985> <PERSONAL> </DIRECTOR nombre="Georgie Lucar"> </INTERPRETE nombre="Marlon Brando" interpreta-a="Don Corleone"> </INTERPRETE nombre="Al Pacino" interpreta-a="Michael Corleone"> </PERSONAL> </ARGUMENTO descripción="Pelicula de mafias sicilianas en Estados Unidos"> </PELICULA> Como podéis ver. <!-. . Sin embargo. XML tiene una ventaja que se puede convertir en un inconveniente: cada persona/autor puede crear sus propias etiquetas. no cabe duda que la sintaxis XML es realmente reducida y sencilla. <ETIQ1>. si deseamos guardar la información relacionada con una película en un documento XML podríamos utilizar un esquema con las siguientes etiquetas. <?xml version="1......En el resto del documento se deben escribir etiquetas como las de HTML..Comentario --> Y esto es todo lo que es el lenguaje XML en si.</ETIQ2>.. <ETIQ atributo1="valor1" atributo2="valor2".</ETIQ1> Cualquier etiqueta puede tener atributos. A su vez. dentro de PERSONAL tenemos tanto al DIRECTOR como a los actores (INTERPRETE). las etiquetas que nosotros queramos. Las etiquetas se escriben anidas.<ETIQ2>. Para definir qué etiquetas y atributos debemos utilizar al escribir en XML tenemos que fijarnos en la manera de guardar la información de una forma estructurada y ordenada.. Le podemos poner los atributos que queramos.> Los comentarios de XML se escriben igual que los de HTML. aunque tenemos que tener en cuenta que el XML tiene muchos otros lenguajes y tecnologías trabajando alrededor de él. Por ejemplo. unas dentro de otras. lenguaje de etiq uetas extendido.

Los XML Schemas. ¿y si queremos exportar nuestros documentos? ¿qué estándar seguiremos? Ej: "A" puede escribir el nombre como sigue: <nombre>Juan</nombre> Sin embargo. pero. Declaraciones de listas de atributos (Attribute List Declarations). XML ofrece dos posibles soluciones: Las DTD's. Declaraciones de Entidades (Entity Declarations). si se quiere modificar. 2. proporcionando un pequeño estandar acerca de la sintaxis a utilizar. Declaraciones de tipo de elemento (Element Type Declarations). ¿y si trabajamos en equipo?. 3.Esto no trae problemas si trabajamos solos. 4. Las trataré una a una en los siguientes apartados. de forma que. Declaraciones de notación (Notation Declarations). Declaraciones de tipo de elemento Estas declaraciones establecen qué elementos pueden formar parte del documento y cuáles pueden formar parte de su interior (los elementos se anidan unos dentro de otros). y y En las DTD's podemos hacer 4 tipos de declaraciones: 1. Sintaxis: Los elementos que puede contener cada elemento (valga la redundancia) van siempre . Nota: Como me enseñaron en la universidad. "no es plan" que hagas una aplicación que sólo entiendas tú. marcas. entonces la lectura y/o modificación de documentos por diferentes personas puede ser un caos. la empresa tenga que pedirte de rodillas que lo hagas. Para resolver estos problemas. "B" puede hacerlo así: <nombre id="Juan"/> Las 2 versiones son igual de correctas pero son diferentes si extrapolamos esto a muchas .

apellidos. cada elemento (atributo) podrá llevar uno de los siguientes símbolos detrás de su nombre: SÍMBOLO SIGNIFICADO (Indica. Ejs: <!ELEMENT nombre (#PCDATA)> <!ELEMENT nombre EMPTY> <!ELEMENT cliente (nombre.ape2?)> . puede contener a nif y tlf . Cualquier contenido es válido...nif?.. Empty Estos elementos NO tienen etiqueta de cierre. Nota: Luego podemos hacer una redefinición de los subelementos si queremos. Además de esto.tlf*.direccion+)> <!ELEMENT nombre (#PCDATA)> <!ELEMENT apellidos(ape1. quiere expresar lo siguiente: El elemento cliente debe contener a nombre y apellidos..) .y debe contener al menos una vez la dirección del cliente (para poder enviarle el pedido a casa). Secuencia de elementos ? 0 o 1 ocurrencias * 0 o más ocurrencias + 1 o más ocurrencias que el elemento está vacío.a este incluso más de una vez.encerrados entre paréntesis y precedidos de la etiqueta <!ELEMENT.ape2))>> <!ELEMENT ape1 (#PCDATA)> . tambien podemos indicar que existen varias alternativas. EJ: <!ELEMENT cliente (nombre. Dentro de las etiquetas. para ello se usa el símbolo | (relación OR).tlf*. #PCDATA que el contenido de la cadena puede ser una cadena de texto. Any Yo no recomiendo su uso. Ej: <!ELEMENT apellidos (#PCDATA|(ape1..direccion+)> Este último ej.nif?.apellidos..

Este atributo se empleará para referenciar a otros elementos del documento a partir de su ID. Contiene una única cadena de texto (ed. cuya sintaxis es la siguiente: Sintaxis: Todas las definiciones de atributos empezarán por: <!ATTLIST Cada atributo está formado por 3 partes: Nombre Tipo del atributo Valor por defecto Las posibilidades para describir el tipo de un atributo (campo) y el valor por defecto del mismo las podeis ver en las siguientes tablas: Tipo del atributo VALOR SIGNIFICADO El atributo será una cadena de caracteres. Pero. Sólo puede haber un atributo de tipo ID por elemento. ¿qué pasa con los atributos (si es que tienen) de todos y acada uno de los elementos? Para definirlos se usan las declaraciones de listas de atributos. Ver siguiente apdo. CDATA ID IDREF/S ENTITY/S NMTOKEN/S . No todos los caracteres son válidos. El atributo sirve para identificar al elemento dentro del documento.<!ELEMENT ape2 (#PCDATA)> indica q se puede elejir entre teclear los 2 apellidos juntos o por separado: <apellidos> Perez López </apellidos> <apellidos><ape1> Perez </ape1><ape2> López </ape2></apellidos> y y Declaraciones de listas de atributos Ya hemos visto como denotar los elementos que puede tener el documento. una sola palabra). Usaremos secciones PCDATA cuando queramos incluir los carácteres no válidos. Contiene nombres de entidades.

es el valor x por defecto). si no se le otorga un nuevo valor posteriormente. si escribo en mi documento (en el código fuente. con la salvedad de q se forme un ciclo entre ellas. Con esto indicamos que es opcional darle un valor al atributo. asumirá el dado (ed. Es sustitído por el símbolo & . NOTAS: Las entidades internas pueden incluir referencias a otras entidades internas. Nota: El valor para los atributos acabados en S (ej. Existen 3 tipos de entidades q podemos definir en nuestras DTD's: 1. Con esto obligamos a q el atributo tome necesariamente el valor especificado en <<valor>> <!ATTLIST cliente numcli ID #REQUIRED edad ("Menos de 18" | "entre 18 y 65" | "Más de 65") #IMPLIED > Al ser numcli de tipo ID indicamos q no puede haber 2 clientes con idéntico numcli. No es obligatorio darle un valor en el doc. Entidades internas Tambien llamadas macros ó constantes de texto. Se referencian única y exclusívamente desde el fichero. las entidades internas son las q se asocian a una cadena de caracteres. Podemos poner un valor (NO lista de valores) opcional directamente. entonces.(<<enumerados>>) Aquí especificamos EL conjunto de valores q puede tomar el atributo. Es sustitído por el símbolo < &gt. Edad es un atributo no obligatorio q sólo puede tomar los valores de la lista enumerada. esto lo hacemos separandolos con |. IDEREFS) será una lista de valores separados por espacios en blanco. Valores por defecto VALOR #REQUIRED #IMPLIED <<valor>> #FIXED <<valor>>> EJ: SIGNIFICADO Con esto indicamos que es obligatorio darle un valor al atributo. Es sustitído por el símbolo > &amp. XML tiene 5 entidades internas predefinidas: &lt. si estas dentro de un editor wysiwyg): &nom. es como si estuviera escribiendo Juan Pérez López. Ej: <!ENTITY nom "Juan Pérez López"> Así.

Entidades de parámetros Son especiales xq sólo pueden aparecer en las DTD's. Si el contenido del fichero que hace la referencia es de texto. <!ENTITY arch System "arch.. Son prácticamente igual q las entidades anteriores.. entonces se sustituye tal y como si de una entidad interna se tratara. x tanto. </A> 3.txt en lugar en la q se hace la referencia. Ej: <!NOTATION GIF87A SYSTEM "GIF"> . la encargada de manejar la información.com"> Esto se podría referenciar así: <A href="&miurl.txt"> Inserta el contenido del fichero arch.Por ello su sintaxis es distinta: Se usa % para preceder al nombre de la entidad tanto en su definición como en su referencia.&apos. los cuales pueden ser binarios (ej. Ej. Si fuera binario.. Ej: Antes de saber manejar entidades con parámetros: <!ELEMENT motos EMPTY> <!ATTLIST motos a CDATA #REQUIRED b CDATA #REQUIRED c CDATA #REQUIRED> Después de saber manejar entidades con parámetros: <!ENTITY %items "a CDATA #REQUIRED b CDATA #REQUIRED c CDATA #REQUIRED"> <!ELEMENT motos EMPTY> <!ATTLIST motos %items> Declaraciones de notación Se usan para indicar el tipo de los ficheros binarios referenciados mediante las referencias a entidades externas . Entidades externas Sirven para referenciar su contenido ó valor desde otros ficheros. una imagen jpg) o de texto( ej.. Ej: <!ENTITY NDATA miurl="http://tttttt. Es sustitído por el símbolo " 2. la referencia se sustituiría por el texto siempre y cuando éste forme parte de un atributo cualquiera del fichero.". OJO! este dato no se analiza por el Parser! La propia aplicación será.> . fichero xml).. Es sustitído por el símbolo ' &quot..

asi como cuando se va a emplear para us particular. <?XML version="1. Esto es lo primero q deberíamos de indicar en el documento. . . En la declaración se suelen indicar 4 campos normalmente: 1. . podemos elegir (del mismo modo que en JavaScript ó ASP) bien incrustarla dentro del propio documento. .)*> <!ATTLIST cars .dtd" > Este tipo es utilizado por estandares u organismos... </cars> b) Definición externa de una DTD.. + indica estandar NO ISO) 2. . ]> <cars> .javieryjorge. Cadena de caracteres en la q se suele poner el nombre del autor de la DTD.> ..Uso de las Dtd's Recordad que el uso de DTD's no es obligatorio pero si necesario(al menos.com/lengs/cars. El nombre del organismo. .dtd " [ <!ELEMENT cars (. A la hora de usar una DTD. desde mi punto de vista). . . . ó bien vincularla a un archivo externo.dtd " > Este tipo de notación la usan los desarrolladores cuando la DTD sólo va a tener ámbito local u interno dentro de una organización. . (ISO indica estandar ISO.com/lengs/cars.0" standalone="yes"?> <! DOCTYPE cars SYSTEM "cars.0" standalone="yes"?> <! DOCTYPE cars SYSTEM "www./pepito.. Ejs: a) Definición interna de una DTD. .. o Básicamente es como si pusieramos private (privado) PUBLIC: Ej: <!DOCTYPE CONTACTS PUBLIC "ISO//Autor//Descripción//Idioma"> "http://www. <?XML version="1. </cars> Las referencias (a DTD's externas) te las puedes encontrar de 2 fomas: SYSTEM: Ej: <! DOCTYPE cars SYSTEM "javieryjorge.dtd "> <cars> .

Documentos XML válidos ó bien formados.. Un documento bien formado es el que sigue las reglas básicas de XML para diseño de documentos. pues son las mejores tanto en usabilidad (modificas una y te vale para todos los archivos referenciados a ella) como en visibilidad (en el doc . si bien no es obligatorio q sean válidos (aunq si es recomendable). EN inglés. he compilado aquí una serie de diferencias entre HTML y XML que sirven de muestra para ver hasta dónde llegan estos dos lenguajes. El XML se preocupa por estructurar la información que pretende almacenar. porque todo está ordenado de una manera lógica. yo os recomiendo que useis las externas de sistema. Procesar la información en HTML es inviable. El HTML se preocupa por formatear datos y para ello son las etiquetas que tiene el lenguaje.. Descripción breve de lo que hace. El desarrollo del HTML estuvo marcado la competencia entre los distintos visores del mercado. como la etiqueta <FRAME>.3. siempre ajustado a lo que marca el estándar que desarrolla el W3C. etc. colectivos. Cada uno quería ser el mejor e inventaba etiquetas nuevas que a la larga entraban a formar parte del estándar del W3C. Todos los documentos XML han de estar bien formados. Acerca del uso de uno u otro formato. Por otra parte es importante que sepas que ya hay estandares definidos por empresas. Así. así mismo el formateo de la información para que se pueda entender . etc. Un documento válido es un documento bien formado que además respeta las normas dictadas por su DTD. entidad que está desarrollando el XML con más dil gencia i que las empresas con intereses particulares. equipos de investigación. El desarrollo del XML está siendo llevado a cabo con rigor. para formatear la información que se desea mostrar. Para los que conozcan también el lenguaje HTML.. La estructura la marca la lógica propia de la información. En XML se puede procesar la información con mucha facilidad.xml sólo se observa una línea). por ejemplo. por estar mezclada con los estilos y las etiquetas que formatean la información. Idioma: ES español. 4.. que espero que seáis muchos. el Mathematical Markup Language (MathML). estan el Chemical Markup Language(CML).

Objetivos y usos del XML El XML se creó para que cumpliera varios objetivos. Que fuera idéntico a la hora de servir. Que fuese fácil de implantar. Hasta ahora cada navegador interpreta la información a su manera y los programadores del web tenemos que hacer unas cosas u otras en función del navegador del usuario. abriendo y cerrando cada epígrafe de manera parecida a como lo hacemos en HTML. es decir. Hemos visto lo sencillo que es XML y las pocas normas que tenemos para su sintaxis. cualquier aplicación podría escribir un documento de texto plano con los datos que estaba manejando en formato XML y otra aplicación recibir esta información y trabajar con ella. va por su parte. y Que fuera extensible. La sintaxis. El XML se puede usar para infinidad de trabajos y aporta muchas ventajas en amplios escenarios. y y Migración de datos. son tecnologías relacionadas con el XML. Si la información se transfiere en XML. y y Que fuese fácil de leer y editar. Si tenemos que mover los datos de una base de datos a otra sería muy sencillo si las dos trabajasen en formato XML. . para que lo puedan utilizar en todos los campos del conocimiento. la manera de aplicar estilos. para aprovechar toda la tecnología implantada para este último. Veamos algunas ventajas del XML en algunos campos prácticos. y y Que fuera formal y conciso desde el punto de vista de los datos y la manera de guardarlos. programar y aplicar a los distintos sistemas. a través de hojas de estilos o similares. Con XML tenemos una sola aplicación que maneja los datos y para cada navegador o soporte podremos tener una hoja de estilo o similar para aplicarle el estilo adecuado. y Aplicaciones web. Comunicación de datos. Si mañana nuestra aplicación debe correr en WAP solo tenemos que crear una nueva hoja de estilo o similar. recibir y procesar la información que el HTML. Son sólo unos ejemplos que esperamos que comprendas aunque seapor encima ya que todavía hay muchas cosas que no sabes sobre XML y las tecnologías relacionadas. programar o acceder a bases de datos. Toda esta sencillez es gracias a que XML tiene muchas otras tecnologías relacionadas que son las encargadas de manejar importantes procesos dentro del ámbito de una aplicación XML. Simplemente utilizamos las etiquetas que necesitamos.bien por el usuario es viable a través de un pequeño procesamiento.

. Se definió entonces el lenguaje XML Schema y funciona bien. Simplemente nos ahorramos de aprender un nuevo lenguaje con su sintaxis particular. además de especificar los atributos que pueden o deben tener cada una de las etiquetas. que es sencilla. para especificar cada uno de los sublenguajes que podemos crear a partir de XML. aunque puede llegar a ser un poco más complicado que especificarlo en DTD. Para evitar el DTD. que se llama WML. Son unos lenguajes que sirven para definir otros lenguajes. Hay dos metalenguajes con los que definir los lenguajes que podemos obtener a partir de XML. que tiene una sintaxis muy especial. si el número es entero o cualquier otra comprobación. Programación: SAX o DOM. es decir. comprobando si lo que tenemos en el XML concuerda con lo que tendríamos que tener. Los definen especificando qué etiquetas podemos o debemos encontrarnos en los documentos HTML. si no son validos se saca un mensaje de error y se detiene el proceso del documento. comprobar si donde se supone que hay un número efectivamente lo hay. o lo que es lo mismo. Si los distribuidores de películas utilizan XML podrán crear sus propios lenguajes para guardar la información de las películas. Este lenguaje se podría llama PacientesML. Se calcula que un 70% de las líneas de código que escribe un programador están orientadas a comprobar la integridad de los datos. Diseño: CSS o XSL. Veremos tecnologías relacionadas con los procesos de: y y y Contenidos: DTD o XML Schema. Por eje mplo. Es decir. El DTD. son metalenguajes.En siguientes capítulos vamos a ver un montón de nuevas tecnologías. Como vemos. tiene una sintaxis especial. Nuestros metalenguajes de XML nos sirven para tomar un documento XML y comprobar que los datos que él incluye son válidos. se pueden crear infinitos lenguajes a partir del XML. el DTD y el XML Schema. Para especificar cada uno de los usos de XML. se intentó encontrar una manera de escribir en XML la definición de otro lenguaje XML. en qué orden. Si son válidos hacemos lo que toque sin tener que preocuparnos por la integridad de los datos. Eso lo podemos hacer al leer el documento. y y y Si lo utiliza el colectivo de médicos podría crear un lenguaje en XML específico para almacenar diagnósticos de los pacientes. Un documento XML puede contener muchos tipos de información. En esta introducción a XML no pretendemos entrar mucho en la discusión de cada tecnología sino presentarlas y conocer sus usos. pueden haber muchos lenguajes escritos en XML para cualquier colectivo de usuarios. dentro de qué otras. es decir. Un detalle importante de señalar a la hora de hablar de los DTD o XML Schema es que estos lenguajes también permiten comprobar la integridad de los datos en cualquier momento. aunque un poco rara si nunca hemos visto un documento similar. Si estamos escribiendo aplicaciones para móviles podremos utilizar un lenguaje para aplicaciones inalámbricas (Wireless). cada una para llevar a cabo un aspecto de la aplicación XML. Este lenguaje se podría llamar PeliculasML. Definition Type Document. se utilizan unos lenguajes propios. distinta de la de XML.

Se puede programar con el lenguaje de programación que se desee para acceder a un documento XML. SUN o Microsoft. Los creadores del lenguaje son los responsables de crear unas API que cumplan las especificaciones de XML para que luego los desarrolladores de cada lenguaje las encuentren y puedan trabajar con ellas. que son las siglas de XML Style Language. Una de sus principales ventajas la vemos a continuación. por muy particular que sea. veamos ahora que significa. y con él en memoria podemos hacer cualquier tipo de recorrido y acciones con los elementos que queramos. XSL resulta mucho más potente que CSS y de hecho es mucho más adecuado utilizarlo.. por ejemplo para un navegador Netscape. También tenemos dos posibles lenguajes con los que formatear los textos de un documento XML para poder verlo por pantalla. Este lenguaje no se limita a definir qué estilo aplicar a cada elemento del documento XML. sólo necesitaremos crear un documento XSL para que nuestros XML se puedan visualizar en él. En XML también podemos utilizar las CSS. otro para Internet Explorer. bastante más avanzada. Por su parte. Estos dos mecanismos se denominan SAX y DOM. La primera posibilidad es el CSS. Se tratan simplemente de unas normas que indican a los desarrolladores la manera de acceder a los documentos. XSL. Si tenemos un documento XML que queremos que se visualice en múltiples dispositivos distintos será imprescindible utilizar XSL.Para cada documento XML que se desee presentar en pantalla formateado de la manera que deseemos se tiene que escribir una hoja de estilos o similar. ya se podía utilizar con HTML y se creó en un intento de separar la forma del contenido en HTML. SAX se utiliza para hacer un recorrido secuencial de los elementos del documento XLM y DOM implica la creación de un árbol en memoria que contiene el documento XML. los creadores de algunos lenguajes han implementado una tercera man era de programar con XML que se llama XSLT. es el segundo lenguaje con el que trabajar en XML. cualquiera que podamos necesitar como un documento escrito en WML (para WAP). Si queremos realizar acciones con nuestros datos escritos en XML tenemos también mucho camino ya implementado. El W3C ha especificado dos mecanismos para acceder a documentos XML y trabajar con ellos. que muchos ya conocerán. CSS (Cascading Style Sheets o hojas de estilo en cascada)no es nada nuevo. un documento de texto plano u otro documento XML. Empresas como por ejemplo la organización Apache. por lo menos los atributos de estilo que podemos aplicar son los mismos y sus posibles valores también. Además se pueden realizar pequeñas instrucciones típicas de los lenguajes de programación y la salida no tiene porque ser un documento HTML. sino que además podrí a ser de otros tipos. Es importante señalar que la W3C es un organismo muy lento y que mucho d lo que se e hace en XML actualmente sólo está en la W3C contemplado como una "nota" en la que los .los desarrolladores en Java cuentan con unas clases especiales que ha creado SUN para programar con XML. Hemos utilizado esa frase en otras partes de la introducción a XML. Si mañana aparece un nuevo dispositivo. ya la están apoyando. Un lenguaje típico para trabajar con XML es Java y en este caso es SUN Microsystems la encargada de proveer el API que ha especificado el W3C y por lo tanto. otro para un móvil Ericson y otro para un móvil Nokia. aunque en el W3C no han dicho que sea un estándar. La segunda opción es el XSL. Estas normas incluyen una jerarquía de objetos que tienen unos métodos y atributos con los que tendremos que trabajar y que nos simplificarán las tareas relativas al recorrido y acceso a las partes del documento. y se utilizan de una manera muy similar a cómo se utilizan en HTML. En este esquema tendríamos un solo documento XML y un documento XSL para cada dispositivo que queramos incluir.

El trabajo con bases de datos y XML se está desarrollando con un lenguaje que se llama XQL (XML Query Language). vamos a montar el Kit de desarrollo de Web Services. y vamos a ver una muy buena opción con JAXB (Java Architecture for XML Binding ) Antes de hacer un ejemplo con esta tecnología.gurús están pensando. Hay muchas técnicas de manipular ficheros XML en el mundo Java. que es uno de los ejemplos de lenguaje que sólo está publicado en el W3C como una "nota". donde viene incluido (utilizaremos este tutorial como base para otros relacionados con Web Services) Descarga de WSDP Lo descargamos del Web de Sun Y arrancamos el ejecutable .

Nos aparece el asistente Elegimos la máquina virtual (un consejo. evitad los espacios en los trayectos de instalación) Elegimos la opción de utilizar un Tomcat como contenedor para nuestra aplicaciones y servicios Web .

Nos descargamos el Tomcat para WSDP Lo descomprimimos un directorio .

Ahora seleccionamos el producto recién instalado Elegimos el directorio del resto de componentes .

.. que ya tenem tema para un os montón de tutoriales sobre las últimas especificaciones relacionadas con los servicios web (sobre todo debemos estar atentos a la evolución de la seguridad) ...Realizamos la instalación típica Aunque os muestro las opciones en la personalizada.

If you wish to use this app. no user is included in the "manager" role required to operate the "/manager" web application.Definimos el usuario que usuremos para manejar remotamente el Tomcat No olvidéis que este usuario hay que darlo de alta en el TOMCAT <!-NOTE: By default. --> <tomcat-users> <user name="tomcat" password="tomcat" roles="tomcat" /> <user name="role1" password="tomcat" roles="role1" /> . you must define such a user the username and password are arbitrary.

ok y no nos funcionan las cosas) Copiamos los jar al directorio propuesto Y ahora acabamos . ok.role1" /> <user name="admin" password="admin" roles="manager.<user name="both" password="tomcat" roles="tomcat.admin" /> </tomcat-users> No se os olvide leer las instrucciones finales (lo digo porque al final hacemos ok.

Y al arrancar sobre los iconos creados .. solo tenemos que ir al directorio de binarios de tomcat y localizar el fichero catalina..bat (actualizando así el acceso directo) Primer ejemplo de JAXB Creamos un proyecto dentro de NetBeans 4. Será una aplicación Web básica Elegimos el nombre y trayecto ...1...no podría dar este pequeño error.

La gracia está en que a partir de un Schema (esquema) XML podemos crear una estructura de clases que nos permitan un acceso cómodo y seguro (verificación de que hacemos lo que debemos en compilación y no en ejecución) Creamos el esquema Le damos un nombre (libros.xsd) .

adictosaltrabajo.w3.com/esquemas/libro" elementFormDefault="qualified"> <xsd:element name="libro"> <xsd:complexType> <xsd:sequence> <xsd:element name="titulo" type="xsd:token"/> <xsd:element name="autor" type="xsd:token"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="libros" > <xsd:complexType> <xsd:sequence> <xsd:element ref="libro" maxOccurs="unbounded" /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> Creamos un fichero XML que use ese esquema Decimos que se valide contra un esquema .0" encoding="ISO-8859-1"?> <xsd:schema xmlns:xsd="http://www.com/esquem as/libro" xmlns="http://www.<?xml version="1.org/2001/XMLSchema" targetNamespace="http://www.adictosaltrabajo.

xml) <?xml version="1.bat pasando como parámetro el trayecto del fichero xml.com/esquemas/libro' xmlns:xsi='http://www..xsd .org/2001/XMLSchema -instance' xsi:schemaLocation='http://www..adictosaltrabajo.com/esquemas/libro file:/C:/xml/libros..adictosaltrabajo.Y le damos los detalles (el fichero lo llamamos libros.bat -d directoriofinal ficheros.w3.xsd'> <libro> <titulo>El fin de una odisea</titulo> <autor>Desconocido</autor> </libro> <libro> <titulo>Un lugar en la mente de Kerz</titulo> <autor>Desconocido</autor> </libro> </libros> Bueno. También podemos especificar el directorio donde se generarán las clases xjc. hasta ahora no hemos realizado nada raro . vamos con la parte específica Invocamos fichero xjc.0" encoding="ISO-8859-1"?> <libros xmlns='http://www.

Ahora. . en nuestro proyecto le vamos a incorporar los JAR de JAXB Las elegimos Y pinchando sobre las propiedades del proyecto. añadimos el trayecto de los ficheros generados automáticamente.

adictosaltrabajo.io. package adictosjaxb. import javax. /** * * @author Roberto Canales */ .xml.util. import java.*. import com.*. import com.adictosaltrabajo.esquemas.libro.bind.Vemos es aspecto de nuestro proyecto Y ya solo nos queda escribir el código específico.libro.impl.esquemas.*.*.*. import java.

xml"). // recuperamos la lista de libros List mislibros = mifichero. } // ahora añadimos un libro nuevo LibroTypeImpl nuevoLibro = new LibroTypeImpl().getLibro(). depura("El numero de libros es " +numero ).createUnmarshaller().de .public class Main { public static void depura(String cadena) { System. try { JAXBContext jc = JAXBContext.size(). // es una chapuza pero para el ejemplo nos vale InputStream in = new FileInputStream("c:/xml/libros. int numero = mislibros. .println("adictosjaxb: " + cadena).libro" ). i++) { Libro libroconcreto = (Libro)mislibros. i < numero.getTitulo() + " .getAutor()).newInstance( "com. return. if(in == null) { depura("No encuentro el fichero").get(i)." + libroconcreto. } public static void main(String[] args) { depura("Empezamos la operación").out. depura(libroconcreto. for (int i = 0. Unmarshaller u = jc.esquemas.unmarshal( in ).adictosaltrabajo. } // construimos el modelo a partir el stream de entrada Libros mifichero = (Libros)u.

// es una chapuza pero para el ejemplo nos vale InputStream in = new FileInputStream("c:/xml/libros..JAXB_ENCODING. System. FileOutputStream salida = new FileOutputStream("c:/xml/salida.createUnmarshaller(). nuevoLibro. salida). hacemos operaciones comunes.toString()).JAXB_F ORMATTED_OUTPUT..setTitulo("Domina tu proyecto").marshal( mifichero.xml"). no me copieis { depura("el error es " + e.esquemas. "ISO -8859-1"). formateador. Recuperar el contenido de un fichero: JAXBContext jc = JAXBContext.setAutor("Anónimo"). en el correcto juego de caracteres formateador.// establecemos los elementos nuevoLibro. Boolean.xml").createMarshaller(). // vamos a pintar ahora el arbol XML generado para asegurarnos que se ha añadido Marshaller formateador = jc. formateador.setProperty(Marshaller.adictosaltrabajo. // añadimos a la lista mislibros. veremos que con 4 líneas.newInstance( "com. formateador.add(nuevoLibro).marshal( mifichero. } } } Analizamos el código Si lo analizamos. // ahora escribimos a un fichero.setProperty(Marshaller.out ).libro" ).TRUE). Unmarshaller u = jc. . } catch(Exception e) // esto es otra chapucilla.

int numero = mislibros. } Insertar un nuevo nodo // ahora añadimos un libro nuevo LibroTypeImpl nuevoLibro = new LibroTypeImpl(). } // construimos el modelo a partir el stream de ent rada Libros mifichero = (Libros)u. // establecemos los elementos nuevoLibro. System.unmarshal( in ).TRUE).de . depura("El numero de libros es " +numero ). Volcar el contenido a la pantalla // vamos a pintar ahora el arbol XML generado para asegurarnos que se ha añadido Marshaller formateador = jc.get(i).getTitulo() + " .setProperty(Marshaller. nuevoLibro.if(in == null) { depura("No encuentro el fichero").setAutor("Anónimo").createMarshaller(). formateador. // añadimos a la lista mislibros.size().getAutor()). i < numero.out ). // recuperamos la lista de libros List mislibros = mifichero. return.JAXB_FORMATTED_OUTPUT. i++) { Libro libroconcreto = (Libro)mislibros.marshal( mifichero. for (int i = 0." + libroconcreto. depura(libroconcreto. .add(nuevoLibro). Boolean.setTitulo("Domina tu proyecto").getLibro(). formateador.

es una de mis preferidas para manipular de un modo rápido y sencillo ficheros XML. XML es muy ámplio y para tratar bien el tema será necesario contar con muchas más ayudas. 2001 Estos libros han sido leídos y recomendados a nosotros por personas expertas en la materia. en el corre cto juego de caracteres formateador. donde se podrán encontrar enlaces que pueden completar también esta información.JAXB_ENCODING. o libros que no se ajustan a la filosofía que trae consigo el XML. Hasta aquí llega nuestra breve introducción a XML. Los conocimientos (aparentemente) cada vez tienen un ciclo de vida más corto No es tan importante el manipular el fichero XML como definir bien su esquema desde un principio (lo que requiere saber analizar). Prentice Hall. junto con JDOM. hechos por marcianos. salida). Muchas gracias por tu atención y hasta pronto.setProperty(Marshaller. También recomendamos aquí pasarse por la categoría XML de nuestro buscador. Conclusiones La opción de JAXB. y y "XML al descubierto" Michael Morrison Ed. Anaya Multimedia. pero hay que tener cuidado con lo que compramos acerca de XML pues hay posibilidades de adquirir libros que no nos ayudarán en nuestro aprendizaje. Como se ha podido ver. Hay otros muchos libros. "ISO -8859-1"). 2000 "eJava y XML"e. Ahora proponemos un par de libros de XML que pueden servir para que las personas que han encontrado el tema interesante puedan continuar con su estudio.Y escribir el contenido en un fichero // ahora escribimos a un fichero. Nuestro objetivo era ofrecer una buena introducción para que aquellos que no conocían el mundo XML puedan ahora entender un poco en qué cons iste y qué ventajas trae con él. De todos modos podemos sacar algunas conclusiones importantes: Cada vez hay más técnicas para hacer lo mismo. FileOutputStream salida = new FileOutputStream("c:/xml/salida. libros incomestibles. formateador. Brett McLaughlin Ed.xml").marshal( mifichero. .

Master your semester with Scribd & The New York Times

Special offer for students: Only $4.99/month.

Master your semester with Scribd & The New York Times

Cancel anytime.