多対 1 の個別の反復ソース・リーフ (a)
注: 以下の例におけるモデル・グループは、反復しません。
ソース: |
Company
Department[]
Manager[]
|
ターゲット: |
Corporation
Leader[]
|
マッピング前: |
<Corporation>
|
マッピング後: |
<Corporation>
<ForEach Department>
<ForEach Manager>
<Qualify>
<Condition occur(Department)=occur(Manager)>
<Leader>
<MapFrom Department, Manager>
|
Leader は ForEach を必要とします。
Department および Manager はそれぞれ 1 つずつ提供します。
2 つの ForEach の順序は任意です。
多対 1 の個別の反復ソース・リーフ (b)
ソース: |
Family
Father
GradeF[]
Mother
GradeM[]
Child
GradeC[]
|
ターゲット: |
Person
Grade[]
|
マッピング前: |
<Person>
|
マッピング後: |
<Person>
<ForEach GradeF>
<ForEach GradeM>
<ForEach GradeC>
<Qualify>
<Condition occur(GradeF)=occur(GradeM)=occur(GradeC)>
<Grade>
<MapFrom GradeF, GradeM, GradeC>
|
前述の例と類似していますが、さらに Condition において等価テストがあります。
多対 1 の個別の反復ソース祖先
ソース: |
School
Boy[]
MarkB
Girl[]
MarkG
|
ターゲット: |
Education
Student[]
Performance
|
マッピング前: |
<Education>
|
マッピング後: |
<Education>
<ForEach Boy>
<ForEach Girl>
<Qualify>
<Condition occur(Boy)=occur(Girl)>
<Student>
<Performance>
<MapFrom MarkB, MarkG>
|
ターゲット内の反復 (Student) のそれぞれのレベルごとに、選択したそれぞれのソースで、ソース反復 (Boy および Girl) の 1 つのレベルと突き合わせます。
選択された各ソースからの ForEach エレメントをネストします。
ForEach および Qualify-Condition がすでに存在する
ソース: |
School
Boy[]
MarkB
AgeB
Girl[]
MarkG
AgeG
|
ターゲット: |
Education
Student[]
Performance
Age
|
マッピング前: |
<Education>
<ForEach Boy>
<ForEach Girl>
<Qualify>
<Condition occur(Boy)=occur(Girl)>
<Student>
<Performance>
<MapFrom MarkB, MarkG>
<Age>
<MapFrom>
|
マッピング後: |
<Education>
<ForEach Boy>
<ForEach Girl>
<Qualify>
<Condition occur(Boy)=occur(Girl)>
<Student>
<Performance>
<MapFrom MarkB, MarkG>
<Age>
<MapFrom AgeB, AgeG>
|
ForEach、Qualify、Condition はすでにそこに存在するので、挿入する必要がありません。
<ForEach Y> がネストする <ForEach X> がすでにそこにある場合には、<ForEach X> がネストする <ForEach Y> を挿入する必要はありません。
Condition Y=X がすでにそこにある場合には、Condition X=Y を挿入する必要はありません。
多対 1 の複数レベル反復対称構造
ソース: |
School
Boy[]
GradeB[]
MarkB
Girl[]
GradeG[]
MarkG
|
ターゲット: |
Education
Student[]
Year[]
Performance
|
マッピング前: |
<Education>
|
マッピング後: |
<Education>
<ForEach Boy>
<ForEach Girl>
<Qualify>
<Condition occur(Boy)=occur(Girl)>
<Student>
<ForEach GradeB>
<ForEach GradeG>
<Qualify>
<Condition occur(GradeB)=occur(GradeG)>
<Year>
<Performance>
<MapFrom MarkB, MarkG>
|
ターゲット内の反復のそれぞれのレベルごとに、選択したそれぞれのソースで、ソース反復の 1 つのレベルと突き合わせます。
GradeB および GradeG は Year と突き合わせ、Boy および Girl は Student と突き合わせます。
多対 1 の共通反復ソース
ソース: |
Company
Department[]
Manager
Size
|
ターゲット: |
Corporation
Group[]
|
マッピング前: |
<Corporation>
|
マッピング後: |
<Corporation>
<ForEach Department>
<Group>
<MapFrom Manager, Size>
|
各ソースから上へ進み (Manager および Size)、共通反復ソース (Department) で終了します。
複数レベル反復対称構造
ソース: |
School
Grade[]
Boy[]
MarkB
Girl[]
MarkG
|
ターゲット: |
Education
Year[]
Student[]
Performance
|
マッピング前: |
<Education>
|
マッピング後: |
<Education>
<ForEach Grade>
<Year>
<ForEach Boy>
<ForEach Girl>
<Qualify>
<Condition occur(Boy)=occur(Girl)>
<Student>
<Performance>
<MapFrom MarkB, MarkG>
|
Boy および Girl は Student と突き合わせ、Grade は Year と突き合わせます。
複数レベル反復非対称 (a)
ソース: |
Company
Division[]
Team[]
Employee
University
Department[]
Professor
|
ターゲット: |
Organization
Person[]
|
マッピング前: |
<organization>
|
マッピング後: |
<Organization>
<ForEach Division>
<Qualify>
<Condition occur(Division)=1>
<ForEach Team>
<ForEach Department>
<Qualify>
<Condition occur(Team)=occur(Department)>
<Person>
<MapFrom Employee, Professor>
|
余分のソース反復に対しては、ForEach-Qualify-Condition を使用します。
複数レベル反復非対称 (b)
ソース: |
Company
Division[]
Team[]
Employee
University
Department[]
Professor
|
ターゲット: |
Organization
Location[]
Person[]
|
マッピング前: |
<Organization>
|
マッピング後: |
<Organization>
<ForEach Division>
<Location>
<ForEach Team>
<ForEach Department>
<Qualify>
<Condition occur(Team)=occur(Department)>
<Person>
<MapFrom Employee, Professor>
|
欠落したソース反復については、単に ForEach がありません。
複数レベル反復非対称 (c)
ソース: |
Company
Division[]
Employee
University
Department[]
Professor
|
ターゲット: |
Organization
Location[]
Person[]
|
マッピング前: |
<Organization>
|
マッピング後: |
<Organization>
<Location>
<ForEach Division>
<ForEach Department>
<Qualify>
<Condition occur(Division)=occur(Department)>
<Person>
<MapFrom Employee, Professor>
|
欠落したソース反復については、単に ForEach がありません。
ネストした反復における異なるレベル内の、問題となる複数のソース
ソース: |
S
S1[]
S2
S3[]
S4
|
ターゲット: |
T
T1[]
T2[]
|
マッピング前: |
<T>
|
マッピング後: |
<T>
<ForEach S1> (caused by matching S1-T1 for mapping S2-T2)
<T1>
<ForEach S1> (caused by matching S1-T2 for mapping S2-T2)
<ForEach S3> (caused by matching S3-T2 for mapping S4-T2)
<Qualify>
<Condition occur(S1)=occur(S3)>
<T2>
<MapFrom S2,S4>
|
同じ式を持つ 2 つの ForEach 式はネストしてはなりません。occur(S1) があいまいです。
ネストした反復における異なるレベル内の、問題となる複数のソース (a)
ソース: |
S
S1[]
S2[]
S3[]
S4
S5[]
|
ターゲット: |
T
T1[]
|
マッピング前: |
<T>
|
マッピング後: |
<T>
<ForEach S1> (caused by unmatching S for mapping S3-T1)
<Qualify>
<Condition occur(S1)=1>
<ForEach S2> (caused by unmatching S2 for mapping S3-T1)
<Qualify>
<Condition occur(S2)=1>
<ForEach S1> (caused by unmatched S1 for mapping S5-T1)
<Qualify>
<Condition occur(S1)=1>
<ForEach S3> (caused by matching S3-T1 for mapping S3-T1)
<ForEach S5> (caused by matching S5-T1 for mapping S5-T1)
<Qualify>
<Condition occur(S3)=occur(S5)>
<T1>
<MapFrom S3,S5>
|
同じ式を持つ 2 つの ForEach 式はネストしてはなりません。occur(S1) があいまいです。
ネストした反復における異なるレベル内の、問題となる複数のソース (b)
ソース: |
S
S1[]
S2
S3[]
S4
|
ターゲット: |
T
T1[]
|
マッピング前: |
<T>
|
マッピング後: |
<T>
<ForEach S1> (caused by unmatched S1 for mapping S4-T1)
<Qualify>
<Condition occur(S1)=1>
<ForEach S1> (caused by matching S1-T1 for mapping S2-T1)
<ForEach S3> (caused by matching S3-T1 for mapping S4-T1)
<Qualify>
<Condition occur(S1)=occur(S3)>
<T1>
<MapFrom S2,S4>
|