The MOF defines a set of modeling constructs that a modeler can use to define and manipulate a set of interoperable metamodels. The MOF resides at the bottom (M3) level of the four-tier metamodel architecture. It captures the structure and semantics of arbitrary metamodels in particular, the UML metamodel and also various kinds of metadata.
Interoperability of metamodels across domains is required for integrating tools and applications across a development lifecycle using common semantics. In addition to being a metamodeling tool, the MOF also provides for standard data access, by defining supporting standards to be used by MOF-compliant languages to exchange and access complying models. One application of this, as we shall see next, involves applying mapping functions to models.
One of these supporting standards is XMI, which defines rules for deriving an XML schema from a MOF-compliant modeling language as well as rules for rendering a compliant model into a compliant XML document. The combination of MOF and standards such as XMI serves as the backbone of a basic MDA infrastructure that enables us to talk of a more sophisticated infrastructure featuring the likes of marking models and mapping functions, and eventually an MDA superstructure that features custom metamodels and profiles.
The UML is more comprehensive than the MOF, with its support for use cases and elaborate behavioral modeling, its graphical notation, and its extensibility mechanisms. The OMG has striven for a unification of the MOF and UML cores. This will make the UML's graphical notation usable also for MOF metamodels. Note that this doesn't mean there is a graphical notation for the metamodels defined with MOF. Chapter 7 describes how you can use the UML to find graphical notations for your own metamodels defined in MOF.