2009-02-24 40 views
9

Ich habe eine Website, die ein Client XHTML-gültig sein muss. Sie überprüfen es mit dem W3C Validator.XHTML-Validierung, benutzerdefinierte Namespaces und Attribute

Ich möchte meine eigenen Namensraum hinzufügen und Attribute, so kann ich diese Dinge wie tun:

<div my:userid="123"> ... </div> 

Von dem, was ich verstehe, Namespaces benutzerdefinierte definiert, ist perfekt gültiges XHTML, solange ich dies tun:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:my="http://www.example.com/my"> 

Wie auch immer, mein XHTML schlägt die Validierung fehl. Das Problem scheint zu sein, dass der Validator nicht wirklich ausgeht und mein benutzerdefiniertes DTD-Dokument auf meinen benutzerdefinierten Namespace prüft, sondern nur XHTML auf bekannte DTDs prüft. Wer weiß, wie ich dieses Problem lösen kann?

+0

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. –

Antwort

6

Für XHTML 1.0 Sie sind eingeschränkt 1.0 Elemente auf XHTML und Attribute:

Normative Definition of XHTML 1.0

Diese Version von XHTML eine Definition streng konforme XHTML 1.0 Dokumente zur Verfügung, die auf Elemente beschränkt sind und Attribute aus die XML- und XHTML 1.0-Namespaces.

Mein Verständnis ist, dass XHTML 2.0 darauf abzielt, einen Rahmen für das zu bieten, was Sie wollen.

5

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.

+0

Ja, das Verbergen der Werte im Klassenattribut ist meine Fallback-Lösung, aber offensichtlich ist es nicht sehr elegant und ich wollte etwas weniger "schmutzig". Die eleganteste Lösung sind die Attributnamen, die mit Daten beginnen - wie Sie bereits erwähnt haben, aber für den Moment sieht es so aus, als müsste ich darauf warten :-) –

3

Ich habe eine Website, die ein Client XHTML-gültig sein muss. Sie überprüfen es mit dem W3C Validator.

Ich habe einige Erfolge mit dem W3C-Validator verwendet habe, nicht xmlns=, aber am Ende als bobince oben beschreibt den Standards XHTML DTD und das Hinzufügen von ein paar Attribute nehmen. Ich benutze dies durch das PHPTAL Template-System verwendete Attribute hinzufügen, wie

<html metal:define-macro="m"> 

Ich bin damit einverstanden, dass, was Sie brauchen nicht XHTML ist aber ein Superset von XHTML. Wenn Ihr Kunde jedoch bereit ist, den W3C-Validator auf Ihre URL zu testen, dann fahren Sie fort. Für Beratung, siehe

+0

http://www.alistapart.com/articles/customdtd/ Wenn Sie eine solche Datei über den W3C-Validator laufen lassen, finden Sie, dass sie wunderbar gut validiert wird. Leider erscheint beim Anzeigen der Datei in einem Browser die]> auf dem Bildschirm. Es gibt keinen Weg um diesen Fehler herum, also ist dieser Ansatz richtig. – davidcl

+0

Aber der Artikel geht weiter zu sagen "Ein Ansatz, der funktioniert * erfordert, dass Sie die XHTML-DTD erhalten und Ihre Änderungen zu dieser Datei hinzufügen." Es funktioniert für mich auf dem W3C Validator und auch der WDG-Validator. – cjakeman

0

1.0 nicht erlaubt dies. Wenn Sie dies wirklich tun möchten, sollten Sie vorhandene dtd herunterladen und speichern Sie es auf Ihrem Server und definieren private statt öffentlich. aber w3c Validierung nicht bestanden, weil es nur gegen die ursprüngliche validieren