UMMF - UML Meta-Model Framework. UML to code generation via XMI. Implements UML 1.5 meta-model. Provides object-oriented Perl interface for processing UML meta-models and models. Imports XMI. Includes XMI, Perl and Java code generation back-ends.


  bin/ummf -e Perl someumlmodel.xmi




See and the "examples" directory in the distribution for more information.

What is UMMF?

UMMF is an open-source implementation of a UML Meta-meta-model, for the purposes of reifying UML meta-model implementations and to provide a platform for building flexible UML transformation tools.

It is written in Perl and provides an almost complete specification of the UML 1.5 meta-model in a human and machine-readable meta-meta-model description language.

The meta-meta-model description is used to generate implementations of the UML meta-model in XMI, Perl and Java and other languages. Thus, one specification of the meta-model can generate meta-model implementations in many programming languages. Once a programming language has been targeted with an exporter, code can be generated for UML meta-models and other models.


The goal of UMMF is processing of UML models and meta-models in a variety of implementation languages for the purpose of transforming UML models.

UMMF is self-hosting; for example: the Perl UMMF:UML::MetaModel package is generated by bootstrapping from the meta-meta-model. The meta-meta-model is specified with the same specification as the meta-model.

Models can be imported from popular UML editors via XMI 1.0 and 1.2. Meta-models and models can currently exported to XMI 1.2.

Code generated from UML models by UMMF is reflective; models can reflect on their own meta-models. For example, the code exporters generate a __classifier() method for each Class that will return the meta-model Classifier object for the model object.

Many inexpensive UML editors have inflexible or non-existant code generation tools. Generating code using XSLT on XMI is an adventure into the pain of a W3C-sponsored hell.

UMMF allows you to control how your Model will be translated into code; add your special archtectural or environmental support without relying on third-party proprietary tools!

UMMF can provide a base UML meta-model implementation for other UML tools.

What does UMMF do?

UMMF transforms UML models to simplify code generation; for example:

  • Generate Interfaces for all Classes.

  • Transform Classes with multiple inheritance to single inheritance using Interfaces.

  • Resolve AssociationEnd name collisions across Generalizations.

  • Generate interstitial Associations for AssociationClass' AssocationEnds

  • Merge ModelElements from multiple XMI documents using Classifiers designated as 'ummf.placeholders'. This functionality is very alpha.

Additional transformations will be developed to support other architectural concerns.

What can UMMF do?

As of 2006/05/13 (v1.02), UMMF can:

  • Generate Classifier code for UML 1.5 meta-model in Perl and Java, using code templates.

  • Generate Classifier code for MOF 1.3 and MOF 1.4.1 meta-models (PRELIMINARY)

  • Generate Classifier code for UML 1.5 meta-model for Tangram.

  • Generate Classifier code for UML 1.5 meta-model from code generated from meta-meta-model.

  • Generate Classifier code from UML 1.3 - 1.5 meta-model from XMI input.

  • Import XMI 1.0 and 1.2.

  • Export XMI 1.2.

  • Directly read ArgoUML (XMI 1.0), Poseidon 1.x and 2.x (XMI 1.2) .zargo and .zuml files.

  • Perform various model transformations (as listed above).

  • Support method bodies in multiple implementation languages, by using "# UMMF-Lang: Perl" or "// UMMF-Lang: Java" comments to delimit different method implementations.

  • Support model reflection in Perl.

    Use of XMI for meta-model storage has been implemented and tested.

  • Can export XMI for the UML-1.5 meta-model, using itself as the meta-meta-model.

    Try running "bin/ummf -e XMI UML-1.5" !!!

  • Preliminary implementation of UML 1.5 "Behavioral Elements::Actions" meta-model package. This functionality is very alpha.

  • Preliminary implementation of OCL for UML 2.0:

    • AST Expression Trees This functionality is very alpha.

  • Support for Tangram, the pure-Perl, orthogonal, object-relational persistence mapping layer. This functionality is out of beta!

What doesn't UMMF do?

As of 2003/09/31:

  • Does not support model reflection in Java.

  • Does not correctly propagate UML documentation into template-generated code documentation (embedded POD). This is implemented, but is not working correctly.

Where can I get UMMF?

The SourceForge site, or a pre-built version from CPAN. You may want to check the CVS repository for the latests changes; point your browser at

More information is available at

What does UMMF need?

As of 2004/03/30, UMMF requires:

  • Perl 5.6.1 (or later?)

  • CPAN libnet 1.16 (or later)

  • CPAN libxml-perl 0.07 (or later)

  • CPAN Template 2.10 (or later)

  • CPAN Set::Object 1.05 (or later)

  • CPAN XML::Writer 0.4 (or later)

  • CPAN XML::Parser 2.31 (or later)

  • CPAN XML::DOM 1.42 (or later)

  • CPAN Archive::Zip 1.06 (or later) (for .zargo and .zuml file support)

  • CPAN Scalar::Util 1.13 (or later)

  • CPAN Devel::StackTrace 1.03 (or later)

  • CPAN Class::Multimethods 1.70 (or later)


Bootstrapping dependencies:

  • POSIX shell. (bin/sh)

  • GNU make. (If you're stuck on Windoze, cygwin saves the day :)

How do I use UMMF?

  • See "perldoc bin/"

  • See other POD or see HTML documentation built in doc/html/index.html. (On-line version doc/html/index.html)

  • See "ummf/example/ex*"

  • See "ummf/test/*.pl"

How do I build (bootstrap) UMMF?

1. Make sure Perl is in your PATH.
2. tar -zxvf ummf-*.tar.gz
3. cd ummf-*
4. If you do not have all the prerequise modules already installed:

perl sbin/

5. make bootstrap-simple

This will build the UML meta-model classes in gen/perl and gen/java.

6. make

This will build the bin, gen/perl and doc/html directories.

What mailing lists are available for UMMF?


    Low-volume list for new releases and other announcements.


    List for UMMF user issues, problems and support (may become high-volume)


    Low-volume list for UMMF developers only.


    CVS notifications (may become high-volume)


UMMF 1.x is not namespace compatable with UMMF 0.x.

However, most code that used UML metamodel packages named "UMMF::UML::MetaModel::..." will now work with "UMMF::UML1_5::..".

Most other modules under "UMMF::UML::..." moved to "UMMF::Core::..." or "UMMF::Boot::...".



Defined to be true during bootstrapping into gen/perl.


List of ":"-separated paths to search for UMMF resources. If you are using the compiled CPAN distribution, you must include the "data" directory from the distribution in this variable, or you can copy the "data" directory to the directory named "UMMF" where "" was installed by make install.


List of ":"-separated paths to search for UMMF Exporter templates.


None exported.


Kurt Stephens, 2006/05/13



$Revision: 1.17 $




Returns a list of directories to search for files of type $type.


  my $dir = UMMF->tmp_dir;

Returns directory to be used for temporary files.


  my $filename = UMMF->make_tempfile;

Returns a temporary file.