Acerca de este problema HTML
El validador HTML de W3C genera este error cuando encuentra un atributo con espacio de nombres como xmlns:m, xmlns:o, xmlns:v, o cualquier otra declaración xmlns:* en un documento HTML. Estas vinculaciones de espacios de nombres con prefijo son un concepto XML definido en la especificación XML Namespaces. En la sintaxis HTML (documentos servidos con el tipo MIME text/html), el analizador HTML no los trata como declaraciones de espacios de nombres — los trata como atributos regulares con dos puntos en el nombre. Dado que tales nombres de atributo no son serializables en XML 1.0, el validador reporta el error.
Este problema es extremadamente común con contenido exportado desde Microsoft Office (Word, Excel, PowerPoint). Cuando guardas o copias contenido de Office como HTML, el marcado generado a menudo incluye declaraciones de espacios de nombres como xmlns:m (Office Math Markup Language), xmlns:o (espacio de nombres de Office), xmlns:v (VML), y xmlns:w (marcado específico de Word). Estas declaraciones fueron diseñadas para renderizado HTML más antiguo basado en XML y no sirven ningún propósito en documentos HTML5 modernos.
Por qué esto es un problema
-
Cumplimiento de estándares: La especificación HTML5 solo permite el atributo
xmlns(sin prefijo) en el elemento<html>, y solo con el valorhttp://www.w3.org/1999/xhtml. Las formas con prefijo comoxmlns:mno están permitidas. -
Serialización: Si una herramienta intenta serializar el DOM como XML (por ejemplo,
XMLSerializer), los atributos con dos puntos que no son espacios de nombres vinculados correctamente pueden causar fallos o salida inesperada. - Sin beneficio funcional: En un documento HTML, el analizador HTML del navegador ignora estas vinculaciones de espacios de nombres. No habilitan ningún comportamiento especial — son peso muerto en tu marcado.
- Mantenibilidad: Dejar desorden de espacios de nombres generado por Office en tu HTML hace el código más difícil de leer y mantener.
Cómo solucionarlo
-
Elimina el atributo
xmlns:*de tu elemento HTML (o cualquier elemento en el que aparezca). En la mayoría de los casos, esto es todo lo que necesitas hacer — el contenido con espacios de nombres de Office no es renderizado por los navegadores de todos modos. - Limpia el HTML generado por Office eliminando todos los espacios de nombres propietarios, comentarios condicionales y elementos específicos de Office. Herramientas como HTML Tidy o la función “pegar como texto plano” de tu editor pueden ayudar.
- Usa equivalentes nativos de HTML5 cuando sea posible. HTML5 admite nativamente MathML y SVG sin requerir declaraciones explícitas de espacios de nombres.
-
Cambia a XHTML solo si tienes una necesidad genuina de espacios de nombres XML. Esto significa servir el documento con el tipo MIME
application/xhtml+xmly usar sintaxis XML bien formada en todo el documento.
Ejemplos
Incorrecto: declaraciones de espacios de nombres generadas por Office
Este marcado, típico de contenido exportado desde Microsoft Word, desencadena el error de validación:
<!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>
Correcto: HTML5 limpio sin declaraciones de espacios de nombres
Elimina todos los atributos xmlns:* y cualquier marcado específico de Office asociado:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Office Export</title>
</head>
<body>
<p>Content from Word</p>
</body>
</html>
Incorrecto: espacio de nombres único en un elemento que no es html
El error también puede aparecer en otros elementos si una herramienta inserta atributos de espacios de nombres:
<div xmlns:custom="http://example.com/ns">
<p>Some content</p>
</div>
Correcto: eliminar el atributo de espacio de nombres
<div>
<p>Some content</p>
</div>
Usar MathML nativamente en HTML5
Si el atributo xmlns:m se agregó para admitir contenido matemático, ten en cuenta que HTML5 admite MathML directamente sin ninguna declaración de espacio de nombres:
<!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>
No se necesita ningún atributo xmlns:m — el navegador reconoce <math> como MathML automáticamente.
Encuentra problemas como este automáticamente
Rocket Validator escanea miles de páginas en segundos, detectando problemas de HTML en todo tu sitio web.