Sei sulla pagina 1di 7

CAPÍTULO 12

12. XML (eXtensible Markup Language)


12. 1. INTRODUCCIÓN
XML es una Recomendación del W3C (Consorcio World Wide Web) puede consult arse en
ht t p: / / www. w3. or g/ TR/ REC-xml . Como est a especif icación es de dif ícil l ect ura hay disponible una
excelent e versión con anot aciones de la especif icación en ht t p: / / www. xml . com .
XML (Lenguaj e de Marcado Ext ensibl e) es un met al enguaj e ut i lizado para def inir ot ros l enguaj es de
marcado adecuados a usos det erminados. XML no especif ica ni las et iquet as ni l a gramát ica del lenguaj e.
HTML, en cambio, def ine las et iquet as permit idas y la gramát ica. Es decir, se puede ut ili zar la et i quet a
<TABLE> porque est á def inida pero no, por ej emplo, la et iquet a <SILLA>. La gramát ica def ine la correct a
ut ilización de las et iquet as. Por ej emplo en HTML pueden i ncl uirse en la et iquet a <TABLE> un conj unt o
det erminado de at ri but os ( BORDER, CELLSPACING, CELLPADDING,...). Con XML se pueden “ invent ar” las
et iquet as y la gramát ica.
Los document os XML se organizan como una j erarquía de element os. A cont inuación se muest ra la
est ruct ura de un f ichero XML:
<?xml version=”1.0”?>
<libro>
<autor>Antonio Muñoz Molina</autor>
<titulo>El Jinete Polaco</titulo>
<precio moneda=“EURO”>20</precio>
</libro>

XML permit e def inir la inf ormación o el cont enido de los dat os de la f orma que se desee, mient ras sea
conf orme a la est ruct ura general que XML requi ere:

• <gato>
<nombre>Micifú</nombre>
<raza>Persa</raza>
</gato>
• <gato raza=“Persa”>Micifú</gato>
• <gato raza=“Persa” nombre=“Micifú”/>
Sin embargo, XML no def ine la present ación de los dat os.
12. 1. 1. CONCEPT OS BÁSICOS DE XML

En primer lugar, cualquier document o XML debe est ar bien formado para poderse anali zar
correct ament e. Un document o bi en f ormado:
128 Informática III

• Tiene cerrada cada et iquet a que se haya abiert o.


• No t iene et iquet as anidadas f uera de l ugar.
• Es sint áct icament e correct o de acuerdo a la especif icación.
Las reglas sint áct icas de XML son ut i lizadas después por las aplicaciones y los analizadores compat ibles
con XML para que el document o t enga sent ido y pueda llevarse a cabo alguna acción con los dat os, como
por ej emplo encont rar el precio de un li bro o crear un f ichero PDF con los dat os.
En segundo l ugar, los document os XML pueden ser (aunque no es obligat orio) válidos. Un document o
válido es aquel que sigue l as reglas de ciert o DTD (def inición de t ipo de document o).
12. 1. 2. DT D
Un DTD def i ne est ablece un conj unt o de rest ricciones (et iquet as permit idas, reglas gramat icales) para
un document o XML. Est as rest ricciones:
• Pueden residir en un f ichero ext erno y ser compart idas por varios document os XML.
• Bien pueden est ar cont eni das en el propio document o XML.
La suma de est os conj unt os de rest ricciones es la def i nición de t ipo de document o (DTD).
Por ej emplo se podría def inir que el at ribut o moneda t uviera como únicos val ores permit idos: euro y
dólar.
El DTD es el que da port abilidad a los dat os XML, es necesario para t ransf eri r dat os ent re dif erent es
aplicaciones de manera que ést as puedan ent enderse.
Los DTD se explican con det alle en un apart ado post erior.

12. 2. DOCUMENTOS XML


Un document o XML puede dividirse en dos part es básicas: la cabecera (que da i nf ormación sobre cómo
manej ar el document o a los analizadores XML y a las aplicaciones XML) y el cont enido (que son los dat os).
12. 2. 1. CABECERA
12. 2. 1. 1. Inst rucciones de proceso (PI)
Tienen la f orma <?instrucción?> y represent an comandos para el analizador XML o para un programa
que ut ili zará el document o XML. Por ej emplo, la siguient e inst rucción i ndica al anali zador qué versión de
XML se est á ut ilizando.
<?xml version=”1.0”?>
12. 2. 1. 2. Declaración de t ipo de document o
Se ut i liza para especif icar un DTD en el document o XML. y t i ene la sint axis <!DOCTYPE parámetros>.
• El primer parámet ro es el element o raíz del document o, que ident if ica al document o xml act ual (se
explica en un apart ado post erior).

• El segundo argument o puede ser SYSTEM o PUBLIC.

