Das XML-Dokument, das von einem COBOL-Programm verarbeitet werden soll, kann sowohl in einer Datei, als auch im Speicher (in alphanumerischer oder nationaler Darstellung) bereitgestellt werden – z.B. in einem Datenfeld der LINKAGE-SECTION. In beiden Fällen wird es wie eine Datei mit der neuen Dateiorganisation XML behandelt. Der Begriff XML-Datei umfasst daher im folgenden immer diese beiden Möglichkeiten. Folglich sind für ein XML-Dokument analog zu den bisher bereits existierenden Dateien ebenfalls Einträge in der ENVIRONMENTDIVISION und in der DATA DIVISION nötig.
ENVIRONMENT DIVISION
Im FILE-CONTROL-Paragraf benötigt das XML-Dokument einen Dateisteuereintrag:
Neben der SELECT-Klausel muss die ORGANIZATION-Klausel mit der (neuen) Organisation XML angegeben werden.
In der ASSIGN-Klausel wird die Verbindung zum Medium hergestellt, das das XML-Dokument enthält.
Wenn das XML-Dokument in einer Datei steht, wird die gleiche ASSIGN-Klausel, wie bisher für Dateien üblich, verwendet.
Wenn das XML-Dokument in einem Speicherbereich steht, können Sie das entsprechende Datenfeld direkt angeben mittels DATA datenname-1.
Alternativ können Sie mittels datenname-2 LENGTH datenname-3 ein Zeigerdatenfeld angeben, das auf den Speicherbereich zeigt, in dem das XML-Dokument in der durch datenname-3 angegebenen Länge (in Zeichen) steht.
Die ACCESS MODE-Klausel darf entfallen. Wenn sie jedoch angegeben ist, ist nur die Zugriffsart XML zulässig.
Alle anderen Klauseln sind für ein XML-Dokument verboten mit Ausnahme der FILE STATUS-Klausel. Deren erweiterte Form ist zulässig. Dadurch steht ergänzend ein Returncode des Parsers zur Verfügung.
Der Dateisteuereintrag beschreibt für ein XML-Dokument keine Eigenschaften einer konkreten Datei.
Sofern das XML-Dokument also in einer Datei vorliegt, legt der Eintrag kein Dateiformat fest. Vielmehr sind sequenzielle und index-sequenzielle Dateien, POSIX-Dateien und auch Bibliothekselemente möglich. Bei index-sequenziellen Dateien wird der ISAM-Key am Anfang (8 Bytes) entfernt.
Beispiel 12-37 Dateisteuereintrag für XML-Dokument
... INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT xml-doc1 ASSIGN TO "LINK-NAM" ORGANIZATION IS XML ACCESS XML. SELECT xml-doc2 ASSIGN TO DATA w-s-doc ORGANIZATION IS XML. SELECT xml-doc3 ASSIGN TO doc-ptr LENGTH doc-lg FOR NATIONAL ORGANIZATION IS XML. ... WORKING-STORAGE SECTION. 01 w-s-doc VALUE "<a att="123">xxxx<b>zz<c>9876</c></b></a>". 01 doc-ptr USAGE POINTER. 01 doc-lg PIC 9(8) BINARY.
Anmerkungen:
Das mit xml-doc1 verarbeitete XML-Dokument steht in einer Datei mit dem Linknamen LINK-NAM.
Das mit xml-doc2 verarbeitete XML-Dokument steht im Speicher im Datenfeld w-s-doc. Seine Länge ist die des Datenfeldes w-s-doc.
Das mit xml-doc3 verarbeitete XML-Dokument steht in einem Speicherbereich in UTF-16-Darstellung (national). Das Datenfeld doc-ptr zeigt auf diesen Speicherbereich, und die Länge des Dokuments in Zeichen steht im Datenfeld doc-lg. Sie müssen beide Datenfelder vor Beginn der Verarbeitung mit passenden Werten versorgen.
DATA DIVISION
In der FILE SECTION braucht das XML-Dokument eine Dateierklärung:
Mit Ausnahme der EXTERNAL- und der GLOBAL-Klausel sind alle anderen Klauseln für ein XML-Dokument verboten.
Die 01-Satzbeschreibungen in der FD beschreiben Teile des XML-Dokuments oder das ganze Dokument. Mindestens eine der Satzbeschreibungen muss die Wurzel des Dokuments beschreiben. Mehrere Satzbeschreibungen sind sinnvoll, wenn mit einer Dateierklärung unterschiedlich strukturierte XML-Dokumente verarbeitet werden sollen, oder aber einzelne Satzbeschreibungen jeweils nur Teile des Dokuments beschreiben, siehe auch "OPEN DOCUMENT". In der Beschreibung für jeden Knoten dürfen Sie einzelne oder auch alle Kinder weglassen – egal ob es sich dabei um Elemente oder Attribute handelt. Wenn es für einen Knoten des Baums kein Datenfeld in der Satzbeschreibung gibt, kann auch kein Knoten aus dem entsprechenden Teilbaum in der Satzbeschreibung vorkommen.
Knoten aus dem Dokument müssen mit der neuen IDENTIFIED-Klausel beschrieben werden (siehe auch "Angabe eines Element- bzw. Attribut-Namens in der IDENTIFIED-Klausel" in Kapitel "COBOL-Sprachmittel zur Beschreibung eines XML-Dokuments"). Diese Klausel ist nur in Satzbeschreibungen von Dateien mit Organisation XML erlaubt.
Die Dateierklärung beschreibt keine Eigenschaften einer konkreten Datei sondern nur die logische Struktur des XML-Dokuments.
Die 01-Satzbeschreibungen haben nichts mit der Darstellung der Datei in einem Dateiverwaltungssystem oder Ähnlichem zu tun. Aus diesem Grund redefinieren sich die Satzbeschreibungen in der FD einer XML-Datei nicht, so wie es implizit bei sequenzieller, relativer und indizierter Dateiorganisation der Fall ist.
Wenn das XML-Dokument in einer Datei vorliegt, sind beliebige Eigenschaften der Sätze (Satzformat, Satzlänge, Blockung, Zeichencode) möglich.
Beispiel 12-38 Dateierklärung für XML-Dokument
... FILE SECTION. FD xml-doc2. 01 a IDENTIFIED BY "a". 02 a-value PIC X(10). 02 att IDENTIFIED BY "att" ATTRIBUTE PIC 999. 02 b1 IDENTIFIED BY "b" PIC X(10). 01 b2 IDENTIFIED BY "b". 02 b-value PIC X(10). 02 c IDENTIFIED BY "c" PIC X(10). ...
Anmerkungen
Die Dateierklärung bezieht sich auf die entsprechende SELECT-Klausel aus Beispiel 12-37.
Die Satzbeschreibung a beschreibt den Ausschnitt aus dem XML-Dokument, bestehend aus dessen Wurzel ’a’, ihrem Attribut ’att’ und ihren Kindern ’b’. Die Satzbeschreibung b2 beschreibt den Ausschnitt aus dem XML-Dokument bestehend aus Knoten ’b’ und dessen Kindern ’c’.
Durch die Überlappung der beiden 01-Strukturen beim Knoten ’b’ ist auch der Zugriff auf Enkel des Wurzelknoten ’a’ möglich, obwohl jede einzelne der 01-Strukturen nur Väter und Kinder beschreibt.