The MONDO Approach to: Describing the Model of Information

Mark L. Fussell fussellm at
Mon Dec 1 14:17:13 GMT 1997

The MONDO Approach to: Describing the Model of Information

How do we describe the model we are using for our information?

Models always exist.  In MONDO, the information model is represented by 
the DomainModel and must exist (no matter how simple) for any 
ObjectBase.  Their is always an implicit model.  We can also provide a 
way to explicitly describe models and have MONDO use those models to 
understand information better and to validate whether it is being 
constructed (i.e. by recipes) correctly.  Explicity models can also 
provide a common human-oriented exchange format that is known to be MONDO 
understandable and verifiable (i.e. it at least makes sense to MONDO).

Relying on implicit models provides flexibility in describing and 
implementing the model, but directly affords no common description and 
reuse.  Providing explicit models makes sharing models easier and allows 
the information to describe itself, but could be limiting in how 
information is used.

If we do use explicit models we have the choice between using the same 
form as all other information (i.e. recipes) or a different form that is 
designed especially for models.

MONDO Approach
MONDO allows both implicit and explicit modeling of information depending 
on what the producer of the information wants to describe and what the 
consumer of the information would like to use.  Explicit models are 
marked up in the same format (i.e. recipes) as all other types of 
information and the resulting model is simply an organized set of objects 
that describe another set of objects (the instances of that model).

An example model for:
        start = <Date iso="1997-10-01">
        end   = <Date>

might look like:
    <Model types=(
            name = "Date"
            description = "A Gregorian Calendar Date"
            properties = (
                <Property name="day" type=<TypeReference name="Number"> >
                <Property name="month" type=<TypeReference name="Month"> >
                <Property name="year" type=<TypeReference name="Number"> >

                <Property name="iso" type=<TypeReference name="String"> >
            constructors = (
                <Constructor ()>
                <Constructor ("iso")>

            name = "Period"
            description = "A range of dates"
            properties = (
                <Property name="start" type=<TypeReference name="Date"> >
                <Property name="end"   type=<TypeReference name="Date"> >
            constructors = (
                <Constructor ("start" "end")>

Note that the model does not describe implementation in any way, just the 
expected Types, properties, associations (non above), behavior (e.g. 
constructors), and other externally visible features of an object.

To associate a model with an instance we are just relating objects.  We 
can do it explicitly (and singularly) in the same recipe file:
    <UseModel model=<Model types=(
            name = "Date"
            description = "A Gregorian Calendar Date"
    Model> UseModel>
        start = <Date iso="1997-10-01">
        end   = <Date>

In two files but still with a single default interpretation:
    <UseModel fileName="exampleModel.oml">
        start = <Date iso="1997-10-01">
        end   = <Date>

Or in three+ files which allows multiple interpretations of the model to 
use with the recipe:
   <UseModel fileName = "exampleModel.oml">
   <Build fileName = "example.oml">

Because models are just objects we can also retrieve them by reference 
instead of direct recipe construction:
            <DTDReference sysid="-//HaL and O'Reilly//DTD DocBook//EN">

MONDO supports Models as simply the same as any other type of 
information: objects.  The only difference is their role toward other 

Benefits & Penalties
Allowing both implicit and explicit models provides flexibility.  The 
only tradeoff that can occur is that people assume an implicit model is 
OK when it would be better to make the model explicit.  Other forces than 
technology should drive this choice.

There are very few drawbacks and a great number of benefits by having the 
model in the same format as all other information.  It allows the two 
core concepts (recipes and objects) to be leverage to understanding new 
facilities.  The new facilities can benefit from all the functionality of 
objects and recipes (e.g. references, encoding formats, type vs. class 
separation, properties and all other normal object abilities).  And 
because we have complete closure we can then implement and model the 
model itself in the exact same terms (recipes and objects).

Because the models are objects, the models can be arbitrarily 
sophisticated and take advantage of subtyping.  New modeling refinements 
can be extension of existing techniques.  This avoids closed-end modeling 
limitations (e.g. DTDs) while still having backward capabilities.  Also, 
the model is for the resulting DomainObjects not the recipe itself (or 
the parser) so it does not need to worry about, and will not constrain, 
irrelevant details like the actual names of recipes (e.g. "<Date>").  The 
model only cares about the Types of the resulting DomainObjects that are 
built by the recipe.

Finally, the encoding can be the same for the model as for the objects.  
This is important on a conceptual level (models are really, really the 
same things but just have a special role) and on a lower level: users 
only have to understand a single encoding (if they chose) and parsers can 
be very simple.

The only drawback might be difficulty in encoding the model in the 
standard MONDO recipe encoding formats.  Generally this is probably not a 
drawback.  Recipes allow flexibility that can be very useful for modeling 
and the encoding formats can be quite concise (plus they are inherently 
self-describing which is helpful for learning them).

The MONDO Design addition on "Modeling and Implementing, Objects and 

Classes-as-objects is part of Smalltalk, CLOS, and (in some form) many
other interesting languages (e.g. SELF).  Generally this meta-object
capability provides a great deal of power and relative simplicity.  For
some references, see the OO sections of:

SGML DTDs are somewhat the other extreme as MONDO models in encoding (very
limited), but they can still be treated as creating document-oriented
Model objects through a different encoding format.  [How SGML treats DTDs
is quite different (they constrain the parser, recipe, and the model
stage) but that is a different topic.]

The XML-Data model has similarities to how MONDO works with models.  And
the approach of XML-Data and representing models as instances was
discussed in:
(Search for XML-Data and/or DTD)

mark.fussell at

  i   ChiMu Corporation      Architectures for Information
 h M   info at         Object-Oriented Information Systems
C   u         Architecture, Frameworks, and Mentoring

xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at
Archived as:
To (un)subscribe, mailto:majordomo at the following message;
(un)subscribe xml-dev
To subscribe to the digests, mailto:majordomo at the following message;
subscribe xml-dev-digest
List coordinator, Henry Rzepa (mailto:rzepa at

More information about the Xml-dev mailing list