• Si se especif ica SYSTEM el siguient e parámet ro debe indicar al analizador desde dónde se puede
cargar el f ichero DTD (mediant e un URI-o una URL).
<!DOCTYPE lista SYSTEM “Lista.dtd”>
<!DOCTYPE book SYSTEM “http://www.oreilly.com/catalog/JavaXML.dtd”>

• Si se especif ica PUBLIC quiere decir que el DTD se ha hecho público y est á disponible para
ut ilizarse por cual quiera. En est e caso, ant es de especif icar un URI se debe i ndicar un nombre
público y el analizador i nt ent ará primero ut i lizar el nombre público para locali zar el DTD y
solament e si f alla ut i lizará el URI.
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”
“http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
Capítulo 12. XML (eXtensible Markup Language) 129

12. 2. 2. CONT ENIDO


12. 2. 2. 1. El ement o raíz
Sólo puede haber un el ement o raíz, que es el de más alt o nivel en un document o XML. Debe ser la
primera et iquet a que se abra y la últ ima que se cierre y ent re est as et iquet as se incluye el rest o de
element os del document o, f ormando una est ruct ura j erárquica de element os, anidados unos en ot ros.
12. 2. 2. 2. El ement os de dat os
Son et iquet as con nombres arbit rarios. Reglas para nombrar el ement os:
• Su nombre debe empezar con una let ra o un subrayado.
• A cont i nuación puede cont ener cual quier número de l et ras, números, subrayados, guiones o
punt os.
• No puede cont ener espacios.
• Es sensible a mayúsculas y minúsculas.
Cada element o que se abra, se debe cerrar. Ent re las et iquet as de apert ura y cierre puede haber dat os
de t ipo t ext o o cual quier número de el ement os anidados.
<gato>
<nombre>Micifú</nombre>
<raza>Persa</raza>
</gato>

Los element os deben est ar correct ament e ani dados: el primer element o que se abra debe ser siempre
el últ imo que se cierre.
También puede haber element os vacíos, es decir, no cont ienen dat os de t ipo t ext o ni ot ros element os
anidados. En ese caso se consolidan las et iquet as de apert ura y ci erre en una única et iquet a.
<img src=”xml.gif”/>
12. 2. 2. 3. At ribut os de element o
Los el ement os pueden cont ener at ri but os con sus respect ivos valores i ncluidos dent ro de la et i quet a de
apert ura.
<precio moneda=“EURO”>20</precio>
En est e caso moneda es el nombre del at ribut o. Las reglas que siguen los nombres de at ri but os son las
mismas que las de los nombres de element os. Los val ores de los at ribut os deben encerrarse ent re comil las
dobl es (el est ándar) o simples.
También pueden incluirse at ribut os en los element os vacíos:
<gato raza=“Persa” nombre=“Micifú”/>
12. 2. 2. 4. Ref erencias a ent idad
Si se desea int roducir como cont enido en un document o XML algún caráct er reservado para el marcado,
deben ut ili zarse ent idades. Las ent i dades se emplean para represent ar est os caract eres especiales y, más
en general , para represent ar a ot ros dat os de sust it ución. Las ref erencias a ent idad en un document o XML
se hacen precediendo el nombre de la ent idad por “ &” y t erminando con “ ; ” . Cuando un analizador XML
se encuent ra una ref erenci a a ent idad, el valor de sust it ución especif icado se insert a y no se procesa.
En XML 1. 0 se def inen cinco ent idades para represent ar caract eres especiales y que no se i nt erpret an
como marcado por el analizador XML
Referencia a Entidad Carácter
&amp; &
&lt; <
&gt; >
&apos; ‘
&quot; “

El usuario puede def inir ent idades propias en un DTD, como se verá más adel ant e, de manera que la
ref erencia a cada ent idad sea sust it uida por el cont enido específ ico indicado por el usuario.
130 Informática III

12. 2. 2. 5. Dat os no analizados


Cuando hay una cant idad signif icat iva de dat os que se t ienen que pasar a la aplicación llamant e sin
hacer ningún análisis XML se ut ilizan secciones CDATA. Una sección CDATA comienza con <![CDATA[ y
termina con ]]> y toda la información contenida entre el comienzo y el final de la sección se pasa
directamente sin interpretar a la aplicación. Por lo tanto, los elementos, las referencias a entidad, las
instrucciones de proceso y los comentarios no son reconocidos.
<![CDATA[
*p = &q;
b = (i <= 3);
]]>

12. 3. RESTRINGIR XML CON DTD


