Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

START

&pagelevel(5)&pagelevel

Das neue zweite Format der START-Anweisung nur für XML-Dateien dient dem Positionieren auf einen oder mehrere Knoten (Elemente und/oder Attribute) aus dem XML-Dokument-Baum. Der Vergleich zur bisherigen START-Anweisung für Dateien zeigt für die einfachste Form nur folgende, kleinere Unterschiede:

  • Eine START-Anweisung kann gleichzeitig auf mehrere Schlüssel positionieren: auf das in der Anweisung angegebene Datenfeld und alle ihm untergeordneten.

  • Die KEY-Angabe entfällt. Da es sich bei einem XML-Dokument-Baum i.A. um ein zweidimensionales Gebilde handelt, ist die bei eindimensionalen Dateien mögliche Positionierung 'vor' bzw. 'nach' einem Schlüssel nicht sinnvoll auf XML-Dokumente (mit gleichzeitig mehreren Schlüsseln) übertragbar.

  • Analog zum XML-Format der READ-Anweisung ist die Art des Datenfeldes anzugeben, über das positioniert wird.

Eine neue START-Anweisung sieht kurz folgendermaßen aus:

START xml-file ELEMENT datenname-1

oder

START xml-file ATTRIBUTE datenname-1

Der Unterschied zwischen START-Anweisung und READ-Anweisung, die auch auf Knoten im Baum positioniert, besteht in der Festlegung des Wirkungsbereichs, ausgehend von dem in der Anweisung angegebenen Datenfeld.

Das in der START-Anweisung angegebene Datenfeld spielt dafür selbst keine Rolle. Im Unterschied zur READ-Anweisung muss diesem Datenfeld kein Knoten zugeordnet zu sein. Entscheidend ist, dass dem in der COBOL-Struktur direkt übergeordneten Datenfeld ein Knoten aus dem Baum zugeordnet sein muss. Der Wirkungsbereich der START-Anweisung umfasst dann den Teilbaum, der diesen Knoten als Wurzel hat.

Der Zuordnungsvorgang beginnt im ersten Schritt auf der COBOL-Seite mit dem in der START-Anweisung angegeben Datenfeld. Auf XML-Seite werden im Wirkungsbereich (wie oben definiert) alle Kinder des Wurzel-Knotens auf eine mögliche Zuordnung hin überprüft, in der Reihenfolge von den älteren zu den jüngeren (also werden im Unterschied zur READ-Anweisung, sofern datenname-1 eine gültige Position hat, auch dessen ältere Geschwister überprüft). Anschließend werden weitere Zuordnungen durchgeführt, wie unter "Zuordnungsvorgang" beschrieben.

START modifiziert nur den EPV, lässt Daten aber unverändert.

Beispiel 12-51 Positionieren durch START

XML-Dokument

Pos

COBOL-Datenstruktur


OPEN
DOCUMENT
xml-fil

READ
xml-fil
ELEMENT
x


START
xml-fil
ELEMENT
y

READ
xml-fil
ELEMENT
y

<dok>1
  <a>2
    <b>3</b>
    <c>4</c>
  </a>
  <a>5
    <b>6</b>
    <c>7</c>
  </a>
</dok>

1
2
3
4

5
6
7

FD xml-fil
01 x IDENTIFIED
       BY "dok".
  02 x- wert PIC 9.
  02 y IDENTIFIED
       BY y-name.
    03 y-name PIC X.
    03 y- wert PIC 9.
    03 z IDENTIFIED
       BY z-name.
      04 z-name PIC X.
      04 z- wert PIC 9.





MOVE
"f" TO
y-name

MOVE
"g" TO
z-name


1(o)


inv

f

inv

g


1(r)

1
inv

f

inv

g





MOVE
"a" TO
y-name

MOVE
"b" TO
z-name


1(r)

1
2(o)

a

3(o)

b


1(r)

1
2(r)

a
2
3(r)

b
3


Anmerkungen:

  • Hinweise zur Darstellung dieses Beispiels finden Sie auf "Anweisungen für die XML-Verarbeitung".

  • Das in der START-Anweisung angegebene Datenfeld (y) muss keine gültige Position haben. Notwendig ist die gültige Position des direkt übergeordneten Datenfeldes (x mit Knoten 1).

  • Der Wirkungsbereich der START-Anweisung ist der Teilbaum mit Wurzel Knoten 1. Für die Zuordnung zu Datenfeld y werden die Kinder dieses Knotens (zuerst Knoten 2, dann Knoten 5) überprüft. Als erstes passt Knoten2 und die Zuordnung wird mit diesem Teilbaum fortgesetzt.

  • Da die START-Anweisung nur positioniert, aber keine Daten überträgt, werden durch die nachfolgende READ-Anweisung die Daten zu dem positionierten Knoten 2 und dem durch Knoten 2 bestimmten Teilbaum geliefert.

Beispiel 12-52 Wiederholtes Positionieren auf den gleichen Knoten (Fortsetzung von Beispiel 12-51)

XML-Dokument

Pos

COBOL-Datenstruktur

...

READ
xml-fil
ELEMENT
y

START
xml-fil
ELEMENT
y

<doc>1
  <a>2
    <b>3</b>
    <c>4</c>
  </a>
  <a>5
    <b>6</b>
    <c>7</c>
  </a>
</doc>

1
2
3
4

5
6
7

FD xml-fil
01 x IDENTIFIED
       BY "dok".
  02 x- wert PIC 9.
  02 y IDENTIFIED
       BY y-name.
    03 y-name PIC X.
    03 y- wert PIC 9.
    03 z IDENTIFIED
       BY z-name.
      04 z-name PIC X.
      04 z- wert PIC 9.


