PTL: A model transformation language based on logic programming
PTL language: The language makes possible to define meta-models and ATL-style rules, together with helpers and validation rules in Prolog syntax. EMF/ECore is the metameta-model of PTL, and source and target meta-models have to be defined in terms of the EMF/ECore meta-model. Declarative semantics: PTL is equipped with a declarative semantics that provides precise semantics to the PTL constructors. Encoding to Prolog rules: ATL-style transformation rules are translated into Prolog rules. Each rule is encoded by a set of Prolog rules, one rule for each object that is created, and one rule for each role set by the rule. A Prolog library for handling metamodels is also automatically generated from the meta-model specification. Model validation: Constraints on source and target models and cross-constraints on sourcetarget models can be expressed in our approach by Prolog rules. An OCL to Prolog mapping is also defined. ATL to PTL mapping: An ATL to PTL mapping is defined in such a way that a subset of PTL is equivalent to a subset of ATL. For this fragment, PTL provides semantics to ATL and can be considered as a Prolog-based Virtual Machine for ATL. Debugging capabilities: Debugging permits detect rules that fail in a certain transformation, and in addition, debugging is able to locate the point of the rule in which it fails. Tracing capabilities: Tracing permits to navigate from a target model element to show all the rules and source model elements that contribute to this element. PTL evaluation: PTL has been evaluated with examples of ATL. PTL have been also evaluated for testing performance of transformations with medium-size models, and for testing performance of constraint validation with large models. Eclipse plugin: The plugin makes possible the edition of PTL code, the execution of transformations, as well as the debugging, tracing and validation of transformations.
model transformation logic programming software engineering model driven engineering domain specific languages