Por lo que entiendo, la definición de espacios de nombres personalizados es perfectamente válido XHTML
Nop. Los espacios de nombres personalizados son perfectamente bien formados en XML, pero 'válido' tiene el significado específico de que cada elemento y atributo utilizado se declara en el esquema del documento. Ese esquema puede ser una DTD, un Esquema XML u otra cosa, pero debe declararlo.
Así que puede declarar su propio esquema para agregar atributos personalizados al idioma, y de hecho la Modularización XHTML lo hace muy fácil. Tendría que agregar la referencia a la DTD como <! DOCTYPE> en el prólogo; el solo hecho de configurar los URI de espacio de nombres no le da ningún gancho a ningún procesador XML para encontrar el esquema en sí mismo.
Pero entonces lo que ha escrito es "válido my-language-which-is-bit-like-XHTML", y no "valid XHTML". Algunos de estos 'mis idiomas' son conocidos, como 'XHTML + MathML + SVG', pero aún no es XHTML como tal y si su cliente está inactivo en "XHTML válido" no puede usar ninguno de ellos.
También tiene posibles problemas con el navegador, especialmente con IE, que (antes de IE8) hace algunas cosas extrañas con la familia Element. * EtAttribute * de llamadas DOM. Y a menos que realmente esté sirviendo el documento como un tipo de contenido XML (que IE tampoco puede manejar), todas las cosas de su espacio de nombres en realidad no usan espacios de nombres.
En [X] HTML5 hay una propuesta para permitir que los atributos personalizados del usuario (principalmente para fines de scripting) vayan en atributos cuyos nombres comiencen con 'data-'. Pero mientras tanto, el método usual es para ocultar los valores en otro atributo, por ejemplo de la clase:
<div class="userid-123">...</div>
y luego extraer los datos mediante el procesamiento de cadenas adecuados sobre className en escritura.
No entiendo por qué el validador verificaría el DTD para el espacio de nombres. De todos modos, el navegador no comprueba DTD también, y me inclino a creer que realmente no usas XHTML adecuado, es decir, enviaste Content-type: text/html headers para esa página web. Pero puedo estar equivocado. –