Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Verarbeitungsprozedur

&pagelevel(5)&pagelevel

Eine Verarbeitungsprozedur verhält sich beim Ablauf so, als würde sie von der XML-Anweisung über PERFORM aktiviert, ähnlich zu einer INPUT/OUTPUT PROCEDURE bei SORT, siehe auch Abschnitt „SORT-Anweisung". Es gelten daher für die Angabe in der XML-Anweisung die gleichen Regeln und Einschränkungen wie für eine PERFORM-Anweisung.

Ereignisse

Innerhalb der Verarbeitungsprozedur kann die Anwendung für Ereignisse, die von Interesse sind, weitere Verarbeitungen vornehmen. Fast alle Ereignisse stellen zu diesem Zweck spezifischen Daten im Sonderregister XML-TEXT bzw. XML-NTEXT bereit. Spalte nsp in der folgenden Tabelle kennzeichnet Ereignisse, bei denen auch die Namensraum-Sonder-register versorgt sind. Dabei handelt es sich um XML-NAMESPACE und XML-NAME-SPACE-PREFIX bzw. XML-NNAMESPACE und XML-NNAMESPACE-PREFIX. Wenn kein Namensraum oder der leere Namensraum angegeben ist, ist die aktuelle Länge der Sonderregister gleich 0; bei einem Standardnamensraum ist die aktuelle Länge der Präfix-Sonderregister gleich 0.

Die Hochkommas bei den diversen Zeichenfolgen in der folgenden Tabelle dienen nur der Hervorhebung. Sie sind nicht Bestandteil der Zeichenfolge.

Name des Ereignisses (in XML-EVENT)

Inhalt von XML-TEXT bzw. XML-NTEXT

nsp

ATTRIBUTE-CHARACTERS

Wert des Attributs ohne die öffnenden und schließenden Literalbegrenzer


ATTRIBUTE-NAME

Lokaler Name des Attributs

X

COMMENT

Inhalt des Kommentars, ohne die Zeichenfolgen '<!--' am Anfang und '->' am Ende


CONTENT-CHARACTER

Ein einzelnes Zeichen, das einer vordefinierten Entitätenreferenz entspricht


CONTENT-CHARACTERS

Teil-Zeichenfolge zwischen Beginn- und Ende-Tag eines Elements.Dies ist nur dann der ganze Wert, wenn er keine weiteren Elemente oder Entitätsreferenzen enthält.


CONTENT-NATIONAL-CHARACTER

Nur in XML-NTEXT für Dokumente, die in einem alphanumerischen Datenfeld bereitgestellt sind: Ein einzelnes nationales Zeichen, das einer numerischen Entität entspricht, die nicht als alphanumerisches Zeichen darstellbar ist.

XML-TEXT hat bei diesem Ereignis immer die aktuelle Länge 0.


DEFAULTED-ATTRIBUTE-NAME

Lokaler Name eines Attributs, das im XML-Dokument nicht enthalten ist, aber in der verwendeten DTD (Document Type Definition) mit einem Vorgabewert erklärt ist.

X

DOCUMENT-TYPE-DECLARATION

Die gesamte Dokumenttypdefinition, ein schließlich der Zeichenfolge '<!DOCTYPE' am Anfang und '>' am Ende.


ENCODING-DECLARATION

Zeichensatzname (wie von XHCS erwartet), der für die Interpretation des Dokuments angenommen wird.
Das ist i.A. nicht der in der Encoding Declaration des XML-Dokuments angegebene Name. Vielmehr kann es ein anderer Zeichensatz sein, wenn etwa das XML-Dokument mittels File Transfer übertragen und dabei konvertiert wurde, ohne gleichzeitig auch die Angabe in der Encoding Declaration anzupassen.


END-OF-CDATA-SECTION

Die Zeichenfolge ']]>'


END-OF-DOCUMENT

Leer, d.h. aktuelle Länge = 0


END-OF-ELEMENT

Lokaler Name des Elements

X

EXCEPTION

