Lenguajes de Marcas XML y sus validadores DTD, XSD
Published on February 26, 2022 by Lucho
post xml
8 min READ
¿Qué es el Lenguaje de Marcas?
El lenguaje de marcas puede definirse como la forma de codificar un documento al, que junto con el texto, se incorporan una serie de etiquetas o marcas que contienen información adicional acerca de la estructura del texto o de su presentación
La sintaxis de XML consiste en dos partes:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE definicion SYSTEM "definicion.dtd">
Los comentarios van de la siguiente manera: <!- Comentario ->
Los documentos XML están formados por árboles de elementos. Cada árbol comienza con un elemento root (raíz), del cual surgen ramas (branches) a elementos hijo. Todos los elementos pueden tener elementos hijo. Todos los elementos pueden tener contenido textual y atributos.
<?xml version="1.0" encoding="UTF-8"?>
<alumnos> <!-- Raiz / Root -->
<alumno> <!-- Elemento Hijo de "alumnos" y Padre de los elementos que cuelgan de el -->
<nombre>Elia</nombre> <!-- Elemento Hoja -->
<apellidos>Martin</apellidos> <!-- Elemento Hoja -->
<dni>123</dni> <!-- Elemento Hoja -->
</alumno>
<alumno>
<nombre>Ana</nombre>
<apellidos>Lopez</apellidos>
<dni>456</dni>
</alumno>
</alumnos>
Para determinar el parentesco: padre, hijo y hermano, se suele emplear los siguientes términos:
El lenguaje XML está definido por lo que se llaman etiquetas, que se especifican entre los símbolos < y >
<etiqueta>
Un elemento XML(denominado contenido) es cualquier cosa que entre la etiqueta inicial y final:
<etiqueta>Elemento</etiqueta>
El conjunto formado por la etiqueta inicial, el contenido y la etiqueta final se denomina elemento. Los elementos vacíos se pueden declarar de la siguiente manera:_
<elemento/>
Las características de un contenido, denominados atributos, están especificados dentro de la etiqueta inicial
<peso tipo="kg">86</peso>
Reglas para los elementos:
- Son Key sensitive: diferencia entre minúsculas y mayúsculas.
- Las etiquetas deben empezar con un _(guión bajo) o letra. OTROS ERRORES DARÁN ERROR.
- Puede contener letras, dígitos, guiones, barras bajas y puntos.
- El nombre de la etiqueta no puede tener espacios
- Usar nombres sencillos, evitar caracteres especiales como la ñ, tildes, puntos, etc
- No puede haber saltos de línea.
Dan información sobre los elementos. Los atributos van dentro de la etiqueta y llevan comillas simples comillas simples, una vez puesto por primera vez siempre debe ser igual. La palabra quot sustituye un carácter que en el momento no está permitido. Por ejemplo las comillas simples no pueden ir dentro del propio atributo o etiqueta, en este caso usariamos apos. GT sería > y LT sería menor que.
Losespacios de nombres o namespace proporcionan una forma de evitar conflictos de nombres entre elementos. Hay documentos que pueden compartir el mismo nombre de etiqueta, para eso se usa los namespaces, es un atributo, xmlns”paginaweb”. La URL no tiene porque existir, la usamos para diferenciar etiquetas que tienen el mismo nombre y almacenan información distinta. También se le puede poner un prefijo,, primero habría que definirlo de la siguiente manera:
<alias:etiqueta:"URL">
. Ya no haría falta poner todo el atributo, solo tendríamos que poner el alias. Los alias se pueden declarar en el prólogo.
DTD: Definición de tipo de documento
Sirve para definir la estructura de un documento XML y permite su validación. En este documento se definen las reglas de los elementos y de sus atributos que están permitidos en el documento XML. Los XML que cumplen con las reglas establecidas por DTD se denominan bien formado o validado. Un DTD permite a un equipo de trabajo crear un DTD estándar para intercambiar datos y así poder asegurar una uniformidad (todos los miembros del equipo cumplen con la misma estructura). Un XML puede estar validado y no cumplir con el DTD. El DTD se puede agregar en el prólogo o podemos crearlo a parte y vincularlo al XML. Cuando se define dentro del prólogo sólo cuando existe un solo documento DTD. Si hay varios DTD se tienen que linkear.
Para definir un DTD internamente en el prólogo del propio XML, estableceríamos toda la estructura del DTD entre [ ]. Cuando se crea un DTD interno, es decir, dentro del XML, debe cumplir con lo siguiente: el DOCTYPE debe hacer referencia al elemento root
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE alumnos [
<!ELEMENT alumnos (alumno+)*>
<!ELEMENT alumno (nombre ,apellidos ,dni?)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT apellidos (#PCDATA)>
<!ELEMENT dni (#PCDATA)>
]>
<alumnos>
<alumno>
<nombre>Elia</nombre>
<apellidos>Martin</apellidos>
<dni>123</dni>
</alumno>
<alumno>
<nombre>Ana</nombre>
<apellidos>Lopez</apellidos>
<dni>456</dni>
</alumno>
</alumnos>
Para llamar un DTD externo hay que hacer una llamada debajo del prólogo del DTD, con el “atributo” SYSTEM y ponemos la ruta entre comillas ““.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE alumnos SYSTEM "./alumnos.dtd">
<alumnos>
<alumno>
<nombre>Elia</nombre>
<apellidos>Martin</apellidos>
<dni>123</dni>
</alumno>
<alumno>
<nombre>Ana</nombre>
<apellidos>Lopez</apellidos>
<dni>456</dni>
</alumno>
</alumnos>
En la estructura del DTD montamos la jerarquía. Como se dijo anteriormente, la primera línea debe hacer referencia al elemento root y lo que va entre paréntesis a su primer hijo
<!ELEMENT etiquetaRoot (etiquetaPrimerHijo)>
Cuando ese primer hijo tiene otros hijos también se define igual que el anterior
<!ELEMENT etiquetaHijo1(etiquetaSegundoHijo)>
Si hay elementos hermanos Sbling que son hijos, deberemos definirlos de la siguiente manera, separados por
<!ELEMENT etiquetaHijo1(etiquetaSegundoHijo1Hermano1, etiquetaSegundoHijo1Hermano2)>
Cuando ya son elementos simples, es decir, que no tienen más hijos, sólo contienen información, se debe definir el tipo de información que guardarán, por ejemplo si es tipo texto #PCDATA
<!ELEMENT etiquetaNombreInformacion1 (#PCDATA)>
<!ELEMENT etiquetaNombreInformacion2 (#PCDATA)>
Hay veces que debemos usar modificadores, como el símbolo + (indica que habría varias etiquetas con el mimo nombre)
Resultado:
<!ELEMENT etiquetaRoot (etiquetaPrimerHijo)>
<!ELEMENT etiquetaHijo1 (etiquetaSegundoHijo)>
<!ELEMENT etiquetaHijo1 (etiquetaSegundoHijo1Hermano1, etiquetaSegundoHijo1Hermano2)>
<!ELEMENT etiquetaNombreInformacion1 (#PCDATA)>
<!ELEMENT etiquetaNombreInformacion2 (#PCDATA)>
Tipos de atributos serian:
CDATA -> texto
ID -> Identificador unico
Valores de atributos
valor predeterminado <!ATTLIST alumno dni CDATA "4545K">
valor fijo <!ATTLIST alumno dni CDATA #FIXED "4545K">
valor opcional <!ATTLIST alumno dni CDATA #IMPLIED>
valor requerido <!ATTLIST alumno dni CDATA #REQUIRED>
+ : se añade después del nombre del hijo, indicando que habrá varios elementos con ese nombre.
* : puede haber 0 o N elementos con el mismo nombre.
? : va estar 0 o 1 sola vez.
ENTIDADES DEL XML
Las entidades son como “atajos de teclado” de elementos que se van a repetir varias veces, se definen un valor por defecto. Se definen con la siguiente sintaxis:
<!ENTITY nombreEntidad "valorPorDefecto">
Luego se puede llamar desde el XML usando el símbolo “&”.
<nombreElemento>cualquierNombre &nombreEntidad</nombreElemento>