Sobre este problema HTML
O atributo xmlns:dt — abreviação de “XML Namespace: datatypes” — foi historicamente usado em vocabulários XML específicos da Microsoft (nomeadamente urn:schemas-microsoft-com:datatypes) para declarar informações de tipo de dados em elementos. Era comum em markup mais antigo da era ASP e IE. No entanto, HTML5 não é uma linguagem XML, e não suporta declarações arbitrárias de namespace XML em elementos.
Em HTML5, o único atributo xmlns permitido é xmlns="http://www.w3.org/1999/xhtml" no próprio elemento <html>, e mesmo esse existe apenas para compatibilidade com serialização XHTML. Atributos com prefixo de namespace como xmlns:dt, xmlns:o, ou xmlns:v são inválidos. O analisador HTML simplesmente não os reconhece, e o validador W3C irá sinalizá-los com o erro “Attribute ‘xmlns:dt’ not allowed here.”
Porque isto é um problema
- Conformidade com padrões: Usar atributos não-padrão significa que o seu documento não está em conformidade com a especificação HTML, o que pode levar a comportamento imprevisível em diferentes browsers.
-
Dependência legada: O atributo
xmlns:dtestá vinculado ao esquema de tipos de dados proprietário da Microsoft. Os browsers modernos não interpretam nem usam este namespace, então não serve qualquer propósito funcional num documento HTML5. - Ruído de validação: Atributos inválidos geram erros no validador que podem obscurecer problemas reais no seu markup, tornando mais difícil detetar bugs genuínos.
- Acessibilidade e ferramentas: Leitores de ecrã, crawlers de motores de busca, e outras ferramentas automatizadas esperam HTML válido. Atributos não-padrão podem confundir analisadores ou ser silenciosamente descartados.
Como corrigir
-
Remova o atributo. Se
xmlns:dtfoi herdado de código legado ou de um template de CMS e nada na sua aplicação depende dele, simplesmente elimine-o. -
Substitua por atributos
data-*. Se precisar anexar metadados personalizados a um elemento — por exemplo, para indicar um tipo de dados para uso pelo JavaScript — use um atributodata-*do HTML5. -
Use XHTML se namespaces XML forem necessários. Se realmente precisar de suporte a namespace XML (raro no desenvolvimento web moderno), sirva o seu documento como
application/xhtml+xmlcom um doctype XHTML adequado e declaração XML. Tenha em mente que isto altera significativamente as regras de análise.
Exemplos
Incorreto: Usando xmlns:dt em HTML5
Isto irá gerar o erro de validação:
<ul xmlns:dt="urn:schemas-microsoft-com:datatypes">
<li dt:dt="string">Item um</li>
<li dt:dt="number">42</li>
</ul>
Tanto xmlns:dt no <ul> como os atributos dt:dt nos elementos <li> são inválidos em HTML5.
Correto: Atributo removido
Se a declaração de namespace for desnecessária (o que quase sempre é em HTML moderno), remova-a juntamente com quaisquer atributos com prefixo:
<ul>
<li>Item um</li>
<li>42</li>
</ul>
Correto: Usando atributos data-* para metadados personalizados
Se o seu JavaScript ou lógica de aplicação precisar conhecer o tipo de dados de cada item, use atributos data-* válidos:
<ul>
<li data-type="string">Item um</li>
<li data-type="number">42</li>
</ul>
Pode então aceder a estes valores em JavaScript com element.dataset.type.
Correto: Migrando um wrapper div legado
Um padrão legado comum coloca xmlns:dt num div contentor:
<!-- Inválido -->
<div xmlns:dt="urn:schemas-microsoft-com:datatypes">
<span dt:dt="dateTime">2024-01-15</span>
</div>
A versão corrigida remove o namespace e usa atributos padrão:
<div>
<time datetime="2024-01-15">15 de Janeiro de 2024</time>
</div>
Neste caso, o elemento semântico <time> com o seu atributo datetime é a forma adequada em HTML5 de representar valores de data e hora — não é necessário namespace personalizado.
Lista de verificação rápida
-
Procure no seu código por
xmlns:dte quaisquer atributos com prefixodt:. - Verifique templates de CMS, markup gerado pelo servidor, e código legado copiado — estas são as fontes mais comuns.
-
Remova os atributos ou substitua-os por equivalentes
data-*. - Valide novamente o seu documento para confirmar que o erro foi resolvido.
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.