Beginn des Dokuments bis einschließlich der Fehlerstelle


NAMESPACE-DECLARATION

Leer, d.h. aktuelle Länge = 0

X

PROCESSING-INSTRUCTION-DATA

Inhalt der Steueranweisung nach dem Namen, ohne die Zeichenfolge '?>' am Ende.

Führende Durchschüsse (white spaces) sind nicht Bestandteil, endständige jedoch schon.


PROCESSING-INSTRUCTION-TARGET

Name der Steueranweisung (ohne die Zeichenfolge '<?' am Anfang)


STANDALONE-DECLARATION

Die Zeichenfolge 'yes' oder 'no' aus der XML-Deklaration


START-OF-CDATA-SECTION

Die Zeichenfolge '<![CDATA['


START-OF-DOCUMENT

Das gesamte Dokument


START-OF-ELEMENT

Lokaler Name des Elements

X

VERSION-INFORMATION

Wert aus der Versionsangabe der XML-Deklaration ohne die öffnenden und schließenden Literalbegrenzer


Fehlerbehandlung

Der Parser teilt der Verarbeitungsprozedur gefundene Fehler durch das Ereignis 'EXCEPTION' mit. Das Sonderregister XML-CODE hat dann einen Wert ungleich 0, der den Fehler genauer beschreibt. Bei allen anderen Ereignissen hat dieses Sonderregister den Wert 0.

Der Inhalt des Sonderregisters XML-CODE beim Verlassen der Verarbeitungsprozedur steuert die Fortsetzung der XML-Anweisung. Die Verarbeitungsprozedur signalisiert durch Setzen entsprechender Werte die gewünschte Fortsetzung:

-1

Beenden der XML-Anweisung mit 'Fehler'. Dies ist bei jedem Ereignis möglich, auch wenn zuvor das Ereignis EXCEPTION nicht aufgetreten ist.

0

Fortsetzung der XML-Anweisung. Wenn bereits ein Fehler gemeldet wurde, ist die Fortsetzung nur bei 'leichten' Fehlern möglich. Sie beschränkt sich aber auf die Suche nach weiteren Fehlern. Bei 'schweren' Fehlern wird die XML-Anweisung trotzdem immer abgebrochen.

andere
Werte

Das weitere Verhalten ist undefiniert.

Vorhandene EXCEPTION- bzw. NOT EXCEPTION-Klauseln werden nach Ende der XML-Anweisung ausgeführt, abhängig davon, wie die Anweisung beendet wurde:

NOT EXCEPTION

Bei regulärer Beendigung

EXCEPTION

Bei irregulärer Beendigung wegen Fehlern. Das schließt den aktiven Abbruch durch Setzen des XML-CODE-Sonderregisters in der Verarbeitungsprozedur mit ein.

Beispiel 12-57 Ereignisse und Inhalt der Sonderregister


DATA DIVISION.
WORKING-STORAGE SECTION.
... 
01 dokument.                                       
 02     VALUE "<?xml version='1.1'?>".            
 02     VALUE "<dok xmlns:r='http://www.efg'>". 
 02     VALUE "111".                              
 02     VALUE "<a att='XX'/>".
 02     VALUE "<![CDATA[tse-da-da segdschn]]">"".                  
 02     VALUE "222".                              
 02     VALUE "<r:b>".                            
 02     VALUE "yyyyy   ".                         
 02     VALUE "</r:b>".                           
 02     VALUE "</dok>".    


Die Zerlegung des Dokuments durch die XML-Anweisung führt zu nachstehender Folge von Ereignissen und Inhalten der Sonderregister:

XML-EVENT

XML-TEXT

XML-NAME-SPACE

XML-
NAME-
SPACE-
PREFIX

VERSION-INFORMATION

1.1



START-OF-DOCUMENT

<?xml version='1.1'?>

<dok xmlns:r='http://www.efg'>111<a att='XX'/><![CDATA

[tse-da-da segdschn]]>