Un DTD document a las combinaciones válidas de element os y at ribut os en los document os XML que
ref erencian a dicho DTD. Además proporciona port abilidad, permit i endo que dif erent es aplicaciones
ent iendan los dat os XML y se comuniquen ent re sí.
En un DTD deben def inirse cada uno de los element os que se permit en en un document o XML, así como
los at ribut os, posibl ement e los valores acept abl es para los at ribut os de cada element o, el anidamient o y
las ent idades ext ernas, ent re ot ras cosas.
La ref erencia a un DTD en un document o XML se hace del siguient e modo:
<?xml versión=”1.0”?>
<!DOCTYPE libro SYSTEM “Nombre.dtd”>
<libro>
<autor>Antonio Muñoz Molina</autor>
<titulo>El Jinete Polaco</titulo>
<precio moneda=“EURO”>20</precio>
</libro>

También pueden incl uirse las rest ricciones, que a cont inuación se explican, en el propio document o
XML:
<?xml version="1.0"?>
<!DOCTYPE ToDoList [
<!ELEMENT ToDoList (task)*>
<!ELEMENT task (#PCDATA)>
<!ATTLIST task status (important|normal) #REQUIRED>
]>
<ToDoList>
<task status="important">This is an important
task that must be completed</task>
<task status="normal">This task can wait</task>
</ToDoList>

12. 3. 1. ESPECIFICAR ELEMENT OS


Cada el ement o se especif ica mediant e el nombre del el ement o y una def inición de su cont enido, como
se irá explicando en los subapart ados post eriores:
<!ELEMENT [Element Name] [Element Definition/Type]>
12. 3. 1. 1. Palabra reservada ANY
Si se ut iliza la palabra reservada ANY indica que el element o puede cont ener dat os de t ipo t ext o o
element os anidados. Por ej emplo, si se def inieran los element os Book, Chapter, Topic y Copyright como
t ipo ANY:
<!ELEMENT Book ANY>
<!ELEMENT Chapter ANY>
<!ELEMENT Topic ANY>
<!ELEMENT Copyright ANY>

sería válido el siguient e document o sin sent ido:


<Topic>
Capítulo 12. XML (eXtensible Markup Language) 131

<Book>My book</Book>
<Copyright>
<Chapter>Chapter 1</Chapter>
</Copyright>
</Topic>

12. 3. 1. 2. El ement os anidados


Para def i nir la j erarquía de el ement os se ut i liza como t ipo de el ement o una l ist a de element os ent ra
parént esis y separados por comas. El orden de los el ement os en la list a debe cumplirse en el document o
XML para que sea válido.
<!ELEMENT Book (Contents, Copyright)>
<!ELEMENT Contents (Chapter)>
<!ELEMENT Chapter (Topic)>
<!ELEMENT Topic ANY>
<!ELEMENT Copyright ANY>

El siguient e document o sería válido:


<Book>
<Contents>
<Chapter>
<Topic> ¿Qué es XML?</Topic>
</Chapter>
</Contents>
<Copyright>&OreillyCopyright;</Copyright>
</Book>
12. 3. 1. 3. Palabra reservada #PCDATA
Para los dat os de t ipo t ext o se ut iliza como t ipo de element o la palabra reservada #PCDATA (Parsed
Charact er Dat a) escrit a ent re parént esis. En est e caso se limit a al element o a ut i lizar únicament e dat os de
t ipo t ext o y no se permit en los el ement os anidados.
<!ELEMENT Topic (#PCDATA)>
12. 3. 1. 4. El ement os vacíos
Para exigir que un el ement o est é siempre vacío se ut iliza la palabra reservada EMPTY. No se necesit a
que aparezca ent re parént esis ya que no se puede agrupar con ot ros el ement os, que es lo que permit en
los parént esis, como se verá más adelant e.
<!ELEMENT SectionBreak EMPTY> daría lugar en el documento a: <SectionBreak/>
12. 3. 1. 5. Indicadores de repet ición
Por def ect o un el ement o puede aparecer exact ament e una vez cuando se especif ica en el DTD sin
ningún modif icador.
<!ELEMENT Book (Contents, Copyright)>
En est e ej emplo Contents debe aparecer exact ament e una vez y siempre debe ir seguido por
exact ament e un el ement o Copyright para que el document o sea válido.
Para cambiar est e comport amient o puede añadirse al f inal del nombre de un el ement o un indicador de
repet ición:

Indicador Frecuencia
? Opcional (0 ó 1 vez)
* Opcional y repetible (0 ó más veces)
+ Necesario y repetible (1 ó más veces)

Si por ej emplo se quiere permit ir que el encabezami ent o (el ement o Heading) de un capít ulo aparezca
una vez o que opcional ment e se omit a, y que puedan aparecer uno o más element os Topic, hay que hacer
la siguient e declaración:
<!ELEMENT Chapter (Heading?,Topic+)>
Un document o XML válido sería:
132 Informática III

<Chapter>
<Topic> ¿Qué es XML?</Topic>
<Topic> ¿Cómo se utiliza XML?</Topic>
</Chapter>

12. 3. 1. 6. Grupos de el ement os


En el cont enido de un li bro podrían aparecer un capít ulo o un conj unt o de capít ulos, después un salt o
de sección y a cont inuación más capít ulos y opcionalment e ot ro salt o de sección. La est ruct ura capít ulos y
salt o opcional de sección podría repet irse apli cando un indicador de repet ición al f inal de dicho grupo de
element os (un grupo se i ndica encerrando un conj unt o de element os ent re parént esis):
<!ELEMENT Contents (Chapter+,SectionBreak?)+ >
Un ej emplo de document o XML válido sería:
<Book>
<Contents>
<Chapter>
<Heading> Introducción </Heading>
<Topic> ¿Qué es XML? </Topic>
<Topic> ¿Cómo se utiliza XML? </Topic>
</Chapter>
<Chapter> … </Chapter>
<SectionBreak/>
<Chapter> … </Chapter>
<Chapter> … </Chapter>
<SectionBreak/>
<Chapter> … </Chapter>
</Contents>
<Copyright>&OreillyCopyright;</Copyright>
</Book>

12. 3. 1. 7. Operador de opción “ | ”


Permit e que ocurra una de las opciones separadas por el operador “ | ” . El número de opciones no est á
limit ado y se pueden agrupar usando parént esis.
<!ELEMENT aviso (parrafo | grafico)>
En el ej emplo ant erior el element o aviso debe cont ener o un párraf o o un gráf ico.
<!ELEMENT aviso (titulo, (parrafo | grafico))>
En est e ej emplo el element o aviso debe cont ener un t ít ulo y además un párraf o o un gráf ico.
12. 3. 2. DEFINIR AT RIBUT OS
La def inición de at ribut os suel e incluirse después de la especif icación del element o y t iene la siguient e
f orma:
<!ATTLIST [Enclosing Element] [Attribute Name] [type] [modifier] … >

El primer parámet ro corresponde al nombre del element o. A cont inuación pueden def inirse múlt i pl es
at ribut os para cual quier el ement o.
12. 3. 2. 1. Modif icadores
Para especif icar el grado de necesidad de una at ribut o se ut ili za una de las siguient es palabras
reservadas: #IMPLIED (no se requiere para que el document o sea válido), #REQUIRED (es necesario
incl uirlo) , #FIXED (el usuario nunca puede cambiar el valor del at ribut o; es poco f recuent e en
aplicaciones). El f ormat o de est e úl t imo es:
<!ATTLIST [Enclosing Element] [Attribute Name] #FIXED [Fixed Value]>
12. 3. 2. 2. Tipos de at ri but o
Para indicar que el valor del at ri but o puede ser cualquier dat o de t ipo t ext o se ut i liza la palabra
reservada CDATA.
<!ATTLIST texto idioma CDATA #REQUIRED>
<!ATTLIST img url CDATA #REQUIRED alt CDATA #IMPLIED>
Capítulo 12. XML (eXtensible Markup Language) 133

