Elemento hoja
origen de repetición diferenciado Muchos a uno (a)
Nota: Los grupos modelo de estos ejemplos no se repiten.
Origen: |
Company
Department[]
Manager[]
|
Destino: |
Corporation
Leader[]
|
Antes de la correlación: |
<Corporation>
|
Después de la correlación: |
<Corporation>
<ForEach Department>
<ForEach Manager>
<Qualify>
<Condition occur(Department)=occur(Manager)>
<Leader>
<MapFrom Department, Manager>
|
Leader necesita un ForEach. Department y Manager ofrecen
uno cada uno. El orden de los dos ForEaches es arbitrario.
Elemento hoja
origen de repetición diferenciado Muchos a uno (b)
Origen: |
Family
Father
GradeF[]
Mother
GradeM[]
Child
GradeC[]
|
Destino: |
Person
Grade[]
|
Antes de la correlación: |
<Person>
|
Después de la correlación: |
<Person>
<ForEach GradeF>
<ForEach GradeM>
<ForEach GradeC>
<Qualify>
<Condition occur(GradeF)=occur(GradeM)=occur(GradeC)>
<Grade>
<MapFrom GradeF, GradeM, GradeC>
|
Similar al ejemplo anterior, además de prueba de
igualdad en Condition.
Ascendiente
origen de repetición diferenciado Muchos a uno
Origen: |
School
Boy[]
MarkB
Girl[]
MarkG
|
Destino: |
Education
Student[]
Performance
|
Antes de la correlación: |
<Education>
|
Después de la correlación: |
<Education>
<ForEach Boy>
<ForEach Girl>
<Qualify>
<Condition occur(Boy)=occur(Girl)>
<Student>
<Performance>
<MapFrom MarkB, MarkG>
|
Para cada nivel de repetición (Student) del destino,
emparejar con un nivel de repetición de origen (Boy y Girl) en cada origen
seleccionado. Anidar elementos ForEach de cada origen seleccionado
ForEach y Qualify-Condition ya existen
Origen: |
School
Boy[]
MarkB
AgeB
Girl[]
MarkG
AgeG
|
Destino: |
Education
Student[]
Performance
Age
|
Antes de la correlación: |
<Education>
<ForEach Boy>
<ForEach Girl>
<Qualify>
<Condition occur(Boy)=occur(Girl)>
<Student>
<Performance>
<MapFrom MarkB, MarkG>
<Age>
<MapFrom>
|
Después de la correlación: |
<Education>
<ForEach Boy>
<ForEach Girl>
<Qualify>
<Condition occur(Boy)=occur(Girl)>
<Student>
<Performance>
<MapFrom MarkB, MarkG>
<Age>
<MapFrom AgeB, AgeG>
|
No necesita insertar ForEach, Qualify, Condition porque ya
están allí. No necesita insertar un <ForEach X> que anida <ForEach Y>
si ya hay un <ForEach Y> que anida <ForEach X>. No
necesita insertar Condition X=Y si ya hay Condition Y=X.
Estructuras simétricas de repetición de varios niveles Muchos a uno
Origen: |
School
Boy[]
GradeB[]
MarkB
Girl[]
GradeG[]
MarkG
|
Destino: |
Education
Student[]
Year[]
Performance
|
Antes de la correlación: |
<Education>
|
Después de la correlación: |
<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>
|
Para cada nivel de repetición del destino, emparejar con un
nivel de repetición de origen en cada origen seleccionado. GradeB y GradeG
se emparejan con Year; Boy y Girl se emparejan con Student.
Origen de repetición común Muchos a uno
Origen: |
Company
Department[]
Manager
Size
|
Destino: |
Corporation
Group[]
|
Antes de la correlación: |
<Corporation>
|
Después de la correlación: |
<Corporation>
<ForEach Department>
<Group>
<MapFrom Manager, Size>
|
Desplácese hacia arriba desde cada origen (Manager y Size) y acabe con el
origen de repetición común (Department).
Estructuras simétricas de repetición de varios niveles
Origen: |
School
Grade[]
Boy[]
MarkB
Girl[]
MarkG
|
Destino: |
Education
Year[]
Student[]
Performance
|
Antes de la correlación: |
<Education>
|
Después de la correlación: |
<Education>
<ForEach Grade>
<Year>
<ForEach Boy>
<ForEach Girl>
<Qualify>
<Condition occur(Boy)=occur(Girl)>
<Student>
<Performance>
<MapFrom MarkB, MarkG>
|
Boy y Girl se emparejan con Student; Grade se empareja con
Year.
Repetición de varios niveles asimétrica (a)
Origen: |
Company
Division[]
Team[]
Employee
University
Department[]
Professor
|
Destino: |
Organization
Person[]
|
Antes de la correlación: |
<organization>
|
Después de la correlación: |
<Organization>
<ForEach Division>
<Qualify>
<Condition occur(Division)=1>
<ForEach Team>
<ForEach Department>
<Qualify>
<Condition occur(Team)=occur(Department)>
<Person>
<MapFrom Employee, Professor>
|
Para la repetición de origen sobrante, utilizar ForEach-Qualify-Condition.
Repetición de varios niveles asimétrica (b)
Origen: |
Company
Division[]
Team[]
Employee
University
Department[]
Professor
|
Destino: |
Organization
Location[]
Person[]
|
Antes de la correlación: |
<Organization>
|
Después de la correlación: |
<Organization>
<ForEach Division>
<Location>
<ForEach Team>
<ForEach Department>
<Qualify>
<Condition occur(Team)=occur(Department)>
<Person>
<MapFrom Employee, Professor>
|
Para la repetición de origen que falta, sin ForEach.
Repetición de varios niveles asimétrica (c)
Origen: |
Company
Division[]
Employee
University
Department[]
Professor
|
Destino: |
Organization
Location[]
Person[]
|
Antes de la correlación: |
<Organization>
|
Después de la correlación: |
<Organization>
<Location>
<ForEach Division>
<ForEach Department>
<Qualify>
<Condition occur(Division)=occur(Department)>
<Person>
<MapFrom Employee, Professor>
|
Para la repetición de origen que falta, sin ForEach.
Varios orígenes problemáticos dentro de distintos niveles en repeticiones
anidadas
Origen: |
S
S1[]
S2
S3[]
S4
|
Destino: |
T
T1[]
T2[]
|
Antes de la correlación: |
<T>
|
Después de la correlación: |
<T>
<ForEach S1> (causado por S1-T1 coincidente para la correlación S2-T2)
<T1>
<ForEach S1> (causado por S1-T2 coincidente para la correlación S2-T2)
<ForEach S3> (causado por S3-T2 coincidente para la correlación S4-T2)
<Qualify>
<Condition occur(S1)=occur(S3)>
<T2>
<MapFrom S2,S4>
|
Dos expresiones ForEach con la misma expresión no deberían
estar anidadas, occur(S1) es ambiguo.
Varios orígenes problemáticos dentro de distintos niveles en repeticiones
anidadas (a)
Origen: |
S
S1[]
S2[]
S3[]
S4
S5[]
|
Destino: |
T
T1[]
|
Antes de la correlación: |
<T>
|
Después de la correlación: |
<T>
<ForEach S1> (causado por S no coincidente para la correlación S3-T1)
<Qualify>
<Condition occur(S1)=1>
<ForEach S2> (causado por S2 no coincidente para la correlación S3-T1)
<Qualify>
<Condition occur(S2)=1>
<ForEach S1> (causeado por S1 no coincidente para la correlación S5-T1)
<Qualify>
<Condition occur(S1)=1>
<ForEach S3> (causado por S3-T1 no coincidente para la correlación S3-T1)
<ForEach S5> (causado por S5-T1 coincidente para la correlación S5-T1)
<Qualify>
<Condition occur(S3)=occur(S5)>
<T1>
<MapFrom S3,S5>
|
Dos expresiones ForEach con la misma expresión no deberían
estar anidadas, occur(S1) es ambiguo.
Varios orígenes problemáticos dentro de distintos niveles en repeticiones
anidadas (b)
Origen: |
S
S1[]
S2
S3[]
S4
|
Destino: |
T
T1[]
|
Antes de la correlación: |
<T>
|
Después de la correlación: |
<T>
<ForEach S1> (causeado por S1 no coincidente para la correlación S4-T1)
<Qualify>
<Condition occur(S1)=1>
<ForEach S1> (causado por S1-T1 coincidente para la correlación S2-T1)
<ForEach S3> (causado por S3-T1 no coincidente para la correlación S4-T1)
<Qualify>
<Condition occur(S1)=occur(S3)>
<T1>
<MapFrom S2,S4>
|