ROW と LIST を、別の ROW と 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 ...以下の XML 入力メッセージ本体の場合、 上の 2 つのステートメント中の両方の IF 式が TRUE に評価されます。
<Data> <Name>Raf</Name> <Age>25</Age> </Data>ROW 同士の比較では、各エレメントの名前と値が比較対象となり、LIST 同士の比較では、各エレメントの値だけが比較対象となります。どちらの場合も、2 つのオペランドが等しくなるためには、比較される LIST または ROW オペランドの基数および順序が等しくなければなりません。つまり、以下はすべて FALSE になります。 なぜなら、比較されるオペランドの順序または基数のいずれかが一致しないからです。
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 ...以下の XML 入力メッセージ本体の場合、上の IF 式は TRUE に評価されます。
<Places> <first>Ken</first> <second>Bob</second> <third>Kate</third> </Places>
比較演算子に対するオペランドの 1 つとして明示的に構成された ROW があると、他のオペランドも ROW として扱われるようになります。
IF InputBody.Lottery.FirstDraw = InputBody.Lottery.SecondDraw THEN ...これは、ROW として構成された FirstDraw と SecondDraw の子フィールドのそれぞれの名前と値ではなく、FirstDraw と SecondDraw のフィールドの値を比較します。したがって、次のような XML 入力メッセージ本体の場合:
<Lottery> <FirstDraw>wednesday <ball1>32</ball1> <ball2>12</ball2> </FirstDraw> <SecondDraw>saturday <ball1>32</ball1> <ball2>12</ball2> </SecondDraw> </Lottery>この場合、上の IF 式は TRUE に評価されません。なぜなら、比較されるのは wednesday と saturday の値であり、ball フィールドの名前および値ではないからです。
IF InputBody.Cities.City[] = LIST{'Athens','Sparta','Thebes'} THEN ...以下の XML 入力メッセージ本体の場合、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 ...以下の XML 入力メッセージ本体の場合、上の最初および 3 番目のステートメントの IF 式は、TRUE に評価されます。
<Cities> <Mediaeval>1350 <City>London</City> <City>Paris</City> </Mediaeval> <Modern>1990 <City>London</City> <City>Paris</City> </Modern> </Cities>しかしながら、2 番目のステートメントの IF 式は FALSE に評価されます。なぜなら、*[] は (XML.Element) だけでなく Mediaeval と Modern のすべての子を比較するからです。つまり、この場合、Mediaeval と Modern の名前を持たない子を形成する 1350 と 1990 の値、および City タグの値が比較されます。
<Cities> <Mediaeval>1350 <Location>London</Location> <Location>Paris</Location> </Mediaeval> <Modern>1990 <City>London</City> <City>Paris</City> </Modern> </Cities>LIST は、一連の名前なしの値で構成されます。比較されるのは、Mediaeval と Modern の子フィールドの値であり、その名前ではありません。