49
P.A. Bernstein, S. Melnik: Meta Data Management, ICDE'04 Boston
Complete Script in Rondo
Operator Definition: PropagateChanges(s1, d1, s1_d1, s2, c, s2_c)
1.  s1_s2 = Match(s1, s2);
2.  ád1¢, d1¢_d1ñ = Delete(d1, Traverse(All(s1) - Domain(s1_s2), s1_d1));
3. ác¢, c¢_cñ =  Extract(c, Traverse(All(s2) - Range(s1_s2), s2_c));
4.  c¢_d1¢ =  c¢_c * Invert(s2_c) * Invert(s1_s2) * s1_d1 * Invert(d1¢_d1);
5.  ád2, c¢_d2, d1¢_d2ñ = Merge(c¢, d1¢, c¢_d1¢);
6.s2_d2 = s2_c * Invert(c¢_c) * c¢_d2 +
                      Invert(s1_s2) * s1_d1 * Invert(d1¢_d1) * d1¢_d2;
7.  return ád2, s2_d2ñ;
SQLàXSD: PropagateChanges(s1, d1, s1_d1, s2, ModelGen(s2, XSD));
Operator Use:
Reduced  complexity, no navigational code.
Beauty for programmer: Script is generic, works the other way (XML to relational, reverse engineering: rel-ER), too.
[Execution can be optimized.]
Fun part: managed to make the scenarios executable!
Intermediate results can be inspected and adjusted. Capability is important, since many tasks require human intervention: for example, FreightCharge not propagated.