Software">
XML Principios Básicos
XML Principios Básicos
XML Principios Básicos
Contenido modificable
Si ves errores o quieres modificar/añadir contenidos, puedes crear un pull
request. Gracias
Indice de contenido
1. Introducción
XML son las siglas de Extensible Markup Language, un lenguage de marcado para
guardar y transportar datos legible para ordenadores y humanos. A pesar de que su
https://diego.com.es/xml-principios-basicos 1/18
20/7/23, 13:56 XML principios básicos
XML se usa frecuentemente para separar los datos de la presentación. XML no indica
cómo presentar la información, un mismo documento XML puede presentarse de
muchas formas. Es muy utilizado junto a aplicaciones HTML, donde XML guarda o
transporta los datos, y HTML les da formato y los muestra. Cuando se muestran los
datos en HTML, no es necesario tener que editar el archivo HTML cuando los datos
cambian, XML guarda los datos en archivos separados. Con los lenguajes de
programación web como PHP o Javascript se pueden leer archivos XML y actualizar el
contenido de cualquier página HTML.
Los documentos XML forman una estructura de tipo árbol, comenzando desde la raíz
(root), con ramas hacia las hojas (leaves). Vamos a ver el siguiente ejemplo de un
archivo cine.xml:
https://diego.com.es/xml-principios-basicos 2/18
20/7/23, 13:56 XML principios básicos
<reparto>Charlize Theron</reparto>
Diego Lázaro<reparto>Nicholas
Angular Libro de PHP
Hoult</reparto>
</pelicula>
<pelicula categoria="animacion">
<titulo idioma="ingles">Inside Out</titulo>
<director>Pete Docter</director>
<estreno>17 junio 2015</estreno>
<reparto>Amy Poehler</reparto>
<reparto>Phyllis Smith</reparto>
<reparto>Bill Hader</reparto>
</pelicula>
</cine>
Los documentos XML están formados por árboles de elementos. Cada árbol comienza
con un elemento root, del cual surgen ramas (branches) a elementos hijo. Todos los
elementos pueden tener elementos hijo.
Se suelen emplear los términos parent, child y sibling para determinar el parentesco:
padre, hijo y hermano.
Todos los elementos pueden tener contenido textual ("Mad Max") y atributos
(categoria="accion").
https://diego.com.es/xml-principios-basicos 3/18
20/7/23, 13:56 XML principios básicos
Todos los elementos XML deben tener un elemento root que es padre de todos los
Diego Lázaro Angular Libro de PHP
demás ().
La primera línea del documento se llama prolog. <?xml version="1.0"
encoding="UTF-8" ?> Es opcional, pero si se incluye ha de ir en la primera línea.
UTF-8 es la codificación de caracteres por defecto y la recomendable.
Todos los elementos han de tener su etiqueta de cierre ().
Las etiquetas XML son sensibles a mayúsculas y minúsculas. es diferente a .
Las etiquetas han de ir correctamente anidadas. Esto es incorrecto: Mad Max.
Los atributos XML deben ir entre comillas .
XML tiene caracteres especiales que han de utilizarse de distinta forma para evitar
conflicto, son 5:
$lt; <
> >
& &
' '
" "
Sólo < y & están estrictamente prohibidos en XML, pero es recomendable utilizar las
demás también.
3. Elementos en XML
Un elemento XML es cualquier cosa que esté incluída entre la etiqueta inicial y la final:
<director>George Miller</director>
Puede contener texto, atributos, otros elementos o una mezcla de los anteriores:
https://diego.com.es/xml-principios-basicos 4/18
20/7/23, 13:56 XML principios básicos
<color>Negro</color>
Diego Lázaro<edad>12</edad>
Angular Libro de PHP
</animal>
<animal>
<nombre>Bun</nombre>
<tipo>León</tipo>
<color>Marrón</color>
<edad>15</edad>
</animal>
</selva>
<elemento></elemento>
<elemento />
Los dos anteriores son elementos vacíos, y también pueden llevar atributos.
Si los documentos XML tienen una base de datos correspondiente, lo normal es usar
los nombres de la base de datos para los elementos.
<animal>
<nombre>Bun</nombre>
<tipo>León</tipo>
</animal>
Y queremos extenderlo a:
https://diego.com.es/xml-principios-basicos 5/18
20/7/23, 13:56 XML principios básicos
<animal>
Diego Lázaro Angular Libro de PHP
<nombre>Bun</nombre>
<tipo>León</tipo>
<color>Marrón</color>
<edad>15</edad>
</animal>
No hay ningún problema, XML es muy flexible y se extiende y adapta a los nuevos
elementos.
4. Atributos en XML
Los elementos XML pueden tener atributos, como en HTML. Estan diseñados para
contener datos relacionados con un elemento específico.
<pelicula categoria="accion">
<titulo idioma="ingles">Mad Max</titulo>
<director>George Miller</director>
<estreno>15 mayo 2015</estreno>
<reparto>Tom Hardy</reparto>
<reparto>Charlize Theron</reparto>
<reparto>Nicholas Hoult</reparto>
</pelicula>
Si el valor del atributo lleva comillas, se puede emplear cualquiera de los dos
siguientes métodos:
Los atributos de alguna forma están limitados. Al contrario que los elementos, los
atributos:
<mensaje fecha="10-10-2015">
<asunto>Hola</asunto>
https://diego.com.es/xml-principios-basicos 6/18
20/7/23, 13:56 XML principios básicos
<mensaje>
<fecha>10-10-2015</fecha>
<asunto>Hola</asunto>
<mensaje>Que tal estás</mensaje>
</mensaje>
<mensaje>
<fecha>
<año>2015</año>
<mes>10</mes>
<dia>10</dia>
</fecha>
<asunto>Hola</asunto>
<mensaje>Que tal estás</mensaje>
</mensaje>
A menudo los atributos se utilizan para asignar ID's a elementos, como si fuera el ID
en HTML:
<mensaje id="142">
<fecha>
<año>2015</año>
<mes>10</mes>
<dia>10</dia>
</fecha>
<asunto>Hola</asunto>
<mensaje>Que tal estás</mensaje>
</mensaje>
Lo ideal es guardar los metadatos (datos sobre datos) como atributos, y los datos en sí
mismos como elementos.
5. Namespaces en XML
https://diego.com.es/xml-principios-basicos 7/18
20/7/23, 13:56 XML principios básicos
Los nombres de elementos pueden coincidir entre diferentes documentos XML. Por
Diego Lázaro Angular Libro de PHP
ejemplo, el siguiente es un documento XML con información de una tabla HTML:
<table>
<tr>
<td>Léon</td>
<td>Tigre</td>
</tr>
</table>
<table>
<name>Mesa de café</name>
<colour>Marrón</colour>
</table>
<h:table>
<h:tr>
<h:td>León</h:td>
<h:td>Tigre</h:td>
</h:tr>
</h:table>
<m:table>
<m:name>Mesa de café</m:name>
<m:colour>Marrón</m:colour>
</m:table>
Pero para emplear un prefijo, hay que establecer un espacio de nombres. El espacio de
nombres se define con el atributo xmlns en la etiqueta inicial del elemento. La sintaxis
es: xmlns:prefijo="URI":
<h:table xmlns:h="http://www.w3.org/TR/html5/">
<h:tr>
<h:td>León</h:td>
<h:td>Tigre</h:td>
</h:tr>
</h:table>
https://diego.com.es/xml-principios-basicos 8/18
20/7/23, 13:56 XML principios básicos
<m:table xmlns:m="http://www.ejemplo.com/muebles">
Diego Lázaro Angular
<m:name>Mesa Libro de PHP
de café</m:name>
<m:colour>Marrón</m:colour>
</m:table>
Cuando se define un namespace para un elemento, todos los elementos hijo con el
mismo prefijo están asociados al mismo namespace.
<root xmlns:h="http://www.w3.org/TR/html5/"
xmlns:m="http://www.ejemplo.com/muebles">
<h:table>
<h:tr>
<h:td>León</h:td>
<h:td>Tigre</h:td>
</h:tr>
</h:table>
<m:table >
<m:name>Mesa de café</m:name>
<m:colour>Marrón</m:colour>
</m:table>
</root>
La URI no es para buscar información en esa URL, sino que se utiliza para darle un
nombre único al namespace. Se suele emplear una URL porque las empresas a veces
proporcionan información sobre dicho namespace en esa URL.
<url>
<loc>http://diego.com.es/</loc>
<changefreq>weekly</changefreq>
https://diego.com.es/xml-principios-basicos 9/18
20/7/23, 13:56 XML principios básicos
<priority>1.0</priority>
Diego Lázaro
</url> Angular Libro de PHP
<url>
<loc>http://diego.com.es/blog/symfony</loc>
<priority>0.5</priority>
</url>
Se muestra de esta forma porque los documentos XML no llevan información acerca de
cómo mostrar los datos.
Para formatear XML se puede emplear PHP, Javascript, o XSLT, entre otros. No es
recomendable hacerlo en CSS.
XSLT es más sofisticado que CSS. Con XSLT se pueden añadir/eliminar elementos y
atributos del archivo de salida. Se pueden también reordenar elementos, hacer tests y
decidir qué elementos mostrar o quitar, entre otras muchas cosas. XSLT utiliza XPath
para encontrar información en un documento XML (explicado en la siguiente sección).
Si partimos del ejemplo anterior del documento XML con el elemento root cine
(xmltest.xml):
https://diego.com.es/xml-principios-basicos 10/18
20/7/23, 13:56 XML principios básicos
https://diego.com.es/xml-principios-basicos 11/18
20/7/23, 13:56 XML principios básicos
7. ¿Qué es XPath?
Diego Lázaro Angular Libro de PHP
XPath es en lenguaje de ruta de XML para encontrar información en un documento
XML.
XPath es una sintaxis para definir partes de un documento XML, fundamental para las
hojas XSLT. XPath utiliza expresiones de ruta para navegar por el documento, y
contiene una librería con funciones estándar. XPath es una recomendación W3C y se
utiliza también en XQuery, XSLT y XLink:
Las expresiones XPath pueden utilizarse en JavaScript, Java, XML Schema, PHP, Python,
C, C++...
<cine>
<pelicula categoria="accion">
<titulo idioma="ingles">Mad Max</titulo>
<director>George Miller</director>
<ticket>8</ticket>
https://diego.com.es/xml-principios-basicos 12/18
20/7/23, 13:56 XML principios básicos
<reparto>Tom Hardy</reparto>
Diego Lázaro<reparto>Charlize
Angular Libro de PHP
Theron</reparto>
<reparto>Nicholas Hoult</reparto>
</pelicula>
<pelicula categoria="animacion">
<titulo idioma="ingles">Inside Out</titulo>
<director>Pete Docter</director>
<ticket>10</ticket>
<reparto>Amy Poehler</reparto>
<reparto>Phyllis Smith</reparto>
<reparto>Bill Hader</reparto>
</pelicula>
</cine>
8. ¿Qué es XLink?
https://diego.com.es/xml-principios-basicos 13/18
20/7/23, 13:56 XML principios básicos
En HTML los enlaces se definen con . En XML se puede utilizar cualquier nombre de
Diego Lázaro Angular Libro de PHP
elemento (lo que sería imposible para un navegador predecir qué elementos de
enlaces existen en los documentos XML).
En los ejemplos anteriores se han mostrado enlaces simples. Con XLink se puede
acceder a sitios remotos y resources.
9. ¿Qué es XPointer?
En el siguiente ejemplo se utiliza XPointer junto con XLink para apuntar a una parte
específica del documento. Primero empezamos con el documento objetivo al que
vamos a enlazar:
En lugar de enlazar al documento entero como con XLink, XPointer permite enlazar
partes específicas. Para ello se añade una almohadilla # y una expresión XPointer
después de la URL en el atributo xlink:href, así:
https://diego.com.es/xml-principios-basicos 15/18
20/7/23, 13:56 XML principios básicos
_xlink:href="http://ejemplo.com/peliculas.xml#xpointer(id('23'))"_
Diego Lázaro Angular Libro de PHP
También existe una forma más reducida de enlazar a un elemento con el atributo id:
_xlink:href="http://ejemplo.com/peliculas.xml#23"_
<cine>
<mifavorita>
<imagen url="http://ejemplo.com/madmax.gif" />
<enlace xlink:type="simple" xlink:href="http://ejemplo.com/peliculas.xml#34">
Enlace a mi película favorita</enlace>
</mifavorita>
</cine>
Un documento XML válido debe además respetar un DTD, Document Type Definition,
que son reglas que definen los elementos y atributos permitidos. Un DTD puede
llamarse DTD, que hace referencia al Document Type Definition original, o XML
Schema, que es una alternativa a DTD basada en XML.
Un DTD permite que un grupo de personas acuerden utilizar un DTD estándar para el
intercambio de datos y así poder asegurar una uniformidad.
Un documento XML válido es también well formed, es decir, que tiene la sintaxis
correcta:
<!DOCTYPE pelicula
[
<!ELEMENT pelicula (titulo,estreno,director,reparto)>
<!ELEMENT titulo (#PCDATA)>
<!ELEMENT estreno (#PCDATA)>
https://diego.com.es/xml-principios-basicos 16/18
20/7/23, 13:56 XML principios básicos
<xs:element name="pelicula">
<xs:complexType>
<xs:sequence>
<xs:element name="titulo" type="xs:string"/>
<xs:element name="director" type="xs:string"/>
<xs:element name="reparto" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Los XML Schemas son más potentes que los DTD porque están escritos en XML, se
pueden extender y soportan tipos de datos y namespaces.
Los archivos XML son archivos de texto como los archivos HTML. Un archivo XML
puede ser fácilmente guardado y generado por un servidor web.
https://diego.com.es/xml-principios-basicos 17/18
20/7/23, 13:56 XML principios básicos
Por ejemplo en PHP, sin utilizar ninguna extensión PHP, se puede generar un archivo
Diego Lázaro Angular Libro de PHP
xml de la siguiente forma:
<?php
header("Content-type: text/xml");
echo "<?xml version='1.0' encoding='UTF-8'?>";
echo "<pelicula>";
echo "<titulo>Mad Max</titulo>";
echo "<director>George Miller</director>";
echo "<estreno>15 mayo 2015</estreno>";
echo "</pelicula>";
?>
https://diego.com.es/xml-principios-basicos 18/18