We build (or use preexisting) metamodels to declare the elements of a modeling language so we can build mappings between them. (There are other uses, such as building a language, which we take up in Chapter 7.)
A metamodel is merely a model whose instances are types in another model. This allows us to capture the other model and manipulate it. A well-known metamodel is the specification for UML, which captures the classes in a developer's model. Moreover, metamodels may themselves be captured in metametamodels, the OMG standard form for which is the MOF. The MOF provides the means by which you will be able to tailor your metamodels and relate them to a standard MDA infrastructure. The existence of standards for representing models, metamodels, and metametamodels forms the backbone of the MDA infrastructure.
A primary application for metamodels is to enable the definition of transformations between models. To build such transformations, you have to understand the modeling language in which the source and the target models are expressed which is to say, the source and target models as prescribed by the metamodels. We take up this topic in more detail in Chapter 5.