In this example, we will explore the structure of a simple OOM model file containing two classes and one association.
The file starts with several lines stating XML and model related details.
The first object to appear is the root of the model <o:RootObject Id="01">. RootObject is a model container that is defined by default whenever you create and save a model. RootObject contains a collection called Children that is made up of models.
In our example, Children contains only one model object that is defined as follows:
<o:Model Id="o2"> <a:ObjectID>3CEC45F3-A77D-11D5-BB88-0008C7EA916D</a:ObjectID> <a:Name>ObjectOrientedModel_1</a:Name> <a:Code>OBJECTORIENTEDMODEL_1</a:Code> <a:CreationDate>1000309357</a:CreationDate> <a:Creator>arthur</a:Creator> <a:ModificationDate>1000312265</a:ModificationDate> <a:Modifier>arthur</a:Modifier> <a:ModelOptionsText> [ModelOptions] ...
Below the definition of the model object, you can see the series of ModelOptions attributes. Note that ModelOptions is not restricted to the options defined in the Model Options dialog box of a model, it gathers all properties saved in a model such as intermodel generation options.
After ModelOptions, you can identify collection <c:ObjectLanguage>. This is the object language linked to the model. The second collection of the model is <c:ClassDiagrams>. This is the collection of diagrams linked to the model, in our example, there is only one diagram defined in the following paragraph:
<o:ClassDiagram Id="o4"> <a:ObjectID>3CEC45F6-A77D-11D5-BB88-0008C7EA916D</a:ObjectID> <a:Name>ClassDiagram_1</a:Name> <a:Code>CLASSDIAGRAM_1</a:Code> <a:CreationDate>1000309357</a:CreationDate> <a:Creator>arthur</a:Creator> <a:ModificationDate>1000312265</a:ModificationDate> <a:Modifier>arthur</a:Modifier> <a:DisplayPreferences> ...
Like for model options, ClassDiagram definition is followed by a series of display preference attributes.
Within the ClassDiagram collection, a new collection called <c:Symbols> is found. This collection gathers all the symbols in the model diagram. The first object to be defined in collection Symbols is AssociationSymbol:
<o:AssociationSymbol Id="o5"> <a:CenterTextOffset>(1, 1)</a:CenterTextOffset> <a:SourceTextOffset>(-1615, 244)</a:SourceTextOffset> <a:DestinationTextOffset>(974, -2)</a:DestinationTextOffset> <a:Rect>((-6637,-4350), (7988,1950))</a:Rect> <a:ListOfPoints>((-6637,1950),(7988,-4350))</a:ListOfPoints> <a:ArrowStyle>8</a:ArrowStyle> <a:ShadowColor>13158600</a:ShadowColor> <a:FontList>DISPNAME 0 Arial,8,N
AssociationSymbol contains collections <c:SourceSymbol> and <c:DestinationSymbol>. In both collections, symbols are referred to but not defined: this is because ClassSymbol does not belong to the SourceSymbol or DestinationSymbol collections.
<c:SourceSymbol> <o:ClassSymbol Ref="o6"/> </c:SourceSymbol> <c:DestinationSymbol> <o:ClassSymbol Ref="o7"/> </c:DestinationSymbol>
The association symbols collection is followed by the<c:Symbols> collection. This collection contains the definition of both class symbols.
<o:ClassSymbol Id="o6"> <a:CreationDate>1012204025</a:CreationDate> <a:ModificationDate>1012204025</a:ModificationDate> <a:Rect>((-18621,6601), (-11229,12675))</a:Rect> <a:FillColor>16777215</a:FillColor> <a:ShadowColor>12632256</a:ShadowColor> <a:FontList>ClassStereotype 0 Arial,8,N
Collection <c:Classes> follows collection <c:Symbols>. In this collection, both classes are defined with their collections of attributes.
<o:Class Id="o10"> <a:ObjectID>10929C96-8204-4CEE-911#-E6F7190D823C</a:ObjectID> <a:Name>Order</a:Name> <a:Code>Order</a:Code> <a:CreationDate>1012204026</a:CreationDate> <a:Creator>arthur</a:Creator> <a:ModificationDate>1012204064</a:ModificationDate> <a:Modifier>arthur</a:Modifier> <c:Attributes> <o:Attribute Id="o14">
Attribute is a terminal object: there is not further ramification required to define this object.
Each collection belonging to an analyzed object is expanded, and analyzed and the same occurs for collections within collections.
Once all objects and collections are browsed, the following markups appear:
</o:RootObject> </Model>