Acerca de este problema HTML
El atributo xmlns:v es una declaración de namespace que vincula el prefijo v al namespace VML de Microsoft (urn:schemas-microsoft-com:vml). VML era un formato de gráficos vectoriales propietario usado principalmente por Internet Explorer (versiones 5 a 9) para renderizar formas, líneas y otros elementos gráficos. Cuando Microsoft abandonó el soporte de VML en favor de SVG a partir de IE 9, la tecnología se volvió obsoleta.
En HTML5 (el estándar HTML vigente), las declaraciones de namespace usando el patrón de prefijo xmlns: no están permitidas. El analizador HTML no procesa estos como enlaces de namespace reales — son tratados como atributos regulares con dos puntos en el nombre. El validador marca esto porque tales atributos no pueden pasar por un serializador XML 1.0 de ida y vuelta. Un nombre de atributo que contiene dos puntos implica un prefijo de namespace en XML, pero sin una declaración de namespace apropiada en la salida XML, la serialización sería inválida. Esto significa que tu documento no puede ser convertido de forma confiable entre formatos HTML y XML.
Este problema aparece comúnmente en páginas generadas por versiones antiguas de Microsoft Office (Word, Outlook) que exportan a HTML, o en plantillas legacy que fueron diseñadas para compatibilidad con IE. También puedes ver advertencias similares para atributos relacionados como xmlns:o (namespace de Office) o xmlns:w (namespace de Word).
Por qué esto importa
- Cumplimiento de estándares: HTML5 explícitamente no soporta declaraciones de namespace personalizadas. Solo se reconocen los namespaces integrados para SVG y MathML.
- Sin beneficio funcional: Dado que ningún navegador moderno soporta VML, el atributo no cumple ningún propósito. Añade peso muerto a tu marcado.
- Interoperabilidad: Los documentos con atributos no serializables no pueden ser procesados limpiamente por herramientas basadas en XML, transformaciones XSLT, o cualquier sistema que necesite serialización XML válida.
Cómo solucionarlo
-
Elimina el atributo
xmlns:vde tu elemento<html>(o donde sea que aparezca). -
Elimina cualquier otra declaración de namespace legacy de Microsoft como
xmlns:o,xmlns:w, oxmlns:x. -
Elimina cualquier elemento específico de VML (como
<v:shape>,<v:oval>, etc.) de tu documento, ya que no son reconocidos por navegadores modernos. - Reemplaza los gráficos VML con SVG si aún necesitas funcionalidad de gráficos vectoriales. SVG está soportado nativamente en todos los navegadores modernos y es parte del estándar HTML.
Ejemplos
Incorrecto: declaración de namespace VML legacy
<!DOCTYPE html>
<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" lang="en">
<head>
<title>Legacy VML Page</title>
</head>
<body>
<v:oval style="width:100px;height:75px" fillcolor="blue"></v:oval>
</body>
</html>
Esto desencadena la advertencia del validador tanto para xmlns:v como para xmlns:o, y el elemento <v:oval> no es reconocido por ningún navegador moderno.
Correcto: namespace eliminado, VML reemplazado con SVG
<!DOCTYPE html>
<html lang="en">
<head>
<title>Modern SVG Page</title>
</head>
<body>
<svg width="100" height="75" xmlns="http://www.w3.org/2000/svg">
<ellipse cx="50" cy="37.5" rx="50" ry="37.5" fill="blue" />
</svg>
</body>
</html>
Correcto: eliminación simple cuando no se necesitan gráficos vectoriales
Si el namespace fue incluido innecesariamente (común con HTML generado automáticamente), simplemente elimínalo:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Clean Page</title>
</head>
<body>
<p>No legacy namespace attributes needed.</p>
</body>
</html>
Si tu HTML fue exportado desde Microsoft Office, considera pasarlo por un limpiador HTML o eliminar manualmente todos los atributos xmlns:* y elementos propietarios. El marcado resultante será más pequeño, válido y completamente compatible con navegadores modernos.
Encuentra problemas como este automáticamente
Rocket Validator escanea miles de páginas en segundos, detectando problemas de HTML en todo tu sitio web.