Thomas J.S.: DTD - wozu ?

Beitrag lesen

Hallo Andreas,

Ich frage mich hier ob es bei DTDs eher darum geht einen Standard für einen Datenaustausch zu haben,

Das ist auch eine der Gründe für eine DTD. Z.B. man kann Konfigurationsdateien für Software in XML schreiben (gibts ja auch schon zu genüge), damit ein Benutzer (Programmierer, etc.) die Software anpassen kann, muss er die XML-Datei verändern, was er und wie verändern kann, ist dann in der DTD als Regel für die XML-Datei festgehalten.

»»also wenn die Dokumente valide sind dann verstehen das auch alle Parser die damit zu tun haben, oder ob der Parser auch so was davon hat.

Ein Parser muss das Dokument nicht 'verstehen', er muss es nur anhand von Regel untersuchen. Für well-formed hat jeder Parser eine eigenes Modul, da wir eben nur auf die wenige Regel geachtet, die es für well-formed gibt. Wenn man eine DTD angibt, dann sind die Regel die der Parser für die Überprüfung des Dokuments benutzt in der DTD und diese Regel sind in den meisten Fällen komplizierter als die Regel für well-formed. Deshalb ist nicht jeder Parser auch ein validierender Parser, da die Logik für solche Überprüfungen einiges an Aufwand an Programmierarbeit erfordert.

Entweder ich entwickle einen Parser wie früher dei Browser, der die Struktur des XML-Dokumentes schon vorher kennt und entsprechend mit den Daten umgehen kann, oder ich entwickle einen Parser, der _immer_ eine DTD braucht, um mit den XML-Daten überhaupt was anfangen zu können, oder?

Wenn du, oder sonst wer, einen Parser schreiben kann, der die Struktur eines beliebigen XML-Dokuments schon im Voraus kennt, wird das die Welt verändern, denn das wäre schon weit über die Wahrscheinlichkeitsrechnung hinaus, es wäre nämlich Hellsehen.
Du mischst hier HTML mit XML. Für HTML mag es stimmen, dass die Browser im Vornhinein wissen müssen, wie sie die Elemente darstellen sollen, aber bei XML stimmt das nicht mehr, da XML im gegensatz zu HTML keine Layoutformatierung mit sich bringt. Was ja logisch ist, denn in XML kann ja jeder seinen eigenen Elementenvorrat erschaffen. Deshalb ist es für einen Parser nicht möglich zu wissen welche Elementen in einer XML-Datei vorkommen können und dabei hilft auch kein DTD, denn diese entwickelt man sie auch nach den eigenen Bedürfnissen. Es wäre sinnlos für XML einen festen Elementenzahl und Elementennamen zu erschaffen:

  1. XML ist an sich keine konkrete Sprache, XML beschreibt die Regel anhand man seine eigene Sprache definieren kann.
  2. es gibt schon eine Sprache für Bildschirmdarstellung von Internetseiten: HTML.

Also die Aufgaben eines Parsers bestehen darain, dass er die XML-Datei aufbereitet d.h. für die Weiter verarbeitung zur Verfügung stellt, dass tut er in dem er die Datei "parst", d.h. dass er die strukturelle integrität der Datei prüft (well-formed und ggf.valide) und nach der Überprüfung diese struktur im Speicher abbildet.

»»langsam ein wenig XML, soweit ich weiß ist XML beim  (IE < 6 && IE >= 5) zwar möglich, aber nur sehr chlecht, (IE >=6 && Mozilla 1.1) sind da schon besser und können durchaus XML mit XSL darstellen.

Das sind wiederum zwei Paar Schuhe, es ist was anderes ein XML-Datei zu parsen und es ist wiederum was anderes dann auch noch eine XSL-Transformation auszuführen.

Die Parser interessieren sich IMO nur für wellformed, nicht für die Validität (evtl. optional doch?), wenn ich nicht irre. Es werden also im Normalfall keine externen Ressourcen eingelesen.

Das ist so. well-formed 100%, valide optional.

Was heißt "der Parser"? Ist es in XML nicht so dass es ganz viele verschiedene Parser gibt die bei Validität halt alle kompatibel sind? Ich meine Parser auch in dem Sinn einer Software die Daten per XML- austauscht...

Umgekehrt. Es gibt viele Parser, die aber bei well-formed alle gleich sind, denn die Regel für well-formed müssen alle Parser zu 100% beherrschen, sonst wären sie gar keine Parser. Validitätsprüfung ist dagegen optional und nicht jeder Parser kann das. Ein validierender Parser muss selbstverständlich die DTD für die Validierung heranziehen, dazu muss er die DTD von dort holen wohin der Pfad im DOCTYPE zeigt (Lokal, Internet).
Ein XML-Parser oder XML-Prozessor ist eine Software, aber sie tauscht keine Daten aus.

Grüße
Thomas