A grandes rasgos las diferencias entre HTML y XHTML se listan a continuación:
Los documentos deben estar bien formados. Bien formado quiere decir estructurado acorde con las reglas definidas por la recomendación de XML 1.0.
Ejemplo 9.2. Contraste de código mal formado y código bien formado para XHTML
Mal formado:
<p>Esto es un párrafo con texto en <em>cursiva</p></em>
Bien formado:
<p>Esto es un párrafo con texto en <em>cursiva</em></p>
Los nombres de elementos y atributos deben estar en minúscula. En HTML se permite nombrar los elementos y atributos en mayúscula o minúscula sin diferencia alguna. En XHTML solamente se usan nombres en minúscula, ya que XML es sensible al formato de mayúsculas/minúsculas.
Se requiere etiqueta de cierre para elementos no-vacíos. En HTML se permite omitir la etiqueta de cierre para algunos elementos, de forma que si se encuentra otra etiqueta de inicio, se da por hecho que la etiqueta que estaba abierta se ha cerrado. En XML, y por tanto en XHTML, no se permiten elementos con etiquetas de inicio y contenido sin etiqueta de cierre.
Ejemplo 9.3. Elementos no-vacíos en XHTML
Incorrecto:
<p>Primer párrafo <p>Segundo párrafo
Correcto:
<p>Primer párrafo</p> <p>Segundo párrafo</p>
Los valores de los atributos deben estar siempre entre comillas. Todos los valores de los atributos deben estar encerrados por comillas dobles, sin importar si aparentemente son valores numéricos.
No se permiten atributos sin su
respectivo valor. XML no soporta la abreviación de
atributos, es decir, especificar atributos sin valor, como el caso
del atributo multiple
en los elementos SELECT para
indicar que se quiere obtener una lista de selección múltiple. En
este caso se debe especificar el atributo y asignar algún valor, por
ejemplo, multiple="multiple"
.
Los elementos vacíos deben ser
cerrados. Elementos como BR o HR no tienen contenido, por
lo que en HTML no hacía falta escribir una etiqueta de cierre como
</br>
, sino simplemente escribir la etiqueta de
inicio <br>
. Sin embargo, en XHTML es necesario
cerrar los elementos vacíos utilizando una barra diagonal en la
misma etiqueta de inicio o utilizando una etiqueta de cierre. Por
ejemplo, en el caso del elemento BR se debería escribir <br
/>
con un espacio antes de la barra diagonal o escribir
<br></br>
.
Se reducen los espacios en el valor de los atributos. En HTML el valor de un atributo puede ser un texto con varios espacios al interior. Sin embargo, en XHTML este valor se reduce eliminando los espacios sobrantes al inicio y al final, además de que se reducen a uno solo los espacios que pueden haber como división entre una y otra palabra del texto.
El contenido de los elementos SCRIPT y STYLE es interpretado como parte del documento. En XHTML el contenido de los elementos STYLE y SCRIPT es interpretado de forma diferente a como se hacía con HTML, de forma que si se encuentra un símbolo < o un símbolo & en el interior de estos elementos pueden considerarse como la indicación de inicio de una etiqueta (como <p>) o como la indicación de una entidad (como ). Por esta razón, se recomienda tener el contenido de estos elementos en archivos aparte.
No se pueden especificar anidaciones prohibidas. En HTML es posible especificar por medio del DTD algunas restricciones con respecto a elementos anidados. En XML y XHTML no es posible hacer ésto, de forma que se recomienda que se respeten estas prohibiciones a pesar de que no se puedan especificar. En general, estas prohiciones son:
Elementos A no pueden contener otros elementos A.
Elementos PRE no pueden contener elementos IMG, OBJECT, BIG, SMALL, SUB o SUP.
Elementos BUTTON no deben contener elementos INPUT, SELECT, TEXTAREA, LABEL, BUTTON, FORM, FIELDSET, IFRAME o ISINDEX.
Elementos LABEL no deben contener otros elementos LABEL.
Elementos FORM no deben contener otros elementos FORM.
Se suprime el atributo name
y se utiliza únicamente el atributo id
como
identificador de fragmentos. En HTML 4 se creó el
atributo id
, que al igual que el atributo
name
se utilizan para identificar fragmentos de código
o elementos. En XHTML es obsoleto utilizar name
, ya que
solamente se requiere utilizar el atributo id
para
identificación.
Los conjuntos de valores predefinidos
son sensibles al formato mayúsculas/minúsculas. Atributos
como type
para los elementos INPUT ya tienen valores
predefinidos, que en HTML se pueden escribir ya sea en mayúscula o
minúscula sin alterar el resultado. Sin embargo, en XML y XHTML se
tienen en cuenta las mayúsculas o minúsculas y se pueden considerr
como dos valores diferentes, de forma que los valores predefinidos
deben escribirse siempre en minúscula.
Las referencias hexadecimales a
entidades son sensibles al formato mayúsculas/minúsculas.
En XML también se permite utilizar referencias a caracteres y
símbolos utilizando su valor hexadecimal. Sin embargo, es diferente
escribir &#Xnn;
a &#xnn;
, por lo
que en XHTML siempre se deben escribir los valores hexadecimales en
minúsculas.