Hallo Andreas,
-------zitat-------
Also ist die DTD wirklich nur dazu da um sicherzustellen, das die XML-Daten auch korrekt ausgewertet werden. D.h. wenn ich XML-Daten übertragen will, um sie zu parsen und z.B. in einer Datenbank schreiben will, sorgt die Validitätsprüfung nur dafür, dass die Daten genau so sind wie es jetzt mein Parser erwartet, so dass er keine Fehler beim Schreiben in die Datenbank macht, oder hat einen DTD noch einen anderen Grund?
-------------------
Ja und Nein. Validitätsprüfung und Parser sind keine getrennte Sachen, der Parser führt die Validitätsprüfung durch.
Die DTD sorg nicht dafür, dass die Daten korrekt ausgewertet werden, die DTD beinhaltet die Regel die die Struktur der XML-Datei beschreiben. Ein validierender Parser vergleicht die XML-Datei mit den Regel in der DTD und prüft so ob die Struktur der XML-Datei dieser DTD entspricht.
Beim Schreiben einer XML-Datei (vorausgesetzt du nimmst einen XML-Editor, der einen validierenden Parser benutzt) wird ebenfalls dieser Vergleich ausgeführt und falls man fehler in der XML-Datei machte, meldet der Parser eben einen Fehler.
Eine DTD ist auch dafür da, das in ihr die mögliche Elemente, Attribute, Elementkombinationen etc. festgehalten sind. So kann jeder auufgrund dieser DTD eine XML-Datei erzeugen, die den Anforderungen erfüllt (Anforderungen an einem Dokument, an einer Anwendung etc.) so wie eben jeder HTML-Seiten schreiben kann und dann überprüfen kann ob seine Seiten valide HTML-Dokumente sind.
Man weiss das auch, aber eine EDIFACT-Nachricht ist nicht so gut lesbar,
"Gut lesbar" ist wie ich finde irrelevant. Es soll sich ja im Live-Betrieb keiner die Datenpakete angucken, das ist nur eine Vereinfachung für den Programmierer. Voen wegen Flexibilität, das ist zwar wahr das XML flexibler ist, aber mit der EInschränkung durch eine vorgegebene DTD ist es auch nicht mehr flexibler als EDIFACT, oder?
Gut lesbar ist überhaupt nicht irrelevant! Es geht ja nicht nur um die Lesbarkeit als physische Tatsache, sonder auch um die Verständlichkeit und eine XML-Datei mit reichen semantischen MarkUp ist eine der aussagekräftigste Dokumente.
Dass DTDs in der XML-Welt irgendwann eine grenze der Flexibilität erreicht haben, ist bekannt; deshalb wird dort wo eine DTD nicht mehr genügend Spielraum bietet XML-Schema eingesetzt. XML-Schama basiert ihrerseits ebenfalls auf die Regel von XML.
--------zitat-------------
Aber dem nach was Du geschrieben hast ist das auch bei XML nicht so! Wenn der Parser eine fremde DTD verstehen soll, macht er das nicht automatisch, sondern man muß das auch in den Parser "hineinprogrammieren", oder? Also hätte das auch nur Sinn, wenn alle die gleiche DTD verwenden(aber das hatte Michael glaube ich auch gesagt).
--------------------------
Nein. In einem Parser ist nicht die/eine DTD programmiert, sondern die Logik eine DTD auszuwerten und die darin festgehaltene Regel dann bei der validierung einer XML-Datei anzuwenden. Ein guter Parser reagier auch auf Fehler in der DTD, d.h. er meldet wenn in der DTD ein Regel existiert, die nicht mit den Regel die für eine DTD gelten vereinbar ist. Wie man eine DTD schreibt ist eigentlich im SGML- und XML-Standard festgehalten.
Da hatet ich mich falsch ausgedrückt, ichmeien jetzt nicht direkt den eigentlichen XML-Parser, ich meine die Software die die XML-Daten z.B.in eine Datenbank schreibt. Die kann jeweils nur mit einer DTD verwendet werden, wenn eine andere DTD verwendet wird, muß man das durchaus umprogrammieren, oder?
Wenn ich in einer XML-Datei z.B. ursprünglich
<artikel>
<preis>232</preis>
</artikel>verwende, und das ganze auf
<artikel>
<nettopreis>204</nettopreis>
<bruttopreis>232</bruttopreis>
</artikel>
Nein. Siehe oben, ein Parser muss die DTD ebensowenig im voraus kennen wie die Struktur der XML-Datei.
Aber wo gibt es so einen _echten_ Standard?
SGML, XML sind echte Standards.
Was mir gedanklich hier fehlt ist der eigentliche Standard in Form einer Art DTD, den die Firmen doch bräuchten um mit der "Beschreibungssprache" EDIFACT wirklich untereinander kompatible Daten auszutauschen.
Und gibt es bereits DTDs für den eletronischen XML-basierten Geschäftsdaten-Verkehr?
Wie Franz schon sagte, es gibt eine Menge, einge davon werden zentralisiert gepflegt: {link:http://www.idealliance.org/standards.asp] bzw. (u.a. für ebXML Arten) http://www.oasis-open.org/
Grüße
Thomas