Sobre este problema HTML
Em XML e XHTML, o atributo xmlns é usado para declarar namespaces que permitem que elementos e atributos de diferentes vocabulários coexistam sem conflitos de nomenclatura. O prefixo xmlns:o especificamente declara o namespace do Microsoft Office (urn:schemas-microsoft-com:office:office), que permite elementos e atributos específicos do Office como <o:p> (marcadores de parágrafo do Office) dentro do documento.
O HTML5, contudo, não é uma linguagem XML. A especificação HTML5 apenas permite o atributo xmlns no elemento <html> (e apenas com o valor http://www.w3.org/1999/xhtml), juntamente com xmlns:xlink em elementos SVG. Prefixos de namespace personalizados como xmlns:o, xmlns:v (VML), e xmlns:w (Word) não são reconhecidos como atributos válidos em nenhum elemento HTML5 e irão desencadear erros de validação.
Por que isto acontece
Este problema ocorre mais comumente quando:
- O conteúdo é colado do Microsoft Word num editor WYSIWYG ou CMS. O Word gera a sua própria variante de HTML que inclui declarações de namespace do Office e elementos proprietários.
- Ficheiros HTML são exportados de aplicações Office como Word, Excel ou Outlook. Estas exportações produzem marcação fortemente dependente de namespaces específicos do Office.
- Modelos de email são construídos usando ferramentas que geram HTML compatível com Office, carregando bagagem de namespace para páginas web padrão.
Por que isto é importante
- Conformidade com padrões: O HTML5 não suporta declarações de namespace XML arbitrárias, por isso estes atributos tornam o seu documento inválido.
- Marcação inchada: O HTML gerado pelo Office frequentemente inclui não apenas as declarações de namespace mas também grandes quantidades de elementos específicos do Office, comentários condicionais e estilos inline que aumentam significativamente o tamanho da página.
- Dificuldade de manutenção: O HTML com sabor Office é mais difícil de ler, editar e manter comparado com marcação limpa e compatível com padrões.
-
Possíveis problemas de renderização: Embora os navegadores geralmente ignorem atributos não reconhecidos, os elementos específicos do Office que os acompanham (como
<o:p>) podem ocasionalmente causar comportamento inesperado de espaçamento ou layout.
Como corrigir
-
Remova todos os atributos
xmlns:odos seus elementos HTML. -
Remova quaisquer elementos específicos do Office como
<o:p>,<o:SmartTagType>, ou etiquetas similares que dependam do namespace Office. -
Verifique outros namespaces Office como
xmlns:v,xmlns:w,xmlns:m, exmlns:st1— estes também devem ser removidos. - Limpe o conteúdo colado antes de o inserir no seu HTML. Muitos editores de texto e plataformas CMS oferecem uma opção “Colar como texto simples” que remove a formatação do Office.
- Se usar um CMS ou editor de texto rico, procure por uma funcionalidade “Limpar HTML do Word” ou similar para automaticamente remover artefactos do Office.
Exemplos
❌ Inválido: declarações de namespace Office em elementos
<!DOCTYPE html>
<html lang="en">
<head>
<title>Company Report</title>
</head>
<body xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:w="urn:schemas-microsoft-com:office:word">
<h1>Quarterly Report</h1>
<p class="MsoNormal">Revenue increased by 15% this quarter.<o:p></o:p></p>
<p class="MsoNormal">Expenses remained stable.<o:p></o:p></p>
</body>
</html>
Esta marcação contém três declarações de namespace Office no elemento <body> e usa elementos <o:p> dentro de parágrafos — tudo isto é inválido em HTML5.
✅ Válido: HTML limpo sem namespaces Office
<!DOCTYPE html>
<html lang="en">
<head>
<title>Company Report</title>
</head>
<body>
<h1>Quarterly Report</h1>
<p>Revenue increased by 15% this quarter.</p>
<p>Expenses remained stable.</p>
</body>
</html>
❌ Inválido: namespace num elemento div
<div xmlns:o="urn:schemas-microsoft-com:office:office">
<p class="MsoNormal">Meeting notes from Tuesday.<o:p></o:p></p>
</div>
✅ Válido: versão limpa
<div>
<p>Meeting notes from Tuesday.</p>
</div>
Note que nos exemplos corrigidos, o atributo class="MsoNormal" também foi removido. Embora MsoNormal seja tecnicamente um nome de classe válido que não causará um erro de validação, é uma classe gerada pelo Office sem propósito a menos que você tenha regras CSS correspondentes — removê-la mantém a sua marcação limpa.
Se realmente precisar de suporte para namespace XML para processamento de documentos, use um documento XHTML adequado servido com o tipo de conteúdo application/xhtml+xml, ou trate o processamento XML separadamente do seu HTML voltado para a web.
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.