As the name suggests, QVT enables defining queries, views and transformations on models. Queries are used to search for model elements in a model, e.g. those that should be transformed. Views are not explicitly defined in the standard. Transformations are mappings of model elements of a source model (e.g. a UML class model) to those of a target model (e.g. a relational database model) ensuring certain relations between them. The following figure depicts the language architecture.
Declaratively, a transformation can be expressed in either the Relations or Core language which embody the same semantics at two different abstraction levels. Imperatively, the Operational Mappings language can be used to either specify a transformation entirely or complement a Relations or Core specification. A Black Box implementation of a MOF operation with the same signature as a relation can also be plugged-in to complement the latter.
This architecture is analogous to that of the Java Language, whereby the Core language represents byte code and the core semantics is the behavior specification of the Java virtual machine. The Relations language plays the role of the Java language and the relations to core translation is like specifying a Java compiler which produces byte code. The ability to invoke operational mappings and black-box implementations is equivalent to calling the Java Native Interface (JNI).
Due to all these language facades, conformity to QVT is defined in two dimensions, namely language and interoperability. The language dimension states the language supported while the interoperability dimension denotes whether concrete syntax and/or XMI serialization of transformation specifications conforming to its language is supported. In addition, conformance must state whether black-box implementations are supported. The syntax for conformance is:
QVT-<language level>-<interoperability level> [*]
whereby the optional * stands for black-box support.
The medini QVT engine's conformance level is QVT-Relations-SyntaxExecutable . This means transformations expressed in the concrete syntax of the Relations language can be executed. Therefore this document will only describe the Relations language and point out the features implemented and those not yet implemented by our engine. Due to the fact that the QVT specification leaves room for interpretation of certain concepts, we are always going to point out the semantics as implemented in medini. Though the medini QVT engine does not support the black-box concept, however you can call customized Java methods within OCL expressions, see chapter User operations.