ROWs e LISTs podem ser comparadas com outras ROWs e LISTs.
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 ...
Com o corpo da mensagem de entrada XML a seguir, ambas as
expressões IF nas duas instruções acima são avaliadas como TRUE: <Dados>
<Nome>Raf</Nome>
<Idade>25</Idade>
</Dados>
Na comparação entre ROWs, o nome e o valor de
cada elemento são comparados; na comparação entre LISTs apenas o
valor de cada elemento é comparado. Nos dois casos, a cardinalidade e
a ordem seqüencial dos operandos LIST ou ROW que estão sendo
comparados devem ser iguais para que os dois operandos sejam iguais.
Assim, os seguintes exemplos são falsos, porque a ordem sequencial ou a cardinalidade dos operandos que estão sendo comparados não corresponde:
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 ...
Com o corpo da mensagem de entrada XML a seguir, a expressão IF acima
é avaliada como TRUE: <Locais>
<primeiro>Ken</primeiro>
<segundo>Bob</segundo>
<terceiro>Kate</terceiro>
</Locais>
A presença de uma ROW explicitamente construída como um dos operandos no operador de comparação resulta em outro operando também sendo tratado como uma ROW.
IF InputBody.Lottery.FirstDraw = InputBody.Lottery.SecondDraw THEN ...
que compara o valor dos campos FirstDraw e SecondDraw, não os nomes e
valores de cada um dos campos filhos de FirstDraw e SecondDraw construídos como
uma ROW. Assim, um corpo de mensagem de entrada XML, tal como: <Loteria>
<FirstDraw>quarta-feira
<ball1>32</ball1>
<ball2>12</ball2>
</FirstDraw>
<SecondDraw>sábado
<ball1>32</ball1>
<ball2>12</ball2>
</SecondDraw>
</Loteria>
não resultaria na expressão IF acima sendo
avaliada como TRUE, porque os valores quarta-feira e sábado estão
sendo comparados, não os nomes e valores dos campos ball.IF InputBody.Cities.City[] =
LIST{'Athens','Sparta','Thebes'} THEN ...
Com o corpo da mensagem de entrada XML a seguir, a expressão IF é
avaliada como TRUE: <Cidades>
<Cidade>Atenas</Cidade>
<Cidade>Esparta</Cidade>
<Cidade>Tebas</Cidade>
</Cidades>
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 ...
Com o corpo da mensagem de entrada XML a seguir, a expressão IF da
primeira e terceira instruções acima são avaliadas como TRUE: <Cidades>
<Medieval>1350
<Cidade>Londres</Cidade>
<Cidade>Paris</Cidade>
</Medieval>
<Moderna>1990
<Cidade>Londres</Cidade>
<Cidade>Paris</Cidade>
</Moderna>
</Cidades>
No entanto, a expressão IF da segunda
instrução é avaliada como FALSE, porque o *[] indica que todos os
filhos de Mediaeval e Modern devem ser comparados, não apenas
(XML.Element)s. Neste caso, os valores 1350 e 1990, que formam filhos
sem nome de Mediaeval e Modern, também são comparados como valores
das marcações City.<Cidades>
<Medieval>1350
<Local>Londres</Local>
<Local>Paris</Local>
</Medieval>
<Moderna>1990
<Cidade>Londres</Cidade>
<Cidade>Paris</Cidade>
</Moderna>
</Cidades>
LISTs são compostos de valores não denominados. São os valores dos campos filhos de Medieval e Moderno que são comparados, não
seus nomes.