Skip to main content
Validação HTML

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

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

  1. Remova todos os atributos xmlns:o dos seus elementos HTML.
  2. Remova quaisquer elementos específicos do Office como <o:p>, <o:SmartTagType>, ou etiquetas similares que dependam do namespace Office.
  3. Verifique outros namespaces Office como xmlns:v, xmlns:w, xmlns:m, e xmlns:st1 — estes também devem ser removidos.
  4. 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.
  5. 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.

Ajude-nos a melhorar os nossos guias

Este guia foi útil?

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