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. Em outras palavras, todos os itens a seguir são false porque a ordem seqüencial ou a cardinalidade dos operandos que estão sendo comparados não é correspondente:
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.