Puede comparar ROW y LIST con otros ROW y 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
el siguiente texto de mensaje de entrada XML, las dos expresiones IF de
las dos sentencias anteriores se evalúan como TRUE: <Data>
<Name>Raf</Name>
<Age>25</Age>
</Data>
En la comparación entre ROW, se comparan tanto el
nombre como el valor de cada elemento. En la comparación entre LIST
solamente se compara el valor de cada elemento. En ambos casos, la
cardinalidad y el orden secuencial de los operandos LIST o ROW que se
están comparando deben tener el mismo orden para que los dos operandos sean iguales.
Por lo tanto, los ejemplos siguientes son falsos porque el orden secuencial o la cardinalidad de los operandos que se comparan no coincide: 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 el texto de mensaje de entrada XML siguiente, la expresión IF anterior se evalúa como
TRUE: <Places>
<first>Ken</first>
<second>Bob</second>
<third>Kate</third>
</Places>
La presencia de ROW creado de forma explícita como uno de los operandos del operador de comparación da como resultado que el otro operando se trate como ROW.
IF InputBody.Lottery.FirstDraw = InputBody.Lottery.SecondDraw THEN ...
lo cual compara el valor de los campos
FirstDraw y SecondDraw y no los nombres y los valores de cada uno de los campos hijo FirstDraw y SecondDraw creados como ROW. De este modo, un texto de mensaje de entrada XML como, por ejemplo: <Lottery>
<FirstDraw>wednesday
<ball1>32</ball1>
<ball2>12</ball2>
</FirstDraw>
<SecondDraw>saturday
<ball1>32</ball1>
<ball2>12</ball2>
</SecondDraw>
</Lottery>
no hará que la expresión IF anterior se evalúe como TRUE, debido a que se están comparando los valores wednesday y saturday y no los nombres y valores de los campos ball.IF InputBody.Cities.City[] = LIST{'Athens','Sparta','Thebes'} THEN ...
Con el texto de mensaje de entrada XML siguiente, la expresión IF anterior se evalúa como
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 el texto de mensaje de entrada XML siguiente, la expresión IF anterior de la primera y tercera sentencia se evalúa como
TRUE: <Cities>
<Mediaeval>1350
<City>London</City>
<City>Paris</City>
</Mediaeval>
<Modern>1990
<City>London</City>
<City>Paris</City>
</Modern>
</Cities>
No obstante, la expresión IF de la segunda
sentencia se evalúa como FALSE, debido a que *[] indica que todos
los hijos de Mediaeval y Modern se deben comparar, y no simplemente los
(XML.Element).
En este caso, se comparan los valores 1350 y 1990, que forman hijos sin
nombre de Mediaeval y Modern, así como también los valores de
los códigos City.<Cities>
<Mediaeval>1350
<Location>London</Location>
<Location>Paris</Location>
</Mediaeval>
<Modern>1990
<City>London</City>
<City>Paris</City>
</Modern>
</Cities>
LIST consta de valores sin nombre. Son los valores de los campos hijo de
Mediaeval y Modern los que se comparan y no los nombres.