1(r)

1
2(r)

a
2
3(r)

b
3


1(r)

1
5(r)

a
5
6(r)

b
6


1(r)

1
2(o)

a
5
3(o)

b
6


Anmerkungen:

  • Hinweise zur Darstellung dieses Beispiels finden Sie auf "Anweisungen für die XML-Verarbeitung".

  • Das Lesen über Datenfeld y liefert das nächste Exemplar des Knotens mit Namen 'a'.

  • Für die folgende START-Anweisung über y spielen die Positionen der Datenfelder y und z keine Rolle, einzig die Position des dem y übergeordneten Datenfeldes x ist von Bedeutung.

  • Da sich die Position von Datenfeld x gegenüber der ersten START-Anweisung (siehe Beispiel 12-51) nicht geändert hat, ist der Wirkungsbereich noch der gleiche. Da auch die Werte der Schlüssel y-name und z-name unverändert sind, ergibt sich die gleiche Zuordnung, wie bei der ersten START-Anweisung.

  • Die START-Anweisung erlaubt es, erneut auf eines der bereits gelesenen älteren Geschwister zu positionieren (Knoten 2). Dies ist mit der READ-Anweisung nie möglich, dort wären nur jüngere Geschwister im Wirkungsbereich.

  • Die START-Anweisung überträgt keine Daten. Daher sind die Inhalte der zu y und z gehörenden Werte (y-wert, z-wert) unverändert, entsprechen aber nicht denen der durch die neue Positionierung zugeordneten Knoten (Knoten 2 und 3).

INDEX-Angabe bei START

START erlaubt zusätzlich nach dem datenname-1 noch die Angabe von

INDEX {bezeichner-1 | integer-1}

Der angegebene ganzzahlige positive Wert bestimmt, auf den wievielten Knoten von mehreren mit gleichem Elementnamen positioniert werden soll.

Die INDEX-Angabe ist auch für Attribut-Knoten erlaubt, obwohl Attributnamen eindeutig sein müssen. Wenn das i-te Attribut unabhängig vom Namen (d.h. IDENTIFIED USING) gelesen werden soll, macht die Index-Angabe für Attributnamen dennoch Sinn.

Beispiel 12-53 INDEX-Angabe bei START

XML-Dokument

Pos

COBOL-Datenstruktur


OPEN
DOCUMENT
xml-fil

START
xml-fil
ELEMENT
z
INDEX 2

START
xml-fil
ELEMENT
u
INDEX 3

START
xml-fil
ELEMENT
y

<doc>1
  <a>2
    <b>3</b>
    <c>4
      <d>5</d>
      <d>6</d>
    </c>
    <c>7
      <e>8</e>
      <e>9</e>
    </c>
  </a>
  <f>10</f>
</doc>

1
2
3
4
5
6

7
8
9

10

FD xml-fil
  01 x IDENTIFIED BY "dok".
    02 x-wert PIC 99.
    02 y IDENTIFIED BY y-name.
      03 y-name PIC X.
      03 y-wert PIC 99.
      03 z IDENTIFIED BY z-name.
        04 z-name PIC X.
        04 z- wert PIC 99.
        04 u IDENTIFIED BY u-name.
          05 u-name PIC X.
          05 u-wert PIC 99.


MOVE
"a" TO
y-name

MOVE
"c" TO
z-name

MOVE
"e" TO
u-name


1(o)

2(o)
a

4(o)
c

inv
e


1(o)

2(o)
a

7(o)
c

8(o)
e


1(o)

2(o)
a

7(o)
c

inv
e


1(o)

2(o)

a

4(o)
c

inv
e



FILE STATUS


00

00

23

00


Anmerkungen:

  • Hinweise zur Darstellung dieses Beispiels finden Sie auf "Anweisungen für die XML-Verarbeitung".

  • Der Wirkungsbereich der ersten START-Anweisung über z ist der Teilbaum mit Wurzel Knoten 2 (als der dem übergeordneten Datenfeld y zugeordnete Knoten).

  • Im ersten Schritt werden die Kinder von Knoten 2, d.h. Knoten 3, 4 und 7 auf eine mögliche Zuordnung überprüft. Da als Index 2 angegeben ist, wird nicht der erste passende Knoten (Knoten 4), sondern der zweite passende Knoten (Knoten 7) zugeordnet.

  • Der Index bezieht sich nur auf das in der START-Anweisung angegebene Datenfeld, nicht auf die Zuordnung von untergeordneten Datenfeldern (u). Von den 2 Exemplaren mit Namen 'e' wird das erste zugeordnet. Wenn für untergeordnete Datenfelder auch eine Index-Angabe wirken soll, ist für jedes eine entsprechende START-Anweisung erforderlich.

  • Der Zuordnungsvorgang für die zweite START-Anweisung betrachtet Knoten8 und 9 (als Kinder des dem z zugeordneten Knoten 7), findet also nicht so viele Knoten, wie verlangt (Index 3, aber nur 2 passende Knoten mit Namen 'e'). Es kann daher kein Knoten zugeordnet werden. Die Position des Datenfelds (u) wird auf ungültig gesetzt und eine Schlüsselfehler-Bedingung existiert.

  • Die dritte START-Anweisung hat als Wirkungsbereich das ganze Dokument. Positionierungen für untergeordnete Datenfelder (y, z, u), die bereits erfolgt sind, spielen keine Rolle.

  • Bei der dritten START-Anweisung kann dem Datenfeld (u) kein Knoten zugeordnet werden. Da u dem in der Anweisung angegebenen Datenfeld y untergeordnet ist, führt diese Situation nicht zu einer Schlüsselfehler-Bedingung.