Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

Sprachelemente DATA DIVISION

&pagelevel(3)&pagelevel

COBOL-Datenstruktur für ein XML-Dokument

Bei der strukturorientierten Verarbeitung wird die hierarchische Struktur eines XML-Dokuments durch das Stufenkonzept der Datensatzbeschreibungen in COBOL nachgebildet. Einem Knoten aus dem XML-Baum, d.h. einem Attribut oder dem (Start-)Tag eines Ele-ments im XML-Dokument, entspricht dabei eine Datenerklärung mit einer IDENTIFIED-Klausel. Ende-Tags spielen dabei keine Rolle, da sie sich implizit aus der Hierarchie ergeben.

Optional kann in der Datenstruktur zu jedem Knoten zusätzlich Folgendes beschrieben werden:

  • der Name des Knotens,

  • der Namensraum des Knotens,

  • der Wert des Knotens,

  • ggf. weitere im XML-Dokument untergeordnete Elemente, ebenfalls wieder mit einer IDENTIFIED-Klausel.

Alle solchen zusätzlichen Datenfelder müssen in der Datenstruktur dem Datenfeld direkt untergeordnet sein, das dem Knoten entspricht. Unter diesen zusätzlichen Datenfeldern darf es nur ein einziges geben, das weder eine IDENTIFIED-Klausel hat, noch von einer IDENTIFIED-Klausel angesprochen wird: das Datenfeld für den Wert. Wenn es sich bei diesem Datenfeld um das einzige Datenfeld handelt, das der Knoten-Beschreibung untergeordnet ist, kann es entfallen, und seine PICTURE-Klausel auch direkt bei der Knoten-Beschreibung angegeben werden.

Die Datenstrukturen der FD müssen nur diejenigen Knoten aus dem XML-Baum beschreiben, die das Programm verarbeiten will. Zu jedem beschriebenen Knoten muss jedoch auch dessen Vater beschrieben sein.

Zuordnung und Element-Positions-Vektor

Grundlage für die Verarbeitung eines XML-Dokuments ist die Zuordnung von Knoten des XML-Baums zu den Datenerklärungen in den Datensatzbeschreibungen der FD. Diese Zuordnung wird in der logischen Informationseinheit Element-Positions-Vektor (EPV) festgehalten. Zu jedem Datenfeld, das eine IDENTIFIED-Klausel angibt, ist darin vermerkt, welcher Knoten aus dem XML-Baum dem Datenfeld zugeordnet ist (d.h. es hat 'eine gültige Position'), bzw. die Tatsache, dass kein Knoten zugeordnet ist (d.h. die 'Position ist ungültig'). Darüber hinaus wird vermerkt, welche Anweisung die gültige Position erzeugt hat.

Die IDENTIFIED-Klausel in einer Datenerklärung bestimmt, welche Knoten aus dem XML-Baum dieser Datenerklärung prinzipiell zugeordnet werden können.

Die Zuordnung eines Knotens ist möglich, wenn alle folgenden Bedingungen erfüllt sind (zu den einzelnen Angaben siehe „IDENTIFIED-Klausel"):

  • Die Art des Knotens (Element- bzw. Attribut-Knoten) im XML-Baum stimmt mit der Angabe (ELEMENT bzw. ATTRIBUTE) aus der IDENTIFIED-Klausel überein.

  • Der lokale Name des Knotens im XML-Baum stimmt mit dem in der IDENTIFIED-Klausel angegebenen lokalen Namen überein:

    • Wenn der Name mittels BY angegeben ist, müssen beide Namen bis auf endständige Leerzeichen identisch sein.

    • Wenn der Name mittels USING angegeben ist, werden beliebige Namen aus dem XML-Baum als übereinstimmend angesehen.

  • Der Namensraum des Knotens im XML-Baum stimmt mit dem in der IDENTIFIED-Klausel angegebenen Namensraum (NAMESPACE) überein. Dies gilt gleichermaßen für eine explizite NAMESPACE-Angabe, als auch für eine implizite, d.h. von übergeordneten Datenfeldern geerbte Angabe:

    • Wenn der Namensraum mittels BY angegeben ist, müssen beide Namen bis auf endständige Leerzeichen identisch sein.

    • Wenn der Namensraum mittels USING angegeben ist, werden beliebige Namen aus dem XML-Baum als übereinstimmend angesehen (insbesondere auch der leere Namensraum).

    • Wenn der Namensraum als NULL angegeben ist, muss auch der Knoten im XML-Baum einen leeren Namensraum haben.

Zuordnungsvorgang

Die neuen Anweisungen zur Verarbeitung eines XML-Dokuments führen Zuordnungen durch. Der aktuelle Vorgang der Zuordnung läuft dabei in folgenden Schritten ab:

  1. Höchstens ein Knoten aus dem XML-Baum wird genau einem Datenfeld in der FD zugeordnet. Welche Knoten und welche Datenfelder für diesen ersten Schritt zu betrachten sind, hängt von der jeweiligen Anweisung ab.

  2. Für jedes Datenfeld, dem ein Knoten aus dem XML-Baum zugeordnet werden konnte, werden alle ihm direkt untergeordnete Datenfelder mit IDENTIFIED-Klausel betrachtet, und es wird versucht, ihnen je ein Kind des zugeordneten Knotens zuzuordnen, beginnend mit dem ältesten, noch nicht zugeordneten Kind.

  3. Für jedes bei den vorhergehenden Schritten betrachtete Datenfeld, dem kein Knoten zugeordnet werden konnte, sowie für alle einem solchen Datenfeld untergeordnete Datenfelder im EPV, wird die Position 'ungültig' vermerkt.

Bei einer Zuordnung werden keine Daten zwischen XML-Dokument und den Datenbeschreibungen im Programm übertragen.