Validator wählt das falsche Encoding
Marc Reichelt
- xml
Hi!
Ich bin dabei, eine Datenbank für legale ed2k-Links zu schreiben, und lasse jetzt das Ganze vom W3C-Validator parsen (XML).
Dazu habe ich auch eine eigene DTD geschrieben.
Jetzt aber folgendes:
Mittlerweile habe ich es geschafft, alle Fehler zu beheben - aber der Validator erkennt das Dokument nicht als UTF-8, obwohl es explizit oben im <?xml?>-Tag steht:
<?xml version="1.0" encoding="utf-8" ?>
Ich muss das erst manuell beim W3C auswählen.
Hat jemand eine Ahnung wieso? Auch "UTF-8" hat mich nicht weitergebracht!
Ach ja, der Link:
http://validator.w3.org/check?uri=http%3A%2F%2F84.129.84.84%2Fopened2kdb.xml&charset=(detect+automatically)
Dort steht zwar dass das Encoding "us-ascii" empfohlen wird, aber man muss doch auch UTF-8 auswählen können ohne den Browser dies senden zu lassen!?
Vielen Dank im Voraus!
Marc Reichelt || http://www.marcreichelt.de/
Hi,
Mittlerweile habe ich es geschafft, alle Fehler zu beheben - aber der Validator erkennt das Dokument nicht als UTF-8, obwohl es explizit oben im <?xml?>-Tag steht:
<?xml version="1.0" encoding="utf-8" ?>
Ich muss das erst manuell beim W3C auswählen.
Hat jemand eine Ahnung wieso?
Jeder, der lesen kann:
The relevant specification (RFC 3023) specifies a strong default of "us-ascii" for such documents so we will use this value regardless of any encoding you may have indicated elsewhere.
Dort steht zwar dass das Encoding "us-ascii" empfohlen wird, aber man muss doch auch UTF-8 auswählen können
klar, entweder wird der Webserver entsprechend konfiguriert oder aber im Validator manuell das gewünschte Encoding eingestellt.
ohne den Browser dies senden zu lassen!?
Ein Browser hat dabei gar nichts zu sagen.
cu,
Andreas
Hi!
klar, entweder wird der Webserver entsprechend konfiguriert oder aber im Validator manuell das gewünschte Encoding eingestellt.
ohne den Browser dies senden zu lassen!?
Ein Browser hat dabei gar nichts zu sagen.
Eben. Aber wozu ist denn das "encoding"-Attribut des <?xml?>-Tags da, wenn nicht um das Encoding einzustellen?
Irgendetwas ist da unlogisch.
cu
Marc Reichelt || http://www.marcreichelt.de/
Hallo,
... wozu ist denn das "encoding"-Attribut des <?xml?>-Tags da, wenn nicht um das Encoding einzustellen?
Irgendetwas ist da unlogisch.
Da ist nix unlogisch wenn man die Spezifikationen kennt und der W3c-Validator richtig funktionieren würde.
Es ist folgendermaßen:
Wenn ein Charset im content-type-Header vorhanden ist, wird dieser benutzt - egal was in der XML-Deklaration im Dokument steht (einer der Schwachsinnigsten "Vorschriften" des W3c).
Sollte dies Angabe fehlen wird der Charset aus der XML-Deklartion benutzt. Sollte auch dieser fehlen, wird entweder UTF-8 oder UTF-16 benutzt - dies wird vom Parser automatisch erkannt (oder sollte...).
Den Header kannst du mit einen funktionierenden Validator anzeigen lassen (http://www.validome.org. Wie du dort sehen kannst wird im Header kein Charset geschickt und die Angabe aus der XML-Deklaration benutzt (UTF-8). Und das Beste; dein Dokument ist valide.
Unter http://www.validome.org/lang/ge/html/comparison/ kannst Du noch mehr Fehler des W3c-Validator begutachten.
Grüße
Thomas
Hi!
Hallo,
... wozu ist denn das "encoding"-Attribut des <?xml?>-Tags da, wenn nicht um das Encoding einzustellen?
Irgendetwas ist da unlogisch.Da ist nix unlogisch wenn man die Spezifikationen kennt und der W3c-Validator richtig funktionieren würde.
Es ist folgendermaßen:
Wenn ein Charset im content-type-Header vorhanden ist, wird dieser benutzt - egal was in der XML-Deklaration im Dokument steht (einer der Schwachsinnigsten "Vorschriften" des W3c).
Sollte dies Angabe fehlen wird der Charset aus der XML-Deklartion benutzt. Sollte auch dieser fehlen, wird entweder UTF-8 oder UTF-16 benutzt - dies wird vom Parser automatisch erkannt (oder sollte...).
Den Header kannst du mit einen funktionierenden Validator anzeigen lassen (http://www.validome.org. Wie du dort sehen kannst wird im Header kein Charset geschickt und die Angabe aus der XML-Deklaration benutzt (UTF-8). Und das Beste; dein Dokument ist valide.
Unter http://www.validome.org/lang/ge/html/comparison/ kannst Du noch mehr Fehler des W3c-Validator begutachten.
Super, du hast mir echt gut weitergeholfen! *freu*
Bis denn
Marc Reichelt || http://www.marcreichelt.de/
Hallo,
Und das Beste; dein Dokument ist valide.
Unter http://www.validome.org/lang/ge/html/comparison/ kannst Du noch mehr Fehler des W3c-Validator begutachten.
Super, du hast mir echt gut weitergeholfen! *freu*
Sorry, aber sein XML von vorne bist hinten ungültig.
Würden die Parameter-Entities von W3C-Parser und Validom richtig aufgelöst, müsste sie laute Fehler ausspucken.
z.B.
<!ENTITY % URI "CDATA">
<!ELEMENT url %URI;>
Ergib: <!ELEMENT url CDATA> und das sit falsch.
Richtig wäre <!ELEMENT url (#PCDATA)>
Usw.
Falls irgendein Parser das XML als valide bezeichnet, hat der Parser keine Ahung von DTDs.
Grüße
Thomas
Hi!
<!ENTITY % URI "CDATA">
<!ELEMENT url %URI;>Ergib: <!ELEMENT url CDATA> und das sit falsch.
Richtig wäre <!ELEMENT url (#PCDATA)>Usw.
Falls irgendein Parser das XML als valide bezeichnet, hat der Parser keine Ahung von DTDs.
Nicht ganz: PCDATA steht für Parsed Character Data, und CDATA entspechend für Character Data.
In URLs kommen keine anderen Tags vor, also braucht das auch nicht geparsed zu werden...
cu
Marc Reichelt || http://www.marcreichelt.de/
Hallo,
Nicht ganz: PCDATA steht für Parsed Character Data, und CDATA entspechend für Character Data.
In URLs kommen keine anderen Tags vor, also braucht das auch nicht geparsed zu werden...
Es ist uninteressant, ob im Element andere Elemente vorkommen oder nicht. Ein Element darf nicht mit CDATA deklariert werden.
Müssen wir das jetzt stunden lang ausdiskutieren, oder glaubst du mir einfach, dass wie du es gemacht hast zu einer ungültigen XML-Datei führt?
Grüße
Thomas
Hi!
Hallo,
Nicht ganz: PCDATA steht für Parsed Character Data, und CDATA entspechend für Character Data.
In URLs kommen keine anderen Tags vor, also braucht das auch nicht geparsed zu werden...Es ist uninteressant, ob im Element andere Elemente vorkommen oder nicht. Ein Element darf nicht mit CDATA deklariert werden.
Müssen wir das jetzt stunden lang ausdiskutieren, oder glaubst du mir einfach, dass wie du es gemacht hast zu einer ungültigen XML-Datei führt?
Du hast Recht und ich hab meine Ruhe ;-)
Aber muss man denn statt #CDATA wirklich #PCDATA nehmen?
Und wie muss das Ganze dann nach meiner Lösung - also mit Entities - aussehen, und ist das dann auch Validator-konform?
cu
Marc Reichelt || http://www.marcreichelt.de/
Hallo,
Müssen wir das jetzt stunden lang ausdiskutieren, oder glaubst du mir einfach, dass wie du es gemacht hast zu einer ungültigen XML-Datei führt?
Du hast Recht und ich hab meine Ruhe ;-)
So geht das natürlich auch. ;-)
Du kannst so schreiben und machen wie du möchtest. Ich möchte nur ,dass du weisst, dass dein XML ist dann ungültig.
Aber muss man denn statt #CDATA wirklich #PCDATA nehmen?
Ja.
Was dich in diesem Fall interessieren könnte kannst du ein wenig unter http://edition-w3c.de/TR/2000/REC-xml-20001006/#sec-mixed-content nachlesen.
Und wie muss das Ganze dann nach meiner Lösung - also mit Entities - aussehen, und ist das dann auch Validator-konform?
<!-- some entities for use within the DTD -->
<!ENTITY % LanguageCode "NMTOKEN">
<!-- a language code -->
<!ENTITY % Version "CDATA">
<!-- a version number, like "0.01" -->
<!ENTITY % URI "(#PCDATA)">
<!-- a Uniform Resource Identifier -->
<!ENTITY % EText "(#PCDATA)">
<!-- a simple text in elements -->
<!ENTITY % AText "CDATA">
<!-- a simple text in attributes -->
<!ENTITY % Ed2klink "(#PCDATA)">
<!-- an ed2klink -->
<!ENTITY % special "br">
<!-- allow to create new line characters -->
<!ENTITY % Description "(#PCDATA | %special;)*">
<!-- content within descriptions -->
<!-- following the definition for the opened2kdb -->
<!ELEMENT opened2kdb (basicsettings, data)>
<!ATTLIST opened2kdb version %Version; #REQUIRED>
<!ELEMENT basicsettings (categories)>
<!ELEMENT categories (category+)>
<!ELEMENT category (translate+, category*)>
<!ATTLIST category short %AText; #REQUIRED>
<!ELEMENT translate %EText;>
<!ATTLIST translate lang %LanguageCode; #REQUIRED>
<!ELEMENT data (ed2kelement+)>
<!ELEMENT ed2kelement (langsection+)>
<!ATTLIST ed2kelement category %AText; #REQUIRED>
<!ELEMENT langsection (title, desc, url?, img?, ed2k+)>
<!ATTLIST langsection lang %LanguageCode; #REQUIRED>
<!ELEMENT title %EText;>
<!ELEMENT desc %Description;>
<!ELEMENT br EMPTY>
<!ELEMENT url %URI;>
<!ELEMENT img %URI;>
<!ELEMENT ed2k %Ed2klink;>
<!ATTLIST ed2k title %AText; #REQUIRED>
Grüße
Thomas
Hi!
Super, echt spitze von dir!
Hätte jetzt wirklich nicht erwartet dass du die ganze Datei nimmst und überprüfst - ich glaube dafür muss ich dir jetzt eine virtuelle Tasse Kaffee (oder eher Gute-Nacht-Trunk? Je nachdem) spendiere - prost!
Bis denn
Marc Reichelt || http://www.marcreichelt.de/
Hallo,
Super, echt spitze von dir!
Hätte jetzt wirklich nicht erwartet dass du die ganze Datei nimmst und überprüfst -
Kein Problem. ;-)
ich glaube dafür muss ich dir jetzt eine virtuelle Tasse Kaffee (oder eher Gute-Nacht-Trunk? Je nachdem) spendiere - prost!
Apfel-Tee ;-) (im Moment)
Grüße
Thomas
Hi!
<!ENTITY % URI "CDATA">
<!ELEMENT url %URI;>Ergib: <!ELEMENT url CDATA> und das sit falsch.
Richtig wäre <!ELEMENT url (#PCDATA)>
Nach dem Validator sind unsere beiden Sachen richtig, auf jeden Fall habe ich nach meiner Methode nun folgende Sachen ausprobiert:
<!ENTITY % URI "(#CDATA)">
<!ELEMENT url %URI;>
sowie
<!ENTITY % URI "(CDATA)">
<!ELEMENT url %URI;>
Bei beiden liefert der Validator einen Fehler.
Nach meiner Methode gibt er keinen Fehler aus - zumindest erkennen die Validator schon mal mein Regelwerk... :-D
cu
Marc Reichelt || http://www.marcreichelt.de/
Hallo,
<!ENTITY % URI "(#CDATA)">
<!ELEMENT url %URI;>sowie
<!ENTITY % URI "(CDATA)">
<!ELEMENT url %URI;>Bei beiden liefert der Validator einen Fehler.
Ja. Weil es Fehler sind.
Nach meiner Methode gibt er keinen Fehler aus - zumindest erkennen die Validator schon mal mein Regelwerk... :-D
Nein. Sorry ;-).
Der Validator den du benützt ist selbst fehlerhaft.
Wenn du deine Datei online überprüfen willst benutze mal http://www.stg.brown.edu/service/xmlvalid/
Grüße
Thomas
Hallo Nochmal,
Nach meiner Methode gibt er keinen Fehler aus - zumindest erkennen die Validator schon mal mein Regelwerk... :-D
Wenn du demit den W3C Validator meinst, beachte bitte was er sagt:
"This document is well-formed XML."
_Well-formed_ , er prüft deine DTD erst gar nicht.
Grüße
Thomas
Hi!
Wenn du demit den W3C Validator meinst, beachte bitte was er sagt:
"This document is well-formed XML."_Well-formed_ , er prüft deine DTD erst gar nicht.
Habe ich gemerkt... ;-)
Danke nochmals, und jetzt gehe ich dann doch ins Bett *gähn*
Gute Nacht
Marc Reichelt || http://www.marcreichelt.de/
Hi,
Sorry, aber sein XML von vorne bist hinten ungültig.
Würden die Parameter-Entities von W3C-Parser und Validom richtig aufgelöst, müsste sie laute Fehler ausspucken.
Gibt es denn einen Validator für DTDs?
cu,
Andreas
Hallo Andreas,
Gibt es denn einen Validator für DTDs?
Ja, klar. DTDs haben ja auch eine Sytax. Die ist auch nicht allzu kompliziert und kann überprüft werden. Validierende XML-Prozessoren müssen ja auch die DTD validieren. Es gibt auch eigene DTD-Editoren.
Ich kann für "Heimanwender" die freie Version von XMLSpy empfehlen http://www.altova.com/download_spy_home.html
Morphon (auch frei) validiert auch die DTD, nur die Fehlermeldungen sind etwas kryptsich. http://www.morphon.com/xmleditor/index.shtml
Grüße
Thomas
Hi,
Gibt es denn einen Validator für DTDs?
Ja, klar. DTDs haben ja auch eine Sytax. Die ist auch nicht allzu kompliziert und kann überprüft werden. Validierende XML-Prozessoren müssen ja auch die DTD validieren. Es gibt auch eigene DTD-Editoren.
Ich kann für "Heimanwender" die freie Version von XMLSpy empfehlen http://www.altova.com/download_spy_home.html
Morphon (auch frei) validiert auch die DTD, nur die Fehlermeldungen sind etwas kryptsich. http://www.morphon.com/xmleditor/index.shtml
Danke, guck ich mir mal an!
cu,
Andreas