Acerca de este problema HTML
En formatos basados en XML como XHTML 1.0 u otros vocabularios XML, las declaraciones de espacios de nombres como xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" se usaban para asociar prefijos de elementos o atributos con URIs de espacios de nombres específicos. Esto permitía que diferentes vocabularios XML coexistieran en un único documento sin conflictos de nomenclatura. El espacio de nombres xmlns:dt en particular se asociaba comúnmente con los tipos de datos XML de Microsoft, que solían verse en ASP heredado o HTML antiguo generado por Microsoft.
HTML5, sin embargo, no utiliza el mecanismo de espacios de nombres XML. El analizador HTML trata el documento como HTML, no XML, y no reconoce ni procesa prefijos de espacios de nombres personalizados. Los únicos atributos relacionados con xmlns permitidos en HTML5 son:
-
xmlnsen el elemento<html>, pero solo con el valorhttp://www.w3.org/1999/xhtml(para compatibilidad con escenarios de servir XHTML). -
Manejo implícito de espacios de nombres para elementos
<svg>y<math>incrustados, que el analizador HTML gestiona automáticamente.
Cualquier otro atributo xmlns:* — como xmlns:dt, xmlns:o, xmlns:v, o xmlns:st1 — es inválido en HTML5 y provocará el error del validador W3C: “Attribute with the local name ‘xmlns:dt’ is not serializable as XML 1.0.”
Por qué esto es un problema
- Cumplimiento de estándares: Los atributos de espacios de nombres XML personalizados violan la especificación HTML5. El analizador HTML no los procesa, por lo que no sirven ningún propósito funcional.
- Problemas de serialización: Si el documento alguna vez se procesa mediante un serializador XML (por ejemplo, al convertir HTML a XHTML), estos atributos no pueden serializarse adecuadamente bajo las reglas de XML 1.0, causando potencialmente fallos de análisis.
- Carga heredada: Estos atributos típicamente aparecen en documentos generados por herramientas antiguas (como la función “Guardar como HTML” de Microsoft Word) y arrastran declaraciones de espacios de nombres específicas de tipos de datos u Office que no tienen sentido en un contexto web moderno.
- Sobrecarga del documento: Mantener declaraciones de espacios de nombres no utilizadas añade bytes innecesarios a tu documento sin ningún beneficio.
Cómo solucionarlo
-
Busca en tu HTML cualquier atributo que comience con
xmlns:en el elemento<html>o en otra parte del documento. -
Elimínalos completamente. Si tu código dependía de tipos de datos XML o características específicas de Office vinculadas a estos espacios de nombres, necesitarás refactorizar esa lógica usando atributos HTML5 estándar (como atributos
data-*) o JavaScript. -
Asegúrate de que tu documento utilice una declaración
<!DOCTYPE html>de HTML5 estándar y una etiqueta<html>limpia.
Si estás trabajando con contenido pegado desde Microsoft Word o herramientas similares, considera ejecutarlo a través de un limpiador de HTML para eliminar todo el marcado específico de Office.
Ejemplos
Incorrecto — atributo xmlns:dt personalizado
Esto provoca el error de validación porque xmlns:dt no es un atributo válido en HTML5:
<html xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
<head>
<title>My Page</title>
</head>
<body>
<p>Hello world</p>
</body>
</html>
Incorrecto — múltiples declaraciones de espacios de nombres personalizados
Los documentos exportados desde herramientas antiguas a menudo incluyen varios atributos de espacios de nombres inválidos a la vez:
<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<title>My Page</title>
</head>
<body>
<p>Hello world</p>
</body>
</html>
Correcto — documento HTML5 limpio
Elimina todos los atributos xmlns:* personalizados y usa una estructura HTML5 estándar:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>My Page</title>
</head>
<body>
<p>Hello world</p>
</body>
</html>
Correcto — usar atributos data como reemplazo
Si previamente dependías de atributos con prefijo de espacio de nombres para almacenar datos personalizados en elementos, usa atributos data-* en su lugar:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>My Page</title>
</head>
<body>
<p data-type="datetime">2024-01-15</p>
</body>
</html>
Encuentra problemas como este automáticamente
Rocket Validator escanea miles de páginas en segundos, detectando problemas de HTML en todo tu sitio web.