XML is a language for defining grammars for mark-up languages. There will be a big need to translate between different mark-up languages that carry similar information. This project is about specifying the language translations at a high-level of abstraction without talking about the details of the source and target language grammars. Example: A -> B bypassing {A} = A -> B bypassing A A -> A -> B bypassing {A} = A -> A -> B bypassing {A} ... A -> n times -> A -> B bypassing {A} = A -> n times -> A -> B bypassing {A} means: if there is a B-object at nesting level n in the source then the same B-object exists at nesting level n in the translated object. A -> Y bypassing {A} -> C bypassing {A} = A -> C bypassing {A} = A -> A bypassing A -> Y bypassing {A} -> C bypassing {A} = A -> A bypassing A -> C bypassing {A} ... A -> n times -> A bypassing A -> Y bypassing {A} -> C bypassing {A} = A -> n times -> A bypassing A -> C bypassing {A} means: only the C-objects reachable through Y are translated. if there is a C-object at nesting level n in the source then the same C-object exists at nesting level n in the translated object. grammar 1: A = R Y Q. R = S. S = B. Y = C. Q = C. C = [A]. B = . grammar 2: A = R1 X. R1 = S1. S1 = R. R = S. S = B. X = C. C = [A]. B = . The translation works as follows: Retrieve the outermost B-object from object 1 of grammar 1. Retrieve the outermost C-object from object 1 (reachable trough Y). Create an A-object (object 2) of grammar 2 (assuming [A] absent) and put B-object fom object 1 in.