多対 1

多対 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>
関連タスク
メッセージ・マッピングの開発
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2005 Last updated: 11/07/2005
ar25235_3_