<!ATTLIST sender company CDATA #FIXED "Microsoft">

Si quiere darse un valor por def ect o, en vez de ut i l izar un modif icador, debe escribirse el valor por
def ect o ent re comillas.
<!ATTLIST texto idioma CDATA "inglés">
Si se desea enumerar un conj unt o de valores permit i dos se escriben ent re parént esis y separados por el
operador “ | ” . En est e caso, t ambi én puede indicarse por def ect o uno de los val ores de la list a, en vez de
ut ilizar un modif icador.
<!ATTLIST Chapter focus (XML|Java) “Java”>
<!ATTLIST task status (important|normal) #REQUIRED>

El t ipo ID permit e que un at ribut o det erminado t enga un nombre único que podrá ser ref erenciado por
un at ribut o de ot ro el ement o que sea de t ipo IDREF. Permit e implement ar un sist ema de hipervínculos en
un document o XML.
<!ELEMENT enlace EMPTY>
<!ATTLIST enlace destino IDREF #REQUIRED>
<!ELEMENT capitulo (parrafo)*>
<!ATTLIST capitulo referencia ID #IMPLIED>
12. 3. 3. REFERENCIAS A ENT IDAD
Cuando el analizador se encuent ra con una ref erencia a ent idad int ent a resolverla ut ili zando el DTD.
Las declaraciones de ent idades en un DTD t ienen la siguient e not ación:
• Si se especif ica un conj unt o de caract eres de reempl azo:
<!ENTITY ovni “Objeto Volador No Identificado”>
que se ut i lizaría en el document o XML:
<texto>
<titulo> Durmiendo en clase, Álvaro soñó con un &ovni; </titulo>
</texto>

• Si se desea acceder a un recurso local o a un recurso a t ravés de la red:


<!ENTITY OReillyCopyright SYSTEM “copyright.txt”>
<!ENTITY OReillyCopyright SYSTEM “http://www.oreilly.com/catalog/copyright.xml”>

Potrebbero piacerti anche