Skip to main content
Validação HTML

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

Sobre este problema HTML

A especificação HTML5 limita estritamente quais atributos são válidos no elemento <html>—e em elementos em geral. Atributos globais padrão como lang, dir, class, e id são permitidos, e na serialização XHTML o atributo xmlns simples é permitido para declarar o namespace XHTML padrão. No entanto, declarações de namespace com prefixo como xmlns:m, xmlns:o, xmlns:v, ou xmlns:w são construções XML que não têm significado no modelo de parsing HTML5 (text/html).

Estes atributos de namespace com prefixo aparecem mais frequentemente quando conteúdo é gerado por ou copiado de produtos Microsoft Office (Word, Excel, PowerPoint). O Office usa namespaces XML personalizados como xmlns:m para Office MathML (http://schemas.microsoft.com/office/2004/12/omml) e xmlns:o para markup específico do Office. Quando este markup é guardado como HTML ou colado numa página web, estas declarações vêm junto e desencadeiam erros de validação.

Porque isto é um problema

  • Conformidade com padrões: A especificação W3C HTML5 não suporta declarações de namespace XML personalizados na serialização text/html. Validadores irão sinalizar cada atributo deste tipo.
  • Nenhum benefício funcional: Os parsers HTML5 ignoram prefixos de namespace inteiramente. A declaração xmlns:m não faz nada num navegador que renderiza uma página HTML5, por isso é código morto.
  • Inchaço de conteúdo: HTML gerado pelo Office frequentemente inclui muitas declarações de namespace desnecessárias, estilos inline, e elementos proprietários que incham o documento e o tornam mais difícil de manter.
  • Acessibilidade e interoperabilidade: HTML limpo e válido é mais fácil para tecnologias assistivas, motores de busca, e outros user agents processarem de forma confiável.

Como corrigir

  1. Remova o atributo de namespace personalizado do elemento <html> (ou qualquer elemento onde apareça).
  2. Remova quaisquer elementos ou atributos que dependam desse prefixo de namespace (ex., <m:oMath>, <o:p>), já que não são elementos HTML5 válidos.
  3. Substitua por equivalentes nativos do HTML5 quando possível. Por exemplo, MathML é nativamente suportado em HTML5 sem qualquer declaração de namespace—você pode usar elementos <math> diretamente.
  4. Se realmente precisar de namespaces XML, sirva o seu documento como XHTML com o tipo de conteúdo application/xhtml+xml em vez de text/html.

Exemplos

Incorreto: Namespace personalizado no elemento html

Isto desencadeia o erro “Atributo xmlns:m não permitido aqui”:

<!DOCTYPE html>
<html xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
      xmlns:o="urn:schemas-microsoft-com:office:office"
      lang="en">
  <head>
    <title>Office Paste Example</title>
  </head>
  <body>
    <p>Some content with Office markup.</p>
  </body>
</html>

Correto: HTML5 limpo sem declarações de namespace

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Clean HTML5 Example</title>
  </head>
  <body>
    <p>Some content without Office markup.</p>
  </body>
</html>

Correto: Usando MathML nativamente em HTML5

Se o namespace xmlns:m estava a ser usado para conteúdo matemático, HTML5 suporta MathML diretamente sem qualquer declaração de namespace:

<!DOCTYPE html>
<html lang="en">
  <head>
    <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>
            <mrow>
              <msup><mi>b</mi><mn>2</mn></msup>
              <mo>-</mo>
              <mn>4</mn><mi>a</mi><mi>c</mi>
            </mrow>
          </msqrt>
        </mrow>
        <mrow>
          <mn>2</mn><mi>a</mi>
        </mrow>
      </mfrac>
    </math>
  </body>
</html>

Incorreto: Atributo de namespace num elemento não-html

O mesmo erro pode aparecer noutros elementos também:

<div xmlns:o="urn:schemas-microsoft-com:office:office">
  <p>Office content</p>
</div>

Correto: Remover o atributo de namespace

<div>
  <p>Office content</p>
</div>

Se está a limpar HTML gerado pelo Office, considere usar uma ferramenta dedicada ou uma opção “colar como texto simples” no seu CMS para remover markup proprietário antes de entrar nas suas páginas. Isto mantém o seu HTML enxuto, válido, e fácil de manter.

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.