Manual XML Programacion
Manual XML Programacion
Introducción
Desde que el W3C aprobó la especificación 1.0 del XML en febrero de 1998, ha sido
increible la cantidad de información, aplicaciones y software que se ha ido
generando alrededor de este nuevo estándar.
En este tutorial veremos las principales caracteríticas del XML y como podemos irlo
utilizando para crear nuestras aplicaciones para internet.
HTML
XML
Estas razones han obligado a los miembros del W3 Consortium a desarrollar nuevas
versiones de HTML un nuevo lenguaje (mejor dicho, metalenguaje), que han
denominado XML (Extensible Markup Language); que aproveche las innegables
ventajas del HTML, pero que a su vez permita realizar muchas cosas más. Esto no
signfica, al me nos por el momento, el fin del HTML. Existen demasiadas páginas en
HTML y resulta muy sencillo crearlas. Además, los navegadores no soportarán
todavía en toda su potencia el XML y tecnologías asociadas, pero es evidente una
reformulación del HTML como una aplicación XML y un cambio radical en la forma
de elaborar las páginas web en los próximos años.
donde podemos observar cómo Amazon presenta en su web información sobre los
libros.
Es evidente que no hay que ser ningún programador experto para entender que
cualquier programa informático podrá trabajar de forma más eficiente sobre el
segundo ejemplo que sobre el primero.
Esto permitirá, por ejemplo, realizar motores de búsqueda mucho más eficaces, lo
que nos permitirá un acceso más rápido y eficiente a la información. Nos permitirá
acceder a nuestras páginas favoritas desde nuestro teléfono móvil, o desde la ra dio
de nuestro coche, en el momento en el que los programas de reconocimiento de
voz trabajen con XML. Facilitará el intercambio de información y la cooperación
entre las empresas facilitando el comercio electrónico, etc. Y es que el XML busca
precisamente crear la capacidad de hacerlo todo en la web.
Un ejemplo de DTD puede ser la que define cómo tendrán que ser los documentos
HTML. Por tanto, el HTML no es más que un tipo de documento SGML que se utiliza
en el web, y esto es importante, ya que aquí radica su principal diferencia con el
XML.
El XML no es ningún tipo de documento SGML, sino que es una versión abreviada
de SGML optimizada para su utilización en Internet. Esto significa que con él vamos
a poder definir nuestros propios tipos de documentos (podremos definir nuestras
propias etiquetas) por lo que ya no dependeremos de un único e inflexible tipo de
documento HTML.
• Sencillez
• Variedad de estructuras de datos
• Excelente tratamiento de caracteres internacionales.
Sencillez
El XML es un formato basado en caracteres y por tanto comprensible para los seres
humanos. Además los documentos XML pueden leerse fácilmente, crearse y
modificarse por medio de las herramientas que utilizamos normalmente, como
editores de texto. Todo esto hace que la compresión y el análisis de documentos
XML resulte mucho más sencillo que los escritos en formato binario.
Otro ejemplo de la sencillez de XML tiene que ver con su habilidad para representar
datos estructuras en forma de árbol con todas las ventajas que esto comporta.
Existen otras sintaxis estandar, como por ejemplo la ANS.1 (Abstract Syntaxt
Notation 1) que nos permiten representar datos estructurados en forma de árbol.
Pero dicho estandar resulta bastante complicado de entender y generar. Se pueden
utilizar herramientas de generación automática para facilitar la tarea, pero las
herramientas adecuadas suelen ser bastante costosas. Por el contrario el XML
posee la misma habilidad para representar datos estructurados en forma de árbol y
su compresión y manejo son más sencillos.
Si algo puede decirse del intrincado mundo de Internet es que la "sencillez gana y
la eficacia pierde". En Internet la regla de oro es la apertura, es decir, accesibilidad
y disponibilidad para todos. Incluso si se trata de una tecnología totalmente
revolucionarias, sólo logrará imponerse si cuenta con el apoyo de la mayoría de la
población afectada. Un tecnología menos eficaz pero abierta a todo el mundo y
fácilmente comprensible tendrá más probabilidad de imponerse en Internet que
otra mejor pero de acceso restringido. Por esto ha triunfado el HTML y por esta
razón esta triunfando el XML: es sencillo.
Hoy en día, los negocios se realizan a escala mundial. Esto es especialmente cierto
cuando se trata de aplicaciones Web, puesto que Internet se ha encargado de
borrar las fronteras nacionales. Resulma muy común que las transacciones
comerciales contengan, por ejemplo, nombres de calles en chino o nombres propios
de origen árabe. La recomendación 1.0 de XML está definida de acuerdo con el
conjunto de caracteres ISO-10646(Unicode), por lo que virtualmente todos los
caracteres que actualmente se utilizan en el mundo son caracteres oficiales.
Metainformación
XML está considerado el mejor vehículo para definir una sintaxis de metacontenidos
dada su flexibilidad, legibilidad y capacidad de ampliación. Ademas nos proporciona
la posibilidad de definir estos metacontenidos fuera del documento. RDF, CDF y
OSD son ejemplos de formatos de metacontenidos definidos en XML.
Bases de datos
Muchos aplicaciones basadas en el modelo de tres capas extraen los datos a partir
de sistemas remotos de bases de datos. Por lo general, los resultados se
transforman a través de la etiquta <table> del HTML y se muestran en pantalla. Si
los datos se suministran en un documento XML que preserva la información
original, como nombres de columnas y tipos de datos, el cliente puede utilizarlos
para otros fines además de visualizarlos en pantalla. Por ejemplo, podrá descargar
los datos e insertarlos en una hoja de cálculo para realizar sumas y promedios.
Mensajería
Es sin duda alguna el área de aplicación más importante del XML. Por
mensajería se entiende el intercambio de mensajes entre organizaciones o entre
sistemas de aplicación dentro de una misma organización.
Uno de los problemas técnicos del EDI tiene que ver con el formato estándar que
debe adoptarse, y aqui XML puede desempeñar un papel decisivo. Entre las
habilidades necesarias para construir un sistema EDI, destaca el conocimiento de
los formatos de los mensajes X12 y EDIFACT. El formato de estos fichero es
complicado de leer. La gran diferencia entre EDI y XML es que en XML, lo nombres
de elementos tienen sentido por si mismos. Es verdad que los mensajes los
procesan normalmente los programas, y no los usuarios de carne y hueso. Pero la
legibilidad sigue siendo un aspecto fundamental para los programadores de
aplicaciones, que desarrollan, depuran y mantienen los programas que procesan los
mensajes EDI.
Una de las ventajas de trabajar con XML es la gran cantidad de aplicaciones de que
disponemos.
Ni mucho menos vamos a realizar una enumeración exhaustiva de las que existen,
ya que resulta imposible y seguramente en pocas semanas la lista se quedaría
anticuada. Para estar al dia sobre este tipo de aplicaciones os recomiendo que
visiteis las siguientes páginas webs:
Como veremos, existen para todos los lenguajes y plataformas aunque el Java es
sin duda el lenguaje más utilizado para desarrolla rlas. Y es que el Java y el XML
son la pareja perfecta, ya que estamos combinando código portable con
datos portables.
Parsers XML
• IBM
• Microsoft
• Sun
• Oracle
Incluso SUN ya ha incorporado en su API de Java clases que nos permiten trabajar
con documentos XML directamente desde Java.
Browsers XML
Son las herramientas mediante las cuales podemos visualizar los documentos XML.
• Las versiones 5 y 6 del Explorer nos permiten visualizar XML utilizando XSLT
y CSS y manipularlo utilizando DOM y JavaScript.
• Las versiones 6.x de Netscape o las versiones más recientes de Mozilla,
permiten también visualizar XML utilizando CSS y DOM.
Pero además existen multiples browsers que nos permiten visualizar algunos
vocabularios XML concretos.
• El navegador CML JUMBO, que nos permite visualizar documentos CML. Este
es un lenguaje XML mediante el cual se pueden describir fórmulas moleculares
y químicas.
• El Amaya Browser, mediante el cual, entre otros, podemos visualizar y crear
documentos Mathml, que es un vocabulario XML para la descripción de
fórmulas matemáticas.
• Un móvil con tecnología WAP incorpora un browser capaz de mostrar páginas
WML, que no es más que un vocabulario XML desarrollado para escribir
páginas para móviles.
• etc.
Algunos editores de XML también incorporan herramientas para trabajar con DTD,
aunque para estos casos lo mejor es utilizar herramientas específicas que nos
permiten, por ejemplo, diseñar la DTD de forma gráfica.
Procesadores XSLT
Estas herramientas nos permiten convertir un documento XML en otro XML (en
particular, en HTML) mediante una XSLT.
Otras herramientas
Lo que puede ser más util es que visitéis las dos direcciones que os recomiendo al
principio de esta sección, aunque a lo largo del curso utilizaremos las que indicamos
en el siguiente capítulo.
• Nuestro editor de textos preferido como editor de XML, XSLT, DTD, etc.. Ya
hemos visto que existen editores especializados en este tipo de documentos pero
creo que por el momento es recomendable hacerlo a mano.
• El Explorer 5 (o 6), que utilizaremos como buscador de XML. Lo encontrareis
facilmenten en el CD que acompaña cualquier revista sobre Internet o lo podéis
bajar del Web de Microsoft. También utilizaremos otros buscadores que nos
permitan visualizar y trabajar con algún vocabulario concreto de XML, aunque
esto ya lo iremos viendo a lo largo del curso.
• La máquina virtual Java de Sun, ya que la otra aplicación que vamos a utilizar
necesita tener instalada dicha máquina virtual para poder funcionar. Si no vais a
desarrollar en Java, es recomendable bajar el JRE, que es más pequeño y
sencillo de instalar.
• El parser de IBM, para validar nuestros documentos XML. En principio
podéis utilizar cualquier parser, aunque los ejemplos que desarrollemos a lo
largo de este tutorial han sido probados y validados con este parser, exactamente
con la versión 1_1_14.
A lo largo de este capítulo y los siguientes vamos a estudiar con más detalle la
sintaxis y los elementos que forman un documento XML y cómo podremos
construirlos y comprobar que son correctos.
El siguiente código:
A lo largo de este capítulo estudiaremos todos estos detalles y muchos más, que
nos permitirán ir entiendo y trabajando con documentos XML.
Marcado y datos
El texto incluido entre los carácteres menor que < y mayor que > o entre los signos
& y ; corresponde al marcado. Son exactamente las partes del documento que tiene
que entender el procesador de XML.
El resto no son más que datos de carácter, que corresponden a lo que sería el
contenido del documento; es decir, la parte imprimible de éste.
Elementos
Y por una etiqueta de elemento vacío en el caso de ser elementos sin contenido:
<imagen fichero="imagen.gif"/>
Cada elemento puede contener datos de carácter, elementos, ambas cosas a la vez
o puede que estén vacíos.
En nuestro caso:
En el caso de ser un elemento vacío, sólo hay una etiqueta de elemento vacío que
se forma del símbolo menor que "<", el nombre del tipo de elemento, los atributos
si los tiene y se cierra con el símbolo "/>". Es importante destacar este tipo de
elementos, ya que hasta ahora en el SGML y, por tanto, en el HTML entendido
como aplicación SGML, los elementos vacíos sólo se representaban con una
etiqueta de inicio.
Atributos
Cada elemento puede tener atributos (propiedades) que nos ofrecen información
sobre el elemento.
En nuestro ejemplo:
Prólogo
En la declaración XML,
Indicamos:
<!DOCTYPE documento [
<!ELEMENT documento (p | imagen | ejemplo)*>
<!ELEMENT p (#PCDATA|destacar)*>
<!ELEMENT destacar (#PCDATA)>
<!ATTLIST destacar
importancia CDATA #REQUIRED>
<!ELEMENT imagen EMPTY>
<!ATTLIST imagen
fichero CDATA #REQUIRED>
<!ELEMENT ejemplo (#PCDATA)>
]>
Ambas partes del prólogo son opcionales pero en el caso de incluir ambas ,la
declaración XML tiene que ir antes.
Hasta aquí hemos visto los componentes más importantes de un documento XML.
Se todos modos, si observamos el ejemplo veremos que existen otros componentes
que podemos utilizar:
Comentarios
Los comentarios empiezan con los caracteres "<!--" y terminan con "-->" y pueden
colocarse en cualquier sitio, excepto dentro de las declaraciones, etiquetas y otros
comentarios.
CDATA
Permiten integrar texto en un documento en XML,que de otra forma sería
interpretado como etiqueta. Es decir, estamos introduciendo texto que luego el
procesador XML va a mostrar pero que no va a procesar como marcado.
<![CDATA[
Aqui puedo poner lo que quiera.
] ]>
Los CDATA empiezan con los caracteres "<![CDATA[" y termina con "]]>".
Entidades predefinidas
En XML existen algunos caracteres reservados que no podemos utilizar para evitar
problemas con el marcado, lo que no significa que no tengan que salir en nuestros
documentos XML.
Ya hemos visto que una posible solución es la utilización de CDATA, pero sin duda
es poco útil cuando simplemente queremos escribir un carácter.
Las entidades predefinidas son marcas XML que se utilizan para representar estos
caracteres. El XML especifica cinco entidades predefinidas:
El documento XML con el que empezábamos este capítulo,lo podíamos haber escrito
de la siguiente manera:
Por tanto, en función de si lleva asociada una DTD o no, podemos diferenciar dos
tipos de documentos XML:
En los capítulos anteriores ya hemos visto de forma generalizada que una de las
características que diferencian al XML del SGML es la posibilidad de no utilizar DTD.
En una DTD definimos cómo va a ser un tipo de documento; es decir, definimos los
elementos, atributos y entidades que lo van a formar, cómo se estructuran y
relacionan. Por tanto, si en la elaboración de nuestros documentos XML no
utilizamos ninguna, el parser no puede proporcionarnos información sobre la
validez de ese documento; dicho de otro modo , no nos puede indicar que los
elementos y atributos que utilizamos son los correctos y si encuentran en el orden
adecuado.Simplemente nos indicará si ese documento está bien formado o no, es
decir, si respeta las reglas sintácticas del lenguaje XML.
A lo largo de los próximos dos capítulos vamos a estudiar con más detalle esta
definición, de manera que tengamos claro cómo tiene que ser un documento de
texto para ser aceptado por un parser como un documento XML bien formado.
La regla "document"
En cambio,
sí que lo es, al contener al menos el elemento "p". La principal razón por la que el
procesador comprueba los elementos es para determinar si el documento tiene
estructura de datos que pueda extraer. Un documento que carece de elementos no
tiene estructura de datos. Un documento con al menos un eleme nto tiene
estructura de datos.
En cambio,
<documento>
<p>Mi primer documento XML</p>
<p>Mi primer documento XML</p>
</documento>
<documento>
<p>Mi primer <destacar>documento XML</p></destacar>
<p>Mi primer documento XML</p>
</documento>
<documento>
<p>Mi primer <destacar>documento XML</destacar></p>
<p>Mi primer documento XML</p>
</documento>
Para practicar, vamos a realizar varios ejercicios durante el curso. En este, deberéis
indicar qué partes de la regla "document" incumple el siguiente documento:
<libro>
<titulo>El Quijote</titulo>
<libro>
<titulo>EL Lazarillo de Tormes</titulo>
<autor>Anonimo
<libro></autor>
<libro>
Solución:
En el siguiente ejemplo:
• La etiqueta final, del elemento "p", está mal cerrada. En lugar del carácter
"]" , tendríamos que poner el símbolo mayor que ">".
•
• <p>Mi Primer <destacar importancia=1>documento
XML</destacar></p>
•
• Estamos utilizando el símbolo menor que "<" sin que forme parte de la
definición de una etiqueta. Al ser un carácter reservado, tendríamos que
escribirlo como la entidad predefinida <.
•
• <p>Comienza con la etiqueta <documento></p>
•
• Estamos escribiendo el elemento vacío "imagen" de forma incorrecta. Al ser
un elemento sin contenido tendríamos que haberlo escrito con una etiqueta
de elemento vacío:
•
• <imagen fichero="imagen.gif"/>
•
<imagen fichero="imagen.gif"></imagen>
En el siguiente ejemplo:
Hay que tener mucho cuidado con esta regla, ya que su incumplimiento es
habitual y suele ser la causa de la mayor parte de los errores. Es
recomendable antes de empezar a escribir un documento XML establecer un
criterio al respecto.
Un consejo; si utilizais el bloc de notas recordad que para que funcione todo el
tinglado debeis guardar los ficheros con extensión ".xml". El bloc de notas
procurará por todos los medios que los ficheros se guarden con extensión ".txt".
Para conseguir que guarde el fichero con la extensión que deseamos, cuando
tengamos la ventana de diálogo escogeremos en el desplegable "Todos los ficheros
(*.*)" y pondremos el nombre del fichero con la extensión entre comillas dobles en
el campo correspondiente.
Reescribir el siguiente ejemplo para que sea un documento XML bien formado.
<?xml version="1.0"?>
<libros>
<libro id="quijote">
<titulo>El Quijote</titulo>
<autor nombre=cervantes nombre=cervantes>
<descripcion>Es el m<ejor libro de cervantes.</descripcion>
</libro]
</Libros>
Solución:
Aprovecharemos este ejercicio para ver que el IE5 es una estupenda herramienta
para comprobar que nuestros documentos son documentos XML bien formados.
En primer lugar, nos indica que el valor del atributo nombre no está entrecomillado.
En segundo lugar, nos indica que se produce un error por tener duplicado el
nombre del atributo nombre.
En tercer lugar, ya nos indica un error que no resulta tan claro, aunque nos debe
resultar fácil adivinar que se produce porque estamos utilizando el símbolo menor
que "<" sin que forme parte de la definición de una etiqueta. Al ser un carácter
reservado, tendriamos que escribirlo como la entidad predefinida <.
A continuación se está dado cuenta de que el elemento autor está mal anidado, es
decir, que parece ser que queremos cerrar el elemento linea sin tener cerrado el
elemento autor. Hay que tener en cuenta que, en nuestro ejemplo, el autor es un
elemento vacio y que, por tanto, deberíamos cerrarlo.
A continuación produce un error porque hemos cerrado con un carácter no válido la
etiqueta libro.
Y en último lugar nos indica que no reconoce </Libros> como etiqueta de cierre
para el elemento libros. Hay que recordar que el XML diferencia entre mayúsculas y
minúsculas, lo que significa que libros y Libros no es lo mismo.
<?xml version="1.0"?>
<libros>
<libro id="quijote">
<titulo>El Quijote</titulo>
<autor nombre="cervantes"/>
<descripcion>Es el m<ejor libro de cervantes.</descripcion>
</libro>
</libros>
Como mínimo sería recomendable que cada libro tuviese información sobre:
• Título
• Autor
• ISBN
Utilizar el IE5 para verificar que esté bien formado e incluir al menos dos o tres
libros.
Solución:
Un documento XML que se ajuste a estas condiciones podría ser por ejemplo:
Lo más posible es que la estructura de este XML sea diferente a la que vosotros
hayáis escrito, pero esto por el momento no es importante.
Solución:
Para ello nos podemos bajar el siguiente fichero zip., que contiene:
• Los dos ficheros .jar que realmente hacen falta para utilizar el parser.
o xml4j_1_1_14.jar, que contiene el parser propiamente dicho.
o xml4jSamples_1_1_14.jar, que contiene unos ejemplos de como
utilizarlo.
Una vez que tenemos los jar, y declarados en nuestro classpath para validar un
documento XML, no tendremos más que escribir:
Por si alguno no está muy puesto en Java, se puede hacer de la siguiente manera:
Las entidades
Por el momento no vamos a profundizar más en este aspecto, pero lo que hay que
tener en cuenta es que para el parser se trata de un único documento XML y que,
por tanto, sus diferentes partes, aún encontrándose en ficheros distintos, deben
verificar las reglas de buena formación descritas anteriormente.
En el anterior capítulo estudiamos las reglas a seguir para poder crear documentos
XML bien formados. En este capítulo avanzamos un paso más y veremos qué son y
qué tenemos que hacer para crear documentos XML válidos
Es importante tener en cuenta que una DTD no es más que una interpretación de
un texto. Si tenemos un conjunto de documentos de texto que queremos convertir
en documentos XML, en primer lugar debemos abstraer y generalizar los elementos
de que se componen y cómo están estructurados. La declaración práctica de estos
elementos y las reglas que los componen será la DTD de ese tipo de documentos.
Evidentemente, esta abstracción y la forma de implementarla depende del autor
que la elabore y,por tanto, es subjetiva, por lo que es posible que para un mismo
documento se elaboren diferentes DTD.
Cada declaración empieza con la cadena "<!" y termina con la cadena "mayor que"
">". A continuación del símbolo de admiración viene una de las palabras reservadas
del XML para especificar el tipo de objeto que se quiere definir, seguido del nombre
del objeto declarado y los parámetros asociados.
• DOCTYPE
• ELEMENT
• ATTLIST
• ENTITY
• NOTATION
de las cuales DOCTYPE, ELEMENT y ATTLIST serán estudiadas con más detalle en
este capítulo.
Declarando la DTD
Las declaraciones que forman la DTD pueden estar definidas en los siguientes
lugares:
<!DOCTYPE nombre_de_tipo_de_documento
[declaracions que forman la DTD]>
<?xml version="1.0"?>
<!DOCTYPE mihtml [
<!ELEMENT mihtml (c1 | parrafo)*>
<!ELEMENT c1 (#PCDATA)>
<!ELEMENT parrafo (#PCDATA|negrita)*>
<!ELEMENT negrita (#PCDATA)>
]>
<mithml>
.....
</mithml>
No es demasiado frecuente que una DTD sea declarada en su totalidad dentro del
documento XML
En este caso, el conjunto de las declaraciones DTD irán en un fichero externo, por
lo que parece normal que a la declaración DOCTYPE tendremos que indicarle de
alguna manera donde se encuentra este fichero.
Esto se realiza añadiendo a la expresión inicial las palabras clave SYSTEM o PUBLIC.
Sin contenido
Esto se determina colocando la palabra clave EMPTY en la declaración del
contenido. Son elementos que no tienen contenido y su valor suele estar
determinado por los atributos. Es el caso de los elementos IMG, HR, BR, etc., del
HTML.
....<negrita>texto</negrita>.....
En este caso en la especificación del contenido sólo debemos indicar los nombres
(identificadores genéricos) de otros elementos. Posiblemente éstos estén
relacionados mediante los indicadores de aparición y conectores de grupo que
explicamos más adelante.
<mihtml>
<parrafo>....</parrafo>
<parrafo>....</parrafo>
</mihtml>
Contenido mixto
También es posible combinar los dos últimos casos y declarar la especificación de
contenido, de manera que un elemento tenga texto y otros elementos.
En nuestro ejemplo es el caso del elemento para, que puede estar formado de texto
y de elementos negrita.
Como podemos observar, no tenemos más que combinar la palabra clave #PCDATA
con los nombres de los elementos que contendra.
<parrafo>Esto es un <negrita>parrafo</negrita></parrafo>
<parrafo>Esto es un parrafo</parrafo>
Conectores de grupo
estamos indicando que dentro del elemento mihtml el autor puede poner o el
elemento c1, o el elemento parrafo, o el elemento imagen.
<mihtml>
<parrafo>...</parrafo>
</mihtml>
<mihtml>
<c1>...</c1>
</mihtml>
<mihtml>
<imagen/>
</mihtml>
Otro tema es el indicador ,* que nos indica que ese modelo de contenido se puede
repetir y que, por tanto, esos tres elementos pueden aparecer tantas veces como
quieran.
En cambio el conector "," establece una secuencia que debe seguirse. Imaginemos
que en nuestro pequeño HTML queremos incluir la posibilidad de tener listas
ordenadas y que éstas puedan estar ordenadas. Si al elemento lista ordenada lo
identificamos mediante el elemento lo y a sus entradas "items" mediante el
elemento item, su declaración en la DTD quedaría de la siguiente manera:
<lo>
<item>Texto</item>
<item>Texto</item>
<lo>
<item>Texto</item>
<item>Texto</item>
</lo>
</lo>
Indicadores de aparición
Como ya hemos explicado, dentro del elemento mihtm, los elementos c1, parrafo o
elemento imagen pueden aparecer en el orden que quieran, pero tantas veces
como quieran, o incluso ninguna. Esta última característica la indicamos mediante
el indicador *.
Pero imaginemos que queremos que el primer elemento de una lista ordenada no
sea siempre el elemento item, sino que queremos permitir que sea lo. En tal caso
podríamos definir el elemento de la siguiente manera:
Donde con item? estamos indicando que puede aparecer 0 o 1 veces y que, por
tanto, el siguiente ejemplo es válido.
<lo>
<lo>
<item>Texto</item>
<item>Texto</item>
</lo>
</lo>
<!ELEMENT lo (lo|item)*>
Del mismo modo que los elementos, los atributos se declaran en la DTD utilizando
una sintaxis bastante similar. En este caso se realiza mediante el término ATTLIST,
que en el comienzo de una declaración indica que es una especificación de una lista
de atributos.
<!ATTLIST nombre_elemento
nombre_atributo tipo valor_defecto>
Esta tripla se puede repetir tantas veces como queramos dentro de la declaración,
es decir, podemos declarar una lista de atributos, de ahí su nombre.
<!ATTLIST imagen
direccion CDATA #REQUIRED
alineacion (izquierda, centrada, derecha) "izquierda">
Tipo
Una utilidad importante de los atributos es que mediante el tipo podemos hacer
cumplir al elemento obligaciones léxicas o semánticas. Las obligaciones léxicas son
por ejemplo "este atributo debe contener sólo números" y las semánticas son "este
atributo debe contener el nombre de una entidad declarada". Evidentemente estas
obligaciones son muy útiles, ya que nos permiten garantizar la integridad de
algunos de los valores de los atributos, pero la verdad es que son bastante
limitadas y en muchas ocasiones insuficientes.
• CDATA
• NMTOKEN
• NMTOKENS
• ENUMERADOS
• NOTATION
• ID
• IDREF
• IDREFS
• ENTITY
• ENTITYS
En teoria las posibilidades son muchas, aunque luego en la práctica sin duda alguna
los más utilizados son los CDATA y el ID.
CDATA
<!ATTLIST imagen
direccion CDATA #REQUIRED
...
estamos indicando que el valor del atributo dirección puede llevar cualquier tipo de
carácter.
ID
<!ATTLIST c1
id ID #REQUIRED
...
IDREF
NMTOKEN
ENUMERADOS
Donde estamos indicando que los únicos valores permitidos para el atributo
alineacion son: izquierda, centrada y derecha.
Ya hemos visto que en este lugar podemos indicar, el valor que puede tener por
defecto.
Pero en el caso de que esto no sea así,indicamos al parser cómo debe interpretar la
ausencia de atributo con las siguientes palabras reservadas:
En los próximos capítulos vamos a escribir unas DTD complejas que os servirán de
ejemplo para futuros desarrollos.
• articulo.dtd
• bookmark.dtd
• novedades.dtd
y una cuarta, que nos permitirá escribir las FAQs; utilizaremos la QAML.dtd, que ya
está desarrollada.
DTD de artículos
Un artículo a un nivel general está formado por dos partes bien diferenciadas: el
contenido del artículo y la metainformación sobre el artículo.
• título
• autor
• palabras clave
• resumen
En esta parte podríamos poner mucha más información, toda la que creamos que
nos puede hacer falta. Toda esta información nos puede resultar útil, por
ejemplo,para la búsqueda y gestión de estos documentos.
• párrafos
• listas, tanto ordenadas como desordenadas
• imágenes
• código, ya que nuestros artículos (al menos en el ejemplo que desarrollamos)
serán sobre temas informáticos.
También debemos tener en cuenta qué elementos pueden existir dentro de esos
bloques de texto. Podríamos querer destacar parte del contenido del texto, porque
es el nombre de una función o el nombre de un autor; podríamos querer poner
referencias a otro documentos u otros direcciones, etc.
Por ejemplo, tenemos el elemento imagen mediante el cual nos será posible incluir
imágenes en nuestro artículo. Algunas propiedades posibles son: el fichero en el
que se encuentra la imagen, qué dimensiones tendrá, cuál será su tamaño, etc.
Nuestro ejemplo será sencillo, y los únicos elementos que tendrán propiedades
serán los elementos enlace e imagen.
Lo primero es elegir el nombre del elemento raíz, que denominaremos articulo. Por
tanto, el documento XML tendrá el siguiente aspecto:
<articulo>
.......
</articulo>
y en nuestra DTD:
donde indicaremos que está formado por los elementos metainfo y cuerpo
obligatorios y en ese orden.
El elemento metainfo estará formado por los elementos titulo, autor, pclave, y
resumen.
Y el elemento resumen, que tampoco es obligatorio, está formado sólo por texto:
Y el elemento imagen:
Mediante el elemento lds indicamos las listas desordenadas las cuales pueden estar
formadas por los elementos de entrada de lista o por otras listas:
Mediante el elemento il indicamos los ele mentos que forman la lista, y cuyo
contenido es el siguiente:
<!ELEMENT il (#PCDATA|destacar|enlace)*>
<!ATTLIST subcapitulo1
id ID #REQUIRED>
Hay que tener claro que cuanto más identificados tengamos los elementos y
más información tengamos sobre cada uno ,mejor;.más acciones podremos
realizar posteriormente sobre el documento. En nuestro caso,por sencillez, sólo
identificaremos mediante un atributo de tipo ID las subcapitulo1es. Pero en los
próximos capítulos, que veremos la DTD para escribirlas FAQS, o la DTD del
WML,comprobaremos quw como todos los elementos están identificados mediante
el atributo de ID.
Y, por último, sólo nos faltan definir los elementos en línea que como ya hemos
visto aparecen en los elementos para y il.
Su contenido sólo puede ser texto y será precisamente el ancla del enlace.
Sus atributos coinciden con las del elemento imagen, teniendo la misma
funcionalidad.
<!ATTLIST imagen
direccion CDATA #REQUIRED>
descripcion CDATA #REQUIRED>
Escribir el mínimo XML válido que se ajuste a la DTD que nos define la estructura
de la DTD para escribir artículos.
Solución:
Simplemente tenemos que fijarnos en los elementos que hemos indicando que son
obligatorios.
pxml minimoarticulo.xml
minimoarticulo.xml
Solución:
DTD de bookmarks
En este apartado vamos a escribir una DTD que nos permitirá estructurar y
mantener en formato XML nuestras direcciones preferidas.
Para hacernos una idea de los elementos que nos permiten definir una dirección
podemos dar una vuelta por algunos de los buscadores más conocidos y observar
qué información suelen presentar sobre una dirección.
• Título de la dirección
• URL de la dirección
• Descripción
• Idioma del contenido de la dirección.
A los cuales nosotros añadiremos también un elemento valoración, que nos
permitirá indicar nuestro criterio sobre una dirección.
<direccion>
<titulo>....</titulo>
<url>...</url>
<descripcion>...</descripcion>
<idioma>...</idioma>
<valoracion>...</valoracion>
</direccion>
Y ordenándolo un poco:
Escribir una pequeña DTD que se ajuste al XML anterior. Teniendo en cuenta que:
Solución:
La solución es:
Ahora lo que nos falta es crear unos elementos que nos permitan agrupar las
direcciones en grupos (al estilo de las carpetas de Windows), de manera que las
podamos tener ordenadas en conjuntos y subconjuntos.
Es decir, de una forma similar a ésta:
<bookmark>
<titulo>Mis direcciones favoritas</titulo>
<descripcion>Direcciones favoritas.</descripicion>
....direcciones....
<grupo id="deporte">
<titulo>Deportes</titulo>
....direcciones...
<grupo id="futbol">
<titulo>Futbol</titulo>
.....direcciones...
</grupo>
</grupo>
...direcciones
<bookmark>
Ampliar la mini DTD que hemos escrito para una dirección, de manera que nos
permita agrupar las direcciones en grupos y subgrupos al estilo del Explorador de
Windows.
Solución:
DTD completa
Solución:
Sólo tenemos que fijarnos en los elementos de la DTD que sean obligatorios.
NOTA: Visualizar el documento XML, por ejemplo en el IE5 y observar qué pasa
con el atributo valoracion.
minimobookmark.xml
Solución:
La DTD de novedades
Mediante esta DTD crearemos los documentos XML en los que registraremos las
novedades que se vayan produciendo en nuestro web.
• El título de la novedad
• La url
• La fecha
• Y una breve descripción
Ejercicio: DTD para las novedades
Escribir una DTD que nos permita escribir en un documento XML las novedades que
se produzcan en nuestro web.
Solución:
novedades.dtd
Solución:
DTD. Entidades
Hasta el momento hemos asociado un documento XML con un único fichero, pero
esto no tiene porque ser así. El XML nos permite organizar el contenido de un
documento XML de forma mucho más flexible. Por ejemplo,si tenemos un libro en
formato XML éste no tiene porque incluirse en un único fichero;si queremos, cada
capítulo puede estar en un fichero.
Tipos de entidades
Debido a que las entidades XML pueden hacer tantas cosas, existen muchas
variedades de entidades. Esto no significa que existan siete u ocho tipos diferentes
con nombre sencillos.
Pero las entidades pueden pertenecer a varios de estos tipos y, por ejemplo, tener
una entidad general interna analizada. Las posiblidades de combinación son, por
tanto ocho, pero tres de ellas imposibles, por lo que el número de entidades posible
es cinco .
En principio puede parecer un poco complicado, pero veamos cada caso por
separado con algunos ejemplos concretos y vereis que en el fondo todo es muy
sencillo.
Son las más sencillas de todas y son básicamente abreviaturas totalmente definidas
en la sección de declaración de tipo de documento.
En este ejemplo,
<?xml version="1.0"?>
<!DOCTYPE ejemplo [
<!ENTITY nomclub "Club de Usuarios de Internet">
]>
<ejemplo>
En el &nomclub; realizamos cursos sobre Internet.
</ejemplo>
declaramos la entidad nomclub en la línea:
&nomclub;
por su contenido.
Este tipo de entidades es muy utilizado también cuando es necesario emplear algún
carácter que el juego de caracteres que hemos definido en el atributo encoding de
la declaración XML no soporta. Por ejemplo, si quisiéramos colocar el símbolo del
copyright © podriamos hacerlo de la siguiente mamera:
<?xml version="1.0"?>
<!DOCTYPE ejemplo [
<!ENTITY copy "©">
]>
<ejemplo>
© Ciberaula.
</ejemplo>
<?xml version="1.0"?>
<!DOCTYPE libro [
<!ENTITY capitulo1 SYSTEM "capitulo1.xml">
]>
<libro>
&capitulo1;
</libro>
En este ejemplo, si el contenido del documento capitulo1.xml es:
<?xml version="1.0"?>
<capitulo>
<para>Este es el primer capitulo</para>
</capitulo>
el resultado es:
• Esta misma entidad podría ser utilizada desde múltiples documentos XML.
• Permite que diferentes autores desarrollen diferentes partes de un documento
XML de forma independiente,no teniéndose que preocupar del conjunto del
documento XML.
Volver a escribir el XML de bookmarks,de manera que cada dirección sea una
entidad externa.
Ejercicio:
Tenemos que definir cada direccion en un fichero XML y luego en la declaración XML
indicar dónde se encuentran estos ficheros.
<bookmark>
&meta;
<titulo>Información general sobre WAP</titulo>
<descripcion>Recopilación de direcciones
sobre WAP y WML.</descripcion>
<grupo id="doc-portales">
<titulo>Tutoriales</titulo>
&wapfacil;
&wmlclub;
</grupo>
<grupo id="articulos">
<titulo>Artículos</titulo>
&asphtml;
&cestacompra;
</grupo>
Los nuevos ficheros XML con las direcciones han sido creados en el subdirectorio
wapdev.
Hay que destacar que para el parser de XML sigue siendo una única entidad.
Fijaros como el IE5 lo muestra completo.
Entidad parámetro
Como ya hemos dicho,las entidades XML se clasifican según puedan usarse en una
DTD o en el documento. Las entidades que sólo pueden utilizarse en la DTD se
denominan entidades parametro.
tienen en común.
(para | imagen | lds | lo | codigo)*
Lo que nos permiten las entidades paramétrícas es definir este modelo de contenido
como una entidad y luego hacer referencia a ella tantas veces como sea necesario.
De esta manera si necesitamos modificar estos elementos, tendremos que hacerlo
sólo una vez, en un único lugar, y no tener que ir elemento por elemento realizando
la modificación.
Esto también lo podemos hacer con listas de atributos. Por ejemplo, los elementos
imagen y enlace tienen los mismos atributos.
<!ATTLIST imagen
direccion CDATA #REQUIRED
descripcion CDATA #REQUIRED>
Por tanto, podríamos definir esta lista de atributos dentro de una entidad
paramétrica.
Solución:
Creamos una entidad bloques para declarar el modelo de contenido que se repite
en los elementos cuerpo, seccion y seccion1.
<!ATTLIST imagen
%att.elementos.enlace;>
<!ATTLIST enlace
%att.elementos.enlace;>
DTD completa
Hasta el momento sólo hemos visto entidades paramétricas internas, pero también
pueden ser externas.
Esto nos permitirá crear las DTD entidades que podamos utilizar en varias DTD sin
necesidad de reescribirlas.
Solución:
DTD existentes
En los próximos capítulos vamos a ver ejemplos de DTD reales. Hay infinidad de
vocabularios XML, y muchos de ellos son el resultado del trabajo de los mejores
técnicos de algunas de las mayores compañías del mercado, como Microsoft,
Oracle, IBM, etc. Estas organizaciones disponen de una gran cantidad de recursos y
la motivación suficiente para crear vocabularios de calidad y bien diseñados. Por lo
tanto tiene sentido prestar atención a los mecanismos que utilizan para poner en
marcha sus propias DTD.
Sobre todo prestaremos atención a la QAML.dtd, una DTD escrita por Rick Jelliffe
del Centro de Computación de la Academia Sinica de Taipei en Taiwan y que
utilizaremos para escribir una FAQ de ejemplo.
Otras DTDs
Sólo estudiaremos unas cuantas DTDs, pero serán más que suficientes para ver
cómo el uso de los vocabularios XML se está generalizando en todos los campos de
la informática. Pero esto sólo es la punta del iceberg: hay mucho más y habrá
mucho más;aunque tampoco es una cuestión de cantidad. Una de las bases del
éxito del XML será que algunas de estas DTD se estandarice y su uso se generalice.
Para estar al día sobre los vocabularios XML que existen y los que aparecerán os
recomiendo que visitéis las siguientes direcciones:
Docbook
• Tengamos las DSSSL que nos convierten estos documentos a multiples formatos
de impresión: RTF, PDF, TEX, etc. y también a HTML.
• Dispongamos de las XSLT que nos convierten estos documentos a HTML
• Se estén desarrollando las XSL que nos converten esta información a PDF.
• Y sobretodo,que dispongamos de gran cantidad de información técnica a la que
podemos acceder en formato SGML/XML y luego visualizarla en el formato que
más nos interese utilizando las hojas de estilo antes mencionadas.
Direcciones:
MathML
Solución:
El código es el siguiente:
<math>
<mrow>
<mi>x</mi>
<mo>=</mo>
<mfrac>
<mrow>
<mo>-</mo>
<mi>b</mi>
<mo>±</mo>
<msqrt>
<mrow>
<msup>
<mi>x</mi>
<mn>2</mn>
</msup>
<mo>-</mo>
<mn>4</mn>
<mi>ac</mi>
</mrow>
</msqrt>
</mrow>
<mrow>
<mn>2</mn>
<mi>a</mi>
</mrow>
</mfrac>
</mrow>
</math>
SVG y VML
El SVG y el VML son dos lenguajes XML utilizados para definición de gráficos
vectoriales. El SVG es una propuesta del W3c, mientras que el VML es la propuesta
sobre el mismo tema de Microsoft.
SVG
SVG (Scalable Vector Graphics) es un lenguaje XML que esta siendo desarrollado
por el W3c para describir gráficos en dos dimensiones.
• Visualizadores
o CSRIO Viewer, que es un estupendo visualizador de documentos SVG.
Es gratis y está escrito en Java. Además viene acompañado de una
utilidad que nos permite convertir dichos documentos en imágenes en
formato JPEG.
o IBM SVG viewer,también un buen visualizador en Java desarrollado por
IBM.
o Adobe a desarrollado un plug- in que permite visualizar este tipo de
documentos en el IE y en el Nestcape.
• Conversores
o Cada día son más las aplicaciones de dibujo que nos permiten trabajar
con este tipo de documentos.
§ CorelDraw ha anunciado recientemente un filtro para su versión
9.1, que permite exportar los gráficos desarrollados con esta
aplicación a SVG. En la versión 10 viene incluido de serie.
§ Adobe también ha realizado lo mismo para la versión 8.1 del
Adobe Ilustrator, de manera que desde esta aplicación podemos
importar y exportar documentos SVG.
§ FOP de James Tauber que es una implementación gratuita en
Java de los XSL-FO que nos permite convertir nuestros
documentos XML en PDF. Lo interesante es que también
reconoce la sintaxis SVG y es capaz de pintarla en PDF.
Hasta ahora siempre ha sido bastante complicado crear gráficos de forma dinámica
y todavía más difícil incluirlos en nuestros documentos. La solución siempre ha
pasado por soluciones propietarias muy vinculadas a determinadas plataformas y
entornos.
Imaginemos, por ejemplo, que tenemos que desarrollar una aplicación que debe
generar informes de forma dinámica y que hay que distribuir por Internet en HTML
y en PDF. Y supongamos que la información más importante de esos informes son
gráficos que tienen que generarse con información que hay en una base de datos y
que dicha información va cambiando constantemente (p. ej. cotizaciones de bolsa).
Una posible solución sería tener el contenido del informe en XML y enlazados los
gráficos que podríamos incluir fácilmente al haberlos generado en formato SVG
desde la base de datos. Para presentarlo en PDF podemos utilizar el FOP de James
Tauber y para presentarlo en HTML lo generamos utilizando XSLT y podemos
utilizar el plug-in de Adobe para mostrar los gráficos SVG o convertirlos en
imagenes JPG mediante el conversor que viene con el CSRIO. Como podemos
observar, las combinaciones son inmensas, y lo mejor de todo es que muchas de
las aplicaciones que tenemos que utilizar ya estan creadas. Y todo esto por trabajar
con un estándar como el XML.
Documento SVG
<?xml version="1.0" standalone="no"?>
En el que pintamos unos gráfics que vista el CSRIO Viewer tiene el siguente
aspecto:
VML
VML es un lenguaje XML para definir gráficos vectoriales desarrollado por Microsoft.
Tiene la ventaja de que ya es una realidad y que el IE5 es capaz de pintarlo y las
aplicaciones que vienen con el Office 2000 ya son capaces de trabajar con él. con
las y hasta ahora pruebas que he realizado, he visto que, por ejemplo, los gráficos
que realizamos en el Word 2000 utilizando las herramientas de dibujo, al
exportarlos a HTML ya aparecen en este formato.
La desventaja es que sólo Microsoft apoya este lenguaje y que por tanto sólo sus
aplicaciones lo soportan.
• VMLSource
• VML en Microsoft
QAML
La versión 1.0 de la QAML fue escrita for Justin Higgens de faq.org. Pero esta
versión está escrita en SGML. La versión 2.0 ya es en XML y ha sido escrita por Rick
Jelliffe del Centro de Computación de la Academia Sinica de Taipei en Taiwan.
Es una de las DTD que vamos a utilizar en la elaboración de nuestro Web, por lo
que a continuación pasamos a estudiarla en detalle.
<!ELEMENT head
(title, version?, maintain+, hdr*, althdr*, archive*,label*,
link*)>
El elemento qna es sin duda el más importante de esta DTD, ya que contiene la
pregunta y sus respectivas respuestas.
Como podemos observar, las respuestas pueden ser varias: (....a)+ y pueden estar
acompañadas de información adicional: autor, contributor, etc.
<!ATTLIST qna
id ID #IMPLIED
class CDATA #IMPLIED
xml:lang NMTOKEN #IMPLIED
date CDATA #IMPLIED>
<!ELEMENT a (p | div)+>
Por tanto, un ejemplo de XML mínimo que se ajuste a esta DTD es:
XML QAML
<?xml version="1.0"?>
<!DOCTYPE faq SYSTEM "qaml.dtd">
<faq>
<head>
<title>Mi primer FAQ con la QAML.dtd</title>
<maintain>
<name>Joaquin Bravo</name>
<email>[email protected]</email>
</maintain>
</head>
<body>
<qna id='q1'>
<q>Aqui la pregunta</q>
<a><p>Aqui la respuesta.</p></a>
</qna>
</body>
</faq>
<!ATTLIST p id ID #IMPLIED
class CDATA #IMPLIED
title CDATA #IMPLIED
xml:lang NMTOKEN #IMPLIED
alt CDATA #IMPLIED
date CDATA #IMPLIED
xml:space ( default | preserve ) #IMPLIED >
Como podemos ver no es obligatorio, y tampoco tiene ningún valor por defecto, es
decir podemos poner el valor que queramos, y luego manipularlo de una manera u
otra desde la aplicación u hoja de estilos.
<p class="li">AAAA</p>
<p class="li">BBBB</p>
• Permite que los documentos XML sean bastantes flexibles aunque tengan una
DTD a la que ajustarse.
• Pero también dificulta la reutilización de documentos XML, XSLT,
etc.realizados por otras personas, ya que a priori no sabemos los valores que
utilizan para el atributo class. Y más si tenemos en cuenta que este atributo se
utiliza en varios elementos.
el cual debe estar formado por al menos un párrafo. Lo podemos utilizar por
ejemplo para crear listas ordenadas o desordenadas, tal como muestra el siguiente
ejemplo:
<div class="ul">
<p class="li">AAAA</p>
<p class="li">BBBB</p>
</div>
Mediante el elemento link colocamos enlaces. Su contenido sólo puede ser texto:
<link href="http://www.altavista.com">altavista.</link>
Como podemos observar, tiene muchos más atributos, entre ellos el superutilizado
class, pero dejaremos el estudio de estos atributos para más adelante ya que están
muy relacionados con la especificación XLink en la que se define cómo tienen que
ser los enlaces entre documentos XML.
Sin embargo debemos tener claro que este texto aparecerá en cursiva porque luego
la aplicación o XSLT que lo trate lo representará como tal. La verdad es que luego,
cuando nosotros lo pintemos, podremos ponerlo como más nos guste. Los valores
que normalmente utiliza la autora de la DTD en sus ejemplos están enfocados a la
presentación y muy relacionados con el HTML y las CSS, pero nosotros, si
queremos, podemos ponerle valores que identifiquen más categóricamente
(semánticamente) el contenido de lo que califica. Por ejemplo, en lugar de i
podríamos poner el valor codigo.
Todavía falta por describir algunos elementos y atributos, pero dejo como ejercicio
estudiar con más detalle la DTD.Aunque con lo que se ha presentado hasta ahora,
deben quedar claros la utilidad y el funcionamiento de esta DTD.
Solución:
Para el Web de WML en castellano encontraréis un FAQ sobre WAP.
Presentación
Una de las pruebas del éxito del XML es la gran cantidad de vocabularios XML
(DTD) que están apareciendo. En algunas ocasiones al realizar nuestros
documentos XML nos podremos encontrar en la necesidad de utilizar varios de
estos vocabularios. Es posible que estemos escribendo un artículo científico en
formato XML y que tengamos la necesidad de incorporar fórmulas matemáticas.
Podemos perfectamente desarrollar nuestras propias etiquetas, pero ¿por qué no
utilizar las que nos proporciona el vocabulario MathML? Sin duda, es mejor la
reutilización de estas marcaciones que el hecho de reinventar unas nuevas.
Por tanto, estos documentos XML que contendrán elementos de múltiples fuentes
independientes entre sí, pueden tener problemas de reconocimiento y colisión.
Puede ser que estemos utilizando dos vocabularios que utilizan el mismo tipo de
elemento o nombre de atributo. Por ejemplo:
Los dos documentos XML anteriores tienen en común el elemento direccion. Por el
momento son dos vocabularios diferentes pero puede ser que en algún momento
tengamos que integrarlos en un mismo documento XML. Supongamos que ambos
documentos juntos nos ofrecen información sobre la localización de una empresa:
su dirección física y su dirección en Internet. Está claro que el elemento dirección
va a provocar problemas. Podríamos renombrarlo y en el segundo documento XML
llamarlo ip-servidor, pero no es una buena solución. Una posible solución es ponerlo
de la siguiente manera:
En la que como podemos observar los elementos de ambos vocabularios están bien
diferenciados.
También puede ocurrir que sean diferentes, pero que el software que trabaja con
ellos necesite diferenciarlos claramente, ya que su procesamiento requiere
comportamientos diferentes.
<body>
<p>Ecuación de segundo grado escrita con MathML</p>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
<mi>a</mi>
<msup>
<mi>x</mi>
<mn>2</mn>
</msup>
<mo>+</mo>
<mi>bx</mi>
<mo>+</mo>
<mi>c</mi>
<mo>=</mo>
<mn>0</mn>
<mi></mi>
<mo>,</mo>
<mi>con a</mi>
<mo>></mo>
<mn>0</mn>
</mrow>
</math>
</body>
</html>
Hemos diferenciado los elementos del vocabulario XHTML y MathML para que
luego,por ejemplo el buscador Amaya sea capaz de pintarlos adecuadamente.
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="direccion">
<!-- El elemento direccion no pertenece al vocabulario de la XSLT --
>
<direccion>
<xsl:apply-templates/>
</direccion>
</xsl:stylesheet>
Definició n de "namespace"
Declaración de un "namespace"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
El atributo xmlns puede ir seguido del carácter dos puntos :, opcional, y el nombre
del "namespace":
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
Entonces este nombre xsl, será el prefijo de los elementos de este vocabulario XML
xsl:template.
<math xmlns="http://www.w3.org/1998/Math/MathML">
<dirserv:servidor
xmlns:dirserv="http://www.palotes.com/direccionservidor">
<dirserv:url>http://www.palotes.com</dirserv:url>
<dirserv:direccion>123.45.67.8</dirserv:direccion>
</dirserv:servidor>
[<![CDATA[<html xmlns="http://www.w3.org/1999/xhtml">
.....
<body>
...
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
.....
</mrow>
</math>
</body>
</html>
Direcciones
Para más información sobre el tema, podéis visitar las siguientes direcciones: