Skip to main content
Validação HTML

Atributo “xmlns:dt” não é permitido aqui.

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:dt está 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

  1. Remova o atributo. Se xmlns:dt foi herdado de código legado ou de um template de CMS e nada na sua aplicação depende dele, simplesmente elimine-o.
  2. 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 atributo data-* do HTML5.
  3. 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+xml com 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:dt e quaisquer atributos com prefixo dt:.
  • 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.

Ajude-nos a melhorar os nossos guias

Este guia foi útil?

Pronto para validar os seus sites?
Comece o seu teste gratuito hoje.