Für die Behandlung von Fehlern stehen die bei der bisherigen Datei-Ein-/Ausgabe vorhandenen Sprachmittel auch für das Verarbeiten von XML-Dokumenten durch die neuen Anweisungs-Formate zur Verfügung:
OPEN DOCUMENT und READ: AT END- und NOT AT END-Angabe
START: INVALID KEY- und NOT INVALID KEY-Angabe
Für alle neuen Formate der Anweisungen: USE-Prozeduren und zusätzliche neue XML-spezifische Werte für den Ein-/Ausgabe-Zustand (FILE STATUS).
OPEN DOCUMENT: neue Ausnahmesituation EC-XML-CODESET-CONVERSION
Die [NOT] END- bzw. [NOT] KEY-Angaben entsprechen sowohl syntaktisch, als auch von ihrer Wirkungsweise her den Angaben bei den bisherigen Ein-/Ausgabe-Anweisungen.
OPEN DOCUMENT
Prinzipiell sind in einer Datei mehrere XML-Dokumente hintereinander erlaubt. Momentan werden aber nur Dateien mit einem einzigen Dokument unterstützt. Jede OPEN
DOCUMENT-Anweisung ohne AT-Angabe schließt ein ggf. noch offenes Dokument und öffnet das nächste Dokument in der Datei. Wenn es kein nächstes Dokument gibt, oder die Datei leer ist, tritt die Ende-Bedingung auf, und der Ein-/Ausgabe-Zustand wird auf 10 gesetzt.
Wenn das XML-Dokument Zeichen enthält, die sich nicht als nationale Zeichen (UTF-16) darstellen lassen, tritt die Ausnahmesituation EC-XML-CODESET-CONVERSION auf. Diese Ausnahmebedingung führt nicht zu einem Abbruch. Die betroffenen Zeichen werden im XML-Dokument-Baum durch das Ersatzzeichen '.' ersetzt.
EC-XML-CODESET-CONVERSION tritt nur bei der Umwandlung von der externen Darstellung des XML-Dokuments zum Baum auf – höchstens einmal.
READ
Die AT END-Angabe bezieht sich nur auf eine Ende-Bedingung für das eine Datenfeld, das in der READ-Anweisung angegeben worden ist, nicht auf untergeordnete. Die Ende-Bedingung tritt sowohl beim sequenziellen, als auch beim wahlfreien Lesen auf, wenn es keinen Knoten im XML-Dokument-Baum gibt, der dem Datenfeld (aus der Anweisung) zugeordnet werden kann. Der entsprechende Wert für den Ein-/Ausgabe-Zustand ist 10.Als Zeichensatz zur Darstellung der Daten ist für Übertragungen aus dem XML-DokumentBaum national (UTF-16) anzunehmen. Daher kann bei jeder einzelnen Übertragung im Rahmen einer READ-Anweisung die Ausnahmesituation EC-DATA-CONVERSION auftreten.
Im Gegensatz zu EC-XML-CODESET-CONVERSION von der OPEN DOCUMENT-Anweisung kann EC-DATA-CONVERSION bei Übertragungen von Daten aus dem Baum zum Programm auftreten – ggf. sogar mehrmals bei einer einzelnen READ-Anweisung.
START
Die INVALID KEY-Angabe bezieht sich nur auf eine Schlüsselfehler-Bedingung für das eine Datenfeld, das in der START-Anweisung angegeben worden ist, nicht auf untergeordnete. Die Schlüsselfehler-Bedingung tritt auf, wenn es keinen Knoten im XML-Dokument-Baum gibt, der diesem Datenfeld zugeordnet werden kann. Der entsprechende Wert für den Ein-/Ausgabe-Zustand ist 23.
Alle Anweisungen
Wenn die Reihenfolge der Anweisungen nicht eingehalten wird (siehe auch "Anweisungssequenzen" in Kapitel "Anweisungen für die XML-Verarbeitung"), sind die Voraussetzungen für die Ausführung einzelner Anweisung nicht erfüllt. Das führt zu einer erfolglosen Ausführung wegen logischem Fehler und einem entsprechenden Ein-/Ausgabe-Zustand.
Ein-/Ausgabe-Zustand für XML-Dateien
Ein-/Ausgabe- Zustand | Bedeutung |
00 | Erfolgreiche Ausführung |
| Erfolglose Ausführung: Endebedingung
|
| Erfolglose Ausführung: Schlüsselfehlerbedingung
Es wurde versucht, eine START-Anweisung ohne gültige Position auszuführen. |
30 35 39 3A
| Erfolglose Ausführung: Permanenter Fehler Keine weitere Information verfügbar. OPEN auf nicht vorhandene Datei. Es wurde versucht, eine Datei mit unpassenden Dateimerkmalen zu öffnen. Es wurde versucht, eine OPEN DOCUMENT-Anweisung für ein XML-Dokument Es wurde versucht, eine OPEN DOCUMENT-Anweisung auszuführen, aber der |
| Erfolglose Ausführung: Logischer Fehler |
46 4C 4D 4E |
Es wurde versucht, eine READ- oder START-Anweisung für eine nicht geöffnete Datei auszuführen. Es wurde versucht, eine OPEN DOCUMENT- oder CLOSE DOCUMENT-Anweisung für eine Datei auszuführen, die nicht geöffnet ist. Es wurde versucht, eine OPEN DOCUMENT-, START- oder READ-Anweisung auszuführen, bei der Namen in IDENTIFIED-Klauseln für Geschwisterknoten nicht eindeutig waren. Es wurde versucht, eine CLOSE DOCUMENT-, OPEN DOCUMENT- (mit der AT-Angabe), READ- oder START-Anweisung für ein Dokument auszuführen, das nicht geöffnet ist. Es wurde versucht eine OPEN DOCUMENT-, READ- oder START-Anweisung auszuführen, bei der sich im COBOL-Programm angegebene Element- und/oder Attributnamen nicht in UTF-16 darstellen lassen. |
90 91 97 | Sonstige erfolglose Ausführungen Systemfehler - keine weitere Information über die Ursache vorhanden. OPEN Fehler. Eigentliche Ursache ggf. aus dem SIS-Code ersichtlich. Der für eine OPEN DOCUMENT-Anweisung erforderliche Arbeitsspeicher steht nicht zur Verfügung. |
Tabelle 47: Ein-/Ausgabe-Zustände für XML-Dateien
Diese Ein-/Ausgabe-Zustände beziehen sich nur auf die primäre zu verarbeitende XML- Datei. Wenn beim ggf. zusätzlich erforderlichen Zugriff auf externe Entitäten Fehler auftre ten, führen diese i.A. zum Ein-/Ausgabe-Zustand 3A.
Beispiel 12-54 Mehrdeutige Namen
XML-Dokument | Pos | COBOL-Datenstruktur |
|
| ||
| 1 |
|
| 1(o) |
| inv |
| 00 | 4C |
Anmerkungen:
Hinweise zur Darstellung dieses Beispiels finden Sie auf "Anweisungen für die XML-Verarbeitung".
Die aktuellen Schlüsselwerte der Datenfelder y und z sind bei der READ-Anweisung gleich: Dies ist verboten, da keine eindeutige Zuordnung für diesen Fall definiert ist (ist Knoten 2 dem z und Knoten 4 dem y zuzuordnen oder umgekehrt?). Daher liefert die READ-Anweisung den Ein-/Ausgabe-Zustand 4C.
In diesem Fall erhalten das Datenfeld, über das gelesen wurde – obwohl das Problem gar nicht bei diesem Datenfeld, sondern bei untergeordneten aufgetreten ist –, sowie alle ihm untergeordneten Datenfelder eine ungültige Position.