Acerca de este problema HTML
El atributo xmlns:dt — abreviatura de “XML Namespace: datatypes” — se usaba históricamente en vocabularios XML específicos de Microsoft (notablemente urn:schemas-microsoft-com:datatypes) para declarar información de tipos de datos en elementos. Era común en markup de la era ASP e IE más antiguo. Sin embargo, HTML5 no es un lenguaje XML y no admite declaraciones de namespace XML arbitrarias en elementos.
En HTML5, el único atributo xmlns permitido es xmlns="http://www.w3.org/1999/xhtml" en el propio elemento <html>, e incluso eso existe únicamente para compatibilidad con la serialización XHTML. Los atributos con prefijo de namespace como xmlns:dt, xmlns:o, o xmlns:v son inválidos. El analizador HTML simplemente no los reconoce, y el validador W3C los marcará con el error “Attribute ‘xmlns:dt’ not allowed here.”
Por qué esto es un problema
- Conformidad con estándares: Usar atributos no estándar significa que tu documento no se ajusta a la especificación HTML, lo que puede llevar a comportamientos impredecibles entre navegadores.
-
Bloqueo heredado: El atributo
xmlns:dtestá vinculado al esquema de tipos de datos propietario de Microsoft. Los navegadores modernos no interpretan ni usan este namespace, por lo que no sirve ningún propósito funcional en un documento HTML5. - Ruido de validación: Los atributos inválidos generan errores de validador que pueden oscurecer problemas reales en tu markup, haciendo más difícil detectar errores genuinos.
- Accesibilidad y herramientas: Los lectores de pantalla, rastreadores de motores de búsqueda y otras herramientas automatizadas esperan HTML válido. Los atributos no estándar pueden confundir analizadores o ser descartados silenciosamente.
Cómo solucionarlo
-
Elimina el atributo. Si
xmlns:dtse heredó de código legacy o una plantilla CMS y nada en tu aplicación depende de él, simplemente elimínalo. -
Reemplaza con atributos
data-*. Si necesitas adjuntar metadatos personalizados a un elemento — por ejemplo, para indicar un tipo de dato para uso de JavaScript — usa un atributo HTML5data-*en su lugar. -
Usa XHTML si se requieren namespaces XML. Si genuinamente necesitas soporte de namespace XML (raro en desarrollo web moderno), sirve tu documento como
application/xhtml+xmlcon un doctype XHTML apropiado y declaración XML. Ten en cuenta que esto cambia las reglas de análisis significativamente.
Ejemplos
Incorrecto: usar xmlns:dt en HTML5
Esto provocará el error de validación:
<ul xmlns:dt="urn:schemas-microsoft-com:datatypes">
<li dt:dt="string">Item one</li>
<li dt:dt="number">42</li>
</ul>
Tanto xmlns:dt en el <ul> como los atributos dt:dt en los elementos <li> son inválidos en HTML5.
Correcto: atributo eliminado
Si la declaración de namespace es innecesaria (lo cual casi siempre es así en HTML moderno), elimínala junto con cualquier atributo con prefijo:
<ul>
<li>Item one</li>
<li>42</li>
</ul>
Correcto: usar atributos data-* para metadatos personalizados
Si tu JavaScript o lógica de aplicación necesita conocer el tipo de dato de cada elemento, usa atributos data-* válidos:
<ul>
<li data-type="string">Item one</li>
<li data-type="number">42</li>
</ul>
Entonces puedes acceder a estos valores en JavaScript con element.dataset.type.
Correcto: migrar un contenedor div heredado
Un patrón heredado común coloca xmlns:dt en un div contenedor:
<!-- Inválido -->
<div xmlns:dt="urn:schemas-microsoft-com:datatypes">
<span dt:dt="dateTime">2024-01-15</span>
</div>
La versión corregida elimina el namespace y usa atributos estándar:
<div>
<time datetime="2024-01-15">January 15, 2024</time>
</div>
En este caso, el elemento semántico <time> con su atributo datetime es la forma apropiada de HTML5 para representar valores de fecha y hora — no se necesita namespace personalizado.
Lista de verificación rápida
-
Busca en tu código base
xmlns:dty cualquier atributo con prefijodt:. - Revisa plantillas CMS, markup generado por servidor y código heredado copiado y pegado — estas son las fuentes más comunes.
-
Elimina los atributos o reemplázalos con equivalentes
data-*. - Re-valida tu documento para confirmar que el error se ha resuelto.
Encuentra problemas como este automáticamente
Rocket Validator escanea miles de páginas en segundos, detectando problemas de HTML en todo tu sitio web.