<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE clase SYSTEM "validacion.dtd">
<clase asignatura="FOL" curso="2025">
<alumnos>
<!-- ALUMNO 1 -->
<alumno genero="hombre">
<nombre>PEPITO <apellido>GRILLO</apellido></nombre>
<nota examen="1">9.8</nota>
<nota examen="2">7.2</nota>
<actividades hechas="si" dia="18" mes="10"/>
</alumno>
<!-- ALUMNO 2 -->
<alumno genero="mujer">
<nombre>PEPA <apellido>POMBO</apellido></nombre>
<nota examen="1">4.2</nota>
<nota examen="2">5.5</nota>
<actividades hechas="no" dia="0" mes="0"/>
</alumno>
</alumnos>
</clase>
Hay 2 partes en un documento XML:
DOCUMENT PROLOG (Opcional): Siempre va en la parte superior del documento, antes del elemento raíz. Contiene las declaraciones de XML y tipos de documentos.
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE clase SYSTEM "validacion.dtd">
DOCUMENT ELEMENTS: Empieza en el elemento raíz (root) y acaba en la última línea del documento.
<clase asignatura="FOL" curso="2025">
...
</clase>
Comentarios:
XML permite poner comentarios en todo el código menos dentro de etiquetas y atributos, sintaxis:
<!-- MENSAJE -->
Solo un elemento raíz:
Solo se puede tener un elemento raíz y en este se puede englobar el resto de las etiquetas.
Cerrar cada etiqueta:
Cada etiqueta, aunque no tenga contenido, debe ser cerrada.
Respetar el órden:
Para cerrar una etiqueta que anide a otras, las anidades deben ser cerradas antes.
Respetar mayúsculas:
Las etiquetas de apertura y cierre deben contener el mismo nombre incluyendo mayúsculas.
Cada etiqueta de XML sirve para guardar un valor, no está pensado para agrupar varios valores en una sola etiqueta como una dirección de una casa o como el siguiente ejemplo:
<idiomas>Español, Gallego</idiomas>
En cambio, debería de separar cada valor en etiquetas diferentes como:
<idiomas>
<idioma>Español</idioma>
<idioma>Gallego</idioma>
</idiomas>
Se usa un ATRIBUTO cuando el contenido no es atómico y estructurado y además es simple. Ejemplos: ID, DNI, tipo, unidad.
Se usa un TAG cuando el contenido es atómico y estructurado y además se puede dividir en sub-componentes. Ejemplo: La dirección de una casa.
En el contenido de una etiqueta o un atributo cuando hay más de un espacio seguido o un salto de línea, todos se omiten y solo se interpreta uno como en el siguiente caso:
<texto atr="hello world">Hello World</texto>
<texto atr="hello world">Hello World</texto>
También si no ponemos ningún salto de línea en este caso se interpretará como en el segundo cuadro de código:
<idiomas><idioma>Español</idioma><idioma>Gallego</idioma></idiomas>
<idiomas>
<idioma>Español</idioma>
<idioma>Gallego</idioma>
</idiomas>
Es recomendable empezar siempre con una "DECLARACIÓN" en la primera línea del documento. Siempre debe estar en el siguiente orden aunque también se puede definir solo version.
<?xml version="1.0" encoding="utf-8" standalone="no"?>
version: La versión a trabajar con XML.
encoding: Decodificación de carácteres a usar en el documento (estándares).
standalone: Indica si el documento depende de información en una fuente externa. Los valores son yes o no.
Se puede poner instrucciones para aplicaciones que procese el documento como por ejemplo un navegador. Formato:
<?target instrucción?>
Ejemplo de instrucción para aplicar estilos en un navegador:
<?xml-stylesheet href="./estilos.css" type="text/css"?>
xml-stylesheet: Es el target/objetivo.
href y type: Son las instrucciones.
Siempre se empieza con un único tag raíz, donde se engloban los diferentes tags. Puede estar anidado por varios tags (uno dentro de otro).
Contenido y cierre:
TAGs: Van entre los símbolos <tag> y necesitan un cierre </tag> ("tag" puede ser un nombre personalizado. Es sensible a mayúsculas).
Entre los 2 tags va en CONTENIDO.
Si un tag no va a tener contenido se puede poner simplemente <tag/>.
Espacios en el nombre de un tag:
Dentro de un <tag (AQUÍ)> los espacios son insignificantes (excepto antes de crear y cerrar el tag como: < tag o </ tag). En el contenido del tag los espacios no importan.
Reglas en el nombre de un tag:
Comienzo:
Se permite empezar el nombre de un tag solo con _ o una letra.
Contener:
El nombre del tag puede contener: _, -, . y números, aunque no se recomienda usar los marcados en verde ni carácteres no ingleses.
Prohibido:
Un nombre de una tag no puede contener : ya que se utiliza para definir espacio de nombres.
Tampoco se permite empezar el nombre de un tag con la cadena xml ni sus variantes como xML, xMl, etc.
Reglas del contenido de un tag:
Entre el tag de comienzo y cierre no se pueden usar los siguientes carácteres: <, >, &, ' ni " al ser carácteres reservados que XML puede malinterpretar. Para poder usarlos hay que usar referencias o una etiqueta CDATA (explicado más adelante).
Dentro del contenido se pueden usar referencias que sirve para poner texto adicional en el contenido de un tag.
Siempre empiezan con & y acaba con ;.
Si, por ejemplo, hace falta colocar un símbolo en el contenido, XML lo puede malinterpretar al ser carácteres reservados así que se tendría que definir como decimal con este formato: "00;", donde 00 es el número Unicode que identifica al símbolo que queramos poner. Ejemplos:
También se puede hacer en con un identificador hexadecimal como: 00;:
O también se puede usar referencias predefinidas:
| Referencias | |||
| SÍMBOLO | DECIMAL | HEXADECIMAL | PREDEFINIDAS |
| < | 60; | &x3C; | < |
| > | 62; | &x3E; | > |
| & | 38; | &x26; | & |
| ' | 39; | &x27; | ' |
| " | 34; | &x22; | " |
Otra manera para poder usar los caracteres (<, >, &, ' y " )
sin tener que usar referebcuas es usar una etiqueta específica llamada CDATA que permite usarlos explícitamente sin que el documento XML lo interprete como carácteres reservados.
Esta etiqueta CDATA no se puede anidar dentro de otra ni se puede poner como su contenido la siguiente cadena: ]]> ya que esto se usa para cerrarla.
Formato:
<![CDATA[
CONTENIDO CON < > & ' "
]]>
Cumplen las mismas reglas que los TAGs en cuestión de como se puede nombrar.
Cada tag puede tener varios atributos con un valor siempre entre comillas. Formato:
<tag Atributo1="Valor" Atributo2="Valor" />
Siempre debe estar dentro de la parte del tag que abre el contenido <tag (AQUÍ)></tag>. Es sensible a mayúsculas.
Si un atributo no tiene valor se puede dejar las comillas sin contenido dentro:
<tag Atributo1="" />
Si por ejemplo queremos juntar 2 documentos XML en uno solo y hay 2 etiquetas raíz que tienen el mismo nombre se puede usar un espacio de nombres (namespace) para diferenciar elementos que tengan el mismo nombre, asociándolos a un URI único. Ejemplo:
Estos son los documentos XML a juntar:
<!-- visitantes.xml -->
<usuarios>
<usuario dni=""/>
</usuarios>
<!-- clientes.xml -->
<usuarios>
<usuario dni=""/>
</usuarios>
Al juntarlos sin namespaces, no se puede distinguir a qué documento pertenece cada elemento:
<raiz>
<usuarios> <!-- visitantes.xml -->
<usuario dni=""/>
</usuarios>
<usuarios> <!-- clientes.xml -->
<usuario dni=""/>
</usuarios>
</raiz>
1. Declaramos en el elemento raíz o en la propia etiqueta "usuarios" un nombre personalizado (prefijo) para cada documento usando xmlns:
<raiz
xmlns:visitantes="https://byad12.pages.dev/visitantes.xml"
xmlns:clientes="https://byad12.pages.dev/clientes.xml"
>
La URL identifica de forma única el vocabulario de cada documento; no necesariamente apunta al archivo real.
2. Modificamos los elementos para incluir el prefijo del namespace: (Prefijo_xmlns):(Nombre_tag) formando así un nombre cualificado. También aplicamos el prefijo a los sub-elementos:
<visitantes:usuarios>
<visitantes:usuario dni=""/>
</visitantes:usuarios>
<clientes:usuarios>
<clientes:usuario dni=""/>
</clientes:usuarios>
Ejemplo completo con todos los cambios:
<raiz
xmlns:visitantes="https://byad12.pages.dev/visitantes.xml"
xmlns:clientes="https://byad12.pages.dev/clientes.xml"
>
<visitantes:usuarios>
<visitantes:usuario dni=""/>
</visitantes:usuarios>
<clientes:usuarios>
<clientes:usuario dni=""/>
</clientes:usuarios>
</raiz>
DTD (Document Type Declaration) es un documento de texto plano que sirve para verificar la validez de la estructura del documento XML y de su contenido mediante unas reglas. Estas reglas definen el jerarquía y orden, tipo de contenido, atributos asociados y la integridad de los elementos.
Si las declaraciones DTD están guardadas en un documento distinto al documento XML se puede enlazar mediante SYSTEM:
<!DOCTYPE elemento_raiz SYSTEM "archivo.dtd">
El documento DTD también puede estar alojado y ser accesible desde internet, para ello se enlaza al documento XML mediante PUBLIC:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
La primera parte en comillas es el identificador único público para saber que versión usar.
La segunda parte es la URL al archivo.
Se puede colocar las declaraciones dentro del mismo documento XML:
<!DOCTYPE elemento_raiz [
declaración1
declaración2
...
]>
Se puede usar declaraciones internas y externas en el mismo DOCTYPE:
<!DOCTYPE elemento_raiz SYSTEM "archivo.dtd" [
declaración1
declaración2
...
]>