Sobre este problema HTML
O W3C HTML Validator gera este erro quando encontra um atributo com namespace como xmlns:m, xmlns:o, xmlns:v, ou qualquer outra declaração xmlns:* num documento HTML. Estas vinculações de namespace com prefixo são um conceito XML definido na especificação XML Namespaces. Na sintaxe HTML (documentos servidos com o tipo MIME text/html), o analisador HTML não os trata como declarações de namespace — trata-os como atributos regulares com dois pontos no nome. Como tais nomes de atributos não são serializáveis em XML 1.0, o validador reporta o erro.
Este problema é extremamente comum com conteúdo exportado do Microsoft Office (Word, Excel, PowerPoint). Quando você guarda ou copia conteúdo do Office como HTML, o markup gerado frequentemente inclui declarações de namespace como xmlns:m (Office Math Markup Language), xmlns:o (namespace do Office), xmlns:v (VML), e xmlns:w (markup específico do Word). Estas declarações foram concebidas para renderização HTML mais antiga baseada em XML e não servem qualquer propósito em documentos HTML5 modernos.
Porquê isto é um problema
-
Conformidade com padrões: A especificação HTML5 apenas permite o atributo
xmlns(sem prefixo) no elemento<html>, e apenas com o valorhttp://www.w3.org/1999/xhtml. Formas com prefixo comoxmlns:mnão são permitidas. -
Serialização: Se uma ferramenta tentar serializar o DOM como XML (por exemplo,
XMLSerializer), atributos com dois pontos que não são namespaces adequadamente vinculados podem causar falhas ou saída inesperada. - Nenhum benefício funcional: Num documento HTML, o analisador HTML do navegador ignora estas vinculações de namespace. Elas não ativam qualquer comportamento especial — são peso morto no seu markup.
- Manutenibilidade: Deixar desordem de namespaces gerados pelo Office no seu HTML torna o código mais difícil de ler e manter.
Como corrigir
-
Remova o atributo
xmlns:*do seu elemento HTML (ou qualquer elemento onde apareça). Na maioria dos casos, isto é tudo o que você precisa de fazer — o conteúdo com namespace do Office não é renderizado pelos navegadores de qualquer forma. - Limpe HTML gerado pelo Office removendo todos os namespaces proprietários, comentários condicionais, e elementos específicos do Office. Ferramentas como HTML Tidy ou a funcionalidade “colar como texto simples” do seu editor podem ajudar.
- Use equivalentes nativos do HTML5 sempre que possível. O HTML5 suporta nativamente MathML e SVG sem requerer declarações explícitas de namespace.
-
Mude para XHTML apenas se você tiver uma necessidade genuína de namespaces XML. Isto significa servir o documento com o tipo MIME
application/xhtml+xmle usar sintaxe XML bem formada por completo.
Exemplos
Incorreto: declarações de namespace geradas pelo Office
Este markup, típico de conteúdo exportado do Microsoft Word, desencadeia o erro de validação:
<!DOCTYPE html>
<html xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<title>Office Export</title>
</head>
<body>
<p>Content from Word</p>
</body>
</html>
Correto: HTML5 limpo sem declarações de namespace
Remova todos os atributos xmlns:* e qualquer markup específico do Office associado:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Office Export</title>
</head>
<body>
<p>Content from Word</p>
</body>
</html>
Incorreto: namespace único num elemento que não é html
O erro também pode aparecer noutros elementos se uma ferramenta inserir atributos de namespace:
<div xmlns:custom="http://example.com/ns">
<p>Some content</p>
</div>
Correto: remova o atributo de namespace
<div>
<p>Some content</p>
</div>
Usar MathML nativamente no HTML5
Se o atributo xmlns:m foi adicionado para suportar conteúdo matemático, note que o HTML5 suporta MathML diretamente sem qualquer declaração de namespace:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>MathML in HTML5</title>
</head>
<body>
<p>The quadratic formula:</p>
<math>
<mi>x</mi>
<mo>=</mo>
<mfrac>
<mrow>
<mo>-</mo>
<mi>b</mi>
<mo>±</mo>
<msqrt>
<msup><mi>b</mi><mn>2</mn></msup>
<mo>-</mo>
<mn>4</mn><mi>a</mi><mi>c</mi>
</msqrt>
</mrow>
<mrow>
<mn>2</mn><mi>a</mi>
</mrow>
</mfrac>
</math>
</body>
</html>
Nenhum atributo xmlns:m é necessário — o navegador reconhece <math> como MathML automaticamente.
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.