Von dem, was ich verstehe, definieren benutzerdefinierte Namensräume ist perfekt gültiges XHTML
Nope. Benutzerdefinierte Namespaces sind perfekt wohlgeformt in XML, aber "gültig" hat die spezifische Bedeutung, dass jedes Element und Attribut verwendet wird im Schema des Dokuments deklariert. Dieses Schema kann eine DTD, ein XML-Schema oder etwas anderes sein, aber Sie müssen es deklarieren.
Sie können also Ihr eigenes Schema deklarieren, um der Sprache benutzerdefinierte Attribute hinzuzufügen, und tatsächlich macht XHTML Modularization dies sehr einfach. Sie müssten den Verweis auf die DTD als <! DOCTYPE> im Prolog hinzufügen; Nur das Setzen von Namespace-URIs gibt einem XML-Prozessor keinen Haken, um das Schema selbst zu finden.
Aber dann, was Sie geschrieben haben, ist "gültig meine Sprache, die ist ein bisschen wie XHTML" und nicht "gültig XHTML". Einige dieser "My-Sprachen" sind bekannt, wie "XHTML + MathML + SVG", aber es ist immer noch nicht XHTML als solches und wenn Ihr Client auf "gültiges XHTML" eingestellt ist, können Sie keines von ihnen verwenden.
Sie haben auch potenzielle Browser-Probleme, insbesondere mit IE, die (vor IE8) einige seltsame Dinge mit der Element. * EtAttribute * Familie von DOM-Aufrufe macht. Und wenn Sie das Dokument nicht als XML-Inhaltstyp bereitstellen (der IE auch nicht verarbeiten kann), verwenden alle Ihre Namespace-Objekte sowieso keine Namespaces.
In [X] HTML5 gibt es einen Vorschlag, benutzerdefinierte Benutzerattribute (hauptsächlich für Scripting-Zwecke) in Attribute zu geben, deren Namen mit "data" beginnen. Aber in der Zwischenzeit die übliche Methode ist, Werte in einem anderen Attribut zu verbergen, zum Beispiel Klasse:
<div class="userid-123">...</div>
und dann die Daten extrahieren mit geeigneten String-Verarbeitung über classname im Skript.
Ich verstehe nicht, warum der Validator die DTD für den Namespace überprüfen würde. Wie auch immer, der Browser überprüft auch nicht die DTD, und ich bin geneigt zu glauben, dass Sie nicht wirklich XHTML verwenden, d. H. Sie haben Content-type: text/html-Header für diese Webseite gesendet. Aber ich kann mich irren. –