Funktion
Die OPEN DOCUMENT-Anweisung eröffnet die Verarbeitung eines XML-Dokuments. Sie erzeugt die interne Darstellung des XML-Dokuments und führt eine erste Zuordnung von Elementen bzw. Attributen aus dem XML-Dokument zu Datenfeldern in der FD durch.
Format
OPEN DOCUMENT dateiname-1 [ AT datenname-1 [STACK] ]
[ RETURNING bezeichner-1 ]
[ AT END unbedingte-anweisung-1 ]
[ NOT AT END unbedingte-anweisung-2 ]
[ END-OPEN ]
Syntaxregeln
dateiname-1 muss der Name einer XML-organisierten Datei sein.
datenname-1 darf gekennzeichnet sein.
datenname-1 muss mit einer IDENTIFIED-Klausel mit expliziter oder impliziter ELEMENT-Angabe beschrieben und der Datei dateiname-1 untergeordnet sein.
bezeichner-1 muss ein alphanumerisches oder nationales Datenfeld sein.
Wenn datenname-1 angegeben ist, dürfen die AT END- bzw. NOT AT END-Angaben nicht gemacht werden.
Allgemeine Regeln
Wenn für dateiname-1 die Verarbeitung eines XML-Dokuments eröffnet, jedoch noch nicht mit einer CLOSE DOCUMENT-Anweisung beendet wurde, wird vor der Ausführung einer OPEN DOCUMENT-Anweisung ohne Angabe von datenname-1 eine implizite CLOSE-Anweisung ausgeführt.
Wenn die Datei dateiname-1 nicht geöffnet ist, ist die OPEN DOCUMENT-Anweisung nicht erfolgreich. Der Ein-/Ausgabe-Zustand der Datei wird auf 4B gesetzt.
Wenn datenname-1 angegeben, jedoch in der Datei dateiname-1 kein XML-Dokument geöffnet ist, ist die OPEN DOCUMENT-Anweisung nicht erfolgreich. Der Ein-/AusgabeZustand der Datei wird auf 4D gesetzt.
Wenn das zu öffnende XML-Dokument nicht wohlgeformt ist, ist die OPEN DOCUMENT-Anweisung nicht erfolgreich. Der Ein-/Ausgabe-Zustand wird auf 3A gesetzt.
Wenn der Zeichensatz, in dem das XML-Dokument dargestellt ist, nicht ermittelt werden konnte (siehe Handbuch “COBOL2000 Benutzerhandbuch“ [1], Abschnitt 10.4 “Zeichensatzerkennung (Friedrichscher Vermutungsalgorithmus)“), ist die OPEN DOCUMENT-Anweisung nicht erfolgreich. Der Ein-/Ausgabe-Zustand wird auf 3D gesetzt.
Wenn datenname-1 keine gültige Position hat, ist die OPEN DOCUMENT-Anweisung nicht erfolgreich. Der Ein-/Ausgabe-Zustand der Datei wird auf 46 gesetzt.
Wenn der Dateipositionsindikator 'dateiende' anzeigt, ist die OPEN DOCUMENT-Anweisung nicht erfolgreich. Der Ein-/Ausgabe-Zustand der Datei wird auf 10 gesetzt.
Wenn die Anweisung nicht erfolgreich ist, werden alle Positionen im EPV auf 'ungültig' gesetzt.
Wenn datenname-1 nicht angegeben ist, wird die interne Darstellung des XML-Dokuments erzeugt und der Dateipositionsindikator auf 'dateiende' gesetzt.
Wenn datenname-1 angegeben ist, wird die folgende Verarbeitung des XML-Dokuments eingeschränkt auf den Unterbaum, dessen Wurzel der datenname-1 zugeordnete Knoten ist.
Wenn STACK angegeben ist, wird der Zustand des EPV von vor der OPEN DOCUMENT-Anweisung sichergestellt, so dass er durch die nächste CLOSE DOCUMENT-Anweisung für dateiname-1 wieder hergestellt werden kann. Vor Ausführung einer solchen CLOSE DOCUMENT-Anweisung kann jedoch nicht auf den gesicherten EPV-Zustand zugegriffen werden.
Wenn STACK nicht angegeben ist, geht der Zustand des EPV von vor der OPEN DOCUMENT-Anweisung verloren.
Die OPEN DOCUMENT-Anweisung führt eine Zuordnung aus (siehe Abschnitt „Sprachelemente DATA DIVISION"). Sie überträgt jedoch – abgesehen von der RETURNING-Angabe – keine Daten.
Wenn die Namen in den bei der Zuordnung wirkenden IDENTIFIED-Klauseln nicht eindeutig sind (siehe Abschnitt „IDENTIFIED-Klausel“, allgemeine Regel 9 auf "IDENTIFIED-Klausel"), ist die OPEN DOCUMENT-Anweisung nicht erfolgreich. Der Ein-/Ausgabe-Zustand der Datei wird auf 4C gesetzt.
Wenn sich einzelne Attribut- bzw. Elementnamen aus den bei der Zuordnung wirkenden IDENTIFIED-Klauseln nicht im Zeichensatz UTF-16 darstellen lassen, ist die OPEN DOCUMENT-Anweisung nicht erfolgreich. Der Ein-/Ausgabe-Zustand der Datei wird auf 4E gesetzt.
Bei der Zuordnung sind im ersten Schritt auf der COBOL-Seite alle Datenfelder mit Stufennummer 01 in den Satzbeschreibungen von dateiname-1 zu betrachten. Außerdem ist im XML-Baum folgender Knoten zu betrachten:
falls datenname-1 nicht angegeben ist: der Wurzelknoten des gesamten XML-Baums.
falls datenname-1 angegeben ist: der dem datenname-1 zugeordnete Knoten aus dem XML-Baum.
Wenn RETURNING angegeben ist, wird in das Datenfeld bezeichner-1 übertragen:
ohne AT-Angabe der Name des Wurzel-Elements des XML-Dokuments.
mit AT-Angabe der Name des Elements im XML-Dokument das datenname-1 zugeordnet ist.
Diese Übertragung erfolgt bei jeder erfolgreichen OPEN DOCUMENT-Anweisung, selbst wenn das Wurzelelement keinem Datenfeld in der COBOL-Beschreibung zugeordnet werden kann.
Die Fortsetzung des Ablaufs der OPEN DOCUMENT-Anweisung hängt davon ab, ob AT END oder NOT AT END angegeben ist (siehe Abschnitt „Ende-Bedingung").