E' possibile confrontare ROW e LIST con altre ROW e LIST.
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 ...Con il seguente contenuto del messaggio di input XML, le espressioni IF nelle istruzioni sopra riportate sono entrambe TRUE:
<Data> <Name>Raf</Name> <Age>25</Age> </Data>Nel confronto tra ROW, vengono confrontati il nome ed il valore di ciascun elemento; nel confronto tra LIST viene confrontato solo il valore di ciascun elemento. In entrambi i casi, la cardinalità e l'ordine sequenziale degli operandi LIST o ROW confrontati deve essere uguale affinché i due operandi siano uguali. In altre parole, tutte le seguenti istruzioni sono false, perchè l'ordine sequenziale o la cardinalità degli operandi confrontati non corrispondono:
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 ...Con il seguente contenuto del messaggio di input XML, il risultato dell'espressione IF precedente è TRUE:
<Places> <first>Ken</first> <second>Bob</second> <third>Kate</third> </Places>
La presenza di una ROW costruita in modo esplicito come uno degli operandi dell'operatore di confronto determina che anche l'altro operando venga considerato come ROW.
IF InputBody.Lottery.FirstDraw = InputBody.Lottery.SecondDraw THEN ...che confronta il valore dei campi FirstDraw e SecondDraw, non i nomi ed i valori di ciascuno dei campi child di FirstDraw e SecondDraw costruiti come ROW. Quindi, il contenuto del messaggio di input XML:
<Lottery> <FirstDraw>wednesday <ball1>32</ball1> <ball2>12</ball2> </FirstDraw> <SecondDraw>saturday <ball1>32</ball1> <ball2>12</ball2> </SecondDraw> </Lottery>non ha come risultato TRUE per l'espressione IF sopra riportata, perchè vengono confrontati i valori wednesday e saturday, non i nomi ed i valori dei campi ball.
IF InputBody.Cities.City[] = LIST{'Athens','Sparta','Thebes'} THEN ...Con il seguente contenuto del messaggio di input XML, l'espressione IF è 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 ...Con il seguente contenuto del messaggio di input XML, le espressioni IF della prima e terza istruzione sopra riportate sono entrambe TRUE:
<Cities> <Mediaeval>1350 <City>London</City> <City>Paris</City> </Mediaeval> <Modern>1990 <City>London</City> <City>Paris</City> </Modern> </Cities>Tuttavia, l'espressione IF della seconda istruzione è FALSE, perché *[] indica che devono essere confrontati tutti i child di Mediaeval e Modern, non solo (XML.Element). In questo caso, i valori 1350 e 1990, che sono child senza nome di Mediaeval e Modern, vengono confrontati così come i valori di City.
<Cities> <Mediaeval>1350 <Location>London</Location> <Location>Paris</Location> </Mediaeval> <Modern>1990 <City>London</City> <City>Paris</City> </Modern> </Cities>Le LIST sono composte da valori senza nomi. Vengono confrontati i valori dei campi child di Mediaeval e Modern e non i relativi nomi.