Sei sulla pagina 1di 10

XML

1. INTRODUCCIÓN
2. ESTRUCTURA DE UN DOCUMENTO XML
2.1. Prólogo
2.2. Elementos
2.3. Atributos
2.4. Secciones CDATA
2.5. Comentarios
3. DOCUMENT TYPE DEFINITIONS (DTDS)
3.1. Declaración de tipo elemento
3.2. Modelos de contenido. Atributos y tipos
3.3. Declaración de entidades
3.4. Ejemplo de DTD
4. SCHEMAS XML
5. EXTENDED STYLE LANGUAGE (XSL)
6. XML DOM Y VISUAL BASIC
7. XML DOM Y JAVA
8. LENGUAJE DE ENLACE XML (XLINK)
1. INTRODUCCIÓN
XML es un metalenguaje definido por el W3C orientado a la estructuración de documentos. La diferencia
entre HTML y XML es que el primero se especializa en la presentación de documentos en web y XML en la
gestión de información web. La definición de HTML que sigue la especificación XML se denomina XHTML
(Extensible Hypertext Markup Language).
XML estructura los documentos en 3 partes: contenido, formato y estructura. El contenido es el texto,
editable en texto plano. El formato define las características del texto, lo que suele hacerse típicamente con
hojas de estilo en cascada (CSS). La estructura se refiere a las partes del texto (títulos, numeraciones…).
Se define por la distribución de sus elementos.
XML responde fundamentalmente a los requisitos de compatibilidad con SGML, ser directamente utilizable
en Internet, soportar variedad de aplicaciones, generar documentos legibles y claros, diseño rápido y ser
formal y conciso. Supone una herramienta de definición de estructuras de datos compatibles para una
comunicación eficiente. Entre sus aplicaciones destaca su uso como estándar para intercambio de datos
entre aplicaciones como en el caso de SOAP.
XML permite definir esquemas para usos concretos. Si estos esquemas son importantes, cobran entidad.
Ejemplos son XHTML, XLink y XMLSchema. Otros destacables son MathML (para representación
matemática), SVG (para gráficos vectoriales), RSS (sindicación de noticias) o SMIL (Lenguaje de
Integración Multimedia Sincronizada, para crear contenido web multimedia interactivo).
XML se define con etiquetas (tags) y atributos. Esto genera una serie de usos del metalenguaje que ofrecen
colecciones de definición de entidades. Algunos son CSS (hojas de estilo aplicables a XML y HTML), XSL
(basado en XSLT para definir hojas de estilo), DOM (colección de funciones estándar para gestión de
archivos XML y HTML con un lenguaje de programación), XML Namespaces (para asociación de URL con
etiquetas y atributos de un documento XML), XML Schemas (definición de formatos basados en XML),
XPath (rutas XML para acceso a partes de un documento XML) o XQL (consulta XML para extracción de
datos desde documentos XML en entornos web).
2. ESTRUCTURA DE UN DOCUMENTO XML
Un documento XML contiene datos que se autodefinen. A diferencia de HTML no mezcla datos y formato.
En XML se separa el contenido de la presentación. Para entender la estructura de un documento XML, se
propone el ejemplo de la figura y su esquema conceptual.
<!DOCTYPE MENSAJE SYSTEM "mensaje.dtd">
<mensaje>
<remite>
<nombre>Yo</nombre>
<email>yo@yo.org</email>
</remite>
<destinatario>
<nombre>Tu</nombre>
<email>tu@tu.org</email>
</destinatario>
Los documentos XML deben seguir una estructura
<asunto>Hola tu</asunto>
jerárquica de etiquetas que definen sus elementos.
Una etiqueta debe estar correctamente incluida en <texto>
otra. Los elementos con contenido, deben estar
<parrafo>¿Qué tal?
correctamente "cerrados". XML permite elementos sin
contenido con la estructura sintaxis <elemento-sin- <enfasis>OK?</enfasis>
contenido/>. Los documentos XML sólo permiten un </parrafo>
elemento raíz, del que cuelgan los demás. La
</texto>
jerarquía de elementos de un documento XML bien
formado sólo puede tener un elemento inicial. </mensaje>
XML es case-sensitive, es decir, distingue entre tipos de letra mayúscula y minúscula. Un elemento XML
definido como "ELEMENTO", no es equivalente a "elemento", "Elemento" o "eleMENto".
Existe un conjunto de caracteres denominados "espacios en blanco" que los procesadores XML tratan de
forma diferente en el marcado XML. Estos caracteres son los "espacios" (Unicode/ ASCII 32) , tabuladores
(Unicode/ ASCII 9) , retorno de carro (Unicode/ ASCII 13) y saltos de línea (Unicode/ ASCII 10) .
La especificación XML 1.0 permite el uso de esos "espacios en blanco" para hacer más legible el código, y
en general son ignorados por los procesadores XML. En otros casos, los "espacios en blanco" resultan
significativos, por ejemplo, para separar palabras en un texto, o líneas de párrafos.
En XML, es necesario asignar nombres a las estructuras, tipos de elementos, entidades, elementos
particulares, etc. En XML los nombres tienen algunas características comunes.
Según XML 1.0 un nombre empieza con una letra o uno o más signos de puntuación, y continúa con letras,
dígitos, guiones, rayas, dos puntos o puntos, denominados de forma global como caracteres de nombre.
Los nombres que empiezan con "xml" se reservan para estandarización o futuras versiones.
Las construcciones como etiquetas, referencias de entidad y declaraciones se denominan "marcas". Son las
partes del documento que el procesador XML interpreta. Los datos entre marcas, son los legibles para el
humano. Las marcas de un documento XML se incluyen entre los signos "<" y ">" o en el caso de las
referencias de entidad, entre "&" y "; ".
2.1. Prólogo
Aunque no es obligatorio, un documento XML suele empezar con un prólogo que describe la versión de
XML, el tipo de documento, etc.
Declaración XML. Es la primera línea del prólogo y define la versión de XML usada, la codificación del
documento (US-ASCII, UTF-8, etc.). Para lenguajes europeos suele usarse UTF-7 o ISO-8859-1.
Se puede incluir una declaración de documento autónomo (standalone) que controla qué componentes del
DTD son necesarios para completar el proceso del documento. Por ejemplo:
<?xml version="1.0" encoding="UTF-7" standalone="yes"?>
Declaración de tipo de documento. La segunda línea del prólogo es define qué tipo de documento se debe
usar para ser interpretado correctamente. Es decir, el DTD (DTD – Document Type Definition) que valida y
define los datos que contiene el documento XML. En ella se define el tipo de documento, y dónde encontrar
la información sobre su DTD con un identificador público (PUBLIC) que lo referencia o mediante una URI
precedida de la palabra SYSTEM. Ejemplos:
<!DOCTYPE MENSAJE SYSTEM "mensaje.dtd">
<!DOCTYPE HTML PUBLIC "-/ /W3C/ /DTD HTML 3.2 Final/ /EN">
<!DOCTYPE LABEL SYSTEM "http://www.empresa.com/dtds/label.dtd">
2.2. Elementos
Un elemento XML es un componente definido entre marcas. Pueden tener contenido (más elementos,
caracteres, o ambos) o ser vacíos. Siempre empieza con una <etiqueta> que puede contener atributos o no
y termina con una </etiqueta> del mismo nombre. En XML siempre se debe cerrar un elemento.
El símbolo "<" siempre se interpreta como inicio de una etiqueta XML. Si no es el caso, el documento no
estará bien-formado. Un elemento vacío no tiene contenido y usa la forma <etiqueta/> que puede contener
atributos o no. Ejemplos:
Elemento sin contenido: <aviso tipo="emergencia" gravedad="mortal">Que no cunda el pánico</aviso>
Elemento con contenido: <identificador DNI="23123244"/>
En XML para usar caracteres especiales que no se interpreten como signos reservados, se definen cinco
entidades: &amp; para el carácter &; &lt ; para <; &gt ; para >; &apos; para ' y &quot ; para".
2.3. Atributos
Un atributo es una propiedad de un elemento. En un DTD se especifican los atributos que pueden tener
cada elemento, sus valores y valores posibles. Los valores de atributos siempre deben estar encerrados en
comillas simples (') o dobles ("), siguiendo la sintaxis: <elemento=”atributo”></elemento>. Cuando se usa un
tipo para delimitar el valor del atributo, el otro tipo se puede usar dentro. A veces, un elemento con
contenido, puede modelarse como un elemento vacío con atributos. Ejemplos:
<gato><nombre>Micifú</nombre><raza>Persa</raza></gato>
<gato raza="Persa">Micifú</gato> <gato raza="Persa" nombre="Micifú"/>
2.4. Secciones CDATA
La sección CDATA (Character Data) en XML permite especificar datos usando cualquier carácter sin que se
interprete como marca, lo que facilita la legibilidad del documento. Ejemplo:
<parrafo>Ejemplo de HTML.</parrafo> <ejemplo>
<ejemplo> <![CDATA[
&lt;HTML> <HTML>
&lt;HEAD> <HEAD><TITLE>Rock & Roll</TITLE></HEAD>
&lt; TITLE>Rock &amp; Roll&lt;/TITLE> ]]>
&lt;/HEAD> </ejemplo>
</ejemplo>
El contenido de una sección CDATA no será interpretada como algo que no es. Una excepción es la cadena
" ] ]> " con la que termina el bloque CDATA. Esta cadena no puede usarse en una sección CDATA.
2.5. Comentarios
A veces es conveniente insertar comentarios en un documento XML, ignorados al procesar la información.
Los comentarios tienen el mismo formato que en HTML: "<!- -[comentario]- - > ". Se pueden introducir
comentarios en cualquier lugar de la instancia o del prólogo, pero no dentro de las declaraciones, etiquetas,
u otros comentarios.
3. DOCUMENT TYPE DEFINITION (DTD)
Un DTD o definición de tipo de documento es la definición de un formato de datos para una aplicación
específica con objeto de ser reutilizado.
Define tipos de elementos, atributos y <!DOCTYPE etiqueta[
entidades permitidas y sus limitaciones. El
<!ELEMENT etiqueta (nombre, calle, ciudad, pais, codigo)>
ejemplo es un DTD de definición de una
tarjeta de visita. Un documento XML que se <!ELEMENT nombre (#PCDATA)>
ajusta a un DTD, se denomina "válido".
<!ELEMENT calle (#PCDATA)>
Puede estar bien formado (respetar la
sintaxis XML) y no ser válido, no ajustarse a <!ELEMENT ciudad (#PCDATA)>
su DTD (en caso de tenerlo asociado).
<!ELEMENT pais (#PCDATA)>
Un DTD puede residir en un fichero externo
o definirse en el documento XML, como <!ELEMENT codigo (#PCDATA)>
parte de su declaración de tipo de ]>
documento. El cuadro muestra un ejemplo,
en que la declaración del DTD empieza con <etiqueta>
“<!DOCTYPE” y termina con "] > ". <nombre> Rodrigo Rodriguez</nombre>
Las declaraciones del DTD que empiezan <calle> C/ Rodri, 20 </calle>
con "<!ELEMENT" son declaraciones de tipo
elemento. Permiten declarar atributos, <ciudad> Sin City </ciudad>
entidades y anotaciones. <pais> Metal </pais>
En el ejemplo las declaraciones en "etiqueta" <codigo> 666 </codigo>
residen en el documento, pero el DTD podría
definirse parcial o totalmente en otro lugar, </etiqueta>
por ejemplo:
<?xml version="1.0"?> <!DOCTYPE coche SYSTEM "http://www.sitio.com/dtd/coche.dtd">
<coche> …</coche>
3.1. Declaración de tipo elemento
Los elementos son la base de las marcas XML. Se ajustan a un DTD y su sintaxis es:
<!ELEMENT [identificador del elemento] ([especificación de contenido])
En el ejemplo, <!ELEMENT etiqueta (nombre, calle, ciudad, pais, codigo)>, el identificador del tipo elemento
es “etiqueta”. La especificación de contenido indica que puede contener elementos <nombre>, <calle>, etc.,
que a su vez, se definen también en el DTD y podrán contener más elementos.
La especificación de contenido puede ser de 4 tipos EMPTY, ANY, Mixed y Element.
EMPTY. Puede no tener contenido. Suele usarse para atributos (<!ELEMENT salto-de-pagina EMPTY>)
ANY. Puede tener cualquier contenido. No se suele usar (<!ELEMENT cualquier ANY>
Mixed. Puede tener caracteres de tipo datos o mezcla de caracteres y sub-elementos de contenido mixto.
En el cuadro, el primer elemento (enfasis) puede contener <!ELEMENT enfasis (#PCDATA)>
datos carácter (# PCDATA) y el segundo (parrafo), de tipo
<!ELEMENT parrafo (#PCDATA | enfasis)*>
carácter (# PCDATA) o sub-elementos de tipo enfasis.
Element. Sólo puede contener sub-elementos especificados en la especificación de contenido. Para
declarar que un tipo de elemento tenga cierto contenido se especifica un modelo en lugar de una
especificación de contenido mixto o una clave.
3.2. Modelos de contenido. Atributos y tipos
Un modelo de contenido es un patrón que establece los sub-elementos aceptados y su orden.
El cuadro muestra 4 posibles declaraciones. En el primero, <!ELEMENT aviso (parrafo)>
aviso sólo puede tener un tipo de sub-elemento, párrafo.
<!ELEMENT aviso (titulo, parrafo)>
En el segundo, aviso contendrá un título seguido de un
<!ELEMENT aviso (parrafo | grafico)>
párrafo, en ese orden.
<!ELEMENT aviso (titulo, (parrafo | grafico))>
El tercer ejemplo introduce el símbolo “|”.
La barra vertical indica opción. Es decir, aviso podrá contener un parrafo o un grafico. El número de
opciones no se limita a dos y se pueden agrupar usando paréntesis. En el tercer caso, aviso debe contener
un titulo seguido de un parrafo o un grafico.
Además, cada posible contenido puede especificar un ? Opcional (0 o 1 vez)
indicador de frecuencia, que siguen directamente a un
* Opcional y repetible (0 o más veces)
identificador general, una secuencia o una opción, y no
pueden ir precedidos por espacios en blanco. Los + Necesario y repetible (1 o más veces)
indicadores de frecuencia se muestran en el cuadro.
Ejemplo: <!ELEMENT aviso (titulo?, (parrafo+, grafico)*)>. En este caso, aviso puede tener titulo o no. Si lo
tiene, será único. Podrá tener o no un conjunto (párrafo, gráfico), en que el párrafo será obligatorio, que
tenga al menos uno y gráficos sólo habrá uno, ya que no se especifica frecuencia.
Los atributos permiten añadir información adicional a elementos. La diferencia entre es que los atributos no
pueden contener sub-atributos. Se usan para añadir información corta, sencilla y desestructurada. Otra
diferencia es que cada atributo sólo se puede especificar una vez, y en cualquier orden.
En el ejemplo siguiente, para declarar la lista de atributos de los elementos mensaje y texto, se incluyen los
atributos prioridad e idioma, respectivamente.
Las declaración de atributos empiezan con "<!ATTLIST". A continuación se indica el nombre del elemento al
que se aplica el atributo y el nombre del atributo, tipo y valor por defecto.
<!ELEMENT mensaje (de, a, texto)> <mensaje prioridad="urgente">
<!ATTLIST mensaje prioridad (normal | urgente) normal> <de> Paco </de>
<!ELEMENT texto(#PCDATA)> <a> Pepe </a>
<!ATTLIST texto idioma CDATA #REQUIRED> <texto idioma="español">
Así, el atributo "prioridad" aplica al elemento mensaje y Hola tú…
puede tener el valor "normal" o "urgente", siendo "normal" el
</texto>
valor por defecto si no se especifica. El atributo "idioma"
aplica al elemento texto, y contiene datos carácter (CDATA). </mensaje>

El modificador #REQUIRED significa que el atributo no tiene valor por defecto; es obligatorio especificarlo.
Si se desea omitir un atributo, sin que se adopte valor por defecto se usa la condición "#IMPLIED". Por
ejemplo, en un DTD que defina la etiqueta < IMG> de HTML:
<!ATTLIST IMG URL CDATA #REQUIRED ALT CDATA #IMPLIED>
El atributo "URL" es obligatorio y "ALT" de tipo CDATA es opcional. Si se omite, no toma valor por defecto.
Los tipos de atributo son:
CDATA (Character DATA). Son los más sencillos. Pueden contener casi cualquier cosa (caracteres).
NMTOKEN (Name TOKEN). Sólo aceptan los caracteres válidos para nombrar cosas (letras, números,
puntos, guiones, subrayados y los dos puntos) .
Atributos enumerados. Sólo pueden contener un valor de entre unas opciones. El caso de la prioridad en el
elemento mensaje del ejemplo anterior.
NOTATION. Permite declarar que su valor se ajusta a una notación definida. Para declarar notaciones, se
usa "<!NOTATION" y la definición externa de la notación. La definición externa puede ser pública o un
identificador del sistema, una especificación formal o un asistente de la aplicación que contenga objetos
representados en la notación. Ejemplo: <!NOTATION HTML SYSTEM "http://www.w3.org/Markup">,
<!NOTATION HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional// EN">.
ID e IDREF. Permite que un atributo tenga un nombre único que podrá ser referenciado por un atributo de
otro elemento de tipo IDREF.
El ejemplo muestra un sistema de hipervínculos en <!ELEMENT enlace EMPTY>
un documento en que una etiqueta <enlace
<!ATTLIST enlace destino IDREF #REQUIRED>
destino="seccion-3"> haría referencia a un
<capitulo referencia="seccion-3"> de forma que el <!ELEMENT capitulo (parrafo)*>
procesador XML lo podría convertir en un
<!ATTLIST capitulo referencia ID #IMPLIED>
hipervínculo u otra cosa.
3.3. Declaración de entidades
En XML se usan las entidades para referenciar objetos (ficheros, páginas web, etc.) que no se analizan
sintácticamente. Se declaran en el DTD con "<!ENTITY>". Una entidad puede ser sólo una abreviatura. Al
usar una referencia a esta entidad, el analizador sintáctico reemplaza la referencia con su contenido. O
puede ser una referencia a un objeto externo o local. Las entidades pueden ser:
Entidades generales internas. Son abreviaturas definidas en el DTD. Son siempre analizadas, es decir, una
vez reemplazada la referencia a la entidad por su contenido, pasa a ser parte del documento XML.
Entidades generales externas. Obtienen su contenido de otra fuente del sistema; un archivo, una página
web, un objeto de una BBDD, etc. Se referencia con la palabra SYSTEM seguida de un URI (Universal
Resource Identifier). Si el contenido de la entidad es un archivo, imagen u otro, el procesador XML no lo
interpreta como texto XML. Estas entidades siempre son generales, externas y no analizadas.
Entidades parámetro internas y externas. Son las que sólo pueden usarse en un DTD, y no en el documento
XML. Se pueden usar para agrupar elementos del DTD que se repitan. Se diferencian de las generales, en
que para hacer referencia a ellas, se usa el símbolo "%" en lugar de "&" tanto para declararlas como para
usarlas. El cuadro resume los tipos de entidades.
Entidades generales internas Entidades generales externas Entidades parámetro
<!DOCTYPE texto[ Analizada <!DOCTYPE texto[
<!ENTITY alf "Alien Life Form"> <!ENTITY % elemento-alf
<!ENTITY intro SYSTEM "<!ELEMENT ALF
]> "http://www.miservidor.com/intro.xml"> (#PCDATA)>">
<texto><titulo>Un día en la vida No analizada …
de un &alf;</titulo></texto>
% elemento-alf;
<!ENTITY logo SYSTEM
"http://www.miservidor.com/logo.gif"> ]>
3.4. Ejemplo de DTD
Se propone el fichero LISTIN.DTD como ejemplo de DTD que define un patrón para una BBDD de personas
y sus e-mail. Con este DTD podría escribirse un listín en XML como se muestra a la derecha.
<?xml encoding="UTF-8"?> <?xml version="1.0"?>
<!ELEMENT listin (persona)+> <!DOCTYPE listin SYSTEM "LISTIN.DTD">
<!ELEMENT persona (nombre, email*, relacion?)> <listin>
<!ATTLIST persona id ID #REQUIRED> <persona sexo="hombre" id="Paco">
<!ATTLIST persona sexo (hombre | mujer) <nombre>Paco Jones</nombre>
#IMPLIED>
<email>pacojones@yaves.com</email>
<!ELEMENT nombre (#PCDATA)> <relacion amigo-de="Paca">
<!ELEMENT email (#PCDATA)> </persona>
<!ELEMENT relacion EMPTY> <persona sexo="mujer" id="Paca">
<!ATTLIST relacion amigo-de IDREF #IMPLIED <nombre>Paca Staña</nombre>
enemigo-de IDREF #IMPLIED> <email>pcastaña@yaveo.com</email>
</persona>
</listin>
4. SCHEMAS XML
Un Schema XML define qué elementos puede contener un documento XML, cómo se organizan y que
atributos y tipo pueden tener sus elementos. Es similar a un DTD con la ventaja de usar la sintaxis XML,
permitir especificar los tipos de datos y ser extensibles.
Un schema permite definir el tipo del contenido de un elemento o de un atributo y especificar si debe ser un
número entero, una cadena de texto, fecha, etc. Los DTDs no lo permiten. Sea el siguiente ejemplo, donde
un documento XML se apoya en su esquema correspondiente.
<documento xmlns="x-schema: <Schema xmlns="urn:schemas-microsoft-com:xml-data"
personaSchema.xml">
xmlns:dt="urn:schemas-microsoft-com:datatypes">
<persona id="uno">
<AttributeType name='id' dt:type='string' required='yes'/>
<nombre>Uno Unez</nombre>
<ElementType name='nombre' content='textOnly'/>
</persona>
<ElementType name='persona' content='mixed'>
</documento>
<attribute type='id'/>
En el documento XML se hace
<element type='nombre'/>
referencia al espacio de nombres
(namespace) llamado "x-schema: </ElementType>
personaSchema.xml". Es decir,
<ElementType name='documento' content='eltOnly'>
se indica al parser XML
(analizador sintáctico) que valide <element type='persona'/>
el documento con el schema
"personaSchema.xml". El primer </ElementType>
elemento del SXML define dos </Schema>
espacios de nombre.
El primero "xml-data" indica que es un schema, no un documento XML. El segundo "datatypes" permite
definir el tipo de elementos y atributos usando el prefijo "dt”.
ElementType. Define tipo y contenido de un elemento, incluyendo los sub-elementos que pueda contener.
AttributeType. Asigna un tipo y condiciones a un atributo.
Attribute. Declara que un atributo previamente definido con attributeType puede aparecer como atributo de
un elemento dado.
element. Declara que un elemento previamente definido por ElementType puede aparecer como contenido
de otro elemento.
En un esquema, se obliga a empezarlo definiendo los elementos anidados más profundos de la estructura.
De otra forma: las declaraciones de tipo ElementType y AttributeType deben preceder a las declaraciones
de contenido element y attribute correspondientes.
5. EXTENDED STYLE LANGUAGE (XSL)
XSL es un lenguaje que permite definir una presentación o formato de documento XML. A un documento
XML se pueden aplicar varias hojas de estilo XSL que definan distintos formatos (HTML, PDF, etc.) La
aplicación de una hoja de estilo XSL a un documento XML puede hacerse en origen (p.ej. un servlet que
convierta de XML a HTML) o en destino, en el navegador.
Básicamente, XSL define una serie de reglas que determinan cómo se transforma un documento XML de
entrada en otro de salida. Cada regla se compone de un patrón (pattern) y una acción o plantilla (template).
Cada regla afecta a uno o varios elementos del documento XML. El efecto de las reglas es recursivo, para
que un elemento situado dentro de otro elemento pueda ser también transformado. La hoja de estilo tiene
una regla raíz que, además de ser procesada, llama a las reglas adecuadas para los elementos hijos.
Sea el siguiente ejemplo, en que a la izquierda se tiene un documento XML y debajo el documento HTML
que se desearía obtener. La hoja de estilo XSL necesaria sería similar a la mostrada a la derecha.
<libro> <?xml version="1.0"?>
<titulo>Título del libro</titulo> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-
xsl">
<capitulos>
<xsl:template match="libro">
<capitulo>
<HTML>
<titulo>Capítulo 1</titulo>
<HEAD>
<parrafo>....</parrafo>
<TITLE><xsl:process select="titulo"/></TITLE>
<parrafo>....</parrafo>
</HEAD>
</capitulo>
<BODY>
<capitulo>
<H1><xsl:process select="titulo"/></H1>
<titulo>Capítulo 2</titulo>
<xsl:process select="capitulos"/>
...
</BODY>
</capitulo>
</HTML>
</capitulos>
</xsl:template>
</libro>
<xsl:template match="capitulos">
<HTML>
<xsl:process select="capitulo">
<HEAD>
</xsl:template>
<TITLE>Título del libro</TITLE>
<xsl:template match="capitulo">
</HEAD>
<HR/>
<BODY>
<H2><xsl:process select="titulo"/></H2>
<H1> Título del libro </H1>
<xsl:process select="parrafo"/>
<HR>
</xsl:template>
<H2>Capítulo 1</H2>
<xsl:template match="parrafo">
<P>...</P>
<P><xsl:process-children/></P>
<P>...</P>
</xsl:template>
<HR>
</xsl:stylesheet>
<H2>Capítulo 2</H2>
<P>...</P>
</BODY>
</HTML>
6. XML DOM Y VISUAL BASIC
La gestión del DOM (Document Object Model) de MS XML Parser con Visual Basic es similar a otros
parsers, aunque puede variar algo la sintaxis. El parser XML es un programa que valida un documento XML
contra un DTD o esquema y además, hace que los datos sean accesibles. El parser de MS (msxml.dll) hace
que los datos estén disponibles a través de objetos que el programador puede usar. La especificación "DOM
Level 1" en la que se basa la implementación está disponible en http://www.w3.org/TR/REC-DOM-Level-1.
El parser puede usarse en programas VBScript en un servidor web (ASP) o en un programa VB. Por
ejemplo, para crear una instancia del parser podría hacerse: Set objParser = Server.CreateObject
("Microsoft.XMLDOM"). Para usarlo en VB se añade el objeto COM Microsoft XML en las referencias del
proyecto y luego se crea una instancia del objeto:
Dim objParser As MSXML.DOMDocument
Set objParser = New MSXML.DOMDocument
Para cargar un documento XML, se usa el If objParser.Load("c:\temp\xml\documento.xml") Then
método .Load del objeto, especificando la ruta del
' Funciona
documento, o con una URL que indique dónde se
encuentra. Else
El método .Load puede fallar porque el nombre o ' Error
ubicación sea errónea, o bien porque el
End If
documento no es válido. La validación del
documento se puede omitir haciendo ' Se destruye el objeto parser
“objParser.validateOnParse = False” antes de
cargar el documento. Set objParser = nothing

Una vez cargado, analizado y validado el documento puede empezar a usarse la información que contiene.
Para ellos se usa la interface I XMLDOMNode del parser, que permite acceder a los diferentes nodos
(elementos, atributos…) del documento.
El interface provee métodos y Constantes de tipos de nodo
propiedades para acceder con
NODE_ATTRI BUTE NODE_CDATA_SECTION
comodidad a los contenidos del
documento, para lectura y escritura. NODE_COMMENT NODE_DOCUMENT
Los más representativos son:
NODE_DOCUMENT_FRAGMENT NODE_DOCUMENT_TYPE
nodeType. Da información sobre el
tipo de un nodo. Soporta 13 tipos NODE_ELEMENT NODE_ENTITY
diferentes de nodo. (En negrita los NODE_ENTITY_REFERENCE NODE_INVALID
más usados).
NODE_NOTATION NODE_TEXT
nodeName. Si el tipo de nodo es
correcto, devuelve su nombre. NODE_PROCESSING_INSTRUCTION
P. ej. Un nodo tipo NODE_ELEMENT tendría en nodeName el nombre de un elemento del documento XML.
nodeValue. Devuelve el valor que contiene ese nodo, si es aplicable.
childNodes. Contiene una colección de nodos "hijos" del nodo en consideración. Esta colección puede ser
iterada con una estructura for each de VB.
hasChildNodes. Propiedad booleana que indica si un nodo tiene "hijos".
firstChild / lastChild. Contienen referencias al primer y último "hijos" de un nodo.
parentNode. Devuelve una referencia al "padre" del nodo.
nextSibling / previousSibling. Devuelve una referencia Public Sub CargaDoc()
al siguiente / anterior "hermano" del nodo; al siguiente
Dim oParser As MSXML.DOMDocument
/ anterior nodo con el mismo "padre".
Set oParser = New MSXML.DOMDocument
Attributes. Devuelve una colección de los nodos tipo
NODE_ATTRIBUTE del nodo. If oParser.Load("test.xml") Then
Un ejemplo de programa que seleccionase todos los MuestraNodos oParser.childNodes
nodos tipo texto (NODE_TEXT) de un documento
Else
XML de una forma recursiva sería el mostrado a la
derecha. Si el fichero test .xml que usa este programa MsgBox "Error"
fuera el siguiente:
End If
<?xml version="1.0"?>
End Sub
<documento>
Public Sub MuestraNodos(ByRef Nodos As
<titulo>Un documento cualquiera</titulo> MSXML.IXMLDOMNodeList)
<fecha> Dim oNodo As MSXML.IXMLDOMNode
<dia> 1 </dia> For Each oNodo In Nodos
<mes> 12 </mes> If oNodo.nodeType = NODE_TEXT Then
<año> 1999 </año> Debug.Print oNodo.parentNode.nodeName
& "=" & oNodo.nodeValue
</fecha>
End If
</documento>
El resultado sería If oNodo.hasChildNodes Then
titulo=Un documento cualquiera MuestraNodos oNodo.childNodes
dia=1 End If
mes=12 Next oNodo
año=1999 End Sub
7. XML DOM Y JAVA
El empleo de XML, al ser estándar internacional y público no obliga a una plataforma concreta. Así, JAVA es
una opción de desarrollo de aplicaciones con XML. P. ej. a partir de fuentes de datos en XML, puede
escribirse un servlet que analice sintácticamente el XML y genere un árbol DOM. Generado el árbol DOM,
podrá irse extrayendo la información que contiene y generar un documento HTML de acuerdo a formato, de
modo que pueda ser visualizado por un navegador web.
Sea un servlet que carga un fichero XML en un objeto string de Java, que va a analizarse. Lo primero a
hacer es crear un parser XML, por ejemplo con el objeto com.ibm.xml.Parser y en la forma:
Parser parser = new Parser("xslparse.err");
El fichero "xslparse.err" será el registro de cualquier error que ocurra mientras se procesa el documento
XML, que debe ser convertido a un InputStream.
ByteArrayInputStream bais = new ByteArrayInputStream(xmlString.getBytes());
Se indica al parser que ignore las declaraciones de Se analiza el documento y se cierra el InputStream.
tipo de documento, comentarios, etc. con:
parser.setWarningNoXMLDecl(false);
doc = parser.readStream;
parser.setWarningNoDoctypeDecl(false);
bais.close();
parser.setKeepComment(false);
parser.setProcessNamespace(false);
Así, se contiene el árbol DOM en el objeto "doc". Para recorrer el árbol DOM y extraer los datos que
contiene se dispone de métodos definidos en org.w3c.dom.Node. Algunos de ellos son:
getDocumentElement() Devuelve el elemento raíz
getFirstChild() Devuelve el nodo que es el primer "hijo" de este nodo
getNextSibling() Devuelve el nodo que es el siguiente "hermano" de este nodo
getLastChild() Devuelve el nodo que es el último "hijo" de este nodo
getPreviousSibling() Devuelve el nodo que es el último "hermano" de este nodo
getAttribute(java.lang.String attrName) Devuelve un objeto string que representa el valor de un atributo
Existen más métodos de gestión del DOM. La especificación "DOM Level 1" puede consultarse en
http://www.w3.org/TR/REC-DOM-Level-1.
8. LENGUAJE DE ENLACE XML (XLINK)
XLink es una aplicación XML que intenta superar las limitaciones de los enlaces de hipertexto en HTML.
Algunas de estas limitaciones son, por ejemplo, disponer sólo 2 extremos y ser unidireccionales. Un enlace
en una página web a otra, supone un "vínculo" entre ésta y la primera.
Este vínculo es unidireccional, porque un visitante que visite la página destino no sabe que la primera la
referencia. El objetivo de XLink es crear enlaces entre recursos, de una forma que HTML no es capaz. P. ej.
un estudiante podría enlazar a los apuntes de un profesor, disponibles en red, con un enlace desde esos
apuntes (de los que no tiene permisos) y su propia página.
También podrían vincularse 2 páginas cualesquiera, enlazando el texto de una noticia en un diario on-line,
con el texto de la misma noticia en otro diario. Los enlaces extendidos permiten más. Si una empresa quiere
comprar ciertos productos de un suministrador, los trabajadores de la empresa podrán visitar la página web
del proveedor y hacer enlaces externos a comentarios sobre las especificaciones de tal producto. Cuando
otro empleado visite la página, el servidor de enlaces de la empresa le mostrará la página junto con los
enlaces externos creados, y mostrará los comentarios como si fueran parte del documento original.

Potrebbero piacerti anche