Model-Level Integration of the OCL Standard Library Using a Pivot Model with Generics Support Electronic Communications of the EASST Volume 9 (2008) Proceedings of the Workshop Ocl4All: Modelling Systems with OCL at MoDELS 2007 Model-Level Integration of the OCL Standard Library Using a Pivot Model with Generics Support Matthias Bräuer and Birgit Demuth 14 pages Guest Editors: David H. Akehurst, Martin Gogolla, Steffen Zschaler Managing Editors: Tiziana Margaria, Julia Padberg, Gabriele Taentzer ECEASST Home Page: http://www.easst.org/eceasst/ ISSN 1863-2122 http://www.easst.org/eceasst/ ECEASST Model-Level Integration of the OCL Standard Library Using a Pivot Model with Generics Support Matthias Bräuer1 and Birgit Demuth2 1 matthias.braeuer@inf.tu-dresden.de 2 birgit.demuth@inf.tu-dresden.de Institut für Software- und Multimediatechnik Technische Universität Dresden, Germany Abstract: OCL 2.0 specifies a standard library of predefined types and associated operations. A model-level representation of the library is required to reference its elements within the abstract syntax model created by an OCL parser. Existing OCL engines build this model in the implementation code which severely limits reusability, flexibility and maintainability. To address these problems, we show how a common pivot model with explicit support for template types can help to externalize the definition of the standard li- brary and integrate it with instances of arbitrary domain-specific modeling languages. We exemplify the feasibility of our approach with a prototypical implementation for the Dresden OCL2 Toolkit and present a tailored EMF editor for modeling the OCL types and operations. We limit our discussion to the model level, i.e., we do not consider an implementation of the standard library for an execution engine. Keywords: OCL, domain-specific languages, generics 1 Introduction The Object Constraint Language (OCL) [OMG06b] specifies a standard library of types and associated operations. This includes primitive types such as Integer or String, collection types like Set or Bag as well as a number of special types which are important for the OCL type system (OclAny, OclVoid, and OclType). Among the predefined oper- ations on these types are arithmetic, boolean and set-theoretic operations. All types in the standard library are instances of abstract syntax classes. These are located one level above the type definitions in the four-layered meta hierarchy of the OMG MOF archi- tecture [OMG06a]. Since OCL allows querying of both metamodels and models [SV06, p. 97], the standard types exist either on the M2 or the M1 layer. Now, when building the abstract syntax model from a textual OCL expression, an OCL parser needs to have access to the elements of the standard library. This is necessary, for instance, to properly locate operations defined for the implicit supertype OclAny or to create user-defined collection and tuple types. Existing OCL engines, such as the current release of the Dresden OCL2 Toolkit [WWWa] or the Kent OCL Library [WWWb], 1 / 14 Volume 9 (2008) mailto:matthias.braeuer@inf.tu-dresden.de mailto:birgit.demuth@inf.tu-dresden.de Model-Level Integration of the OCL Standard Library usually build an internal representation of the standard library programmatically, e.g, using the API of a model repository. Hiding the structure of the standard library inside the implementation code of the engine triggers a number of problems. Firstly, the reusability of the library definition is severely impaired, because it is tied to a particular implementation language and plat- form. Thus, porting the OCL engine to another programming language requires an entire rewrite of the code that creates the library. Further, the model of the standard library cannot conveniently be validated, altered, extended, or modularized. This is disadvan- tageous if the underlying execution platform (i.e., an interpreter or code generator) does not support some of the standard library types and operations. In this case, adapting the library definition on the model level by removing the corresponding elements would be helpful. In essence, the flexibility of the “in-code” approach is relatively low. Lastly, the implementation of the OCL engine tends to become fairly complex leading to decreased maintainability. For instance, the Dresden OCL2 Toolkit in its current release contains a helper class with more than 400 lines of code alone to manage the model of the standard library. As an answer to these problems, we propose the novel approach of creating the OCL standard library as an instance of a so-called pivot model, which can be viewed as a “universal language covering a certain domain” [KKK+06]. For example, Milanovic et al. [MGG+06] employ the REWERSE Rule Markup Language (R2ML) as a “pivotal metamodel” to map between OWL/SWRL and UML/OCL. In this paper, we define a pivot model as an intermediate metamodel used for aligning the metamodels of arbitrary domain-specific modeling languages (DSL) with that of OCL. By directly supporting generics in this metamodel, modeling all of the template types and operations in the OCL standard library becomes possible. We have implemented this approach using the Eclipse Modeling Framework (EMF) [BSM+03] which allowed us to build a highly functional editor for the pivot model and employ EMF’s default XMI serialization capabilities. Providing the predefined OCL types within an OCL engine therefore reduces to a simple model file import. Concrete collection types can be created from the corresponding templates by binding their type parameters with the required element type. The remainder of this paper is structured as follows: In Section 2, we briefly review the challenges for a model-level integration of the OCL standard library in the light of two existing OCL engines. We continue by describing the design of a suitable pivotal metamodel addressing these issues in Section 3. In Section 4, we present a practical evaluation of our approach. We highlight the visual editor used for modeling the standard library and describe an illustrative example. A brief account of related work is provided in Section 5. Finally, Section 6 concludes on our work and shows up further research. 2 Background Based on observations from two well-known implementations of the OCL standard, namely the Dresden OCL2 Toolkit and the Kent OCL Library, we can identify two major challenges for a model-level integration of the standard library in an OCL engine. Proc. Ocl4All 2007 2 / 14 ECEASST In brief, these are: 1. Operations and parameters in the standard library instantiate the correspond- ing metaclasses from the UML metamodel [OMG05b]. When OCL is integrated with domain-specific modeling languages developed within so-called language work- benches [Fow05] or via UML profiles, we cannot rely on a common format for the library any more. 2. The standard library contains template types and operations that are parameter- ized with a type parameter. Most modeling languages do not support a declarative definition of these generic elements. In the following, we will discuss these two issues in greater detail. 2.1 OCL for Domain-Specific Modeling Languages In recent years, the importance of domain-specific languages (DSLs) for describing sys- tems has increased and a convergence with model-driven approaches such as the OMG MDA initiative [OMG03a] can be witnessed [BJKV06]. As a result, the original scope of OCL being an add-on to UML [WK03] has widened to support constraints and queries over object-based modeling languages in general [AHM06]. An obvious solution to these new challenges is the introduction of a pivotal metamodel that abstracts over the metamodels of arbitrary domain-specific languages and provides exactly those features required for an integration with OCL. Both of our reference OCL engines work this way. The Dresden OCL2 Toolkit in its current version employs a so- called Common Model [LO04] to adapt the metamodels of UML 1.5 as well as MOF 1.4, while the Kent OCL Library supports UML 1.4, Ecore (the metamodel used by EMF), and Java via a central Bridge model [AP04]. Unfortunately, both solutions fail to decouple the model of the OCL standard library from the adapted metamodel. In the Dresden OCL2 Toolkit, the predefined library oper- ations and their parameters are instances of the corresponding UML or MOF metaclasses, while in the Kent OCL Library they instantiate metamodel-specific adapter classes. Both approaches demand a programmatic creation of the standard library types and opera- tions. Consequently, to model the standard library externally, we need to find a way to instantiate these elements independently from any adapted metamodel. 2.2 Generics in the OCL Standard Library The predefined collection types in the standard library are actually template types with the type parameter T [OMG06b, p. 144]. As an example, consider the sum operation of the OCL Collection type whose return parameter is typed with the element type of the collection. We say that a concrete type Collection(Integer) is created from the template Collection(T) by substituting, or binding, T with the type Integer. Since element types may be nested, there is an infinite number of collection types which have to be dynamically created when parsing a particular OCL expression. 3 / 14 Volume 9 (2008) Model-Level Integration of the OCL Standard Library However, not only types can have type parameters. Consider the product operation of Collection(T) which returns the cartesian product of two collections and has the signa- ture product(c2:Collection(T2)):Set(Tuple(first:T,second:T2)). Note that the return type of this operation not only depends on the binding of the type parameter T, but also on the type of the argument c2. This is an example of a so-called generic operation [Bra04]. Further note that the return type of the product operation is itself a template type, namely Set(T), whose type parameter T is bound with the generic type Tuple(first:F, second:S). The actual type of the type parameters F and S is deter- mined at runtime, based on the binding for T and T2, respectively. In this case, we call T and T2 type arguments for the generic tuple type. Finally, some of the predefined operations in the library have return types that depend on the object they are invoked on. Examples are OclAny::asSet (returning a singleton set containing the object) and OclAny::allInstances (returning the set of all instances of a type). Both operations have Set(T) as their return type, but the concrete binding for T cannot be determined until the source type of the operation call is known. To remove the definition of the standard library from the implementation code and specify it declaratively, a mechanism to model generic types and operations is required. Moreover, the engine needs to support the binding of generic elements at runtime to dynamically create concrete types while parsing an OCL expression. 3 The Design of a Pivot Model with Generics Support We are currently reengineering the Dresden OCL2 Toolkit to increase its reusability and flexibility and to provide the foundations for future research into the integration of OCL with arbitrary domain-specific languages. To this end, we have redesigned and reimplemented large parts of the toolkit’s infrastructure [Brä07]. The new architecture features a more flexible model repository adaptation mechanism. It is based on a pivot model that results from a careful analysis of previous approaches (cf. Subsection 2.1) and the Core::Basic package of UML 2.0. So far, we have integrated both EMF and the Netbeans Metadata Repository [Net03] and implemented bindings for Ecore, MOF and UML. The main elements of the new pivot model are shown in Figure 1. A comprehensive discussion of the new architecture is outside the scope of this paper. However, for a better understanding of the following paragraphs we would like to draw attention to one noteworthy feature that sets it apart from existing OCL implementa- tions: A layered architecture now eliminates any dependencies from the pivot model to the OCL metamodel. Thus, the support for model-level generics, which we will describe below, is only an enabling technology for modeling the template types in the OCL stan- dard library. All necessary functionality is already contained in the implementation of the pivot model metaclasses and can easily be leveraged for alternative model querying languages. Figure 2 summarizes how the pivot model introduces template types and operations as first-class model entities. The design is loosely based on the generics support in EMF 2.3 [MP07] which closely mirrors the generic capabilities of Java 5 [Bra04]. The key idea Proc. Ocl4All 2007 4 / 14 ECEASST NamedElement PrimitiveTypeEnumerationEnumerationLiteral 0..1 0..* enumeration 0..1ownedLiteral 0..* {ordered} Parameter Namespace 0..* 0..1 nestedNamespace 0..* nestingNamespace 0..1 Operation 0..1 0..*operation 0..1 ownedParameter 0..* {ordered} Property Type 0..1 0..*namespace 0..1 ownedType 0..* 0..* 0..1 ownedOperation 0..* {ordered} owningType 0..1 0..* 0..1 ownedProperty 0..* {ordered} owningType 0..1 0..* superType 0..* Figure 1: The main elements of the pivot model is to introduce a new abstraction called GenericElement which classifies elements that may contain one or several TypeParameters. NamedElement GenericElement GenericType Operation ParameterGenericType TypeParameter 0..* 1 ownedTypeParameter 0..*genericElement 1 1 typeParameter1 TypedElement TypeArgument ComplexGenericType 0..* 1 typeArgument 0..* owningGenericType 1 Type unboundType 1 Figure 2: Generics in the pivot model The type parameters of a generic element may be bound with a concrete type, which means that all occurrences of the parameter in the definition of the generic element are replaced with this type (Figure 3). In the case of a Type instance, this will affect all properties and operations (including their parameters) declared for this type. GenericElement bindTypeParameter(parameters : Sequence<TypeParameter>, types : Sequence<Type>) : NamedElement Figure 3: Binding the type parameters of generic elements 5 / 14 Volume 9 (2008) Model-Level Integration of the OCL Standard Library In line with other metamodels, the pivot model generalizes properties, operations and parameters with an abstract metaclass TypedElement that declares a reference to a type. Now, as illustrated in Figure 4, we allow typed elements to alternatively reference a GenericType. Generic types exist in two flavours (Figure 2). A ParameterGenericType simply references a TypeParameter, as in the case of the return parameter of the sum op- eration mentioned in Subsection 2.2. A ComplexGenericType, on the other hand, refer- ences another Type with unbound type parameters as well as a number of TypeArguments that will replace the type parameters during binding. In the example of the product op- eration, the return parameter contains a complex generic type referencing the unbound type Tuple(first:F,second:S) and defining two type arguments T and T2. This ex- ample shows nicely that type arguments, being typed elements themselves, can have a generic type as well. Through this design, an unlimited nesting of generic types becomes possible. GenericType TypeTypedElement 0..10..1 genericType 0..1 0..* 0..10..* type 0..1 0..1 Figure 4: Typed elements and generic types It turns out that supporting generic types for typed elements does not suffice yet. Con- sider the OCL collection type Sequence(T). This template type extends Collection(T). Intuitively, binding type parameter T of Sequence(T) with a concrete type, say String, should result in Sequence(String) extending Collection(String). Yet, the design de- veloped so far does not cover this special case. The key observation here is that the two type parameters T are not the same. In fact, it is perfectly legal to label the type parame- ter of the sequence type with S instead of T. Correctly binding both subtype Sequence(S) and supertype Collection(T) requires S to be a TypeArgument of Collection(T). This intuition leads to the introduction of a new association between Type and GenericType denoting the generic supertypes of a type (Figure 5). Then, binding a type will cause all generic supertypes to be bound as well. If all type parameters of a generic super type are bound (i.e., it is not generic any more), it can be safely added to the regular superType reference list (cf. Figure 1). Type GenericType 0..*0..1 genericSuperType 0..*0..1 Figure 5: Generic supertype On a side note, it is worth highlighting that in contrast to EMF, our pivot model does not know the notion of a raw type, i.e., a “fallback” type that is assumed to ex- ist for any type parameter in an unbound generic type. This directly stems from the fact that we aimed to avoid any dependencies from the pivot model to the OCL meta- model. Otherwise, OclAny as the root of the OCL type system would have been a logical Proc. Ocl4All 2007 6 / 14 ECEASST choice. To guarantee proper type conformance checking, we have suitably extended the implementation of the OCL collection metaclasses instead. 4 Practical Evaluation The previous section presented the design of a pivot model with explicit support for generics. Now, we can proceed with showing its application. We have realized the new infrastructure of the Dresden OCL2 Toolkit as a set of Eclipse plug-ins. To create implementation classes for the pivot model elements, we employed the metamodeling and code generation facilities of the Eclipse Modeling Framework. This yielded the following advantages: 1. Except for some behavioral features that have to be implemented manually, the pivot model implementation generated by EMF is already fully functional and can be instantiated. Contrary to previous approaches, we do not depend on an integration with a particular DSL to create an instance of the OCL standard library. By realizing the same interfaces, our standard library model is compatible with any metamodel binding that is created for the pivot model. 2. The XMI serialization capabilities of EMF enable us to effectively save and load the standard library which improves reusability. 3. EMF can generate a highly customizable tree editor for a metamodel. In the next section, we show how a heavily adapted version of the default pivot model editor allows the user to conveniently view, edit and alter the model of the standard library. 4.1 Visually modeling the OCL standard library Figure 6 shows the model of the standard library in the adapted pivot model editor. This model, which contains all types and operations defined in the OCL 2.0 specification, is part of the new toolkit infrastructure. Users may, however, replace the default library with a modified version when integrating a new domain-specific language with the engine. For instance, if a DSL does not know the concept of an ordered set, the OrderedSet type can be safely removed from the library model. This ensures that all valid abstract syntax models created by a parser will indeed execute on the domain-specific target platform. The look and feel of the pivot model editor resembles that of the EMF Ecore editor. However, we have simplified the modeling of generics to hide complexity from the user. When creating typed elements (properties, operations, and parameters), declared type parameters of the containing generic element show up in the list of possible types. The editor automatically creates the necessary ParameterGenericType instance in this case. If a template type is selected (e.g., for the c2 parameter of the product operation), a complex generic type and corresponding type arguments are added. Similarly, the editor allows to specify the type arguments when extending generic supertypes. 7 / 14 Volume 9 (2008) Model-Level Integration of the OCL Standard Library Figure 6: The model of the OCL standard library The root of the model is an instance of a special facade interface called OclLibrary. Its definition is outlined in Figure 7. The OclLibrary interface provides the necessary means for an OCL parser to retrieve the predefined standard library types when building the abstract syntax model from an OCL expression. Proc. Ocl4All 2007 8 / 14 ECEASST VoidType PrimitiveType InvalidType TypeType AnyType CollectionType SequenceType BagType SetType OrderedSetType OclLibrary makeTupleType(atts : Sequence<Property>) : TupleType getCollectionType(elementType : Type) : CollectionType getSequenceType(elementType : Type) : SequenceType getBagType(elementType : Type) : BagType getSetType(elementType : Type) : SetType getOrderedSetType(elementType : Type) : OrderedSetType 1 oclVoid 1 1 oclBoolean 1 1 oclString 1 1 oclInteger 1 1 oclReal 1 1 oclInvalid 1 1 oclType 1 1 oclAny 1 1 1 1 1 1 TupleType 0..* oclSequence oclCollection oclBag oclOrderedSet oclSet oclTuple 1 1 1 1 1 0..* Figure 7: The facade interface for the OCL standard library types 4.2 Binding template types during OCL parsing In the following, we demonstrate the feasibility of our approach with a simple example that involves the binding of generic OCL collection types while parsing an OCL expres- sion. Figure 8 depicts the model we will base the example scenario on. name : String /totalBalance : int Person id : String balance : int Account owner 1 accounts 0..* {ordered} Figure 8: The example model Now, consider the following OCL expression which specifies the derived attribute totalBalance in class Person. Note that the second invocation of the dot operator (accessing the property balance of all elements in the accounts reference list) repre- sents an implicit collect iterator. c o n t e x t P e r s o n :: t o t a l B a l a n c e : int d e r i v e : self . a c c o u n t s . balance - > sum () Parsing this expression triggers the following template type bindings: First, the type of the property call expression referring to accounts is evaluated to be OrderedSet(Account). This directly stems from the multiplicity specification and declared type of the property. The actual binding of the OrderedSet template with the element type Account is facili- tated within the getOrderedSetType operation of the OclLibrary facade. As shown in 9 / 14 Volume 9 (2008) Model-Level Integration of the OCL Standard Library Section 3, this solely requires a call to the bindTypeParameter operation implemented in the Type metaclass of the pivot model. Similarly, the type of the collect iterator expression, which returns the list of individual balance values, results from binding Sequence(T) with Integer. The engine automat- ically maps the domain-specific int type to the corresponding OCL standard library type. As a result, the return type of the sum operation becomes Integer. To sum up this discussion, Figure 9 shows the abstract syntax model of the example expression as it is visualized in the DSL-agnostic model browser that is part of the new toolkit in- frastructure. Notice that not only the Sequence template has been bound, but also its generic supertype Collection(T). Figure 9: The abstract syntax model of the example expression It is worth highlighting here that the method presented in this paper solely addresses the static structure of the OCL standard library. To realize the dynamic semantics and actually execute the expression in Figure 9, we still rely on an instance-level (M0) implementation of the predefined types and operations. To this end, we have redesigned the existing Java library of the Dresden OCL2 Toolkit to support a flexible integration of arbitrary DSLs via a set of factory interfaces. Currently, an OCL interpreter based on the new infrastructure is being developed to complement the components on the model level. 5 Related Work To the best of our knowledge, there is no published work that deals with the model- level integration of the OCL standard library as described in this paper. Akehurst et al. [AHM06] hint at this possibility, but simply suggest to import a UML package containing the standard library types. Therefore, they do not address the problems outlined in Section 2. However, they propose a mechanism to detach the implementation of the standard library types and operations on the instance level. The ideas from this work may complement our approach and further simplify the integration of different domain-specific languages. Another technique that aims at aligning OCL with custom domain-specific languages Proc. Ocl4All 2007 10 / 14 ECEASST on the instance level has been presented in [KPP06b]. Unfortunately, the authors employ a custom expression language that is akin but not equal to OCL [KPP06a]. Furthermore, they build on top of a model management framework and execution engine which does not support a model-level integration of the standard library. Lastly, the latest release of the Eclipse MDT OCL project [Ecl] features a highly innovative way of integrating OCL with different modeling languages. Instead of a pivot model, a generic environment interface defines type parameters for all metamodeling concepts required by OCL. Unfortunately, this otherwise elegant approach necessitates a concrete specialization of the entire OCL metamodel as well as the OCL standard library for each custom DSL binding. The predefined operations of the standard types have to be created within the implementation code yielding the disadvantages highlighted in Section 1. 6 Conclusions and Future Work In this paper, we have presented a novel technique for integrating the OCL standard library on the model level. Contrary to previous approaches, we support a declarative rather than a programmatic definition of the predefined types and operations thereby improving reusability, flexibility, and maintainability. In addition, our method eases the integration of different domain-specific languages with OCL, because the pivot model provides an intermediate abstraction layer for a variety of metamodels. Therefore, in- stantiating elements of the library model is independent of a particular DSL binding and solely requires a suitable implementation of the pivot model interfaces. We have demonstrated the feasibility and usefulness of our approach through an example that was realized using newly developed components of the Dresden OCL2 Toolkit. We are currently working on porting the tools of the Dresden OCL2 Toolkit to the new infrastructure. Our aim is to leverage the increased flexibility provided by our approach for other OCL-based languages defined by the OMG. Examples are the Query/View/- Transformation (QVT) [OMG05a] language and the upcoming Production Rule Repre- sentation (PRR) [OMG03b] standard. This may open up interesting perspectives for areas as diverse as model transformation and business rule execution. Finally, our solution still faces some limitations that are worthwhile to address. For instance, our pivot model currently lacks the expressive power to model the dynamic semantics of iterator expressions for the OCL collection types. In fact, detaching the definition of iterators requires a different approach altogether since the corresponding well-formedness rules for the abstract syntax are currently heavily intertwined with the concrete syntax. Similarly, we have not yet found a satisfying answer to the problem of binding generic operations whose return type depends on contextual information (e.g., allInstances and asSet in OclAny or flatten in the collection types). Even though we are able to model the signature of these operations, we still have to check for them explicitly in the code. Thus, the implementation of the OCL abstract syntax elements (M2) still contains a few details of the standard library structure (M1). 11 / 14 Volume 9 (2008) Model-Level Integration of the OCL Standard Library Acknowledgment: The authors would like to thank Florian Heidenreich, Christian Wende and Steffen Zschaler for their fruitful discussions and contributions to the Dresden OCL2 Toolkit. Bibliography [AHM06] D. Akehurst, W. Howells, K. McDonald-Maier. UML/OCL – Detaching the Standard Library. In Proceedings OCLApps 2006: OCL for (Meta-) Models in Multiple Application Domains, MoDELS/UML 2006. Pp. 205–212. Genova, Italy, Oct. 2006. [AP04] D. Akehurst, O. Patrascoiu. OCL 2.0 – Implementing the Standard for Mul- tiple Metamodels. Electronic Notes in Theoretical Computer Science 102:21– 41, 2004. doi:10.1016/j.entcs.2003.09.002 [BJKV06] J. Bézivin, F. Jouault, I. Kurtev, P. Valduriez. Model-Based DSL Frame- works. In Companion to the 21st Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications, OOP- SLA 2006. Pp. 602–616. ACM Press, Portland, Oregon, USA, Oct. 2006. [Bra04] G. Bracha. Generics in the Java Programming Language. Technical re- port, Sun Microsystems, July 2004. http://java.sun.com/j2se/1.5/pdf/ generics-tutorial.pdf. [Brä07] M. Bräuer. Design and Prototypical Implementation of a Pivot Model as Exchange Format for Models and Metamodels in a QVT/OCL Development Environment. Technical report, Technische Universität Dresden, May 2007. http://dresden-ocl.sourceforge.net/gbbraeuer/ [BSM+03] F. Budinsky, D. Steinberg, E. Merks, R. Ellersick, T. J. Grose. Eclipse Mod- eling Framework. Eclipse Series. Addison Wesley Longman, Amsterdam, 1st edition, Aug. 2003. [Ecl] Eclipse.org. Model Development Tools (MDT) OCL component. http:// www.eclipse.org/modeling/mdt/?project=ocl. [Fow05] M. Fowler. Language Workbenches: The Killer-App for Domain Specific Lan- guages? White Paper, June 2005. http://www.martinfowler.com/articles/ languageWorkbench.html. [KKK+06] G. Kappel, E. Kapsammer, H. Kargl, G. Kramler, T. Reiter, W. Retschitzeg- ger, W. Schwinger, M. Wimmer. On Models and Ontologies - A Layered Approach for Model-based Tool Integration. In Mayr and Breu (eds.), Pro- ceedings of Modellierung 2006, GI-Edition, Lecture Notes in Informatics, Innsbruck, Austria, 22-24 March. 2006. Proc. Ocl4All 2007 12 / 14 http://dx.doi.org/10.1016/j.entcs.2003.09.002 http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf http://dresden-ocl.sourceforge.net/gbbraeuer/ http://www.eclipse.org/modeling/mdt/?project=ocl http://www.eclipse.org/modeling/mdt/?project=ocl http://www.martinfowler.com/articles/languageWorkbench.html http://www.martinfowler.com/articles/languageWorkbench.html ECEASST [KPP06a] D. S. Kolovos, R. F. Paige, F. A. Polack. The Epsilon Object Language (EOL). In Proceedings European Conference in Model Driven Architecture (EC-MDA) 2006, Bilbao, Spain. LNCS 4066, pp. 128–142. Springer, July 2006. [KPP06b] D. S. Kolovos, R. F. Paige, F. A. Polack. Towards Using OCL for Instance- Level Queries in Domain Specific Languages. In Proceedings OCLApps 2006: OCL for (Meta-) Models in Multiple Application Domains, MoDELS/UML 2006. Pp. 26–37. Genova, Italy, Oct. 2006. [LO04] S. Loecher, S. Ocke. A Metamodel-Based OCL-Compiler for UML and MOF. Electronic Notes in Theoretical Computer Science 102:43–61, 2004. doi:10.1016/j.entcs.2003.09.003 [MGG+06] M. Milanovic, D. Gašević, A. Giurca, G. Wagner, V. Devedžić. On Inter- changing Between OWL/SWRL and UML/OCL. In Proceedings OCLApps 2006: OCL for (Meta-) Models in Multiple Application Domains, MoDEL- S/UML 2006. Pp. 81–95. Genova, Italy, Oct. 2006. [MP07] E. Merks, M. Paternostro. Modeling Generics With Ecore. In EclipseCon 2007, Santa Clara, California, USA. Mar. 2007. Tutorial Slides. http://www. eclipsecon.org/2007/index.php?page=sub/&id=3845. [Net03] Netbeans.org. Metadata Repository (MDR). 2003. http://mdr.netbeans.org [OMG03a] Object Management Group (OMG). MDA Guide Version 1.0.1. June 2003. http://www.omg.org/docs/omg/03-06-01.pdf. [OMG03b] Object Management Group (OMG). Production Rule Representation Re- quest For Proposal Draft 1.0. Aug. 2003. http://www.omg.org/docs/formal/06-01-01.pdf [OMG05a] Object Management Group (OMG). Meta Object Facility (MOF) 2.0 Query/View/Transformation (QVT) Specification. Nov. 2005. http://www.omg.org/docs/ptc/05-11-01 [OMG05b] Object Management Group (OMG). Unified Modeling Language: Super- structure Specification, Version 2.0. Aug. 2005. http://www.omg.org/docs/formal/05-07-04.pdf [OMG06a] Object Management Group (OMG). Meta Object Facility (MOF) Core Spec- ification, Version 2.0. Jan. 2006. http://www.omg.org/docs/formal/06-01-01.pdf [OMG06b] Object Management Group (OMG). Object Constraint Language, Version 2.0. May 2006. http://www.omg.org/docs/formal/06-05-01.pdf 13 / 14 Volume 9 (2008) http://dx.doi.org/10.1016/j.entcs.2003.09.003 http://www.eclipsecon.org/2007/index.php?page=sub/&id=3845 http://www.eclipsecon.org/2007/index.php?page=sub/&id=3845 http://mdr.netbeans.org http://www.omg.org/docs/omg/03-06-01.pdf http://www.omg.org/docs/formal/06-01-01.pdf http://www.omg.org/docs/ptc/05-11-01 http://www.omg.org/docs/formal/05-07-04.pdf http://www.omg.org/docs/formal/06-01-01.pdf http://www.omg.org/docs/formal/06-05-01.pdf Model-Level Integration of the OCL Standard Library [SV06] T. Stahl, M. Völter. Model-Driven Software Development: Technology, En- gineering, Management. Wiley & Sons, 1st edition, 2006. [WK03] J. Warmer, A. Kleppe. The Object Constraint Language Second Edition: Getting Your Models Ready for MDA. Object Technology Series. Addison- Wesley Longman, Amsterdam, The Netherlands, 2003. [WWWa] Dresden OCL Toolkit. http://dresden-ocl.sourceforge.net. [WWWb] Kent Object Constraint Language Library. http://www.cs.kent.ac.uk/ projects/ocl. Proc. Ocl4All 2007 14 / 14 http://dresden-ocl.sourceforge.net http://www.cs.kent.ac.uk/projects/ocl http://www.cs.kent.ac.uk/projects/ocl Introduction Background OCL for Domain-Specific Modeling Languages Generics in the OCL Standard Library The Design of a Pivot Model with Generics Support Practical Evaluation Visually modeling the OCL standard library Binding template types during OCL parsing Related Work Conclusions and Future Work