¿Cuándo debo utilizar xml:lang
y cuándo debo definir mi propio elemento o atributo para enviar valores de idioma a un esquema de documento XML (DTD)?
En ocasiones, los documentos contienen o incluyen diferentes tipos de contenido en idioma natural. Otras veces, necesitan almacenar un valor de idioma natural como dato o metadato acerca de algún elemento externo al documento. Debido a que estas diferentes aplicaciones emplean formatos similares, a veces los diseñadores de esquemas no están seguros respecto de cuándo deben utilizar xml:lang
y cuándo definir sus propios elementos o atributos relacionados con el idioma.
Por ejemplo, en XHTML 1.0, hay un atributo hreflang
y también xml:lang
(o atributo lang
, en el caso de HTML) para el contenido del elemento a
:
<a xml:lang="es" href="xyz" hreflang="de">Haga clic para alemán</a>
El atributo xml:lang
describe el idioma contenido por el elemento a
, "Haga clic para alemán", en tanto que el atributo hreflang
es un metadato, que en este caso describe el idioma de cierto contenido externo a esta página web.
xml:lang
El contenido directamente asociado con el documento XML (ya sea que esté contenido en el documento directamente o que considere parte del documento cuando se procesa o presenta) debe utilizar el atributo xml:lang
para indicar el idioma de ese contenido. Dicho atributo xml:lang
debe reservarse para que los autores de contenido etiqueten directamente todo contenido de idioma natural que puedan tener.
XML 1.0 define xml:lang
como un atributo común que puede emplearse para indicar el idioma del contenido de cualquier elemento. Esto incluye todo texto humano que pueda leerse, así como otros contenidos (por ejemplo, objetos incorporados como imágenes o archivos de sonido) incluidos en el elemento en el cual aparecen. El valor xml:lang
se aplica a cualquier subelemento contenido por el elemento. También se aplica a los valores de atributos asociados con el elemento y los subelementos (aunque utilizar idioma natural en atributos no es la mejor práctica). El valor del atributo xml:lang
es una etiqueta de idioma definida por BCP 47.
Por ejemplo, aquí aparece xml:lang
en un elemento t
:
<t xml:lang="es">
Esto es una parte del texto contenido por el elemento "t". El uso
del atributo xml:lang indica el idioma, de modo que, por
ejemplo, se podría aplicar la fuente correcta cuando se presenta, o
se podría utilizar el corrector ortográfico adecuado cuando se edita el
documento. Si no tuviéramos xml:lang, podríamos tener problemas
con el contenido incorporado, como la frase <span xml:lang="fr">
C'est la vie</span>, que aparece en otro idioma.
</t>
Este ejemplo muestra cómo xml:lang
se aplica a un atributo:
<para>Il faut utiliser <abbr title="Simple Object Access Protocol" xml:lang="en">SOAP</abbr></para>
Cuando el valor de idioma es realmente un atributo o un metadato referido a cierto contenido externo, xml:lang
no es la elección adecuada. En estos casos, es necesario almacenar información sobre el idioma, pero éste no se refiere al contenido del documento XML (o contenido incluido, como imágenes, que se procesan como parte del documento) directamente. En este caso, hay que definir un elemento o atributo utilizando un nombre diferente, sin emplear el atributo xml:lang
. El valor del elemento o atributo debe utilizar BCP 47, al igual que xml:lang
.
Algunos ejemplos de esto podrían incluir:
a
en XHTML) que señale una versión de este documento en otro idiomaLa razón por la cual elegiría crear su propio elemento (o atributo) es transmitir el idioma como un valor (como parte de una estructura de datos o como metadato relacionado con un documento externo), en lugar de indicar el idioma de una parte específica de contenido. Evitar el uso de xml:lang
para describir valores de idioma externos evita generar problemas a los autores de contenido, quienes necesitan etiquetar contenido para los fines del procesamiento de textos.
Por ejemplo, un documento XML podría verse de esta manera:
<item type="DVD">
<title xml:lang="fr">Cyrano de Bergerac</title>
<!-- indica el idioma del título de la película -->
<runningTime value="137" />
<!-- no involucra idioma -->
<dialogue>en</dialogue>
<!-- indica el idioma del diálogo -->
<subtitles track="1" language="zh-Hant" />
<!-- esta pista contiene subtítulos en chino tradicional -->
<subtitles track="2" language="zh-Hans" />
</item>
En este ejemplo, el atributo xml:lang
transmite información acerca del idioma natural del texto que aparece en este documento. El elemento dialogue
y el atributo language
del elemento subtitles
se definen en el esquema del documento XML, y transmiten un valor de idioma natural asociado con esos elementos. Por ejemplo, transmite la información de que los subtítulos de la Pista n.º 1 están escritos o se muestran en chino tradicional (zh-Hant
).
Es importante recordar que xml:lang
tiene un determinado alcance: los elementos en el nivel inferior heredan el atributo de idioma. Esto puede emplearse para identificar el idioma para gran cantidad de contenido (sin tener etiquetas de idioma redundantes en cada elemento). Por ejemplo, es una buena práctica poner xml:lang
en su elemento html
al comienzo de un documento XHTML y sólo reutilizarlo donde cambie el idioma del documento. Para obtener más información, véase el artículo Etiquetas de idiomas en HTML y XML.
Aplicar xml:lang
a un atributo es problemático: no hay forma de:
identificar más de un idioma en el atributo del título
<p title="French (français)">Bonjour</p>
separar el idioma utilizado en el atributo del utilizado en el elemento.
<a title="anglais" href="qa-when-xmllang.en.html" lang="en" xml:lang="en">English</a>
Observe que los tres idiomas de esquema (XML DTD, XML Schema y RELAX NG) difieren con respecto a la cuestión de si un usuario debe definir xml:lang
antes de utilizarlo como atributo. Específicamente:
los XML DTD requieren que todo elementos que utilice xml:lang
como atributo debe declararlo en el DTD.
XML Schema requiere que el espacio de nombres xml se declare e importe antes de utilizar xml:lang
(y otros valores del espacio de nombres xml).
RELAX NG declara previamente el espacio de nombres xml, como en XML, de modo que no se necesita ninguna declaración adicional.
BCP 47, Tags for the Identifying Languages Especifica cómo utilizar las etiquetas de idiomas en valores xml:lang
.
Etiquetas de idiomas en HTML y XML Describe cómo utilizar etiquetas de idiomas.
Enlaces relacionados, Authoring XML