Tutorial: Código XHTML
Aún cuando XHTML es compatible con sus versiones previas, algunas consideraciones deben ser tomadas para hacer que funcionen en algunos agentes de usuario viejos. A continuación se listan los problemas de compatibilidad en XHTML 1.0 y sus soluciones.
La declaración XML puede causar que algunos agentes de usuario identifiquen tu documento como irreconocible en lugar de HTML. Esto puede resultar en una mala representación de tu documento. Para resolver este problema deberías evitar el uso de la declaración XML y, como la codificación de caracteres de los documentos XML es especificada en esta, reemplazarla con una declaración meta en el encabezado:
Comienzo del código<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Fin del código
- El cierre abreviado para elementos vacíos debería escribirse con un espacio antes de la barra final. Navegadores viejos considerarán a esta barra como un atributo no identificado y simplemente la ignorarán.
- Compatible:
<br />
- No compatible:
<br/>
- La forma no abreviada para elementos vacíos puede causar que algunos agentes de usuario produzcan resultados inesperados. Usa la la forma abreviada.
- Compatible:
<br />
- No compatible:
<br></br>
Cualquier script o código de hojas de estilos que contenga caracteres como "&" ó "<" ó "]]>" ó "--" será procesador por un procesador XML, el cual también ignorará completamente el texto comentado (por ejemplo, "<!-- comentario -->"). La mejor solución, dado que los bloques CDATA pueden resultar una sintaxis irreconocible en navegadores viejos, es declarar los scripts y código de hojas de estilos en archivos externos. Recuerda que para apuntar a estos archivos debes usar estas declaraciones en el encabezado de tu documento:
Comienzo del código<link rel="stylesheet" type="text/css" href="default.css" />
<script type="text/javascript" src="common.js"></script>
Fin del código
- Múltiples espacios en blanco y saltos de línea en medio de los valores de los atributos pueden causar problemas en muchos agentes de usuario. Evita su uso, especialmente debido a que no son necesarios.
- El atributo "xml:lang" es introducido en XHTML y se propone reemplazar al atributo "lang". Dado que algunos agentes de usuario pueden no reconocer este nuevo atributo usa ambos para compatibilidad (el atributo "xml:lang" toma precedencia).
- Compatible:
<a href="es.html" lang="es" xml:lang="es">
- No compatible:
<a href="es.html" xml:lang="es">
- En XML, las URIs apuntando a bookmarks en una página (por ejemplo, xhtml.html#compatibility) se refieren a atributos "id" en lugar de atributos "name" como en HTML 4. De modo que para lograr una completa compatibilidad con versiones anteriores y actuales (con HTML y XHTML) deberías especificar ambos atributos con el mismo valor.
- Compatible:
<a name="lo-basico" id="lo-basico">
- No compatible:
<a name="lo-basico">
- En XML, los caracteres disponibles para componer atributos "name" e "id" son más que aquellos permitidos en HTML 4. para construir nombres e ids compatibles, usa unicamente: letras de la A a la Z (Mayúsculas y minúsculas), números del 0 al 9, guiones "-", guiones bajos "_", dos puntos ":" y puntos "." (El valor debería empezar siempre con una letra).
- Compatible:
<a name="lo-basico" id="lo-basico">
- No compatible:
<a name="0-lo;basico" id="0-lo;basico">
- La referencia de caracter nombrada ' (el apóstrofe) es introducida en XML 1.0 y por lo tanto válida, pero para HTML 4 es irreconocible. Para lograr compatibilidad usa la representación ' en su lugar.
- Compatible:
it's ok
- No compatible:
it's ok
Esta lista enumera las diferencias entre XHTML 1.0 Strict y XHTML 1.1.
- El atributo "lang" ha sido completamente reemplazado por el atributo "xml:lang".
- Válido:
<span xml:lang="es">Texto</span>
- Inválido:
<span lang="es" xml:lang="es">Texto</span>
- El atributo "name" ha sido completamente reemplazado por el atributo "id" para los elementos "a" y "map".
- Válido:
<a id="bookmark1">Texto ancla</a>
- Inválido:
<a name="bookmark1">Texto ancla</a>
- La colección de elementos "ruby" ha sido agregada. Lee más acerca de anotaciones Ruby
Como has de notar, XHTML 1.1 ya no es compatioble con las versiones anteriores dada la imposibilidad de usar los atributos "name" y "lang". A menos que no tengas la necesidad de utilizarlos, tu documento no será completamente compatible con HTML 4 y con ciertos agentes de usuario.
Puedes siempre validar tus documentos XHTML (así como muchos otros documentos) para revisar que tu arduo esfuerzo es 100% correcto. Puedes hacerlo usando el servicio de validación de etiquetados de W3C donde puedes elegir entre validar por URL, por subida de archivo o por entrada directa. Cuando el resultado es mostrado, la lista de errores y advertencias (si existen) te dejarán ver qué y dónde corregir.