Atributos especiales en DTD - xml:lang y xml:space
En DTD existen dos tipos de atributos especiales (predefinidos), llamados: xml:lang y xml:space.
Uso del atributo xml:lang
En una DTD, el atributo xml:lang permite indicar el idioma del contenido y de los valores de los atributos de un elemento declarado. De forma que, cuando se utiliza xml:lang en un elemento, el idioma especificado afecta a todos los valores de sus posibles atributos y a todo su contenido, incluyendo a sus posibles sucesores a menos que se indique lo contrario con otra instancia de xml:lang.
EJEMPLO En la DTD del siguiente documento XML, con el atributo xml:lang se ha indicado el idioma de los elementos "sigla" y "traduccion":
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE siglas [
<!ELEMENT siglas (sigla)*>
<!ELEMENT sigla (significado, traduccion)>
<!ATTLIST sigla letras CDATA #REQUIRED>
<!ATTLIST sigla xml:lang CDATA "en">
<!ELEMENT significado (#PCDATA)>
<!ELEMENT traduccion (#PCDATA)>
<!ATTLIST traduccion xml:lang CDATA #FIXED "es">
]>
<siglas>
<sigla letras="ANSI">
<significado>American National Standards Institute</significado>
<traduccion>Instituto Nacional Estadounidense de Estándares</traduccion>
</sigla>
<sigla letras="ISO">
<significado>International Organization for Standardization</significado>
<traduccion>Organización Internacional de Normalización</traduccion>
</sigla>
<sigla letras="CERN" xml:lang="fr">
<significado>Conseil Européen pour la Recherche Nucléaire</significado>
<traduccion>Organización Europea para la Investigación Nuclear</traduccion>
</sigla>
</siglas>
- Inicialmente, para el elemento "sigla" se ha indicado el idioma inglés, "en", por defecto.
- No obstante, después se ha fijado el valor "es", del español, para el atributo xml:lang del elemento "traduccion".
- Por otra parte, para el CERN se ha especificado que el idioma es el francés, "fr".
Uso del atributo xml:space
En una DTD, el atributo xml:space permite indicar que los espacios en blanco, las tabulaciones y los retornos de carro que aparezcan en el contenido (texto) de un elemento –y sus sucesores a menos que se indique lo contrario con otra instancia de xml:space– tienen que ser preservados. Este atributo siempre tiene que ser declarado de tipo enumerado, siendo "default", "preserve" o ambos, los posibles valores pertenecientes a la lista de valores que se indiquen entre paréntesis "()".
EJEMPLO En la DTD del siguiente documento XML, con el atributo xml:space se ha indicado que, por defecto, los espacios que se escriban en el contenido de los elementos "programa" del documento, deben preservarse. Ahora bien, en la declaración de xml:space se ha indicado que su valor podría ser también "default":
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE programas [
<!ELEMENT programas (programa)*>
<!ELEMENT programa (#PCDATA)>
<!ATTLIST programa xml:space (default|preserve) "preserve">
]>
<programas>
<programa>/* Programa: Hola mundo */
#include <conio.h>
#include <stdio.h>
int main()
{
printf( "Hola mundo." );
getch(); /* Pausa */
return 0;
}</programa>
<programa>/* Programa: Calificación según nota */
#include <conio.h>
#include <stdio.h>
int main()
{
float nota;
printf( "\n Introduzca nota (real): " );
scanf( "%f", &nota );
if ( nota >= 5 )
printf( "\n APROBADO" );
else
printf( "\n SUSPENDIDO" );
getch(); /* Pausa */
return 0;
}</programa>
</programas>
- En este ejemplo, los espacios en blanco, las tabulaciones y los retornos de carro de los dos programas escritos tienen que preservarse.
- No obstante, tal y como está declarado el atributo xml:space del elemento "programa", se podría asignar el valor "default" a xml:space en cualquier programa. En tal caso, sería el programa que procese el documento, el que decidiese qué tratamiento hacer a los espacios en blanco, las tabulaciones y los retornos de carro.