222<r:b>yyyyy'BLANK''BLANK''BLANK'</r:b></dok>



START-OF-ELEMENT

dok



NAMESPACE-DECLARATION


http://www.efg

r

CONTENT-CHARACTERS

111



START-OF-ELEMENT

a



ATTRIBUTE-NAME

att



ATTRIBUTE-CHARACTERS

XX



END-OF-ELEMENT

a



START-OF-CDATA-SECTION

<![CDATA[



CONTENT-CHARACTERS

tse-da-da̺segdschn



END-OF-CDATA-SECTION

]]>



CONTENT-CHARACTERS

222



START-OF-ELEMENT

b

http://www.efg

r

CONTENT-CHARACTERS

yyyyy'BLANK''BLANK''BLANK'



END-OF-ELEMENT

b

http://www.efg

r

END-OF-ELEMENT

dok



END-OF-DOCUMENT




Anmerkungen:

  • Der Wert (111222) des Elements 'dok' ist durch das eingeschobene Element 'a' in zwei Teile aufgespalten. Aufgrund der sequenziellen Verarbeitung des XML-Dokuments liefert der Parser die Teilstücke getrennt – unterbrochen durch die Ereignisse zu Element 'a' – jeweils mit dem Ereignis CONTENT-CHARACTERS.

  • Ein leerer Eintrag zeigt an, dass das Sonderregister bei dem Ereignis die aktuelle Länge 0 hat.

Beispiel 12-58 XML-Anweisung und Verarbeitungsprozedur


PROCEDURE DIVISION.
...
  XML PARSE dokument                            
    PROCESSING PROCEDURE IS ereignis            
    ON EXCEPTION ...               
    NOT ON EXCEPTION ...  
  END-XML.
...  
ereignis.
  EVALUATE XML-EVENT
    WHEN   "VERSION-INFORMATION"
      IF XML-TEXT NOT = "1.0"
         DISPLAY "XML Version nicht 1.0" 
         MOVE -1 TO XML-CODE
      END-IF   
WHEN   "CONTENT-CHARACTERS"
  ...
WHEN   "START-OF-ELEMENT"
IF FUNCTION LENGTH(XML-TEXT) > 31
   DISPLAY "Elementname zu lang"
   MOVE -1 to XML-CODE
ELSE
   MOVE XML-TEXT TO ...
END-IF
WHEN   "END-OF-ELEMENT"
  ...
WHEN   OTHER
  CONTINUE
END-EVALUATE.


Anmerkungen:

  • Das Programm möchte nur XML-Dokumente der Version 1.0 verarbeiten und für alle anderen Versionen die Verarbeitung beenden: Wenn das Sonderregister XML-CODE mit dem Wert -1 in der Verarbeitungsprozedur versorgt wird, signalisiert dies den Wunsch nach sofortigem Abbruch der XML-Anweisung.

  • -1 im Sonderregister XML-CODE bei Rückkehr zur XML-Anweisung bedeutet irreguläres Ende und Fortsetzung mit den Anweisungen bei der ON EXCEPTION-Angabe.

  • Das Programm verarbeitet nur Elemente und deren Werte. Andere Ereignisse 'verschluckt' die Verarbeitungsprozedur, ohne dafür etwas zu tun (WHEN OTHER).

  • Das Programm möchte nur Elementnamen mit maximal 31 Zeichen akzeptieren. Wenn im Dokument längere Elementnamen vorkommen, wird die XML-Anweisung sofort beendet. Die Länge eines im Sonderregister XML-TEXT bereitgestellten Elementnamen entspricht der aktuellen Länge des Sonderregisters: sie wird von FUNCTION LENGTH geliefert.

  • Auch wenn für einzelne Sonderregister keine Definition mit herkömmlichen COBOL-Sprachmitteln möglich ist, dürfen sie in COBOL-Anweisungen verwendet werden. Sie verhalten sich wie alphanumerische bzw. nationale Gruppen variabler Länge, z.B. als Sendefeld in der MOVE-Anweisung.