Einzelnen Beitrag anzeigen

MathiasSimmack
(Gast)

n/a Beiträge
 
#8

Re: XML-Datei mit dtd Datei darstellen

  Alt 19. Apr 2004, 23:33
Als Tool-Programmierer habe ich sogar schon einen Konverter fertig, der dein altes Datenbank-Format in das neue XML-Format umbaut. Quasi von INI nach XML, denn du hattest ja schon mal so ein Adressenprogramm.

Äh, 3 Punkte? Ach so, du meinst den Auszug aus der DTD.
Pass auf -

Die DTD hat mit dem visuellen Aufbau der XML-Datei nichts zu tun. Sie beschreibt nur den strukturellen Aufbau, damit dein Parser weiß wann ein Dokument gültig ist und wann nicht. Du musst alle Elemente auflisten, die in deinem Dokument vorkommen dürfen bzw. können. Im Fall des Hauptknotens sieht das eben so aus
Code:
<!ELEMENT adressdb (XMLFile, Kontakt+)>
weil er einen Knoten <XMLFile> enthalten muss, und weil min. 1 <Kontakt>-Knoten da sein muss. Wie gesagt, das Plus symbolisiert, dass es auch mehrere sein dürfen.

Jetzt musst du dem Parser erklären, was "XMLFile" bedeutet. Das ist ja nun auch wieder ein Knoten, der seinerseits untergeordnete Elemente enthält. Und genau die gibst du alle in, so wie sie in deiner XML-Datei auftauchen, also:
Code:
<!ELEMENT XMLFile (MajorVersion, MinorVersion, Computer, User, ModifyDate,
  ModifyTime, RecordCount, HighestID)>
Tja, nun weiß der Parser nicht, was "MajorVersion" ist. Und das ist das erste Element, das keinen Knoten sondern einen Wert enthält. Und deshalb schreibst du diesmal
Code:
<!ELEMENT MajorVersion (#PCDATA)>
#PCDATA bedeutet aber, dass der Knoten nur Text enthalten darf. Andere Knoten darf es hier nicht geben, es sei denn, du würdest die wieder auflisten, usw. Du kannst anstelle von (#PCDATA) bspw. auch ANY schreiben (dann wäre jeder Inhalt erlaubt) oder EMPTY (dann müsste der Knoten zwingend leer sein).

Und das musst du für alle Knoten machen, die in deiner XML-Datei auftauchen.

Generell würde ich empfehlen, du nutzt die Möglichkeiten des Parsers. Wenn du nämlich eine DTD benutzt und mit der oder dem Dokument stimmt was nicht, dann meckert er nicht nur, sondern er sagt auch, warum und wo der Fehler ist.
Ich hänge mal die DTD ran und ein kleines Programm, das ich zum Prüfen von XML-Dateien benutze. Aber erwarte nicht zuviel von letzterem. Es ist absolut rudimentär und keinesfalls für jeden Fehlerfall abgesichert. Aber es erfüllt seinen Zweck. (Du musst wahrscheinlich die XML-Unit umbenennen ... na ja, du weißt ja sicher inzwischen, dass die bei mir MSXML4 heißt. )
Angehängte Dateien
Dateityp: zip xml-pr_fprogramm.zip (2,1 KB, 11x aufgerufen)
Dateityp: txt kontakte.dtd.txt (1,1 KB, 13x aufgerufen)
  Mit Zitat antworten Zitat