Sie können ROWs und LISTs mit anderen ROWs und LISTs vergleichen.
IF ROW(InputBody.Data.*[1],InputBody.Data.*[2]) = ROW('Raf' AS Name,'25' AS Age) THEN ... IF LIST{InputBody.Data.Name, InputBody.Data.Age} = LIST{'Raf','25'} THEN ...Für eine XML-Eingabenachricht mit folgendem Hauptteil führen beide IF-Ausdrücke in beiden oben genannten Anweisungen zu dem Ergebnis TRUE:
<Data> <Name>Raf</Name> <Age>25</Age> </Data>Bei Vergleichen zwischen ROWs werden sowohl der Name als auch der Wert jedes Elements verglichen; bei Vergleichen zwischen LISTs wird nur der Wert jedes Elements verglichen. In beiden Fällen müssen Kardinalität und Reihenfolge der zu vergleichenden LIST- bzw. ROW-Operanden gleich sein, damit die beiden Operanden gleich sind. Das heißt, alle folgenden Anweisungen sind falsch, weil entweder die Reihenfolge oder die Kardinalität der zu vergleichenden Operanden nicht übereinstimmen:
ROW('alpha' AS A, 'beta' AS B) = ROW('alpha' AS A, 'beta' AS B, 'delta' AS D) ROW('alpha' AS A, 'beta' AS B) = ROW('beta' AS B,'alpha' AS A) LIST{1,2,3} = LIST{1,2,3,4} LIST{3,2,1} = LIST{1,2,3}
IF InputBody.Places = ROW('Ken' AS first, 'Bob' AS second, 'Kate' AS third) THEN ...Für eine XML-Eingabenachricht mit folgendem Hauptteil führt der oben genannte IF-Ausdruck zu dem Ergebnis TRUE:
<Places> <first>Ken</first> <second>Bob</second> <third>Kate</third> </Places>
Das Vorhandensein einer explizit konstruierten ROW-Anweisung als einer der Operanden des Vergleichsoperators hat zur Folge, dass der andere Operand ebenfalls wie eine ROW-Anweisung behandelt wird.
IF InputBody.Lottery.FirstDraw = InputBody.Lottery.SecondDraw THEN ...Hier wird der Wert der Felder FirstDraw und SecondDraw verglichen, nicht die Namen und Werte aller untergeordneten Felder von FirstDraw und SecondDraw, die als ROW konstruiert sind. Für eine XML-Eingabenachricht mit dem Hauptteil
<Lottery> <FirstDraw>wednesday <ball1>32</ball1> <ball2>12</ball2> </FirstDraw> <SecondDraw>saturday <ball1>32</ball1> <ball2>12</ball2> </SecondDraw> </Lottery>bedeutet dies, dass der oben genannte IF-Ausdruck nicht zu dem Ergebnis TRUE führt, weil die Werte 'wednesday' und 'saturday' verglichen werden, nicht die Namen und Werte der 'ball'-Felder.
IF InputBody.Cities.City[] = LIST{'Athens','Sparta','Thebes'} THEN ...Für eine XML-Eingabenachricht mit folgendem Hauptteil führt der IF-Ausdruck zu dem Ergebnis TRUE:
<Cities> <City>Athens</City> <City>Sparta</City> <City>Thebes</City> </Cities>
IF InputBody.Cities.Mediaeval.City[] = InputBody.Cities.Modern.City[] THEN ... IF InputBody.Cities.Mediaeval.*[] = InputBody.Cities.Modern.*[] THEN ... IF InputBody.Cities.Mediaeval.(XML.Element)[] = InputBody.Cities.Modern.(XML.Element)[] THEN ...Für eine XML-Eingabenachricht mit folgendem Hauptteil führt der IF-Ausdruck der ersten und dritten Anweisung zu dem Ergebnis TRUE:
<Cities> <Mediaeval>1350 <City>London</City> <City>Paris</City> </Mediaeval> <Modern>1990 <City>London</City> <City>Paris</City> </Modern> </Cities>Der IF-Ausdruck der zweiten Anweisung führt jedoch zu dem Ergebnis FALSE, weil *[] bedeutet, dass alle untergeordneten Elemente von 'Mediaeval' und 'Modern' verglichen werden sollen, nicht nur die (XML.Element)-Elemente. In diesem Fall werden die Werte '1350' und '1990', bei denen es sich um nicht benannte, untergeordnete Elemente von 'Mediaeval' und 'Modern' handelt, ebenso verglichen wie die Werte der 'City'-Tags.
<Cities> <Mediaeval>1350 <Location>London</Location> <Location>Paris</Location> </Mediaeval> <Modern>1990 <City>London</City> <City>Paris</City> </Modern> </Cities>LISTs werden aus nicht benannten Werten erstellt. Es werden die Werte der untergeordneten Felder von 'Mediaeval' und 'Modern' verglichen, nicht deren Namen.