Sobre este problema HTML
Em formatos baseados em XML como XHTML 1.0 ou outros vocabulários XML, declarações de namespace como xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" eram usadas para associar prefixos de elementos ou atributos com URIs de namespace específicos. Isto permitia que diferentes vocabulários XML coexistissem num único documento sem conflitos de nomeação. O namespace xmlns:dt em particular estava comummente associado aos tipos de dados XML da Microsoft, frequentemente visto em ASP legado ou HTML antigo gerado pela Microsoft.
HTML5, no entanto, não usa o mecanismo de namespace XML. O parser HTML trata o documento como HTML, não XML, e não reconhece nem processa prefixos de namespace personalizados. Os únicos atributos relacionados com xmlns permitidos em HTML5 são:
-
xmlnsno elemento<html>, mas apenas com o valorhttp://www.w3.org/1999/xhtml(para compatibilidade com cenários de servir XHTML). -
Gestão implícita de namespace para elementos
<svg>e<math>incorporados, que o parser HTML gere automaticamente.
Qualquer outro atributo xmlns:* — como xmlns:dt, xmlns:o, xmlns:v, ou xmlns:st1 — é inválido em HTML5 e irá desencadear o erro do validador W3C: “Atributo com o nome local ‘xmlns:dt’ não é serializável como XML 1.0.”
Por que isto é um problema
- Conformidade com standards: Atributos de namespace XML personalizados violam a especificação HTML5. O parser HTML não os processa, pelo que não servem nenhum propósito funcional.
- Problemas de serialização: Se o documento alguma vez for processado através de um serializador XML (por exemplo, ao converter HTML para XHTML), estes atributos não podem ser adequadamente serializados sob as regras XML 1.0, potencialmente causando falhas de parsing.
- Bagagem legada: Estes atributos aparecem tipicamente em documentos gerados por ferramentas antigas (como a funcionalidade “Guardar como HTML” do Microsoft Word) e carregam declarações de namespace específicas de tipos de dados ou do Office que são sem significado num contexto web moderno.
- Inchaço do documento: Manter declarações de namespace não utilizadas adiciona bytes desnecessários ao seu documento sem qualquer benefício.
Como corrigir
-
Procure no seu HTML por quaisquer atributos que comecem com
xmlns:no elemento<html>ou noutro local do documento. -
Remova-os completamente. Se o seu código dependia de tipos de dados XML ou funcionalidades específicas do Office ligadas a estes namespaces, você precisará de refatorar essa lógica usando atributos HTML5 standard (como atributos
data-*) ou JavaScript. -
Certifique-se de que o seu documento usa uma declaração
<!DOCTYPE html>HTML5 standard e uma tag<html>limpa.
Se estiver a trabalhar com conteúdo colado do Microsoft Word ou ferramentas similares, considere passá-lo por um limpador HTML para remover todo o markup específico do Office.
Exemplos
Incorreto — atributo xmlns:dt personalizado
Isto desencadeia o erro de validação porque xmlns:dt não é um atributo válido em HTML5:
<html xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
<head>
<title>My Page</title>
</head>
<body>
<p>Hello world</p>
</body>
</html>
Incorreto — múltiplas declarações de namespace personalizadas
Documentos exportados de ferramentas antigas frequentemente incluem vários atributos de namespace inválidos de uma só 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>
Correto — documento HTML5 limpo
Remova todos os atributos xmlns:* personalizados e use uma estrutura HTML5 standard:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>My Page</title>
</head>
<body>
<p>Hello world</p>
</body>
</html>
Correto — usar atributos data como substituição
Se anteriormente você dependia de atributos com prefixo de namespace para armazenar dados personalizados em elementos, use atributos data-* em vez disso:
<!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>
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.