<?xml version = '1.0' encoding = 'ISO-8859-1' ?>
<!-- <!DOCTYPE XMI SYSTEM 'Model1311.DTD' > -->
<XMI xmi.version = '1.1' xmlns:Model='omg.org/mof.Model/1.3' timestamp = 'Mon May 06 16:42:16 2002' >
 <XMI.header>
  <XMI.documentation>
   <XMI.exporter>Unisys.JCR.1</XMI.exporter>
   <XMI.exporterVersion>1.3.2</XMI.exporterVersion>
  </XMI.documentation>
  <XMI.metamodel xmi.name = 'org.omg.mof.Model' xmi.version = '1.3'/>
 </XMI.header>
<XMI.content>
<!-- ==================== Core    [Package] ==================== -->
<Model:Package xmi.id = 'a3A6600C5031F' 
  name = 'Core' 
  isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
  <Model:ModelElement.annotation>The Core metamodel depends on no other packages.

The ObjectModel Core metamodel contains basic metamodel classes and associations used by all other CWM metamodel packages, including other ObjectModel packages

OCL Representation of Core Constraints

Operations

The operation allFeatures results in a Set containing all Features of the Classifier itself and all its inherited Features.
   allFeatures : Set(Feature);
   allFeatures = self.feature-&gt;union(self.parent.oclAsType(Classifier).allFeatures)

The operation allAttributes results in a Set containing all Attributes of the Classifier itself and all its inherited Attributes.
   allAttributes : set(Attribute);
   allAttributes = self.allFeatures-&gt;select(f | f.oclIsKindOf(Attribute))

The operation specification yields the set of Classifiers that the current Classifier realizes.
   specification: Set(Classifier)
   specification = self.clientDependency-&gt;
   select(d | d.stereotype.name = "realization"
      and d.supplier.oclIsKindOf(Classifier)).supplier.oclAsType(Classifier)

The operation parent returns a Set containing all direct parents of a Classifier.
   parent : Set(Classifier);
   parent = self.generalization.parent

The operation allParents returns a Set containing all the Classifiers inherited by this Classifier (the transitive closure), excluding the Classifier itself.
   allParents : Set(Classifier);
   allParents = self.parent-&gt;union(self.parent.allParents)

The operation allContents returns a Set containing all ModelElements contained in the Classifier together with the contents inherited from its parents.
   allContents : Set(ModelElement);
   allContents = self.contents-&gt;union(self.parent.allContents-&gt;
   select(e | e.elementOwnership.visibility = #public or 
      e.elementOwnership.visibility = #protected))

The operation supplier results in a Set containing all direct suppliers of the ModelElement.
   supplier : Set(ModelElement);
   supplier = self.clientDependency.supplier

The operation allSuppliers results in a Set containing all the ModelElements that are suppliers of this ModelElement, including the suppliers of these Model Elements. This is the transitive closure.
   allSuppliers : Set(ModelElement);
   allSuppliers = self.supplier-&gt;union(self.supplier.allSuppliers)

The operation contents results in a Set containing all ModelElements contained by the Namespace.
   contents : Set(ModelElement)
   contents = self.ownedElement -&gt; union(self.namespace.contents)

The operation allContents results in a Set containing all ModelElements contained by the Namespace.
   allContents : Set(ModelElement);
   allContents = self.contents

The operation allVisibleElements results in a Set containing all ModelElements visible outside of the Namespace.
   allVisibleElements : Set(ModelElement)
   allVisibleElements = self.allContents -&gt; select(e |
      e.elementOwnership.visibility = #public)

The operation allSurroundingNamespaces results in a Set containing all surrounding Namespaces.
   allSurroundingNamespaces : Set(Namespace)
   allSurroundingNamespaces =
      self.namespace-&gt;union(self.namespace.allSurroundingNamespaces)

The operation contents results in a Set containing the ModelElements owned by or imported by the Package.
   contents : Set(ModelElement)
   contents = self.ownedElement-&gt;union(self.importedElement)

The operation allImportedElements results in a Set containing the ModelElements imported by the Package.
   allImportedElements : Set(ModelElement)
   allImportedElements = self.importedElement

The operation allContents results in a Set containing the ModelElements owned by or imported by the Package.
   allContents : Set(ModelElement)
   allContents = self.contents

Constraints

[C-3-1] A Constraint cannot be applied to itself.
context Constraint inv:
not self.constrainedElement-&gt;includes (self)

[C-3-2] A DataType cannot contain any other ModelElements.
context DataType inv:
self.ownedElement-&gt;isEmpty

[C-3-3] Tags associated with a model element (directly via a property list or indirectly via a stereotype) must not clash with any meta attributes associated with the model element.
context ModelElement inv:
-- cannot be specified with OCL</Model:ModelElement.annotation>
  <Model:Namespace.contents>
    <!-- ==================== Core.org.omg.mof.idl_prefix=org.omg.cwm.objectmodel    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.837' 
      name = 'org.omg.mof.idl_prefix=org.omg.cwm.objectmodel' annotation = '' 
      tagId = 'org.omg.mof.idl_prefix' 
      elements = 'a3A6600C5031F' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.objectmodel</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Core.org.omg.xmi.namespace=CWM    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.838' 
      name = 'org.omg.xmi.namespace=CWM' annotation = '' 
      tagId = 'org.omg.xmi.namespace' 
      elements = 'a3A6600C5031F' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>CWM</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Core.org.omg.mof.idl_substitute_name=CoreModule    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.839' 
      name = 'org.omg.mof.idl_substitute_name=CoreModule' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a3A6600C5031F' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>CoreModule</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Core.com.urep.jcr.java_prefix=org.omg.java.cwm.objectmodel    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.840' 
      name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.objectmodel' annotation = '' 
      tagId = 'com.urep.jcr.java_prefix' 
      elements = 'a3A6600C5031F' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.objectmodel</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Core.Element    [Class] ==================== -->
    <Model:Class xmi.id = 'a327A5C330208' 
      name = 'Element' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'true' visibility = 'public_vis' 
      isSingleton = 'false' >
      <Model:ModelElement.annotation>An element is an atomic constituent of a model. In the metamodel, an Element is the top metaclass in the metaclass hierarchy. Element is an abstract metaclass.
</Model:ModelElement.annotation>
    </Model:Class>
    <!-- ==================== Core.ModelElement    [Class] ==================== -->
    <Model:Class xmi.id = 'a327A5C7301CC' 
      name = 'ModelElement' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'true' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C330208' >
      <Model:ModelElement.annotation>A model element is an element that is an abstraction drawn from the system being modeled.

In the metamodel, a ModelElement is a named entity in a Model. It is the base for all modeling metaclasses in the CWM. All other modeling metaclasses are either direct or indirect subclasses of ModelElement.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Core.ModelElement.name    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a335D4BA70064' 
          name = 'name' annotation = 'An identifier for the ModelElement within its containing Namespace.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6FCF03C0' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Core.ModelElement.visibility    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3717C111037E' 
          name = 'visibility' annotation = 'Specifies extent of the visibility of the ModelElement within its owning Namespace.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a3A705EFD0201' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Core.ModelElement.clientDependency    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3A6722070063' 
          name = 'clientDependency' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a327A646F00E6' 
          referencedEnd = 'a33FFE57B03B3' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Core.ModelElement.constraint    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3A6722040380' 
          name = 'constraint' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a327A649B000A' 
          referencedEnd = 'a33EA67BB010F' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Core.ModelElement.importer    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3A4247EA0376' 
          name = 'importer' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a327A5D19033E' 
          referencedEnd = 'a3A423EFE02DA' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Core.ModelElement.namespace    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a396A41850138' 
          name = 'namespace' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a32B69F3A0118' 
          referencedEnd = 'a3A2C18630036' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Core.ModelElement.taggedValue    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3BB4EC020043' 
          name = 'taggedValue' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a337A4EF7002C' 
          referencedEnd = 'a33E901E10028' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Core.com.urep.jcr.mof.object_name=true    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.841' 
      name = 'com.urep.jcr.mof.object_name=true' annotation = '' 
      tagId = 'com.urep.jcr.mof.object_name' 
      elements = 'a335D4BA70064 a33E901140334' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>true</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Core.Namespace    [Class] ==================== -->
    <Model:Class xmi.id = 'a32B69F3A0118' 
      name = 'Namespace' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'true' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C7301CC' >
      <Model:ModelElement.annotation>A namespace is a part of a model that contains a set of ModelElements each of whose
names designates a unique element within the namespace. 

In the metamodel, a Namespace is a ModelElement that can own other ModelElements, such as Classifiers. The name of each owned ModelElement must be unique within the Namespace. Moreover, each contained ModelElement is owned by at most one Namespace. The concrete subclasses of Namespace may have additional constraints on which kind of elements may be contained. 

Namespace is an abstract metaclass.

Note that explicit parts of a model element, such as the features of a Classifier, are not modeled as owned elements in a namespace. A namespace is used for unstructured contents such as the contents of a  package, or a class declared inside the scope of another class.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Core.Namespace.ownedElement    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a396A44E502DE' 
          name = 'ownedElement' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a327A5C7301CC' 
          referencedEnd = 'a3A2C186203A1' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Core.Classifier    [Class] ==================== -->
    <Model:Class xmi.id = 'a32989FB2023D' 
      name = 'Classifier' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'true' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a32B69F3A0118' >
      <Model:ModelElement.annotation>A classifier is an element that describes structural and behavioral features; it comes in several specific forms, including class, data type, interface, component, and others that are defined in other metamodel packages.

Classifier is often used as a type.

In the metamodel, a Classifier may declare a collection of Features, such as Attributes, Operations and Methods. It has a name, which is unique in the Namespace enclosing the Classifier. Classifier is an abstract metaclass.

Classifier is a child of Namespace. As a Namespace, a Classifier may declare other Classifiers nested in its scope. Nested Classifiers may be accessed by other Classifiers only if the nested Classifiers have adequate visibility. There are no data value or state consequences of nested Classifiers, i.e., it is not an aggregation or composition.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Core.Classifier.isAbstract    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3A6CAF830372' 
          name = 'isAbstract' annotation = 'An abstract Classifier is not instantiable.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6F650276' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Core.Classifier.feature    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a396A45340213' 
          name = 'feature' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a32989F9700FE' 
          referencedEnd = 'a32B5D7EF03DD' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Core.Class    [Class] ==================== -->
    <Model:Class xmi.id = 'a3298A02900FE' 
      name = 'Class' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a32989FB2023D' >
      <Model:ModelElement.annotation>A class is a description of a set of objects that share the same attributes, operations, methods, relationships, and semantics. A class may use a set of interfaces to specify collections of operations it provides to its environment. In the metamodel, a Class describes a set of objects sharing a collection of Features that are common to the set of objects.

The purpose of a Class is to declare a collection of Features that fully describe the structure and behavior of objects. Some Classes may not be directly instantiated. These Classes are said to be abstract and exist only for other Classes to inherit and reuse the Features declared by them. No object may be a direct instance of an abstract Class, although an object may be an indirect instance of one through a subclass that is non-abstract.

A Class acts as the namespace for various kinds of contained elements defined within its scope, including classes, interfaces and associations (note that this is purely a scoping construction and does not imply anything about aggregation). The contained classes can be used as ordinary classes in the container class. If a class inherits another class, the contents of the ancestor are available to its descendents if the visibility of an element is public or protected; however, if the visibility is private, then the element is not visible and therefore not available in the descendant.</Model:ModelElement.annotation>
    </Model:Class>
    <!-- ==================== Core.DataType    [Class] ==================== -->
    <Model:Class xmi.id = 'a3298A036025B' 
      name = 'DataType' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a32989FB2023D' >
      <Model:ModelElement.annotation>A data type is a type whose values have no identity (i.e., they are pure values). Data types include primitive built-in types (such as integer and string) as well as definable enumeration types.

In the metamodel, a DataType defines a special kind of Classifier in which operations are all pure functions (i.e., they can return data values but they cannot change data values, because they have no identity). For example, an "add" operation on a number with another number as an argument yields a third number as a result; the target and argument are unchanged.

A DataType is a special kind of Classifier whose instances are primitive values, not objects. For example, integers and strings are usually treated as primitive values. A primitive value does not have an identity, so two occurrences of the same value cannot be differentiated. Usually, DataTypes are used for specification of the type of an attribute or parameter.</Model:ModelElement.annotation>
    </Model:Class>
    <!-- ==================== Core.Package    [Class] ==================== -->
    <Model:Class xmi.id = 'a327A5D19033E' 
      name = 'Package' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a32B69F3A0118' >
      <Model:ModelElement.annotation>A package is a grouping of model elements.

In the metamodel, Package is a subclass of Namespace. A Package contains ModelElements such as Packages and Classifiers. A Package may also contain Constraints and Dependencies between ModelElements of the Package.

The purpose of the package construct is to provide a general grouping mechanism. In fact, its only semantics is to define a namespace for its contents. The package construct can be used for organizing elements for any purpose; the criteria to use for grouping elements together into one package are not defined.

A package owns a set of model elements, with the implication that if the package is removed from the model, so are the elements owned by the package. Elements with names, such as classifiers, that are owned by the same package must have unique names within the package, although elements in different packages may have the same name.

There may be relationships between elements contained in the same package, and between an element in one package and an element in a surrounding package at any level. In other words, elements &#x0093;see&#x0094; all the way out through nested levels of packages.

Elements in peer packages, however, are encapsulated and are not a priori visible to each other. The same goes for elements in contained packages, i.e. packages do not see "inwards".

Elements owned by a Package can be made available to other Packages by importing
them. Although any ModelElement may be imported by a Package, imported
ModelElements are typically other Packages. When an element is imported by a
package it extends the namespace of that package. Thus the elements available in a
Package consists of its owned and imported ModelElements.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Core.Package.importedElement    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3A24439702FF' 
          name = 'importedElement' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a327A5C7301CC' 
          referencedEnd = 'a3A423EFE025D' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Core.Subsystem    [Class] ==================== -->
    <Model:Class xmi.id = 'a33CD6DE5030C' 
      name = 'Subsystem' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5D19033E a32989FB2023D' >
      <Model:ModelElement.annotation>A subsystem is a grouping of model elements that represents a behavioral unit in a physical system. A subsystem offers interfaces and has operations.

In the metamodel, Subsystem is a subclass of both Package and Classifier. As such it may have a set of Features.

The purpose of the subsystem construct is to provide a grouping mechanism for specifying a behavioral unit of a physical system. Apart from defining a namespace for its contents, a subsystem serves as a specification unit for the behavior of its contained model elements.

The contents of a subsystem is defined in the same way as for a package, thus it
consists of owned elements and imported elements, with unique names within the
subsystem.</Model:ModelElement.annotation>
    </Model:Class>
    <!-- ==================== Core.Model    [Class] ==================== -->
    <Model:Class xmi.id = 'a327A5D1E0032' 
      name = 'Model' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5D19033E' >
      <Model:ModelElement.annotation>A model captures a view of a physical system. It is an abstraction of the physical system, with a certain purpose. The model completely describes those aspects of the physical system that are relevant to the purpose of the model, at the appropriate level of detail.

In the metamodel, Model is a subclass of Package. It contains a containment hierarchy of ModelElements that together describe the physical system. A Model also contains a set of ModelElements that represents the environment of the system. 

Different Models can be defined for the same physical system, where each model represents a view of the physical system defined by its purpose and abstraction level, e.g. an analysis model, a design model, an implementation model. Typically different models are complementary and defined from the perspectives (viewpoints) of different system stakeholders.</Model:ModelElement.annotation>
    </Model:Class>
    <!-- ==================== Core.Feature    [Class] ==================== -->
    <Model:Class xmi.id = 'a32989F9700FE' 
      name = 'Feature' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'true' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C7301CC' >
      <Model:ModelElement.annotation>A feature is a property, like attribute or operation, which is encapsulated within a Classifier.

In the metamodel, a Feature declares a structural or behavioral characteristic of an instance of a Classifier or of the Classifier itself. Feature is an abstract metaclass.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Core.Feature.ownerScope    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a31653E23032A' 
          name = 'ownerScope' annotation = 'Specifies whether the Feature appears in every instance of the Classifier or whether it appears only once for the entire Classifier.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD7020032A' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Core.Feature.owner    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a396A45E803C8' 
          name = 'owner' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a32989FB2023D' 
          referencedEnd = 'a32B5D7EF03D3' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Core.StructuralFeature    [Class] ==================== -->
    <Model:Class xmi.id = 'a3298F1A403BF' 
      name = 'StructuralFeature' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'true' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a32989F9700FE' >
      <Model:ModelElement.annotation>A structural feature refers to a static feature of a model element.

In the metamodel, a StructuralFeature declares a structural aspect of a Classifier that is typed, such as an attribute. For example, it specifies the multiplicity and changeability of the StructuralFeature. StructuralFeature is an abstract metaclass.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Core.StructuralFeature.changeability    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3163DE07014A' 
          name = 'changeability' annotation = 'Specifies whether the value may be modified after the object is created.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6F820208' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Core.StructuralFeature.multiplicity    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a32B6AEA8032B' 
          name = 'multiplicity' annotation = 'The possible number of data values for the feature that may be held by an instance. The cardinality of the set of values is an implicit part of the feature. In the common case in which the multiplicity is 1..1, then the feature is a scalar (i.e., it holds exactly one value).' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6FC5001E' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Core.StructuralFeature.ordering    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3A6F5A180348' 
          name = 'ordering' annotation = 'Specifies whether the set of instances is ordered. The ordering must be determined and maintained by Operations that add values to the feature. This property is only relevant if the multiplicity is greater than one.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a36619BC301D6' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Core.StructuralFeature.targetScope    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a335A35E5028A' 
          name = 'targetScope' annotation = 'Specifies whether the targets are ordinary Instances or are Classifiers.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD7020032A' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Core.StructuralFeature.type    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a396A463C0232' 
          name = 'type' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a32989FB2023D' 
          referencedEnd = 'a316437C003B6' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Core.Attribute    [Class] ==================== -->
    <Model:Class xmi.id = 'a3A6F62780143' 
      name = 'Attribute' annotation = 'An Attribute describes a named slot within a classifier that may hold a value.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a3298F1A403BF' >
      <Model:Namespace.contents>
        <!-- ==================== Core.Attribute.initialValue    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3A6F62980289' 
          name = 'initialValue' annotation = 'An Expression specifying the value of the attribute upon initialization. It is meant to be evaluated at the time the object is initialized. (Note that an explicit constructor may supersede an initial value.)' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33CFA00203A2' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Core.org.omg.mof.idl_substitute_name=UmlAttribute    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.842' 
      name = 'org.omg.mof.idl_substitute_name=UmlAttribute' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a3A6F62780143' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>UmlAttribute</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Core.Constraint    [Class] ==================== -->
    <Model:Class xmi.id = 'a327A649B000A' 
      name = 'Constraint' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C7301CC' >
      <Model:ModelElement.annotation>A constraint is a semantic condition or restriction expressed in text.

In the metamodel, a Constraint is a BooleanExpression on an associated ModelElement(s) which must be true for the model to be well formed. This restriction can be stated in natural language, or in different kinds of languages with well-defined semantics. Certain Constraints are predefined, others may be user defined. Note that a Constraint is an assertion, not an executable mechanism.

The specification is written as an expression in a designated constraint language. The language can be specially designed for writing constraints (such as OCL), a programming language, mathematical notation, or natural language. If constraints are to be enforced by a model editor tool, then the tool must understand the syntax and semantics of the constraint language. Because the choice of language is arbitrary, constraints can be used as an extension mechanism.

The constraint concept allows new semantics to be specified linguistically for a model element. In the metamodel a Constraint directly attached to a ModelElement describes semantic restrictions that this ModelElement must obey.
</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Core.Constraint.body    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a32866F630244' 
          name = 'body' annotation = 'A BooleanExpression that must be true when evaluated for an instance of a system to be well-formed. A boolean expression defining the constraint. Expressions are written as strings in a designated language. For the model to be well formed, the expression must always yield a true value when evaluated for instances of the constrained elements at any time when the system is stable (i.e., not during the execution of an atomic operation).' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33CFA9DA01D6' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Core.Constraint.constrainedElement    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a396A47950000' 
          name = 'constrainedElement' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a327A5C7301CC' 
          referencedEnd = 'a33EA67BB010E' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Core.org.omg.mof.idl_substitute_name=UmlConstraint    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.843' 
      name = 'org.omg.mof.idl_substitute_name=UmlConstraint' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a327A649B000A' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>UmlConstraint</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Core.Dependency    [Class] ==================== -->
    <Model:Class xmi.id = 'a327A646F00E6' 
      name = 'Dependency' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C7301CC' >
      <Model:ModelElement.annotation>A dependency states that the implementation or functioning of one or more elements requires the presence of one or more other elements.

In the metamodel, a Dependency is a directed relationship from a client (or clients) to a supplier (or suppliers) stating that the client is dependent on the supplier (i.e., the client element requires the presence and knowledge of the supplier element).

A dependency specifies that the semantics of a set of model elements requires the presence of another set of model elements. This implies that if the source is somehow modified, the dependents probably must be modified. The reason for the dependency can be specified in several different ways (e.g., using natural language or an algorithm) but is often implicit.

Whenever the supplier element of a dependency changes, the client element is potentially invalidated. After such invalidation, a check should be performed followed by possible changes to the derived client element. Such a check should be performed after which action can be taken to change the derived element to validate it again.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Core.Dependency.kind    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3A6C9FD2027C' 
          name = 'kind' annotation = 'Contains a description of the nature of the dependency relationship between the client and supplier. The list of possible values is open-ended. However, CWM predefines the values "Abstraction" and "Usage".' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Core.Dependency.client    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a396A4B0D0213' 
          name = 'client' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a327A5C7301CC' 
          referencedEnd = 'a33FFE57B0395' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Core.Dependency.supplier    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a396A4B10002E' 
          name = 'supplier' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a327A5C7301CC' 
          referencedEnd = 'a335C0D7A02A8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Core.Expression    [Class] ==================== -->
    <Model:Class xmi.id = 'a33CFA00203A2' 
      name = 'Expression' annotation = 'In the metamodel an Expression defines a statement which will evaluate to a (possibly empty) set of instances when executed in a context. An Expression does not modify the environment in which it is evaluated. An expression contains an expression string and the name of an interpretation language with which to evaluate the string.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C330208' >
      <Model:Namespace.contents>
        <!-- ==================== Core.Expression.body    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a33E12E870203' 
          name = 'body' annotation = 'The text of the expression expressed in the given language.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Core.Expression.language    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a33E12E5F01CA' 
          name = 'language' annotation = 'Names the language in which the expression body is represented. The interpretation of the expression depends on the language. If the language name is omitted, no interpretation for the expression can be assumed. In general, a language name should be spelled and capitalized exactly as it appears in the document defining the language. For example, use COBOL, not Cobol; use Ada, not ADA; use PostScript, not Postscript.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6FCF03C0' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Core.BooleanExpression    [Class] ==================== -->
    <Model:Class xmi.id = 'a33CFA9DA01D6' 
      name = 'BooleanExpression' annotation = 'In the metamodel BooleanExpression defines a statement which will evaluate to an instance of Boolean when it is evaluated.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a33CFA00203A2' />
    <!-- ==================== Core.ProcedureExpression    [Class] ==================== -->
    <Model:Class xmi.id = 'a363559050190' 
      name = 'ProcedureExpression' annotation = 'In the metamodel ProcedureExpression defines a statement which will result in a change to the values of its environment when it is evaluated.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a33CFA00203A2' />
    <!-- ==================== Core.Multiplicity    [Class] ==================== -->
    <Model:Class xmi.id = 'a33DD6FC5001E' 
      name = 'Multiplicity' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C330208' >
      <Model:ModelElement.annotation>In the metamodel a Multiplicity defines a non-empty set of non-negative integers. A set which only contains zero ({0}) is not considered a valid Multiplicity. Every Multiplicity has at least one corresponding String  representation.
</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Core.Multiplicity.range    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a396A3FA7038A' 
          name = 'range' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a33E93BD00075' 
          referencedEnd = 'a33FF95B90378' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Core.MultiplicityRange    [Class] ==================== -->
    <Model:Class xmi.id = 'a33E93BD00075' 
      name = 'MultiplicityRange' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C330208' >
      <Model:ModelElement.annotation>In the metamodel a MultiplicityRange defines a range of integers. The upper bound of the range cannot be below the lower bound. The lower bound must be a nonnegative integer. The upper bound must be a nonnegative integer or the special value unlimited, which indicates there is no upper bound on the range. 
</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Core.MultiplicityRange.lower    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a33E93BE902E8' 
          name = 'lower' annotation = 'Specifies the positive integer lower bound of the range.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6FD7021C' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Core.MultiplicityRange.upper    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a33E93BFA0329' 
          name = 'upper' annotation = 'Specifies the upper bound of the range, which is a positive integer or the special value &#x0092;unlimited&#x0092; indicating no upper bound is defined.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a3635582D03D4' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Core.MultiplicityRange.multiplicity    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a396A403D006D' 
          name = 'multiplicity' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a33DD6FC5001E' 
          referencedEnd = 'a33FF95B90300' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Core.Stereotype    [Class] ==================== -->
    <Model:Class xmi.id = 'a3A24417902EF' 
      name = 'Stereotype' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C7301CC' >
      <Model:ModelElement.annotation>The stereotype concept provides a way of branding (classifying) model elements so that they behave as if they were instances of new virtual metamodel constructs. These model elements have the same structure (attributes, associations, operations) as similar non-stereotyped model elements of the same kind. The stereotype may specify additional constraints and required tagged values that apply to model elements. In addition, a stereotype may be used to indicate a difference in meaning or usage between two model elements with identical structure.

In the metamodel the Stereotype metaclass is a subclass of ModelElement. Tagged Values and Constraints attached to a Stereotype apply to all ModelElements branded by that Stereotype.

A stereotype keeps track of the base class to which it may be applied. The base class is a class in the metamodel (not a user-level modeling element) such as Class, Association, etc. If a model element is branded by an attached stereotype, then the CWM base class of the model element must be the base class specified by the stereotype or one of the subclasses of that base class.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Core.Stereotype.baseClass    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3A24427E031E' 
          name = 'baseClass' annotation = 'Specifies the name of a modeling element to which the stereotype applies, such as Class, Association, Constraint, etc. This is the name of a metaclass, that is, a class from the metamodel itself rather than a user model class.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6FCF03C0' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Core.Stereotype.extendedElement    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3A2444AD00AD' 
          name = 'extendedElement' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a327A5C7301CC' 
          referencedEnd = 'a3A2442F90292' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Core.Stereotype.requiredTag    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3A2444AB0234' 
          name = 'requiredTag' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a337A4EF7002C' 
          referencedEnd = 'a3A2446850021' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Core.Stereotype.stereotypeConstraint    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3A244510011B' 
          name = 'stereotypeConstraint' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a327A649B000A' 
          referencedEnd = 'a3A2D210E0353' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Core.TaggedValue    [Class] ==================== -->
    <Model:Class xmi.id = 'a337A4EF7002C' 
      name = 'TaggedValue' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C330208' >
      <Model:ModelElement.annotation>A tagged value allows information to be attached to any model element in the form of a "tagged value" pair (i.e., name = value). The interpretation of tagged value semantics is intentionally beyond the scope of CWM. It must be determined by user or tool conventions. It is expected that tools will define tags to supply information needed for their operations beyond the basic semantics of CWM. Such information could include code generation options, model management information, or user-specified semantics.

Even though TaggedValues are a simple and straightforward extension technique, their use restricts semantic interchange of metadata to only those tools that share a common understanding of the specific tagged value names.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Core.TaggedValue.tag    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a33E901140334' 
          name = 'tag' annotation = 'Contains the name of the TaggedValue. This name determines the semantics that are applicable to the contents of the value attribute.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6FCF03C0' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Core.TaggedValue.value    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a337A50700273' 
          name = 'value' annotation = 'Contains the current value of the TaggedValue.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Core.TaggedValue.modelElement    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a396A5262037A' 
          name = 'modelElement' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a327A5C7301CC' 
          referencedEnd = 'a33E901E003D4' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Core.TaggedValue.stereotype    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3A24459D01C7' 
          name = 'stereotype' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3A24417902EF' 
          referencedEnd = 'a3A2446850030' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Core.org.omg.mof.idl_substitute_name=umlValue    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.844' 
      name = 'org.omg.mof.idl_substitute_name=umlValue' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a337A50700273' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>umlValue</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Core.Any    [DataType] ==================== -->
    <Model:DataType xmi.id = 'a37AB1FF90221' 
      name = 'Any' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
      <Model:ModelElement.annotation>The Any data type is used to indicate that an attribute or parameter may take values from any of the available data types. In CWM, the set of data types an Any attribute or parameter may assume includes the data types and enumerations described in this chapter plus any available instances of the Classifier class. 

There is no default value for data type Any.</Model:ModelElement.annotation>
      <Model:DataType.typeCode>
        <XMI.CorbaTypeCode>
          <XMI.CorbaTcAny/>
        </XMI.CorbaTypeCode>
      </Model:DataType.typeCode>
    </Model:DataType>
    <!-- ==================== Core.Boolean    [DataType] ==================== -->
    <Model:DataType xmi.id = 'a33DD6F650276' 
      name = 'Boolean' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
      <Model:ModelElement.annotation>Boolean defines an enumeration that denotes a logical condition.

The default for data type Boolean is false.</Model:ModelElement.annotation>
      <Model:DataType.typeCode>
        <XMI.CorbaTypeCode>
          <XMI.CorbaTcBoolean/>
        </XMI.CorbaTypeCode>
      </Model:DataType.typeCode>
    </Model:DataType>
    <!-- ==================== Core.Float    [DataType] ==================== -->
    <Model:DataType xmi.id = 'a384FE9DE02A2' 
      name = 'Float' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
      <Model:ModelElement.annotation>The Float data type is used to indicate that an attribute or parameter may take on floating point numeric values. The number of significant digits and other representational details are implementation defined. 

The default for the Float data type is the value 0.0.</Model:ModelElement.annotation>
      <Model:DataType.typeCode>
        <XMI.CorbaTypeCode>
          <XMI.CorbaTcFloat/>
        </XMI.CorbaTypeCode>
      </Model:DataType.typeCode>
    </Model:DataType>
    <!-- ==================== Core.Integer    [DataType] ==================== -->
    <Model:DataType xmi.id = 'a33DD6FD7021C' 
      name = 'Integer' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
      <Model:ModelElement.annotation>Integer represents the predefined type of integers. An instance of Integer is an element in the (infinite) set of integers (..., -2, -1, 0, 1, 2, ...). 

The default for Integer is 0.</Model:ModelElement.annotation>
      <Model:DataType.typeCode>
        <XMI.CorbaTypeCode>
          <XMI.CorbaTcLong/>
        </XMI.CorbaTypeCode>
      </Model:DataType.typeCode>
    </Model:DataType>
    <!-- ==================== Core.Name    [DataType] ==================== -->
    <Model:DataType xmi.id = 'a33DD6FCF03C0' 
      name = 'Name' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
      <Model:ModelElement.annotation>Name defines a token which is used for naming ModelElements and similar usages. Each Name has a corresponding String representation. For purposes of exchange a name should be represented as a String.

The default for the Name data type is an empty string.</Model:ModelElement.annotation>
      <Model:DataType.typeCode>
        <XMI.CorbaTypeCode>
          <XMI.CorbaTcAlias xmi.tcName = 'Name'>
          <XMI.CorbaTypeCode>
            <XMI.CorbaTcString xmi.tcLength = '0'/>
          </XMI.CorbaTypeCode>
          </XMI.CorbaTcAlias>
        </XMI.CorbaTypeCode>
      </Model:DataType.typeCode>
    </Model:DataType>
    <!-- ==================== Core.String    [DataType] ==================== -->
    <Model:DataType xmi.id = 'a33DD702401B8' 
      name = 'String' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
      <Model:ModelElement.annotation>String defines a piece of text. Strings do not normally have a defined length; rather, they are considered to be arbitrarily long (practical limits on the length of Strings exist, but are implementation dependent). When String is used as the type of an Attribute, string length sometimes can be specified (see the Relational and Record packages for examples).

The default for the String data type is an empty string.</Model:ModelElement.annotation>
      <Model:DataType.typeCode>
        <XMI.CorbaTypeCode>
          <XMI.CorbaTcString xmi.tcLength = '0'/>
        </XMI.CorbaTypeCode>
      </Model:DataType.typeCode>
    </Model:DataType>
    <!-- ==================== Core.Time    [DataType] ==================== -->
    <Model:DataType xmi.id = 'a3A09E1C0001E' 
      name = 'Time' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
      <Model:ModelElement.annotation>Time defines a statement which will define the time of occurrence of an event. The specific format of time expressions is not specified here and is subject to implementation considerations.

There is no default for the Time data type.</Model:ModelElement.annotation>
      <Model:DataType.typeCode>
        <XMI.CorbaTypeCode>
          <XMI.CorbaTcAlias xmi.tcName = 'Time'>
          <XMI.CorbaTypeCode>
            <XMI.CorbaTcString xmi.tcLength = '0'/>
          </XMI.CorbaTypeCode>
          </XMI.CorbaTcAlias>
        </XMI.CorbaTypeCode>
      </Model:DataType.typeCode>
    </Model:DataType>
    <!-- ==================== Core.UnlimitedInteger    [DataType] ==================== -->
    <Model:DataType xmi.id = 'a3635582D03D4' 
      name = 'UnlimitedInteger' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
      <Model:ModelElement.annotation>UnlimitedInteger defines a data type whose range is the nonnegative integers augmented by the special value "unlimited". It is used for the upper bound of multiplicities.

The default for an UnlimitedInteger is the special value "unlimited".</Model:ModelElement.annotation>
      <Model:DataType.typeCode>
        <XMI.CorbaTypeCode>
          <XMI.CorbaTcAlias xmi.tcName = 'UnlimitedInteger'>
          <XMI.CorbaTypeCode>
            <XMI.CorbaTcLong/>
          </XMI.CorbaTypeCode>
          </XMI.CorbaTcAlias>
        </XMI.CorbaTypeCode>
      </Model:DataType.typeCode>
    </Model:DataType>
    <!-- ==================== Core.ChangeableKind    [DataType] ==================== -->
    <Model:DataType xmi.id = 'a33DD6F820208' 
      name = 'ChangeableKind' annotation = '' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
      <Model:DataType.typeCode>
        <XMI.CorbaTypeCode>
          <XMI.CorbaTcEnum xmi.tcName = 'ChangeableKind'>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'ck_changeable'/>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'ck_frozen'/>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'ck_addOnly'/>
          </XMI.CorbaTcEnum>
        </XMI.CorbaTypeCode>
      </Model:DataType.typeCode>
    </Model:DataType>
    <!-- ==================== Core.org.omg.xmi.enumerationUnprefix=ck_    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.845' 
      name = 'org.omg.xmi.enumerationUnprefix=ck_' annotation = '' 
      tagId = 'org.omg.xmi.enumerationUnprefix' 
      elements = 'a33DD6F820208' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>ck_</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Core.OrderingKind    [DataType] ==================== -->
    <Model:DataType xmi.id = 'a36619BC301D6' 
      name = 'OrderingKind' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
      <Model:ModelElement.annotation>In the metamodel OrderingKind defines an enumeration that specifies how the elements of a set are arranged. Used in conjunction with elements that have a multiplicity in cases when the multiplicity value is greater than one. The ordering must be determined and maintained by operations that modify the set.

The default value is ok_unordered.</Model:ModelElement.annotation>
      <Model:DataType.typeCode>
        <XMI.CorbaTypeCode>
          <XMI.CorbaTcEnum xmi.tcName = 'OrderingKind'>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'ok_unordered'/>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'ok_ordered'/>
          </XMI.CorbaTcEnum>
        </XMI.CorbaTypeCode>
      </Model:DataType.typeCode>
    </Model:DataType>
    <!-- ==================== Core.org.omg.xmi.enumerationUnprefix=ok_    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.846' 
      name = 'org.omg.xmi.enumerationUnprefix=ok_' annotation = '' 
      tagId = 'org.omg.xmi.enumerationUnprefix' 
      elements = 'a36619BC301D6' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>ok_</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Core.ScopeKind    [DataType] ==================== -->
    <Model:DataType xmi.id = 'a33DD7020032A' 
      name = 'ScopeKind' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
      <Model:ModelElement.annotation>In the metamodel ScopeKind defines an enumeration that denotes whether a feature belongs to individual instances or an entire classifier.

The default value is sk_instance.</Model:ModelElement.annotation>
      <Model:DataType.typeCode>
        <XMI.CorbaTypeCode>
          <XMI.CorbaTcEnum xmi.tcName = 'ScopeKind'>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'sk_instance'/>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'sk_classifier'/>
          </XMI.CorbaTcEnum>
        </XMI.CorbaTypeCode>
      </Model:DataType.typeCode>
    </Model:DataType>
    <!-- ==================== Core.org.omg.xmi.enumerationUnprefix=sk_    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.847' 
      name = 'org.omg.xmi.enumerationUnprefix=sk_' annotation = '' 
      tagId = 'org.omg.xmi.enumerationUnprefix' 
      elements = 'a33DD7020032A' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>sk_</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Core.VisibilityKind    [DataType] ==================== -->
    <Model:DataType xmi.id = 'a3A705EFD0201' 
      name = 'VisibilityKind' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
      <Model:ModelElement.annotation>In the metamodel VisibilityKind defines an enumeration that denotes how the element to which it refers is seen outside the enclosing name space.

The default value is vk_public.</Model:ModelElement.annotation>
      <Model:DataType.typeCode>
        <XMI.CorbaTypeCode>
          <XMI.CorbaTcEnum xmi.tcName = 'VisibilityKind'>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'vk_public'/>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'vk_protected'/>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'vk_private'/>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'vk_package'/>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'vk_notapplicable'/>
          </XMI.CorbaTcEnum>
        </XMI.CorbaTypeCode>
      </Model:DataType.typeCode>
    </Model:DataType>
    <!-- ==================== Core.org.omg.xmi.enumerationUnprefix=vk_    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.848' 
      name = 'org.omg.xmi.enumerationUnprefix=vk_' annotation = '' 
      tagId = 'org.omg.xmi.enumerationUnprefix' 
      elements = 'a3A705EFD0201' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>vk_</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Core.ClassifierFeature    [Association] ==================== -->
    <Model:Association xmi.id = 'a32B5D7EE02FF' 
      name = 'ClassifierFeature' annotation = 'The ClassifierFeature association provides a composite aggregation containment relationship between Classifiers and the Features they own. The feature end of the association is ordered allowing preservation of the ordering of Features within their owning Classifier. A Feature can be owned by at most one Classifier. The optional character of ownership is intended as a convenience to tools, allowing them to create Features prior to linking them to their owning Classifier.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a32B5D7EF03D3' 
          name = 'owner' annotation = '' 
          isNavigable = 'true' aggregation = 'composite' isChangeable = 'true' 
          type = 'a32989FB2023D' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a32B5D7EF03DD' 
          name = 'feature' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a32989F9700FE' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Core.DependencyClient    [Association] ==================== -->
    <Model:Association xmi.id = 'a33FFE57902A2' 
      name = 'DependencyClient' annotation = 'The DependencyClient association links Dependency instances with ModelElements that act as clients in the represented dependency relationship.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a33FFE57B0395' 
          name = 'client' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a327A5C7301CC' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a33FFE57B03B3' 
          name = 'clientDependency' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a327A646F00E6' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Core.DependencySupplier    [Association] ==================== -->
    <Model:Association xmi.id = 'a335C0D770302' 
      name = 'DependencySupplier' annotation = 'The DependencySupplier association links Dependency instances with ModelElements that act as suppliers in the represented dependency relationship.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a335C0D7A02A8' 
          name = 'supplier' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a327A5C7301CC' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a335C0D7A02E4' 
          name = 'supplierDependency' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a327A646F00E6' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Core.ElementConstraint    [Association] ==================== -->
    <Model:Association xmi.id = 'a33EA67B702EE' 
      name = 'ElementConstraint' annotation = 'The ElementConstraint association provides linkages between ModelElements and the Constraint instances that constrain their state. Note that a Constraint instance may not simultaneously participate in both the ElementConstraint and the StereotypeConstraint associations.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a33EA67BB010E' 
          name = 'constrainedElement' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a327A5C7301CC' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a33EA67BB010F' 
          name = 'constraint' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a327A649B000A' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Core.org.omg.mof.idl_substitute_name=umlConstraint    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.849' 
      name = 'org.omg.mof.idl_substitute_name=umlConstraint' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a33EA67BB010F' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>umlConstraint</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Core.ElementOwnership    [Association] ==================== -->
    <Model:Association xmi.id = 'a3A2C18610353' 
      name = 'ElementOwnership' annotation = 'The ElementOwnership association identifies ModelElements owned by Namespaces. ModelElements may be owned by at most one Namespace. Refer to the above discussion of the Namespace class for more information on the nature of the ownership relationship between Namespaces and ModelElements.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3A2C186203A1' 
          name = 'ownedElement' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a327A5C7301CC' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3A2C18630036' 
          name = 'namespace' annotation = '' 
          isNavigable = 'true' aggregation = 'composite' isChangeable = 'true' 
          type = 'a32B69F3A0118' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Core.ImportedElements    [Association] ==================== -->
    <Model:Association xmi.id = 'a3A423EFD02DA' 
      name = 'ImportedElements' annotation = 'The ImportedElements association identifies ModelElements that a Package instance imports from other Namespaces. Although any ModelElement may be imported by a Package, imported ModelElements are typically other Packages or aggregate Classifiers, such as Class instances.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3A423EFE025D' 
          name = 'importedElement' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a327A5C7301CC' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3A423EFE02DA' 
          name = 'importer' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a327A5D19033E' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Core.RangeMultiplicity    [Association] ==================== -->
    <Model:Association xmi.id = 'a33FF95B90061' 
      name = 'RangeMultiplicity' annotation = 'The RangeMultiplicity association identifies the set of MultiplicityRange instances that specify the lower and upper bounds of individual cardinality ranges defined by a Multiplicity instance. A MultiplicityRange instance must be owned by a single Multiplicity instance.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a33FF95B90300' 
          name = 'multiplicity' annotation = '' 
          isNavigable = 'true' aggregation = 'composite' isChangeable = 'true' 
          type = 'a33DD6FC5001E' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a33FF95B90378' 
          name = 'range' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a33E93BD00075' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Core.StereotypeConstraints    [Association] ==================== -->
    <Model:Association xmi.id = 'a3A2D210D02D6' 
      name = 'StereotypeConstraints' annotation = 'The StereotypeConstraints association links Stereotypes with Constraints that further restrict the states that a stereotyped ModelElement may assume. A Constraint instance may not simultaneously participate in both the StereotypeContraints association and the ElementConstraint association.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3A2D210E0353' 
          name = 'stereotypeConstraint' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a327A649B000A' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3A2D210E0372' 
          name = 'constrainedStereotype' annotation = '' 
          isNavigable = 'true' aggregation = 'composite' isChangeable = 'true' 
          type = 'a3A24417902EF' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Core.StereotypedElement    [Association] ==================== -->
    <Model:Association xmi.id = 'a3A2442F80244' 
      name = 'StereotypedElement' annotation = 'The StereotypedElement association links Stereotypes with the ModelElements to which they apply. ' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3A2442F90292' 
          name = 'extendedElement' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a327A5C7301CC' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3A2442F902FF' 
          name = 'stereotype' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3A24417902EF' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Core.StereotypeTaggedValues    [Association] ==================== -->
    <Model:Association xmi.id = 'a3A24468302EF' 
      name = 'StereotypeTaggedValues' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:ModelElement.annotation>The StereotypeTaggedValues association links Stereotypes with the set of TaggedValues they require.

TaggedValues cannot simultaneously participate in both the TaggedElement and StereotypeTaggedValues associations.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3A2446850021' 
          name = 'requiredTag' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a337A4EF7002C' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3A2446850030' 
          name = 'stereotype' annotation = '' 
          isNavigable = 'true' aggregation = 'composite' isChangeable = 'true' 
          type = 'a3A24417902EF' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Core.StructuralFeatureType    [Association] ==================== -->
    <Model:Association xmi.id = 'a316437BF0352' 
      name = 'StructuralFeatureType' annotation = 'The StructuralFeatureType association identifies the Classifier instance that defines the type of particular StructuralFeatures. A StructuralFeature instance must have a Classifier instance that defines its type.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a316437C002DA' 
          name = 'structuralFeature' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3298F1A403BF' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a316437C003B6' 
          name = 'type' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a32989FB2023D' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Core.TaggedElement    [Association] ==================== -->
    <Model:Association xmi.id = 'a33E901DD001E' 
      name = 'TaggedElement' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:ModelElement.annotation>The TaggedElement association links TaggedValues with the ModelElements that own them.

TaggedValues cannot simultaneously participate in both the TaggedElement and StereotypeTaggedValues associations.

</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a33E901E003D4' 
          name = 'modelElement' annotation = '' 
          isNavigable = 'true' aggregation = 'composite' isChangeable = 'true' 
          type = 'a327A5C7301CC' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a33E901E10028' 
          name = 'taggedValue' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a337A4EF7002C' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
  </Model:Namespace.contents>
</Model:Package>
<!-- ==================== Behavioral    [Package] ==================== -->
<Model:Package xmi.id = 'a3A6342A4000B' 
  name = 'Behavioral' 
  isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
  <Model:ModelElement.annotation>The Behavioral metamodel depends on the following package:

   org.omg::CWM::ObjectModel::Core

The Behavioral metamodel collects together classes and associations that describe the behavior of CWM types and provides a foundation for recording the invocations of defined behaviors. The elements of the Behavioral metamodel are shown in the following figure.

OCL Representation of Behavioral Constraints

Operations

The operation hasSameSignature checks if the argument has the same signature as the instance itself.
   hasSameSignature ( b : BehavioralFeature ) : Boolean;
   hasSameSignature (b) =
   (self.name = b.name) and
   (self.parameter-&gt;size = b.parameter-&gt;size) and
   Sequence{ 1..(self.parameter-&gt;size) }-&gt;forAll( index : Integer |
   b.parameter-&gt;at(index).type =
   self.parameter-&gt;at(index).type and
   b.parameter-&gt;at(index).kind =
   self.parameter-&gt;at(index).kind   )

The operation allOperations results in a Set containing all Operations of the Classifier itself and all its inherited Operations.
   allOperations : Set(Operation);
   allOperations = self.allFeatures-&gt;select(f | f.ockIsKindOf(Operations))

The operation allMethods results in a Set containing all Methods of the Classifier itself and all its inherited Methods.
   allOperations : Set(Method);
   allMethods = self.allFeatures-&gt;select(f | f.ockIsKindOf(Method))

Constraints

[C-4-1] All Parameters should have a unique name.
context BehavioralFeature inv:
self.parameter-&gt;forAll(p1, p2 | p1.name = p2.name implies p1 = p2)

[C-4-2] The type of the Parameters should be included in the Namespace of the Classifier.
context BehavioralFeature inv:
self.parameter-&gt;forAll( p | self.owner.namespace.allContents-&gt;includes (p.type) )

[C-4-3] The number of arguments must be the same as the number of parameters of the Operation.
context CallAction inv:
self.actualArgument-&gt;size = self.operation.parameter-&gt;size

[C-4-4] An Interface can only contain Operations.
context Interface inv:
self.allFeatures-&gt;forAll( f | f.oclIsKindOf( Operation ) )

[C-4-5] An Interface cannot contain any ModelElements.
context Interface inv:
self.allContents-&gt;isEmpty

[C-4-6] All Features defined in an Interface are public.
context Interface inv:
self.allFeatures-&gt;forAll( f | f.visibility = #public )

[C-4-7] If the realized Operation is a query, then so is the Method.
context Method inv:
self.specification-&gt;isQuery implies self.isQuery</Model:ModelElement.annotation>
  <Model:Namespace.contents>
    <!-- ==================== Behavioral.org.omg.mof.idl_prefix=org.omg.cwm.objectmodel    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.850' 
      name = 'org.omg.mof.idl_prefix=org.omg.cwm.objectmodel' annotation = '' 
      tagId = 'org.omg.mof.idl_prefix' 
      elements = 'a3A6342A4000B' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.objectmodel</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Behavioral.org.omg.xmi.namespace=CWM    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.851' 
      name = 'org.omg.xmi.namespace=CWM' annotation = '' 
      tagId = 'org.omg.xmi.namespace' 
      elements = 'a3A6342A4000B' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>CWM</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Behavioral.org.omg.mof.idl_substitute_name=BehavioralModule    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.852' 
      name = 'org.omg.mof.idl_substitute_name=BehavioralModule' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a3A6342A4000B' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>BehavioralModule</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Behavioral.com.urep.jcr.java_prefix=org.omg.java.cwm.objectmodel    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.853' 
      name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.objectmodel' annotation = '' 
      tagId = 'com.urep.jcr.java_prefix' 
      elements = 'a3A6342A4000B' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.objectmodel</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <Model:Import xmi.id = 'G.854' 
      name = 'Core' annotation = '' 
      visibility = 'public_vis' isClustered = 'true' 
      importedNamespace = 'a3A6600C5031F' />
    <!-- ==================== Behavioral.Argument    [Class] ==================== -->
    <Model:Class xmi.id = 'a33D9073E03B6' 
      name = 'Argument' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C7301CC' >
      <Model:ModelElement.annotation>Argument is an expression describing how to determine an actual value passed in a CallAction.

In the metamodel an Argument is a composite part of a CallAction and contains a meta-attribute, value, of type Expression. It states how the actual argument is determined when the owning CallAction is executed.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Behavioral.Argument.value    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a33D9076D00FA' 
          name = 'value' annotation = 'An expression determining the actual Argument instance when executed.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33CFA00203A2' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Behavioral.Argument.callAction    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a396A5DC6007D' 
          name = 'callAction' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3A638B7E0318' 
          referencedEnd = 'a3A638C300329' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Behavioral.org.omg.mof.idl_substitute_name=umlValue    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.855' 
      name = 'org.omg.mof.idl_substitute_name=umlValue' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a33D9076D00FA' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>umlValue</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Behavioral.BehavioralFeature    [Class] ==================== -->
    <Model:Class xmi.id = 'a3298BCF00260' 
      name = 'BehavioralFeature' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'true' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a32989F9700FE' >
      <Model:ModelElement.annotation>A behavioral feature refers to a dynamic feature of a model element, such as an operation or method. In the metamodel, BehavioralFeature specifies a behavioral aspect of a Classifier. All different kinds of behavioral aspects of a Classifier, such as Operation and Method, are subclasses of BehavioralFeature.

BehavioralFeature is an abstract metaclass.
</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Behavioral.BehavioralFeature.isQuery    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a335A34A3012C' 
          name = 'isQuery' annotation = 'Specifies whether an execution of the BehavioralFeature leaves the state of the system unchanged. True indicates that the state is unchanged; false indicates that side-effects may occur.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6F650276' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Behavioral.BehavioralFeature.parameter    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a396A48A50213' 
          name = 'parameter' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a327BBB9F02B2' 
          referencedEnd = 'a3359946401AE' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Behavioral.CallAction    [Class] ==================== -->
    <Model:Class xmi.id = 'a3A638B7E0318' 
      name = 'CallAction' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C7301CC' >
      <Model:ModelElement.annotation>A call action is an action resulting in an invocation of an operation.

The purpose of a CallAction is to identify the actual Arguments used in a specific invocation of an Operation.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Behavioral.CallAction.operation    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3A660F1B00CD' 
          name = 'operation' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a327BB68C0398' 
          referencedEnd = 'a3A638C3503D4' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Behavioral.CallAction.actualArgument    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3A660F1E012B' 
          name = 'actualArgument' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a33D9073E03B6' 
          referencedEnd = 'a3A638C300328' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Behavioral.Event    [Class] ==================== -->
    <Model:Class xmi.id = 'a3288E51203DE' 
      name = 'Event' annotation = 'Event is a specification of an observable occurrence. The occurrence that generates an event instance is assumed to take place at an instant in time.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C7301CC' >
      <Model:Namespace.contents>
        <!-- ==================== Behavioral.Event.parameter    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a396A651802DE' 
          name = 'parameter' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a327BBB9F02B2' 
          referencedEnd = 'a3337AF9D028B' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Behavioral.Interface    [Class] ==================== -->
    <Model:Class xmi.id = 'a3342A195014D' 
      name = 'Interface' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a32989FB2023D' >
      <Model:ModelElement.annotation>Interface is a named set of operations that specify the behavior of an element.

In the metamodel, an Interface contains a set of Operations that together define a service offered by a Classifier realizing the Interface. A Classifier may offer several services, which means that it may realize several Interfaces, and several Classifiers may realize the same Interface.</Model:ModelElement.annotation>
    </Model:Class>
    <!-- ==================== Behavioral.org.omg.mof.idl_substitute_name=UmlInterface    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.856' 
      name = 'org.omg.mof.idl_substitute_name=UmlInterface' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a3342A195014D' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>UmlInterface</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Behavioral.Method    [Class] ==================== -->
    <Model:Class xmi.id = 'a327BB67E0028' 
      name = 'Method' annotation = 'Method is the implementation of an Operation. It specifies the algorithm or procedure that effects the results of an Operation.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a3298BCF00260' >
      <Model:Namespace.contents>
        <!-- ==================== Behavioral.Method.body    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a327BBD2A02D0' 
          name = 'body' annotation = 'A specification of the Method in some appropriate form (such as a programming language). The exact form of a Method&#x0092;s specification and knowledge of the language in which it is described is outside the scope of the CWM.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a363559050190' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Behavioral.Method.specification    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a396A49A50128' 
          name = 'specification' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a327BB68C0398' 
          referencedEnd = 'a32B6D9BE00C8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Behavioral.Operation    [Class] ==================== -->
    <Model:Class xmi.id = 'a327BB68C0398' 
      name = 'Operation' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a3298BCF00260' >
      <Model:ModelElement.annotation>Operation is a service that can be requested from an object to effect behavior. An Operation has a signature, which describes the parameters that are possible (including possible return values).

In the metamodel, an Operation is a BehavioralFeature that can be applied to instances of the Classifier that contains the Operation.

Operation is the specification, while Method is the implementation.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Behavioral.Operation.isAbstract    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3627CF2B030C' 
          name = 'isAbstract' annotation = 'If true, then the Operation does not have an implementation, and one must be supplied by a descendant. If false, the Operation must have an implementation in the class or inherited from an ancestor.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6F650276' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Behavioral.Operation.method    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a396A48F7030D' 
          name = 'method' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a327BB67E0028' 
          referencedEnd = 'a32B6D9BE00C9' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Behavioral.Parameter    [Class] ==================== -->
    <Model:Class xmi.id = 'a327BBB9F02B2' 
      name = 'Parameter' annotation = 'Parameters are used in the specification of operations, methods and events. A Parameter may include a name, type, and direction of communication.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C7301CC' >
      <Model:Namespace.contents>
        <!-- ==================== Behavioral.Parameter.defaultValue    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a327BE04D0096' 
          name = 'defaultValue' annotation = 'An Expression whose evaluation yields a value to be used when no argument is supplied for the Parameter.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33CFA00203A2' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Behavioral.Parameter.kind    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a335BC753038E' 
          name = 'kind' annotation = 'Specifies what kind of a Parameter is required.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6FDC024E' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Behavioral.Parameter.behavioralFeature    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a396A4927004E' 
          name = 'behavioralFeature' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3298BCF00260' 
          referencedEnd = 'a33599464017C' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Behavioral.Parameter.event    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3A6E38A1023A' 
          name = 'event' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3288E51203DE' 
          referencedEnd = 'a3337AF9D028A' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Behavioral.Parameter.type    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a396A496E01E4' 
          name = 'type' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a32989FB2023D' 
          referencedEnd = 'a335BC7D503D4' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Behavioral.ParameterDirectionKind    [DataType] ==================== -->
    <Model:DataType xmi.id = 'a33DD6FDC024E' 
      name = 'ParameterDirectionKind' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
      <Model:ModelElement.annotation>In the metamodel ParameterDirectionKind defines an enumeration that denotes if a Parameter is used for supplying an argument and/or for returning a value. The enumeration values are:

The default value is pdk_in.</Model:ModelElement.annotation>
      <Model:DataType.typeCode>
        <XMI.CorbaTypeCode>
          <XMI.CorbaTcEnum xmi.tcName = 'ParameterDirectionKind'>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'pdk_in'/>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'pdk_inout'/>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'pdk_out'/>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'pdk_return'/>
          </XMI.CorbaTcEnum>
        </XMI.CorbaTypeCode>
      </Model:DataType.typeCode>
    </Model:DataType>
    <!-- ==================== Behavioral.org.omg.xmi.enumerationUnprefix=pdk_    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.857' 
      name = 'org.omg.xmi.enumerationUnprefix=pdk_' annotation = '' 
      tagId = 'org.omg.xmi.enumerationUnprefix' 
      elements = 'a33DD6FDC024E' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>pdk_</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Behavioral.BehavioralFeatureParameter    [Association] ==================== -->
    <Model:Association xmi.id = 'a3359946200F0' 
      name = 'BehavioralFeatureParameter' annotation = 'The BehavioralFeatureParameter association identifies and orders Parameter instances describing the parameters of a BehavioralFeature. Parameters may be owned by at most one BehavioralFeature instance. The set of parameters of a BehavioralFeature, together with its name and return value, are said to constitute the BehavioralFeature&#x0092;s "signature".' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a33599464017C' 
          name = 'behavioralFeature' annotation = '' 
          isNavigable = 'true' aggregation = 'composite' isChangeable = 'true' 
          type = 'a3298BCF00260' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3359946401AE' 
          name = 'parameter' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a327BBB9F02B2' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Behavioral.CallArguments    [Association] ==================== -->
    <Model:Association xmi.id = 'a3A638C3000B7' 
      name = 'CallArguments' annotation = 'Identifies the Argument instances representing the actual argument values passed to an Operation during the particular invocation indicated by the CallAction instance. The ordering of actual argument values is assumed to correspond to the ordering of the Operation&#x0092;s parameters as represented by the ordering of the BehavioralFeatureParameter association.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3A638C300328' 
          name = 'actualArgument' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a33D9073E03B6' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3A638C300329' 
          name = 'callAction' annotation = '' 
          isNavigable = 'true' aggregation = 'composite' isChangeable = 'true' 
          type = 'a3A638B7E0318' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Behavioral.EventParameter    [Association] ==================== -->
    <Model:Association xmi.id = 'a3337AF9B02A8' 
      name = 'EventParameter' annotation = 'The EventParameter association identifies the set of Parameter instances owned by an Event instance.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3337AF9D028A' 
          name = 'event' annotation = '' 
          isNavigable = 'true' aggregation = 'composite' isChangeable = 'true' 
          type = 'a3288E51203DE' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3337AF9D028B' 
          name = 'parameter' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a327BBB9F02B2' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Behavioral.CalledOperation    [Association] ==================== -->
    <Model:Association xmi.id = 'a3A638C3501D0' 
      name = 'CalledOperation' annotation = 'The CalledOperation association identifies the CallAction instance representing a particular invocation of an Operation.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3A638C3503C4' 
          name = 'callAction' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3A638B7E0318' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3A638C3503D4' 
          name = 'operation' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a327BB68C0398' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Behavioral.OperationMethod    [Association] ==================== -->
    <Model:Association xmi.id = 'a32B6D9B302FD' 
      name = 'OperationMethod' annotation = 'The OperationMethod association links an Operation with the Method instance(s) that realize it. The various Method instances represent alternative implementations (usually in different programming languages or environments) of the Operation.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a32B6D9BE00C8' 
          name = 'specification' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a327BB68C0398' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a32B6D9BE00C9' 
          name = 'method' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a327BB67E0028' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Behavioral.ParameterType    [Association] ==================== -->
    <Model:Association xmi.id = 'a335BC7D400A0' 
      name = 'ParameterType' annotation = 'The ParameterType association links a Parameter instance with the Classifier that defines the parameter&#x0092;s type.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a335BC7D50398' 
          name = 'parameter' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a327BBB9F02B2' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a335BC7D503D4' 
          name = 'type' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a32989FB2023D' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
  </Model:Namespace.contents>
</Model:Package>
<!-- ==================== Relationships    [Package] ==================== -->
<Model:Package xmi.id = 'a3A63421F0357' 
  name = 'Relationships' 
  isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
  <Model:ModelElement.annotation>The Relationships metamodel depends on the following package:

    org.omg::CWM::ObjectModel::Core

The Relationships metamodel collects together classes and associations that describe  the relationships between object within a CWM information store. The Relationships metamodel describes to types of relationships: association and generalization.

Association relationships record linkages between model elements. These linkages may represent simple linkages between model elements or aggregation ("is part of") relationships between model elements; aggregation relationships come in two forms -- shared and composite. Associations have two or more named ends that link them to instances of the classes connected by the association.

Generalization relationships record arrangements of model elements into type hierarchies in a parent/child (or "is type of") fashion. Child types are said to "specialize", "subclass" or "subtype" their parental  types, represent a subset of parental instances that fulfill the definition of the child type, and inherit the structural features
(Attributes, AssociationEnd) and behavioral features (Operations, Methods) of their parents. Parental types are said to "generalize" their child types or to be "superclasses" or "supertypes" of their children.

CWM generalization hierarchies support multiple inheritance; that is, child types may have more than one parental type and inherit the union of the features of all their parental types. Although called "hierarchies", multiple inheritance actually represents a directed acyclic graph of parental and child types.

OCL Representation of Relationships Constraints

Operations

The operation allConnections results in the set of all AssociationEnds of the Association.
   allConnections : Set(AssociationEnd);
   allConnections = self.feature.oclIsKindOf(AssociationEnd)

Constraints

[C-5-1] An Association must have at least 2 AssociationEnds.
context Association inv:
self.allConnections-&gt;size &gt; 1

[C-5-2] The AssociationEnds must have a unique name within the association.
context Association inv:
self.allConnections-&gt;forAll( r1, r2 | r1.name = r2.name implies r1 = r2)

[C-5-3] At most one AssociationEnd may be an aggregation or composition.
context Association inv:
self.allConnections-&gt;select(aggregation &lt;&gt; #ak_none)-&gt;size &lt;= 1

[C-5-4] If an Association has three or more AssociationEnds, then no AssociationEnd may be an aggregation or composition.
context Association inv:
self.allConnections-&gt;size &gt;=3 implies
self.allConnections-&gt;forall(aggregation = #ak_none)

[C-5-5] The connected Classifiers of the AssociationEnds should be included in the Namespace of the Association, or be Classifiers with public visibility in other Namespaces to which the Association has access.
context Association inv:
self.allConnections-&gt;forAll(r | self.namespace.allContents-&gt;includes (r.type) ) or
self.allConnections-&gt;forAll(r | self.namespace.allContents-&gt;excludes (r.type))
   implies
self.namespace.clientDependency-&gt;exists (d |
   d.supplier.oclAsType(Namespace).ownedElement-&gt;select (e |
      e.elementOwnership.visibility = #ak_public)-&gt;includes (r.type) or
   d.supplier.oclAsType(Classifier).allParents.
      oclAsType(Namespace).ownedElement-&gt;select (e |
         e.elementOwnership.visibility = #ak_public)-&gt;includes (r.type) or
         d.supplier.oclAsType(Package).allImportedElements-&gt;select (e |
            e.elementImport.visibility = #ak_public) -&gt;includes (r.type) ) )

[C-5-6] An AssociationEnd must have an owning Association.
context AssociationEnd inv:
self.owner.oclIsKindOf(Association)

[C-5-7] The Classifier of an AssociationEnd cannot be an Interface or a DataType if the association is navigable away from that end.
context AssociationEnd inv:
(self.type.oclIsKindOf (Interface) or
self.type.oclIsKindOf (DataType)) implies
self.owner-&gt;select (ae | ae &lt;self)-&gt;forAll(ae | ae.isNavigable = #false)

[C-5-8] An instance may not belong by composition to more than one composite Instance.
context AssociationEnd inv:
self.aggregation = #ak_composite implies self.multiplicity.max &lt;= 1

[C-5-9] An AssociationEnd with composite or shared aggregation semantics must be owned by an Association.
context AssociationEnd inv:
self.aggregation = #ak_composite or self.aggregation = #ak_shared implies
self.owner.oclIsKindOf(Association)
</Model:ModelElement.annotation>
  <Model:Namespace.contents>
    <!-- ==================== Relationships.org.omg.mof.idl_prefix=org.omg.cwm.objectmodel    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.858' 
      name = 'org.omg.mof.idl_prefix=org.omg.cwm.objectmodel' annotation = '' 
      tagId = 'org.omg.mof.idl_prefix' 
      elements = 'a3A63421F0357' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.objectmodel</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Relationships.org.omg.xmi.namespace=CWM    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.859' 
      name = 'org.omg.xmi.namespace=CWM' annotation = '' 
      tagId = 'org.omg.xmi.namespace' 
      elements = 'a3A63421F0357' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>CWM</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Relationships.org.omg.mof.idl_substitute_name=RelationshipsModule    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.860' 
      name = 'org.omg.mof.idl_substitute_name=RelationshipsModule' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a3A63421F0357' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>RelationshipsModule</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Relationships.com.urep.jcr.java_prefix=org.omg.java.cwm.objectmodel    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.861' 
      name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.objectmodel' annotation = '' 
      tagId = 'com.urep.jcr.java_prefix' 
      elements = 'a3A63421F0357' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.objectmodel</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <Model:Import xmi.id = 'G.862' 
      name = 'Core' annotation = '' 
      visibility = 'public_vis' isClustered = 'true' 
      importedNamespace = 'a3A6600C5031F' />
    <!-- ==================== Relationships.Association    [Class] ==================== -->
    <Model:Class xmi.id = 'a3A54CBFF0090' 
      name = 'Association' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a3298A02900FE' >
      <Model:ModelElement.annotation>An association defines a semantic relationship between classifiers. Associations have two or more named ends. Associations with two or more ends are called "n-ary" whereas associations with exactly two ends are called "binary". Each end, depending
upon its multiplicity, connects to zero or more instances of some classifier.

In the metamodel, an Association is a declaration of a semantic relationship between Classifiers, such as Classes. Associations must have two, and may have more, association ends. Each end is connected to a Classifier; the same Classifier may be 
connected to more than one association end in the same association. (Refer to the ObjectModel&#x0092;s Instance package, below, for a description of how Associations are instantiated.)

Because Associations are classifiers, they own and order their association ends (which are Attributes) via the ClassifierFeature association. In addition, because Associations are Classes, they can also own more traditional StructuralFeatures such as Attributes. Consequently, they may act in a manner similar to "association classes" described by
some other object models.

An association may represent an aggregation (i.e., a whole/part relationship). In this case, the association end attached to the whole element is designated, and the other association end represents the parts of the aggregation.

Associations can be of three different kinds: (1) ordinary association, (2) composite aggregate, and (3) shareable aggregate. Since the aggregate construct can have several different meanings depending on the application area, CWM gives a more precise meaning to two of these constructs (i.e., association and composite aggregate) and leaves the shareable aggregate more loosely defined in between. Only binary Associations can have composite or sharable aggregation semantics.

Composite aggregation is a strong form of aggregation which requires that a part instance be included in at most one composite at a time and that the composite object has sole responsibility for the disposition of its parts. This means that the composite object is responsible for the creation and destruction of the parts. In implementation terms, it is responsible for their memory allocation. If a composite object is destroyed, it must destroy all of its parts. It may remove a part and give it to another composite object, which then assumes responsibility for it. If the multiplicity from a part to composite is zero-to-one, the composite may remove the part and the part may assume responsibility for itself, otherwise it may not live apart from a  composite.

A consequence of these rules is that a composite aggregation implies propagation semantics (i.e., some of the dynamic semantics of the whole is propagated to its parts). For example, if the whole is copied or destroyed, then so are the parts as well (because a part may belong to at most one composite).

A classifier on the composite end of an association may have parts that are classifiers and associations. At the instance level, an instance of a part element is considered "part of" the instance of a composite element. If an association is part of a composite and it connects two classes that are also part of the same composite, then an instance of the association will connect objects that are part of the same composite object of which the instance is part.

A shareable aggregation denotes weak ownership (i.e., the part may be included in several aggregates) and its owner may also change over time. However, the semantics of a shareable aggregation does not imply deletion of the parts when an aggregate
referencing it is deleted. Both kinds of aggregations define a transitive, antisymmetric relationship (i.e., the instances form a directed, non-cyclic graph). Composition instances form a strict tree (or rather a forest).</Model:ModelElement.annotation>
    </Model:Class>
    <!-- ==================== Relationships.AssociationEnd    [Class] ==================== -->
    <Model:Class xmi.id = 'a3A6F584F03A5' 
      name = 'AssociationEnd' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a3298F1A403BF' >
      <Model:ModelElement.annotation>An association end is an endpoint of an association, which connects the association to a classifier. Each association end is part of one association. The association ends of each association are ordered.

In the metamodel, an AssociationEnd is part of an Association and specifies the connection of an Association to some other Classifier. Because AssociationEnds are a kind of StructuralFeature, they are owned and ordered by Association instances via the ClassifierFeature association. The StructuralFeatureType association is used to identify the Classifier to which the AssociationEnd is attached. Each AssociationEnd has a name and defines a set of properties of the connection.

The multiplicity property of an association end specifies how many instances of the classifier at a given end (the one bearing the multiplicity value) may be associated with a single instance of the classifier at the other end. The association end also states whether or not the connection may be traversed towards the instance playing that role in the connection (the isNavigable attribute), that is, if the instance is directly reachable via the association.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Relationships.AssociationEnd.aggregation    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3A6F59870169' 
          name = 'aggregation' annotation = 'When placed on one end (the "target" end), specifies whether the class on the target end is an aggregation with respect to the class on the other end (the "source" end). Only one end of an association can be an aggregation.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6F5903A2' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Relationships.AssociationEnd.isNavigable    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3A6F599D0070' 
          name = 'isNavigable' annotation = 'When placed on a target end, specifies whether traversal from a source instance to its associated target instances is possible. A value of true means that the association can be navigated by the source class and the target rolename can be used in navigation expressions. Specification of navigability for each direction is defined independently.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6F650276' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Relationships.Generalization    [Class] ==================== -->
    <Model:Class xmi.id = 'a3A54BFAC011D' 
      name = 'Generalization' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C7301CC' >
      <Model:ModelElement.annotation>A generalization is a taxonomic relationship between a more general element and a more specific element. The more specific element is fully consistent with the more general element (it has all of its properties, members, and relationships) and may contain additional information.

In the metamodel, a Generalization is a directed inheritance relationship, uniting a Classifier with a more general Classifier in a hierarchy. Generalization is a subtyping relationship; that is, an instance of the more general ("parent") Classifier may be substituted by an instance of the more specific ("child") Classifier.

To understand inheritance fully, it is necessary to understand the concept of a full descriptor and a segment descriptor. A full descriptor is the full description needed to describe an instance of a metamodel object. It contains a description of all of the
attributes, associations, and operations that the object contains.

In a pre-object-oriented language, the full descriptor of a data structure was declared directly in its entirety. In an object-oriented language, the description of an object is built out of incremental segments that are combined using inheritance to produce a full descriptor for an object. The segments are the modeling elements that are actually declared in a model. Each classifier contains a list of features and other relationships that it adds to what it inherits from its ancestors. The mechanism of inheritance defines how full descriptors are produced from a set of segments connected by  generalization.The full descriptors are implicit, but they define the structure of actual instances. Features of a classifier that have private visibility are not visible to descendants of the classifier.

If a classifier has no parent, then its full descriptor is the same as its segment descriptor. If a classifier has one or more parents, then its full descriptor contains the union of the features from its own segment descriptor and the segment descriptors of all of its ancestors. No attribute, operation, or association end with the same signature may be declared in more than one of the segments (in other words, they may not be redefined). A method may be declared in more than one segment. A method declared in any segment supersedes and replaces a method with the same signature declared in any ancestor. If two or more methods nevertheless remain, then they conflict and the model is ill-formed. The constraints on the full descriptor are the union of the constraints on the segment itself and all of its ancestors. If any of them are inconsistent, then the model is ill-formed.

In any full descriptor for a classifier, each method must have a corresponding operation. In a concrete classifier, each operation in its full descriptor must have a corresponding method in the full descriptor.
</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Relationships.Generalization.child    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3A54C9B30023' 
          name = 'child' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a32989FB2023D' 
          referencedEnd = 'a3A6CB0FF015C' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Relationships.Generalization.parent    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3A54C9B60284' 
          name = 'parent' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a32989FB2023D' 
          referencedEnd = 'a3A6CB10A01BC' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Relationships.AggregationKind    [DataType] ==================== -->
    <Model:DataType xmi.id = 'a33DD6F5903A2' 
      name = 'AggregationKind' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
      <Model:ModelElement.annotation>An enumeration that denotes what kind of aggregation an Association defines. When placed on a target end, specifies the relationship of the target end to the source end. 

The default value is ak_none.</Model:ModelElement.annotation>
      <Model:DataType.typeCode>
        <XMI.CorbaTypeCode>
          <XMI.CorbaTcEnum xmi.tcName = 'AggregationKind'>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'ak_none'/>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'ak_aggregate'/>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'ak_composite'/>
          </XMI.CorbaTcEnum>
        </XMI.CorbaTypeCode>
      </Model:DataType.typeCode>
    </Model:DataType>
    <!-- ==================== Relationships.org.omg.xmi.enumerationUnprefix=ak_    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.863' 
      name = 'org.omg.xmi.enumerationUnprefix=ak_' annotation = '' 
      tagId = 'org.omg.xmi.enumerationUnprefix' 
      elements = 'a33DD6F5903A2' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>ak_</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Relationships.ChildElement    [Association] ==================== -->
    <Model:Association xmi.id = 'a3A6CB0FE016E' 
      name = 'ChildElement' annotation = 'The ChildElement association links Classifiers with the Generalization instances that describe where they participate as children in the inheritance hierarchy.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3A6CB0FF015C' 
          name = 'child' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a32989FB2023D' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3A6CB0FF01A2' 
          name = 'generalization' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3A54BFAC011D' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Relationships.ParentElement    [Association] ==================== -->
    <Model:Association xmi.id = 'a3A6CB10901EC' 
      name = 'ParentElement' annotation = 'The ParentElement association links Classifiers with the Generalization instances that describe where the Classifiers participate as parents in the inheritance hierarchy.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3A6CB10A01BC' 
          name = 'parent' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a32989FB2023D' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3A6CB10A0202' 
          name = 'specialization' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3A54BFAC011D' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
  </Model:Namespace.contents>
</Model:Package>
<!-- ==================== Instance    [Package] ==================== -->
<Model:Package xmi.id = 'a3A6342930318' 
  name = 'Instance' 
  isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
  <Model:ModelElement.annotation>The Instance metamodel depends on the following package:

    org.omg::CWM::ObjectModel::Core

In addition to the metadata normally interchanged with CWM, it is sometimes useful to interchange specific data instances as well. The ObjectModel&#x0092;s Instance metamodel allows the inclusion of data instances with the metadata.

OCL Representation of Instance Constraints

Constraints

[C-6-1] A DataValue originates from a Classifier that is a DataType.
context DataValue inv:
self.classifier.oclIsKindOf(DataType)

[C-6-2] A DataValue has no Slots.
context DataValue inv:
self.valueSlot-&gt;isEmpty

[C-6-3] An Object may only own Objects and DataValues.
context Object inv:
self.contents-&gt;forAll(c | c.oclIsKindOf(Object) or c.oclIsKindOf(DataValue))

[C-6-4] If an Object represents an association, at least two of its ends must be not be empty.
context Object inv:
self.classifier.oclIsKindOf(Association) implies
self.slot.feature-&gt;iterate( ae ; cnt : Integer = 0 |
if ae.oclIsKindOf(AssociationEnd) and ae.value.notEmpty then
   cnt + 1
else
   cnt
end if ) &gt; 1

[C-6-5] If the StructuralFeature describing a Slot is an AssociationEnd, the Classifier associated with the Object owning the Slot must be an Association.
context Slot inv:
self.feature.oclIsKindOf(AssociationEnd) implies
self.value.classifier.oclIsKindOf(Association)
</Model:ModelElement.annotation>
  <Model:Namespace.contents>
    <!-- ==================== Instance.org.omg.mof.idl_prefix=org.omg.cwm.objectmodel    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.864' 
      name = 'org.omg.mof.idl_prefix=org.omg.cwm.objectmodel' annotation = '' 
      tagId = 'org.omg.mof.idl_prefix' 
      elements = 'a3A6342930318' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.objectmodel</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Instance.org.omg.xmi.namespace=CWM    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.865' 
      name = 'org.omg.xmi.namespace=CWM' annotation = '' 
      tagId = 'org.omg.xmi.namespace' 
      elements = 'a3A6342930318' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>CWM</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Instance.org.omg.mof.idl_substitute_name=InstanceModule    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.866' 
      name = 'org.omg.mof.idl_substitute_name=InstanceModule' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a3A6342930318' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>InstanceModule</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Instance.com.urep.jcr.java_prefix=org.omg.java.cwm.objectmodel    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.867' 
      name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.objectmodel' annotation = '' 
      tagId = 'com.urep.jcr.java_prefix' 
      elements = 'a3A6342930318' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.objectmodel</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <Model:Import xmi.id = 'G.868' 
      name = 'Core' annotation = '' 
      visibility = 'public_vis' isClustered = 'true' 
      importedNamespace = 'a3A6600C5031F' />
    <!-- ==================== Instance.DataSlot    [Class] ==================== -->
    <Model:Class xmi.id = 'a3BCB15050021' 
      name = 'DataSlot' annotation = 'A Slot which is used to hold a data value where there is no need to manage the value as an element in its own right (in which case a DataValue would be used) - for example it is a one-off string value or a number. The dataValue (and dataType where set) must be consistent with the type of the DataSlot&apos;s feature (Attribute) and must obey any constraints on the full descriptor of the Attribute&apos;s DataType (including both explicit constraints and built-in constraints such as multiplicity).' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a3A244A10030F' >
      <Model:Namespace.contents>
        <!-- ==================== Instance.DataSlot.dataValue    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3BCB1554010B' 
          name = 'dataValue' annotation = 'The value for the slot expressed as a string.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Instance.DataSlot.dataType    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3BCB16BC0234' 
          name = 'dataType' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3298A036025B' 
          referencedEnd = 'a3BCB1E5A00BD' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Instance.DataValue    [Class] ==================== -->
    <Model:Class xmi.id = 'a33BC9AFB02E4' 
      name = 'DataValue' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327BC77C038E' >
      <Model:ModelElement.annotation>A data value is an instance with no identity. In the metamodel, DataValue is a child of Instance that cannot change its state, i.e. all operations that are applicable to it are pure functions or queries that do not cause any side effects. DataValues are typically used
as attribute values.

Since it is not possible to differentiate between two data values that appear to be the same, it becomes more of a philosophical issue whether there are several data values representing the same value or just one for each value. In addition, a data value cannot change its data type and it does not have contained instances.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Instance.DataValue.value    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3A5502A600DE' 
          name = 'value' annotation = 'A string representation of the value.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Instance.Extent    [Class] ==================== -->
    <Model:Class xmi.id = 'a387E624E0365' 
      name = 'Extent' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5D19033E' >
      <Model:ModelElement.annotation>Each instance of Extent owns a collection of instances and is used to link such collections to their structural and behavioral definitions in CWM Resource packages. Because Extent is a subclass of package, it owns member instances via the
ElementOwnership associaton.</Model:ModelElement.annotation>
    </Model:Class>
    <!-- ==================== Instance.Instance    [Class] ==================== -->
    <Model:Class xmi.id = 'a327BC77C038E' 
      name = 'Instance' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'true' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C7301CC' >
      <Model:ModelElement.annotation>The instance construct defines an entity to which a set of operations can be applied and which has a state that stores the effects of the operations. In the metamodel Instance is connected to a Classifier that declares its structure and behavior. It has a set of attribute values matching the definition of its Classifier. The set of attribute values implements the current state of the Instance. Because Instance is an abstract class, all Instances are either Object or DataValue instances.

The data content of an Instance comprises one value for each attribute in its full descriptor (and nothing more). The value must be consistent with the type of the attribute. An instance must obey any constraints on the full descriptor of the Classifier
of which it is an instance (including both explicit constraints and built-in constraints such as multiplicity).
</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Instance.Instance.classifier    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a396A59810290' 
          name = 'classifier' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a32989FB2023D' 
          referencedEnd = 'a33CAD7E900AB' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Instance.Object    [Class] ==================== -->
    <Model:Class xmi.id = 'a33BC99D60302' 
      name = 'Object' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327BC77C038E' >
      <Model:ModelElement.annotation>An object is an instance that originates from a class.

In the metamodel, Object is a subclass of Instance originating from a Class. The Class may be modified dynamically, which means that the set of features of the Object may change during its life-time.

An object is an instance that originates from a class; it is structured and behaves according to its class. All objects originating from the same class are structured in the same way, although each of them has its own set of attribute slots. Each attribute slot references an instance, usually a data value or possibly, another object. The number of attribute slots with the same name fulfills the multiplicity of the corresponding attribute in the class. The set may be modified according to the specification in the corresponding attribute, e.g. each referenced instance must originate from (a specialization of) the type of the attribute, and attribute slots may be added or removed according to the changeable property of the attribute.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Instance.Object.slot    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3A244A6600EC' 
          name = 'slot' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3A244A10030F' 
          referencedEnd = 'a3A244ABF009E' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Instance.org.omg.mof.idl_substitute_name=UmlObject    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.869' 
      name = 'org.omg.mof.idl_substitute_name=UmlObject' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a33BC99D60302' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>UmlObject</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Instance.Slot    [Class] ==================== -->
    <Model:Class xmi.id = 'a3A244A10030F' 
      name = 'Slot' annotation = 'A slot is a named location in an Object instance that holds the current value of the StructuralFeature associated with the Slot instance. Normally, the StructuralFeature associated with the slot will be either an Attribute instance or an AssociationEnd instance. Slots are owned by Objects; DataValues do not have slots.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C7301CC' >
      <Model:Namespace.contents>
        <!-- ==================== Instance.Slot.object    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3A244A5B0234' 
          name = 'object' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a33BC99D60302' 
          referencedEnd = 'a3A244ABF009F' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Instance.Slot.value    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3A244A59033E' 
          name = 'value' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a327BC77C038E' 
          referencedEnd = 'a3A244AC80040' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Instance.Slot.feature    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3A6F57E9002D' 
          name = 'feature' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3298F1A403BF' 
          referencedEnd = 'a3A6F568E01FB' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Instance.org.omg.mof.idl_substitute_name=umlObject    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.870' 
      name = 'org.omg.mof.idl_substitute_name=umlObject' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a3A244A5B0234 a3A244ABF009F' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>umlObject</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Instance.SlotValue    [Association] ==================== -->
    <Model:Association xmi.id = 'a3A244AC70205' 
      name = 'SlotValue' annotation = 'The SlotValue association connects slot instances with the DataValue or Object instance that contains the current value held by the slot.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3A244AC80030' 
          name = 'valueSlot' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3A244A10030F' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3A244AC80040' 
          name = 'value' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a327BC77C038E' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Instance.org.omg.mof.idl_substitute_name=cwmlValue    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.871' 
      name = 'org.omg.mof.idl_substitute_name=cwmlValue' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a3A244AC80040' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>cwmlValue</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Instance.InstanceClassifier    [Association] ==================== -->
    <Model:Association xmi.id = 'a33CAD7E7008C' 
      name = 'InstanceClassifier' annotation = 'The InstanceClassifier association links Instances with Classifiers that describe them.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a33CAD7E900AA' 
          name = 'instance' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a327BC77C038E' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a33CAD7E900AB' 
          name = 'classifier' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a32989FB2023D' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Instance.ObjectSlot    [Association] ==================== -->
    <Model:Association xmi.id = 'a3A244ABE0169' 
      name = 'ObjectSlot' annotation = 'The ObjectSlot association connects Slot instances with their owning Object instances.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3A244ABF009E' 
          name = 'slot' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3A244A10030F' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3A244ABF009F' 
          name = 'object' annotation = '' 
          isNavigable = 'true' aggregation = 'composite' isChangeable = 'true' 
          type = 'a33BC99D60302' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Instance.FeatureSlot    [Association] ==================== -->
    <Model:Association xmi.id = 'a3A6F568D0023' 
      name = 'FeatureSlot' annotation = 'The FeatureSlot association connects Slot instances with the StructuralFeature instance (usually either an Attribute or AssociationEnd instance) describing the structure of the value held by the Slot.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3A6F568E01FB' 
          name = 'feature' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3298F1A403BF' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3A6F568E0223' 
          name = 'slot' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3A244A10030F' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Instance.DataSlotType    [Association] ==================== -->
    <Model:Association xmi.id = 'a3BCB1E590030' 
      name = 'DataSlotType' annotation = 'The DataSlotType association connects DataSlot instances with the Core::DataType instance that identifies the type of information stored in the DataSlot::dataValue attribute.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3BCB1E5A00BD' 
          name = 'dataType' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3298A036025B' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3BCB1E5A00CD' 
          name = 'dataSlot' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3BCB15050021' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
  </Model:Namespace.contents>
</Model:Package>
<!-- ==================== BusinessInformation    [Package] ==================== -->
<Model:Package xmi.id = 'a38207A770114' 
  name = 'BusinessInformation' 
  isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
  <Model:ModelElement.annotation>The Business Information package depends on the following package:

    org.omg::CWM::ObjectModel::Core

The Business Information Metamodel provides general purpose services available to all CWM packages for defining business-oriented information about model elements. The business-oriented services described here are designed to support the needs of data warehousing and business intelligence systems; they are not intended as a complete representation of general purpose business intelligence metamodel.

Business Information Metamodel services support the notions of responsible parties and information about how to contact them, identification of off-line documentation and support for general-purpose descriptive information. Three CWM classes "anchor" these services: ResponsibleParty, Document and Description, respectively.

To aid in representing the diversity of organizational structures and documentation relationships that may be encountered in a business intelligence system, the metamodel provides robust relationships between the anchor classes and every model element in the CWM metamodel. The necessary robustness is achieved in several ways.

First, every CWM model element may have zero or more instances of each anchor class associated with it. This means, for example, that a single Description instance can be used to describe many different model elements. Conversely, a single model element may be described by many different Description instances. Likewise, Document and ResponsibleParty instances can be associated in completely ad hoc ways with any model element. Extending this idea means, for example, that Description instances could be used to further describe ResponsibleParty and Document instance, if needed.

Second, because they are Namespaces, the anchor classes can be organized into hierarchies using the ElementOwnership association. For instance, an organizational structure can be represented by a hierarchy of ResponsibleParty instances. Also, the internal structure of a document (i.e., its chapters, sections, subsections, etc.) might be represented by a hierarchy of Document instances.

Finally, instances of the three anchor classes can be associated with any model element (via their individual associations to ModelElement) and referenced by multiple instances of any of the three anchor classes. Because of the strong containment of the ElementOwnership association in the ObjectModel, anchor class instances can only participate in one hierarchy, but there are no restrictions preventing anchor class instances embedded in a hierarchy from referencing, or being referenced by, other model elements (even other members of the same hierarchy).

To illustrate some of the ways that the metamodel can be used, the following figure shows a simple document hierarchy with responsibility assignments and descriptive comments (boxes represent instances of metamodel classes and labelled lines represent metamodel associations connecting instances). In the example, the product plan document for the Widget product is composed of three subplans: a marketing plan, an engineering plan, and a resource plan. The relationships between the subplans documents is shown as a hierarchy with the product plan owning the three subordinate plans via the ElementOwnership association. Each part of the plan is assigned to a reponsible party using the ModelElementResponsibility association. Finally, Description instances are used to record roles for the responsible parties.

OCL Representation of BusinessInformation Constraints

[C-3-1] A Description may not describe itself.
context Description inv:
self.modelElement-&gt;forAll(p | p &lt;&gt; self)

[C-3-2] A Document may not describe itself.
context Document inv:
self.modelElement-&gt;forAll(p | p &lt;&gt; self)

[C-3-3] A ResponsibleParty may not describe itself.
context ResponsibleParty inv:
self.modelElement-&gt;forAll(p | p &lt;&gt; self)</Model:ModelElement.annotation>
  <Model:Namespace.contents>
    <!-- ==================== BusinessInformation.org.omg.xmi.namespace=CWM    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.873' 
      name = 'org.omg.xmi.namespace=CWM' annotation = '' 
      tagId = 'org.omg.xmi.namespace' 
      elements = 'a38207A770114' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>CWM</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== BusinessInformation.org.omg.mof.idl_prefix=org.omg.cwm.foundation    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.874' 
      name = 'org.omg.mof.idl_prefix=org.omg.cwm.foundation' annotation = '' 
      tagId = 'org.omg.mof.idl_prefix' 
      elements = 'a38207A770114' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.foundation</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== BusinessInformation.org.omg.mof.idl_substitute_name=BusinessInformationModule    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.875' 
      name = 'org.omg.mof.idl_substitute_name=BusinessInformationModule' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a38207A770114' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>BusinessInformationModule</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== BusinessInformation.com.urep.jcr.java_prefix=org.omg.java.cwm.foundation    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.876' 
      name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.foundation' annotation = '' 
      tagId = 'com.urep.jcr.java_prefix' 
      elements = 'a38207A770114' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.foundation</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <Model:Import xmi.id = 'G.877' 
      name = 'Core' annotation = '' 
      visibility = 'public_vis' isClustered = 'true' 
      importedNamespace = 'a3A6600C5031F' />
    <!-- ==================== BusinessInformation.ResponsibleParty    [Class] ==================== -->
    <Model:Class xmi.id = 'a364CD88902CE' 
      name = 'ResponsibleParty' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a32B69F3A0118' >
      <Model:ModelElement.annotation>The ResponsibleParty class allows representation of entities within an information system that are in some way interested in receiving information about, or are otherwise responsible for, particular ModelElements. Each ResponsibleParty may own multiple sets of contact information, and a single ResponsibleParty may be associated with many ModelElements.

ResponsibleParty instances may represent any entity appropriate to the system being modeled and need not be limited to people. For example, a ResponsibleParty instance might represent an individual such as "George Washington", a role (the "President"), or an organization ("Congress"), depending upon the needs of the system being modeled. Similarly, the precise semantics of the responsibility attribute are open to intrepretation and may be adapted on a system-by-system basis.

Because ResponsibleParty instances are Namespaces, they can be organized into hierarchies of ResponsibleParty instances, capturing organizational structures or similar relationships.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== BusinessInformation.ResponsibleParty.responsibility    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3731D43200BE' 
          name = 'responsibility' annotation = 'Textual identification or description of the ResponsibleParty in a usage-dependent format.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== BusinessInformation.ResponsibleParty.contact    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a386004D501E1' 
          name = 'contact' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3731D0010334' 
          referencedEnd = 'a3820922F0357' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== BusinessInformation.ResponsibleParty.modelElement    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a386004BE0126' 
          name = 'modelElement' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a327A5C7301CC' 
          referencedEnd = 'a38209199029B' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== BusinessInformation.Telephone    [Class] ==================== -->
    <Model:Class xmi.id = 'a3731CE29023A' 
      name = 'Telephone' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C7301CC' >
      <Model:ModelElement.annotation>Instances of the Telephone class represent telephone contact information.

Because telephones are first class objects within the CWM, they can be used for purposes beyond those associated with the CWM Foundation&#x0092;s Business Information concepts.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== BusinessInformation.Telephone.phoneNumber    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3731CE580028' 
          name = 'phoneNumber' annotation = 'A textual representation of the telephone&#x0092;s number.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== BusinessInformation.Telephone.phoneType    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3731CE6401FE' 
          name = 'phoneType' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:ModelElement.annotation>A textual representation of the telephone&#x0092;s type, such as "multi-line", or its usage,
such as "home", "work", "fax", or "mobile".</Model:ModelElement.annotation>
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== BusinessInformation.Telephone.contact    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a386005AB0349' 
          name = 'contact' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3731D0010334' 
          referencedEnd = 'a38208FCD0358' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== BusinessInformation.Email    [Class] ==================== -->
    <Model:Class xmi.id = 'a3731CEAE010E' 
      name = 'Email' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C7301CC' >
      <Model:ModelElement.annotation>An Email instance identifies a single email address. Via a Contact instance, an email address can be associated with one or more ResponsibleParty instances. Email instances might, for example, be used by an automated tool to send an automatically generated email message to a ResponsibleParty instance responsible about some change of state for a particular ModelElement. Multiple Email instances may be associated with a single Contact instance and the ordering of the association between them may be used to represent the sequence in which the Email instances should be contacted.

Because email addresses are first class objects within the CWM, they can be used for purposes beyond those associated with the CWMFoundation&#x0092;s Business Information concepts.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== BusinessInformation.Email.emailAddress    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3731CEC20104' 
          name = 'emailAddress' annotation = 'A textual representation of an email address.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== BusinessInformation.Email.emailType    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3731CECD00FA' 
          name = 'emailType' annotation = 'Contains a textual representation of the type of the email address. Interesting values might include location information such as "home" or "work", or perhaps an indication of the type of email system for which the eMailAddress is formatted, such as "SMTP" or "X.400".' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== BusinessInformation.Email.contact    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3860058903B6' 
          name = 'contact' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3731D0010334' 
          referencedEnd = 'a3820871F01C1' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== BusinessInformation.Location    [Class] ==================== -->
    <Model:Class xmi.id = 'a3731CF0A02C6' 
      name = 'Location' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C7301CC' >
      <Model:ModelElement.annotation>Instances of the Location class represent physical locations. Note that the name of a Location is derived from its superclass, ModelElement.

Because Locations are first class objects within the CWM, they can be used for purposes beyond those associated with the CWM Foundation&#x0092;s Business Information concepts. If additional attributes about Location instances are required, they should be added by creating subtypes of the Location class and placing the additional attributes therein.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== BusinessInformation.Location.locationType    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3731CF360064' 
          name = 'locationType' annotation = 'Descriptive information about the character or identity of the Location instance.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== BusinessInformation.Location.address    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a37AB0EDC02FE' 
          name = 'address' annotation = 'The address of the Location instance. The precise content of this string is usage-defined.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== BusinessInformation.Location.city    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a37AB0F2B0095' 
          name = 'city' annotation = 'The name of the city in which the Location instance is found. The precise content of this string is usage-defined.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== BusinessInformation.Location.postCode    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a37AB0F9F01A0' 
          name = 'postCode' annotation = 'The postal code of the Location instance. The precise content of this string is usage-defined.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== BusinessInformation.Location.area    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a37AB11E201E8' 
          name = 'area' annotation = 'The area in which the Location instance is found. The precise content of this string is usage-defined, but a common usage would be to refer to a geographical subdivision such as a state or province.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== BusinessInformation.Location.country    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a37AB12970094' 
          name = 'country' annotation = 'The name of the country in which the Location instance is found. The precise content of this string is usage-defined.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== BusinessInformation.Location.contact    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a386005A70230' 
          name = 'contact' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3731D0010334' 
          referencedEnd = 'a38208EB002DA' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== BusinessInformation.Contact    [Class] ==================== -->
    <Model:Class xmi.id = 'a3731D0010334' 
      name = 'Contact' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C7301CC' >
      <Model:ModelElement.annotation>Each Contact instance collects together the various types of related contact information. Each Contact instance can be associated with multiple Email, Location and Telephone instances. Conversely, each Email, Location, ResourceLocator and Telephone instance can be associated with many Contact instances. The ordering constraints on the associations between these classes and the Contact class can be used to represent a prioritized sequence in which the various types of contact information  should be used.

A particular ResponsibleParty instance may have multiple instances of Contact associated with it via the ResponsiblePartyContact association. This association is ordered to support representation of the sequence in which Contact instances should be used. For example, a ResponsibleParty instance representing an employee might be associated with Contact instances representing their office, home, and mobile contact information with an indication that the employee should be contacted first at the office, then at home, and finally via their mobile phone.

To maximize flexibility of the metamodel, Contact instances may provide contact information for multiple ResponsibleParty instances.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== BusinessInformation.Contact.email    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3860053F02AD' 
          name = 'email' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3731CEAE010E' 
          referencedEnd = 'a3820871F01C0' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== BusinessInformation.Contact.location    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a386005570397' 
          name = 'location' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3731CF0A02C6' 
          referencedEnd = 'a38208EB002CA' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== BusinessInformation.Contact.responsibleParty    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3860052902DB' 
          name = 'responsibleParty' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a364CD88902CE' 
          referencedEnd = 'a3820922F0358' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== BusinessInformation.Contact.telephone    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3860056C0193' 
          name = 'telephone' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3731CE29023A' 
          referencedEnd = 'a38208FCD0357' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== BusinessInformation.Contact.url    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a386005BB02FB' 
          name = 'url' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3810D01501DC' 
          referencedEnd = 'a38208F420097' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== BusinessInformation.Description    [Class] ==================== -->
    <Model:Class xmi.id = 'a375FF5A2008E' 
      name = 'Description' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a32B69F3A0118' >
      <Model:ModelElement.annotation>Instances of the Description class contain arbitrary textual information relevant to a particular ModelElement. While Description instances may contain any desired textual information, they will typically contain documentation or references to external reference information about the owning ModelElement.

Any ModelElement may have multiple Description instances associated with it. Indeed, a ModelElement instance that is a Description instance may itself have multiple Description instances linked to it. Also, a hierarchies of Description instances can be constructed.

Description instances are meant to hold descriptive textual information that will be stored in the metamodel itself. In contrast, Document instances are meant to describe the location documentary information stored outside the metamodel.
</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== BusinessInformation.Description.body    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a375FF60E0382' 
          name = 'body' annotation = 'Contains a textual description of information pertaining to the owning ModelElement. ' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== BusinessInformation.Description.language    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a37AB50FB01EF' 
          name = 'language' annotation = 'Contains an identification of the language in which the content of the body attribute is specified. If desired, the language specification may be applied to the name attribute derived from ModelElement as well.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6FCF03C0' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== BusinessInformation.Description.type    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3A5CE2580354' 
          name = 'type' annotation = 'Contains a textual description of the type of information the Description represents. Specific contents are usage defined.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== BusinessInformation.Description.modelElement    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a386005E4007A' 
          name = 'modelElement' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a327A5C7301CC' 
          referencedEnd = 'a3820910D03D4' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== BusinessInformation.Document    [Class] ==================== -->
    <Model:Class xmi.id = 'a378B694F014B' 
      name = 'Document' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a32B69F3A0118' >
      <Model:ModelElement.annotation>The Document class represents externally stored descriptive information about some aspect of the modeled system. An instance of Document might be associated with one or more ModelElements. The name of a Document instance is derived from its superclasses.

Although the purposes of the Description and Document types may overlap somewhat, their chief distinction is that Description instances are stored with the CWM metadata whereas Documentation instances are stored externally to the CWM metadata. Although there is an implication here that Documentation instances might represent more voluminous information than Description instances, there is no particular requirement that this be so.

Because Documentation instances are themselves Namespace instances, hierarchical relationships between various externally stored documents can be represented.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== BusinessInformation.Document.reference    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a378B695B033D' 
          name = 'reference' annotation = 'Contains a textual representation of the identification, and perhaps the physical location, of externally maintained documentary information about some aspect of the ModelElement(s) with which the Document instance is associated.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== BusinessInformation.Document.type    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3A5CE272020C' 
          name = 'type' annotation = 'Contains a textual description of the type of information the Document represents. Specific contents are usage defined.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== BusinessInformation.Document.modelElement    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a387E42E4032F' 
          name = 'modelElement' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a327A5C7301CC' 
          referencedEnd = 'a3820908800B7' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== BusinessInformation.ResourceLocator    [Class] ==================== -->
    <Model:Class xmi.id = 'a3810D01501DC' 
      name = 'ResourceLocator' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C7301CC' >
      <Model:ModelElement.annotation>Instances of the ResourceLocator class provide a general means for describing the resources whose location is not defined by a traditional mailing address. For example, a ResourceLocator instance could refer to anything from a location within a building ("Room 317, third file cabinet, 2nd drawer") to a web location ("www.omg.org").

Because they are first class objects in the CWM, ResourceLocator instances may also be used for purposes beyond those associated with the CWM Foundation's Business Information concepts.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== BusinessInformation.ResourceLocator.url    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3810D02F0094' 
          name = 'url' annotation = 'Contains the text of the resource location. For Internet locations, this will be a web URL (Uniform Resource Locator) but there is no requirement that this be so. In fact, the string can contain any text meaningful to its intended use in a particular environment.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== BusinessInformation.ResourceLocator.contact    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a386005B50107' 
          name = 'contact' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3731D0010334' 
          referencedEnd = 'a38208F420098' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== BusinessInformation.ContactEmail    [Association] ==================== -->
    <Model:Association xmi.id = 'a3820871D02AB' 
      name = 'ContactEmail' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:ModelElement.annotation>The ContactEmail association indicates the Email instances relevant used by Contact instances.
</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3820871F01C0' 
          name = 'email' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3731CEAE010E' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3820871F01C1' 
          name = 'contact' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3731D0010334' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== BusinessInformation.ContactLocation    [Association] ==================== -->
    <Model:Association xmi.id = 'a38208EB00059' 
      name = 'ContactLocation' annotation = 'The ContactLocation association relates Contact instances to relevant Location instances.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a38208EB002CA' 
          name = 'location' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3731CF0A02C6' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a38208EB002DA' 
          name = 'contact' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3731D0010334' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== BusinessInformation.ContactResourceLocator    [Association] ==================== -->
    <Model:Association xmi.id = 'a38208F410078' 
      name = 'ContactResourceLocator' annotation = 'The ContactResourceLocator association relates ResourceLocator instances to the Contact instances in which they participate.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a38208F420097' 
          name = 'url' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3810D01501DC' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a38208F420098' 
          name = 'contact' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3731D0010334' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== BusinessInformation.ContactTelephone    [Association] ==================== -->
    <Model:Association xmi.id = 'a38208FCD00A7' 
      name = 'ContactTelephone' annotation = 'The ContactTelephone association relates telephones to the Contact instances that reference them.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a38208FCD0357' 
          name = 'telephone' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3731CE29023A' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a38208FCD0358' 
          name = 'contact' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3731D0010334' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== BusinessInformation.DocumentDescribes    [Association] ==================== -->
    <Model:Association xmi.id = 'a382090860088' 
      name = 'DocumentDescribes' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:ModelElement.annotation>The DocumentDescribes association connects a Document instance with the ModelElement instances to which it pertains.
</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3820908800B7' 
          name = 'modelElement' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a327A5C7301CC' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3820908801D0' 
          name = 'document' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a378B694F014B' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== BusinessInformation.ModelElementDescription    [Association] ==================== -->
    <Model:Association xmi.id = 'a3820910D00B7' 
      name = 'ModelElementDescription' annotation = 'The ModelElementDescription association connects a Description instance with the ModelElement instances to which it applies.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3820910D03D4' 
          name = 'modelElement' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a327A5C7301CC' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3820910E0078' 
          name = 'description' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a375FF5A2008E' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== BusinessInformation.ModelElementResponsibility    [Association] ==================== -->
    <Model:Association xmi.id = 'a382091960172' 
      name = 'ModelElementResponsibility' annotation = 'The ModelElement Responsibility association identifies the ResponsibleParty instances for each ModelElement and allows determination of the ModelElements for which a ResponsibleParty instance is responsible.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a38209199029B' 
          name = 'modelElement' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a327A5C7301CC' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a382091990328' 
          name = 'responsibleParty' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a364CD88902CE' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== BusinessInformation.ResponsiblePartyContact    [Association] ==================== -->
    <Model:Association xmi.id = 'a3820922E0357' 
      name = 'ResponsiblePartyContact' annotation = 'The ResponsiblePartyContact association allows a ResponsibleParty to have multiple sets of contact information. The ordered constraint can be used to determine the sequence in which the sets of contact information should be used.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3820922F0357' 
          name = 'contact' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3731D0010334' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3820922F0358' 
          name = 'responsibleParty' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a364CD88902CE' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
  </Model:Namespace.contents>
</Model:Package>
<!-- ==================== DataTypes    [Package] ==================== -->
<Model:Package xmi.id = 'a38207A4E0308' 
  name = 'DataTypes' 
  isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
  <Model:ModelElement.annotation>The DataTypes package depends on the following packages:

    org.omg::CWM::ObjectModel::Core

The CWM DataTypes metamodel supports definition of metamodel constructs that modelers can use to create the specific data types they need. Although the CWM Foundation itself does not contain specific data type definitions, a number of data type definitions for widely used environments are provided (in the CWM Data Types chapter) as examples of the appropriate usage of CWM Foundation classes for creating
data type definitions.

OCL Representation of DataTypes Constraints

[C-4-1] A TypeAlias instance cannot alias itself.
context TypeAlias inv:
self.type &lt;&gt; self

[C-4-2] A Union can have at most one default UnionMember instance.
context Union inv:
self.allFeatures-&gt;select(isDefault)-&gt;size &lt;= 1
</Model:ModelElement.annotation>
  <Model:Namespace.contents>
    <!-- ==================== DataTypes.org.omg.xmi.namespace=CWM    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.878' 
      name = 'org.omg.xmi.namespace=CWM' annotation = '' 
      tagId = 'org.omg.xmi.namespace' 
      elements = 'a38207A4E0308' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>CWM</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== DataTypes.org.omg.mof.idl_prefix=org.omg.cwm.foundation    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.879' 
      name = 'org.omg.mof.idl_prefix=org.omg.cwm.foundation' annotation = '' 
      tagId = 'org.omg.mof.idl_prefix' 
      elements = 'a38207A4E0308' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.foundation</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== DataTypes.org.omg.mof.idl_substitute_name=DataTypesModule    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.880' 
      name = 'org.omg.mof.idl_substitute_name=DataTypesModule' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a38207A4E0308' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>DataTypesModule</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== DataTypes.com.urep.jcr.java_prefix=org.omg.java.cwm.foundation    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.881' 
      name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.foundation' annotation = '' 
      tagId = 'com.urep.jcr.java_prefix' 
      elements = 'a38207A4E0308' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.foundation</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <Model:Import xmi.id = 'G.882' 
      name = 'Core' annotation = '' 
      visibility = 'public_vis' isClustered = 'true' 
      importedNamespace = 'a3A6600C5031F' />
    <!-- ==================== DataTypes.Enumeration    [Class] ==================== -->
    <Model:Class xmi.id = 'a376ACDB70218' 
      name = 'Enumeration' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a3298A036025B' >
      <Model:ModelElement.annotation>The Enumeration class is intended as a starting point from which enumerated data types can be created. An enumerated data type is a collection of identifiers often used as the permitted states that some other attribute or property of the enumerated type may take.

The isOrdered attribute of an Enumeration instance is used to determine if the ordered constraint on the EnumerationLiterals association is relevant for the enumeration. The particular ordering of EnumerationLiteral instances is obtained from the ordered constraint on the association even if the value attributes of the EnumerationLiteral instances contain non-null values that might be used to determine ordering. This is done to provide more flexible ordering semantics.

An instance of Enumeration is also required to create a range data type. Refer to the EnumerationLiteral class for details.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== DataTypes.Enumeration.isOrdered    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a376ACDDB01BA' 
          name = 'isOrdered' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6F650276' >
          <Model:ModelElement.annotation>If True, the ordered constraint on the EnumerationLiterals association is relevant. Otherwise, the ordering of EnumerationLiteral instances is considered unspecified.
</Model:ModelElement.annotation>
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== DataTypes.Enumeration.literal    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a385FF93E002C' 
          name = 'literal' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a375EF35D035C' 
          referencedEnd = 'a3820BC8B003B' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== DataTypes.EnumerationLiteral    [Class] ==================== -->
    <Model:Class xmi.id = 'a375EF35D035C' 
      name = 'EnumerationLiteral' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C7301CC' >
      <Model:ModelElement.annotation>EnumerationLiteral instances describe the enumeration identifiers, and possibly the
values, associated with an enumerated data type. Enumeration identifiers are contained
in the name attribute derived from the EnumerationLiteral instance&#x0092;s ModelElement superclass.

EnumerationLiteral instances may also be used to define expression-based values such as ranges. To do so, simply state the membership expression in the instance&#x0092;s value. For example, a range literal can be created by setting the value attribute to "m..n", where m represents the lower bound of the range, and n, the upper bound. In this way, ranges and other more complicated expressions can be intermixed with simple
enumeration literals. For example, an enumeration might contain the literals "1", "2", "4..7", and "&gt; 10".

Consequently, a simple range data type can be created with an Enumeration instance that owns a single EnumerationLiteral instance. For example, a data type for positive integers could be created as shown in the following instance diagram. A model attribute of this data type might then be declared as "posInt : PositiveInteger".</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== DataTypes.EnumerationLiteral.value    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a375EF5F602FE' 
          name = 'value' annotation = 'The value associated with an enumeration identifier can be stored here. The attribute is optional because enumeration literals are not required to have a specific, displayable value. This is indicated by either an empty value attribute or a value attribute value whose expression body attribute is a zero-length string.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33CFA00203A2' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== DataTypes.EnumerationLiteral.enumeration    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a385FF99302DB' 
          name = 'enumeration' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a376ACDB70218' 
          referencedEnd = 'a3820BC8B003A' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== DataTypes.org.omg.IDL Substitute Name=umlValue    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.883' 
      name = 'org.omg.IDL Substitute Name=umlValue' annotation = '' 
      tagId = 'org.omg.IDL Substitute Name' 
      elements = 'a375EF5F602FE' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>umlValue</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== DataTypes.QueryExpression    [Class] ==================== -->
    <Model:Class xmi.id = 'a3702A52C0196' 
      name = 'QueryExpression' annotation = 'QueryExpression instances contain query statements in language-dependent form.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a363559050190' />
    <!-- ==================== DataTypes.org.omg.CORBA Declaration=typedef Foundation.DataTypes.ProcedureExpression QueryExpression;    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.884' 
      name = 'org.omg.CORBA Declaration=typedef Foundation.DataTypes.ProcedureExpression QueryExpression;' annotation = '' 
      tagId = 'org.omg.CORBA Declaration' 
      elements = 'a3702A52C0196' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>typedef Foundation.DataTypes.ProcedureExpression QueryExpression;</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== DataTypes.TypeAlias    [Class] ==================== -->
    <Model:Class xmi.id = 'a3731C90A00AA' 
      name = 'TypeAlias' annotation = 'The TypeAlias class is intended to provide a renaming capability for Classifier instances. This class is required to support situations in which creation of an alias for a class effectively creates a new class. For example, CORBA IDL type aliases have different typeCodes than their base types and are therefore treated as distinct types.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a3298A036025B' >
      <Model:Namespace.contents>
        <!-- ==================== DataTypes.TypeAlias.type    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a385FF9610107' 
          name = 'type' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a32989FB2023D' 
          referencedEnd = 'a3820BB3D0357' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== DataTypes.Union    [Class] ==================== -->
    <Model:Class xmi.id = 'a3702894E0157' 
      name = 'Union' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a32989FB2023D' >
      <Model:ModelElement.annotation>The Union class represents programming language unions and similarly structured data types. Because of the diversity of union semantics found across software systems, the Union and UnionMember classes are likely candidates for specialization to better capture union semantics in specific language extension packages.

A discriminated Union has a collection of UnionMembers that determine the sets of contents that the Union may contain. Such Unions have an attribute called the discriminator that identifies the memberCase value of the UnionMember that the Union currently contains. The discriminator is found via the UnionDiscriminator association to StructuralFeature. The discriminator may be embedded within UnionMembers or may be located outside the discriminator. If it is located within UnionMembers, the discriminator should occur in every UnionMember at the same location (often, the first).

Undiscriminated unions (for example, a C language union) are also supported, but have an empty discriminator reference, and the memberCase attribute of the UnionMembers it contains is ignored.

Undiscriminated Unions are often used to represent alternate views of a single physical
storage area. A fine degree of control over this aspect of Unions may be obtained by
creating a class that derives from both UnionMember and FixedOffsetField (in the
CWM Record package) and setting the offset attribute instances of that class
accordingly.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== DataTypes.Union.discriminator    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a385FF90D008A' 
          name = 'discriminator' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3298F1A403BF' 
          referencedEnd = 'a3820BC930088' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== DataTypes.org.omg.mof.idl_substitute_name=CwmUnion    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.885' 
      name = 'org.omg.mof.idl_substitute_name=CwmUnion' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a3702894E0157' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>CwmUnion</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== DataTypes.UnionMember    [Class] ==================== -->
    <Model:Class xmi.id = 'a37028B93006D' 
      name = 'UnionMember' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a3A6F62780143' >
      <Model:ModelElement.annotation>UnionMembers are described as features of a Union and each represents one of the members of a Union. Note, however, that multiple case values can map to a single UnionMember. If isDefault is true, the union member is the default member.

UnionMember instances are allowed to have a memberCase and be the default case. UnionMember instances often represent structured storage areas. A particular UnionMember may be associated with a Classifier that describes its internal structure via the StructuralFeatureType association (defined in the ObjectModel::Core package). For example, the Record::Group class, itself a Classifier, can be used as the type of a UnionMember in a manner completely analogous to how it is used to describe the type of a structured field (see the instance diagrams in the Record metamodel chapter for details).</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== DataTypes.UnionMember.memberCase    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a37028BB501E4' 
          name = 'memberCase' annotation = 'Contains the value of the Union&#x0092;s discriminator for this UnionMember.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33CFA00203A2' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== DataTypes.UnionMember.isDefault    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a37028BF600AB' 
          name = 'isDefault' annotation = 'Indicates if this UnionMember is the default member of the Union (implying that when unstated, the Union&#x0092;s discriminator would assume this instance&#x0092;s memberCase value).' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6F650276' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== DataTypes.ClassifierAlias    [Association] ==================== -->
    <Model:Association xmi.id = 'a3820BB3C01D0' 
      name = 'ClassifierAlias' annotation = 'The ClassifierAlias association connects TypeAlias instances with the Classifier instances which they rename.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3820BB3D0357' 
          name = 'type' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a32989FB2023D' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3820BB3D0395' 
          name = 'alias' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3731C90A00AA' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== DataTypes.EnumerationLiterals    [Association] ==================== -->
    <Model:Association xmi.id = 'a3820BC8A0097' 
      name = 'EnumerationLiterals' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:ModelElement.annotation>The EnumerationLiterals association links enumeration literals to the Enumeration instances that contain them.

If the Enumeration&#x0092;s isOrdered attribute is True, the ordering constraint on the association is relevant. Otherwise, it is ignored.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3820BC8B003A' 
          name = 'enumeration' annotation = '' 
          isNavigable = 'true' aggregation = 'composite' isChangeable = 'true' 
          type = 'a376ACDB70218' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3820BC8B003B' 
          name = 'literal' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a375EF35D035C' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== DataTypes.UnionDiscriminator    [Association] ==================== -->
    <Model:Association xmi.id = 'a3820BC920097' 
      name = 'UnionDiscriminator' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:ModelElement.annotation>The UnionDiscriminator association connects a Union instance with the StructuralFeature instance that can be used to determine which UnionMember instance is currently present in the Union instance. This "discriminating" attribute may be a feature of the UnionMembers themselves or may be a feature of some Classifier that contains the Union instance as one of its Features. In the former case, the
discriminating feature will usually be present at the same offset in each UnionMember instance. If the discriminator reference is empty for a particular Union instance, it is considered to be an "undiscriminated" Union and determination of the current UnionMember residing in the Union is usage-defined.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3820BC930088' 
          name = 'discriminator' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3298F1A403BF' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3820BC9300C6' 
          name = 'discriminatedUnion' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3702894E0157' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
  </Model:Namespace.contents>
</Model:Package>
<!-- ==================== Expressions    [Package] ==================== -->
<Model:Package xmi.id = 'a38207A600078' 
  name = 'Expressions' 
  isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
  <Model:ModelElement.annotation>The Expressions package depends on the following packages:

    org.omg::CWM::ObjectModel::Core

The CWM Expressions metamodel provides basic support for the definition of expression trees within the CWM. The intent of the Expressions metamodel is to provide a place for other CWM packages (such as Transformation) and CWM compliant tools to record shared expressions in a common form that can be used for interchange and lineage tracking.

The expression concept in the CWM Foundation takes a functional view of expression trees, resulting in the ability of relatively few expression types to represent a broad range of expressions. Every function or traditional mathematical operator that appears in an expression hierarchy is represented as a FeatureNode. For example, the arithmetic plus operation &#x0093;a + b&#x0094; can be thought of as the function &#x0093;sum(a, b).&#x0094; The semantics of a particular function or operation are left to specific tool implementations and are not captured by the CWM. 

The hierarchical nature of the CWM&#x0092;s representation of expressions is achieved by the recursive nature of the OperationArgument association. This association allows the sub-hierarchies within an expression to be treated as actual parameters of their parent nodes.

OCL Representation of Expressions Constraints

[C-5-1] A FeatureNode that has parameters other than the"this" parameter represents a Feature that is also an Operation.
context FeatureNode inv:
if self.feature.ownerScope = #instance
then self.argument-&gt;size &gt; 1 implies
   self.feature.oclIsKindOf(Operation)
else self.argument-&gt;size &gt; 0 implies
   self.feature.oclIsKindOf(Operation)
endif

[C-5-2] If the FeatureNode represents an instance-scope feature, the first argument is a "this" or "self" argument; that is, the object invoking the feature. The convention is enforced by checking that the type of the first argument is the same as the type of the feature.
context FeatureNode inv:
self.feature.ownerScope = #instance implies
self.argument-&gt;first.type.allFeatures-&gt;includes(self.feature)

[C-5-3] If the FeatureNode represents a BehavioralFeature, the number of arguments must be equal to the number of the BehavioralFeature&#x0092;s parameters, plus one for the &#x0093;this&#x0094; parameter if the BehavioralFeature is of instance scope.
context FeatureNode inv:
self.feature.oclIsKindOf(BehavioralFeature) implies
(if self.feature.ownerScope = #instance
   then self.argument-&gt;size =
      self.feature.oclAsType(BehavioralFeature).parameters-&gt;size + 1
   else self.argument-&gt;size =
      self.feature.oclAsType(BehavioralFeature).parameters-&gt;size
endif)</Model:ModelElement.annotation>
  <Model:Namespace.contents>
    <!-- ==================== Expressions.org.omg.xmi.namespace=CWM    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.886' 
      name = 'org.omg.xmi.namespace=CWM' annotation = '' 
      tagId = 'org.omg.xmi.namespace' 
      elements = 'a38207A600078' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>CWM</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Expressions.org.omg.mof.idl_prefix=org.omg.cwm.foundation    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.887' 
      name = 'org.omg.mof.idl_prefix=org.omg.cwm.foundation' annotation = '' 
      tagId = 'org.omg.mof.idl_prefix' 
      elements = 'a38207A600078' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.foundation</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Expressions.org.omg.mof.idl_substitute_name=ExpressionsModule    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.888' 
      name = 'org.omg.mof.idl_substitute_name=ExpressionsModule' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a38207A600078' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>ExpressionsModule</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Expressions.com.urep.jcr.java_prefix=org.omg.java.cwm.foundation    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.889' 
      name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.foundation' annotation = '' 
      tagId = 'com.urep.jcr.java_prefix' 
      elements = 'a38207A600078' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.foundation</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <Model:Import xmi.id = 'G.890' 
      name = 'Core' annotation = '' 
      visibility = 'public_vis' isClustered = 'true' 
      importedNamespace = 'a3A6600C5031F' />
    <!-- ==================== Expressions.ExpressionNode    [Class] ==================== -->
    <Model:Class xmi.id = 'a376A84310237' 
      name = 'ExpressionNode' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C330208' >
      <Model:ModelElement.annotation>All node types within an expression are derived from the ExpressionNode type.

An expression is stored as a collection of instances of the subtypes of ExpressionNode arranged in a hierarchical fashion. The ExpressionNode instance at the top (or &#x0093;root&#x0094;) of the hierarchy represents the value of the expression and serves as a starting point for expression evaluation. Refer to the descriptions of the subtypes of ExpressionNode (ElementNode, ConstantNode, and FeatureNode) for additional information about the representation of expressions.

One important purpose for providing storage of expressions as a general feature of the CWM is to promote sharing them between tools and to provide a means for recording lineage relationships between components within expressions. Specific details of the implementation of expression operators are left to the implementing tools.

When ExpressionNode is used as the type of an Attribute, an instance of the Attribute can contain either an expression tree as described here or a textual representation of the expression in body and language values of in an attribute of type Expression (defined ObjectModel). The expression attribute is provided for the latter usage. To obtain CWM&#x0092;s sharing and lineage tracking features for elements within an expression, the expression must be represented as an expression hierarcy.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Expressions.ExpressionNode.expression    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a38A0ECA10399' 
          name = 'expression' annotation = 'Contains a textual representation of the expression relevant for this ExpressionNode instance.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33CFA00203A2' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Expressions.ExpressionNode.featureNode    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a386003C903A7' 
          name = 'featureNode' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a376A84D70341' 
          referencedEnd = 'a3820C1610059' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Expressions.ExpressionNode.type    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3860038F01F1' 
          name = 'type' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a32989FB2023D' 
          referencedEnd = 'a3820BFAC02AB' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Expressions.ConstantNode    [Class] ==================== -->
    <Model:Class xmi.id = 'a376A84C202B4' 
      name = 'ConstantNode' annotation = 'Instances of the ConstantNode class are ExpressionNodes that represent constant values within expressions. Appropriate uses of the ConstantNode class place the values of constants in the value attribute, rather than in the expression::body attribute inherited from ExpressionNode. The latter attribute is intended for a different purpose; see the description of the ExpressionNode class for details.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a376A84310237' >
      <Model:Namespace.contents>
        <!-- ==================== Expressions.ConstantNode.value    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a376A853C01E9' 
          name = 'value' annotation = 'The value of a constant in an expression tree.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a37AB1FF90221' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Expressions.org.omg.IDL Substitute Name=umlValue    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.891' 
      name = 'org.omg.IDL Substitute Name=umlValue' annotation = '' 
      tagId = 'org.omg.IDL Substitute Name' 
      elements = 'a376A853C01E9' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>umlValue</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Expressions.ElementNode    [Class] ==================== -->
    <Model:Class xmi.id = 'a376A84CD0321' 
      name = 'ElementNode' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a376A84310237' >
      <Model:ModelElement.annotation>An ElementNode is a node in an expression that references some ModelElement instance. This subclass of ExpressionNode allows an expression to reference any CWM model element that is not a Feature and cannot, therefore, be represented as a FeatureNode.

Typically, use of this subclass of ExpressionNode implies that a tool attempting to evaluate the expression will be able to determine if the referenced ModelElement instance is also an instance of some interesting subclass of ModelElement that contains a value of interest in the expression.
</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Expressions.ElementNode.modelElement    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3860032D02EB' 
          name = 'modelElement' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a327A5C7301CC' 
          referencedEnd = 'a3820C1EC0069' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Expressions.FeatureNode    [Class] ==================== -->
    <Model:Class xmi.id = 'a376A84D70341' 
      name = 'FeatureNode' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a376A84310237' >
      <Model:ModelElement.annotation>The FeatureNode class represents ExpressionNode instances that are features (i.e., attributes or operations) of some Classifier instance within the CWM.

A FeatureNode with a null OperationArgument association represents either a parameter-less operation or an attribute value obtained from some StructuralFeature instance.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Expressions.FeatureNode.argument    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a386003E6025E' 
          name = 'argument' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a376A84310237' 
          referencedEnd = 'a3820C161005A' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Expressions.FeatureNode.feature    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a386003F80201' 
          name = 'feature' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a32989F9700FE' 
          referencedEnd = 'a3820C03B00B7' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Expressions.ExpressionNodeClassifier    [Association] ==================== -->
    <Model:Association xmi.id = 'a3820BFAA024D' 
      name = 'ExpressionNodeClassifier' annotation = 'The ExpressionNodeClassifier association identifies the type of an ExpressionNode instance.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3820BFAC02AB' 
          name = 'type' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a32989FB2023D' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3820BFAC02E9' 
          name = 'expressionNode' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a376A84310237' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Expressions.NodeFeature    [Association] ==================== -->
    <Model:Association xmi.id = 'a3820C03902E9' 
      name = 'NodeFeature' annotation = 'The NodeFeature association identifies the Feature (usually, an Attribute or Operation subtype) that FeatureNode represents.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3820C03B00B7' 
          name = 'feature' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a32989F9700FE' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3820C03B00C6' 
          name = 'featureNode' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a376A84D70341' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Expressions.OperationArgument    [Association] ==================== -->
    <Model:Association xmi.id = 'a3820C15E0153' 
      name = 'OperationArgument' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:ModelElement.annotation>The OperationArgument association identifies and orders the actual arguments of an Operation indicated by the FeatureNode end of the association. This association is meaningful only if the FeatureNode references, via the NodeFeature association, a Feature that is also an Operation. The association is not meaningful under other
circumstances.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3820C1610059' 
          name = 'featureNode' annotation = '' 
          isNavigable = 'true' aggregation = 'composite' isChangeable = 'true' 
          type = 'a376A84D70341' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3820C161005A' 
          name = 'argument' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a376A84310237' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Expressions.ReferencedElement    [Association] ==================== -->
    <Model:Association xmi.id = 'a3820C1EA0088' 
      name = 'ReferencedElement' annotation = 'The ReferencedElement association links the ElementNode instances of an expression with the ModelElement instances to which they refer.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3820C1EC0069' 
          name = 'modelElement' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a327A5C7301CC' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3820C1EC0134' 
          name = 'elementNode' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a376A84CD0321' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
  </Model:Namespace.contents>
</Model:Package>
<!-- ==================== KeysIndexes    [Package] ==================== -->
<Model:Package xmi.id = 'a38207A680191' 
  name = 'KeysIndexes' 
  isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
  <Model:ModelElement.annotation>The KeysIndexes package depends on the following package:

    org.omg::CWM::ObjectModel::Core

Keys and indexes as means for specifying instances and for identifying alternate sortings of instances are  epresented in the CWMFoundation so that they can be shared among the various data models that employ hem. The CWM Foundation defines the base concepts (uniqueness and relationships implemented as keys)  pon which more specific key structures can be built by other CWM and tool-specific packages.

The concepts of key and index have been placed in the CWM Foundation because they are available in many  types of data resources. In the CWM Foundation class and association descriptions that follow, relational model  examples are frequently used when discussing the definition and usage of key and index types. This is done because of the wide-spread availability of relational systems and is thought to promote an understanding of the underlying concepts. These concepts, however, are no less applicable to other data models as well.

The two central classes for representing the concept of keys are UniqueKey and KeyRelationship. UniqueKey instances correspond to the notion that keys represent the identity of instances -- similar to the relational model&#x0092;s concept of a primary key or an object model&#x0092;s concept of an object identity. In contrast, KeyRelationship instancescorrespond to the notion that keys embedded in an instance can be used to determine the identity of other related instances -- similar to the relational model concept of foreign key and the object model concept of a reference. Consequently, UniqueKey and KeyRelationship are best thought of as representing roles that collections of Features of Classifiers play rather than Classifiers describing the internal structure of keys. Representing keys as roles rather than structural entities provides greater flexibility and allows the reuse of  Features in multiple keys and in differing relationships to each other. Associations within the KeysIndexes package describe how UniqueKey and KeyRelationship instances describe the roles they play for various
Class instances and the StructuralFeature instances they contain.

OCL Representation of KeysIndexes Constraints

[C-6-1]The isAscending attribute is valid only if the isSorted attribute is True.
context IndexedFeature inv:
self.isAscending-&gt;notEmpty implies self.index.isSorted

[C-6-2] A KeyRelationship instance must be owned by one and only one Class
instance.
context KeyRelationship inv:
(self.namespace-&gt;size = 1) and self.namespace.oclIsKindOf(Class)

[C-6-3] An UniqueKey instance must be owned by one and only one Class instance.
context UniqueKey inv:
(self.namespace-&gt;size = 1) and self.namespace.oclIsKindOf(Class)</Model:ModelElement.annotation>
  <Model:Namespace.contents>
    <!-- ==================== KeysIndexes.org.omg.xmi.namespace=CWM    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.892' 
      name = 'org.omg.xmi.namespace=CWM' annotation = '' 
      tagId = 'org.omg.xmi.namespace' 
      elements = 'a38207A680191' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>CWM</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== KeysIndexes.org.omg.mof.idl_prefix=org.omg.cwm.foundation    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.893' 
      name = 'org.omg.mof.idl_prefix=org.omg.cwm.foundation' annotation = '' 
      tagId = 'org.omg.mof.idl_prefix' 
      elements = 'a38207A680191' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.foundation</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== KeysIndexes.org.omg.mof.idl_substitute_name=KeysIndexesModule    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.894' 
      name = 'org.omg.mof.idl_substitute_name=KeysIndexesModule' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a38207A680191' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>KeysIndexesModule</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== KeysIndexes.com.urep.jcr.java_prefix=org.omg.java.cwm.foundation    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.895' 
      name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.foundation' annotation = '' 
      tagId = 'com.urep.jcr.java_prefix' 
      elements = 'a38207A680191' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.foundation</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <Model:Import xmi.id = 'G.896' 
      name = 'Core' annotation = '' 
      visibility = 'public_vis' isClustered = 'true' 
      importedNamespace = 'a3A6600C5031F' />
    <!-- ==================== KeysIndexes.UniqueKey    [Class] ==================== -->
    <Model:Class xmi.id = 'a376A879E0072' 
      name = 'UniqueKey' annotation = 'A UniqueKey represents a collection of features of some Class that, taken together, uniquely identify instances of the Class. Instances of UniqueKey for which all features are required to have non-null values are candidates for use as primary keys such as those defined by relational DBMSs.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C7301CC' >
      <Model:Namespace.contents>
        <!-- ==================== KeysIndexes.UniqueKey.feature    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a386000FD005B' 
          name = 'feature' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3298F1A403BF' 
          referencedEnd = 'a3821C10F024D' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== KeysIndexes.UniqueKey.keyRelationship    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3860012B02FB' 
          name = 'keyRelationship' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a376A8A6E00C0' 
          referencedEnd = 'a385FCF640358' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== KeysIndexes.Index    [Class] ==================== -->
    <Model:Class xmi.id = 'a376A89040331' 
      name = 'Index' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C7301CC' >
      <Model:ModelElement.annotation>Instances of the Index class represent the ordering of the instances of some other Class, and the Index is said to "span" the Class. Indexes normally have an ordered set of attributes of the Class instance they span that make up the "key" of the index; this set of relationships is represented by the IndexedFeature class that indicates how the attributes are used by the Index instance.

The Index class is intended primarily as a starting point for tools that require the notion
of an index.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== KeysIndexes.Index.isPartitioning    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3810E45B0325' 
          name = 'isPartitioning' annotation = 'If True, this Index instance is used as a partitioning index.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6F650276' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== KeysIndexes.Index.isSorted    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3872623800F5' 
          name = 'isSorted' annotation = 'If True, the Index instance is maintained in a sorted order.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6F650276' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== KeysIndexes.Index.isUnique    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a376A894C02A4' 
          name = 'isUnique' annotation = 'The isUnique attribute is True if the Index instance guarantees all of its instances have a unique key value.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6F650276' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== KeysIndexes.Index.indexedFeature    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a385FFFCD03E5' 
          name = 'indexedFeature' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a377BD3F9017F' 
          referencedEnd = 'a3820C91E0366' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== KeysIndexes.Index.spannedClass    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a38987E5C0212' 
          name = 'spannedClass' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3298A02900FE' 
          referencedEnd = 'a38987D150370' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== KeysIndexes.KeyRelationship    [Class] ==================== -->
    <Model:Class xmi.id = 'a376A8A6E00C0' 
      name = 'KeyRelationship' annotation = 'KeyRelationship instances represent relationships between UniqueKey instances and the Class(es) that reference them. This class is intended as a starting point for the creation of "foreign key" and other associative relationships.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C7301CC' >
      <Model:Namespace.contents>
        <!-- ==================== KeysIndexes.KeyRelationship.feature    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3860015E03C6' 
          name = 'feature' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3298F1A403BF' 
          referencedEnd = 'a3821BFAA028B' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== KeysIndexes.KeyRelationship.uniqueKey    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3860017A00E7' 
          name = 'uniqueKey' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a376A879E0072' 
          referencedEnd = 'a385FCF640387' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== KeysIndexes.IndexedFeature    [Class] ==================== -->
    <Model:Class xmi.id = 'a377BD3F9017F' 
      name = 'IndexedFeature' annotation = 'Instances of the IndexedFeature class map StructuralFeature instances of the spanned Class instance to the Index instances that employ them as (part of) their key. Attributes of IndexedFeature instances indicate how specific StructuralFeature instance are used in Index keys.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C7301CC' >
      <Model:Namespace.contents>
        <!-- ==================== KeysIndexes.IndexedFeature.isAscending    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3783CCCC02C3' 
          name = 'isAscending' annotation = 'The isAscending attribute is true if the feature is sorted in ascending order and false, if descending order.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6F650276' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== KeysIndexes.IndexedFeature.feature    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a38600014001C' 
          name = 'feature' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3298F1A403BF' 
          referencedEnd = 'a3820C7FF01C0' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== KeysIndexes.IndexedFeature.index    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a385FFFFA001C' 
          name = 'index' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a376A89040331' 
          referencedEnd = 'a3820C91E0357' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== KeysIndexes.IndexedFeatures    [Association] ==================== -->
    <Model:Association xmi.id = 'a3820C7FD0308' 
      name = 'IndexedFeatures' annotation = 'The IndexedFeatures association links StructuralFeature instances to information about how they participate in the keys of Index instances.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3820C7FF01C0' 
          name = 'feature' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3298F1A403BF' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3820C7FF01E0' 
          name = 'indexedFeature' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a377BD3F9017F' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== KeysIndexes.IndexedFeatureInfo    [Association] ==================== -->
    <Model:Association xmi.id = 'a3820C91B0172' 
      name = 'IndexedFeatureInfo' annotation = 'The IndexedFeatureInfo association connects an Index instance to information about how the StructuralFeature instances that are constituents of the Index&#x0092;s key are used by the Index.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3820C91E0357' 
          name = 'index' annotation = '' 
          isNavigable = 'true' aggregation = 'composite' isChangeable = 'true' 
          type = 'a376A89040331' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3820C91E0366' 
          name = 'indexedFeature' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a377BD3F9017F' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== KeysIndexes.KeyRelationshipFeatures    [Association] ==================== -->
    <Model:Association xmi.id = 'a3821BFA401E0' 
      name = 'KeyRelationshipFeatures' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:ModelElement.annotation>The KeyRelationshipFeatures association links KeyRelationship instances with the
StructuralFeature instances that comprise their key.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3821BFAA028B' 
          name = 'feature' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3298F1A403BF' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3821BFAA02AB' 
          name = 'keyRelationship' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a376A8A6E00C0' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== KeysIndexes.UniqueFeature    [Association] ==================== -->
    <Model:Association xmi.id = 'a3821C10C00B7' 
      name = 'UniqueFeature' annotation = 'The UniqueFeature association identifies the Feature instances of a Class instance that confer uniqueness. The ordered constraint is used to determine the order of StructuralFeature instances in the UniqueKey instance.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3821C10F024D' 
          name = 'feature' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3298F1A403BF' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3821C10F026C' 
          name = 'uniqueKey' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a376A879E0072' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== KeysIndexes.UniqueKeyRelationship    [Association] ==================== -->
    <Model:Association xmi.id = 'a385FCF6300E7' 
      name = 'UniqueKeyRelationship' annotation = 'The UniqueKeyRelationship association links a KeyRelationship with the UniqueKey with which it is paired. For example, in relational model terms, this association links a foreign key -- the KeyRelationship instance -- with the primary key -- the UniqueKey instance -- with which it is paired.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a385FCF640358' 
          name = 'keyRelationship' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a376A8A6E00C0' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a385FCF640387' 
          name = 'uniqueKey' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a376A879E0072' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== KeysIndexes.IndexSpansClass    [Association] ==================== -->
    <Model:Association xmi.id = 'a38987D1203CA' 
      name = 'IndexSpansClass' annotation = 'Associates indexes with the classes they span. This relationship is separate from the ownership of indexes, to allow modeling of systems where an index is NOT owned by the object it spans. In most situations, however, the spanned and owning Class instances will be the same.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a38987D150370' 
          name = 'spannedClass' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3298A02900FE' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a38987D1503AC' 
          name = 'index' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a376A89040331' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
  </Model:Namespace.contents>
</Model:Package>
<!-- ==================== SoftwareDeployment    [Package] ==================== -->
<Model:Package xmi.id = 'a3731C42F0314' 
  name = 'SoftwareDeployment' 
  isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
  <Model:ModelElement.annotation>The Software Deployment package depends on the following packages:

    org.omg::CWM::ObjectModel::Core
    org.omg::CWM::Foundation::BusinessInformation
    org.omg::CWM::Foundation::TypeMapping

The Software Deployment package contains classes to record how the software in a data warehouse is used.

A software package is represented as a SoftwareSystem object, which is a subtype of Subsystem. A SoftwareSystem may reference one or more TypeSystems that define the datatypes supported by the SoftwareSystem. The mappings between datatypes in different TypeSystems may be recorded as TypeMappings, as described in the TypeMapping metamodel.

The separate components of a software package are each represented as Components that are either owned or imported by the SoftwareSystem. When a SoftwareSystem is installed, the deployment is recorded as a DeployedSoftwareSystem and a set of DeployedComponents.

A DeployedComponent represents the deployment of a specific Component on a specific computer. Dependencies between DeployedComponents on the same computer may be documented as Usage dependencies between them.

Individual computers are represented as Machine objects, located at a Site. A Site represents a geographical location, which may be recorded at any relevant level of granularity, e.g. a country, a building, or a room in a building. Hierarchical links between Sites at different levels of granularity may be documented.

A DataManager is a DeployedComponent such as a DBMS or file management system that provides access to data. It may be associated with one or more data Packages identifying the Schema, Relational Catalog, Files or other data containers that it provides access to.

A DataProvider is a DeployedComponent that acts as a client to provide access to data held by a DataManager. For example, an ODBC or JDBC client on a specific Machine would be represented as a DataProvider. A DataProvider may have several ProviderConnections, each identifying a DataManager that may be accessed using the DataProvider.

If a DataProvider uses a name for a data Package that is different from the actual name used by the DataManager, a PackageUsage object can be added to record this. 

As a DataProvider is a subtype of DataManager, it is possible for a DataProvider to access data from a DataManager which is actually a DataProvider acting as a client to yet another DataManager.

The model for the Software Deployment package is shown in three diagrams. The first diagram shows the objects related to software deployment, while the second diagram displays the DataManager and DataProvider area of the model. The third diagram shows the inheritance structure for all the classes in the Software Deployment package.

OCL Representation of SoftwareDeployment Constraints

[C-8-1] A PackageUsage must have a single Package (or subtype of Package) as its supplier
context PackageUsage inv:
self.supplier-&gt;size=1 and
self.supplier-&gt;at(1).oclIsKindOf(Package)

[C-8-2] A ProviderConnection must not associate a DataProvider with itself
context ProviderConnection inv:
self.dataManager &lt;&gt; self.dataProvider

[C-8-3] A Site must not have a containingSite reference that refers to itself.
context Site inv:
self.containingSite -&gt; forAll (c | c &lt;&gt; self)</Model:ModelElement.annotation>
  <Model:Namespace.contents>
    <!-- ==================== SoftwareDeployment.org.omg.mof.idl_prefix=org.omg.cwm.foundation    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.897' 
      name = 'org.omg.mof.idl_prefix=org.omg.cwm.foundation' annotation = '' 
      tagId = 'org.omg.mof.idl_prefix' 
      elements = 'a3731C42F0314' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.foundation</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== SoftwareDeployment.org.omg.xmi.namespace=CWM    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.898' 
      name = 'org.omg.xmi.namespace=CWM' annotation = '' 
      tagId = 'org.omg.xmi.namespace' 
      elements = 'a3731C42F0314' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>CWM</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== SoftwareDeployment.org.omg.mof.idl_substitute_name=SoftwareDeploymentModule    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.899' 
      name = 'org.omg.mof.idl_substitute_name=SoftwareDeploymentModule' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a3731C42F0314' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>SoftwareDeploymentModule</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== SoftwareDeployment.com.urep.jcr.java_prefix=org.omg.java.cwm.foundation    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.900' 
      name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.foundation' annotation = '' 
      tagId = 'com.urep.jcr.java_prefix' 
      elements = 'a3731C42F0314' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.foundation</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <Model:Import xmi.id = 'G.901' 
      name = 'Core' annotation = '' 
      visibility = 'public_vis' isClustered = 'true' 
      importedNamespace = 'a3A6600C5031F' />
    <Model:Import xmi.id = 'G.902' 
      name = 'BusinessInformation' annotation = '' 
      visibility = 'public_vis' isClustered = 'true' 
      importedNamespace = 'a38207A770114' />
    <Model:Import xmi.id = 'G.903' 
      name = 'TypeMapping' annotation = '' 
      visibility = 'public_vis' isClustered = 'true' 
      importedNamespace = 'a3817221D01F4' />
    <!-- ==================== SoftwareDeployment.Site    [Class] ==================== -->
    <Model:Class xmi.id = 'a3731C5690320' 
      name = 'Site' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a3731CF0A02C6' >
      <Model:ModelElement.annotation>A Site represents a geographical location. It provides a grouping mechanism for a group of machines at the same location.

Sites may be documented at different levels of granularity; containment links may be used to record hierarchical relationships between Sites.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== SoftwareDeployment.Site.containingSite    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a38736FB503CE' 
          name = 'containingSite' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3731C5690320' 
          referencedEnd = 'a374030990232' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== SoftwareDeployment.Machine    [Class] ==================== -->
    <Model:Class xmi.id = 'a3731C5D500A4' 
      name = 'Machine' annotation = 'A Machine represents a computer. The Site at which the Machine is located and the Components deployed on the Machine may be recorded.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a32B69F3A0118' >
      <Model:Namespace.contents>
        <!-- ==================== SoftwareDeployment.Machine.ipAddress    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3826AA4C0382' 
          name = 'ipAddress' annotation = 'A fixed IP address for the Machine.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== SoftwareDeployment.Machine.hostName    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3A59ED87037F' 
          name = 'hostName' annotation = 'A Host Name for the Machine. This may be used to identify the Machine on the network when IP addresses are dynamically allocated.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== SoftwareDeployment.Machine.machineID    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3A59EE9E00FF' 
          name = 'machineID' annotation = 'An identification code for the Machine.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== SoftwareDeployment.Machine.site    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a38721E760014' 
          name = 'site' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3731C5690320' 
          referencedEnd = 'a37668AC7031C' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== SoftwareDeployment.Machine.deployedComponent    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a387242270257' 
          name = 'deployedComponent' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3731C67B0071' 
          referencedEnd = 'a3766779B0281' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== SoftwareDeployment.SoftwareSystem    [Class] ==================== -->
    <Model:Class xmi.id = 'a3731C5FD0337' 
      name = 'SoftwareSystem' annotation = 'A SoftwareSystem represents a specific release of a software product. It consists of a set of software Components.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a33CD6DE5030C' >
      <Model:Namespace.contents>
        <!-- ==================== SoftwareDeployment.SoftwareSystem.type    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3A59F2CF036F' 
          name = 'type' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:ModelElement.annotation>Identifies the type of the software product. One of the following predefined values should be used if appropriate:

    OS, DBMS, MDDB, FileSystem, ODBC, JDBC or Application.</Model:ModelElement.annotation>
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== SoftwareDeployment.SoftwareSystem.subtype    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3A59F32B019A' 
          name = 'subtype' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:ModelElement.annotation>This is used in conjunction with the type attribute to provide additional information about the type of the software product.

For some of the predefined types, suggested subtype values are listed below:

   For an Operating System product (type OS):  
      AIX, Linux, MVS, NT, Solaris, SunOS, VMS or Windows.
   For a Database Management System product (type DBMS): 
      DB2, DMS II, IMS, Informix, Oracle, SQLServer or Sybase.
   For a Multidimensional Database product (type MDDB): 
      Essbase or Express.</Model:ModelElement.annotation>
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== SoftwareDeployment.SoftwareSystem.supplier    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3742DD1A036B' 
          name = 'supplier' annotation = 'The supplier of the software product.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== SoftwareDeployment.SoftwareSystem.version    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3731C95F004E' 
          name = 'version' annotation = 'The version identification for the software product.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== SoftwareDeployment.SoftwareSystem.typespace    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a387222B10043' 
          name = 'typespace' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a38173AAE02EE' 
          referencedEnd = 'a38188310007D' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== SoftwareDeployment.DeployedComponent    [Class] ==================== -->
    <Model:Class xmi.id = 'a3731C67B0071' 
      name = 'DeployedComponent' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5D19033E' >
      <Model:ModelElement.annotation>A DeployedComponent represents the deployment of a Component on a specific Machine.

It may represent the deployment of any type of Component. However, if the Component is part of a SoftwareSystem, the DeployedComponent should be part of a DeployedSoftwareSystem.

Usage dependencies may be used to document that one DeployedComponent uses another DeployedComponent.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== SoftwareDeployment.DeployedComponent.pathname    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a381ED68F031A' 
          name = 'pathname' annotation = 'A pathname for the DeployedComponent within the Machine&#x0092;s file system.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== SoftwareDeployment.DeployedComponent.component    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a387213D003C2' 
          name = 'component' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3A59C2520149' 
          referencedEnd = 'a3A59C2F600FF' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== SoftwareDeployment.DeployedComponent.machine    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a38723FD70292' 
          name = 'machine' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3731C5D500A4' 
          referencedEnd = 'a3766779B0280' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== SoftwareDeployment.DeployedComponent.usingComponents    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3BC625320289' 
          name = 'usingComponents' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3731C67B0071' 
          referencedEnd = 'a3BC619E00056' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== SoftwareDeployment.DeployedComponent.usedComponents    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3BC625420037' 
          name = 'usedComponents' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3731C67B0071' 
          referencedEnd = 'a3BC619E00047' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== SoftwareDeployment.DeployedSoftwareSystem    [Class] ==================== -->
    <Model:Class xmi.id = 'a3795CFCF01CC' 
      name = 'DeployedSoftwareSystem' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5D19033E' >
      <Model:ModelElement.annotation>A DeployedSoftwareSystem represents a deployment of a SoftwareSystem.

Its associated DeployedComponents identify the individual Component deployments that constitute the DeployedSoftwareSystem. These DeployedComponents are not necessarily all deployed on the same Machine.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== SoftwareDeployment.DeployedSoftwareSystem.fixLevel    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3BB4C90A0302' 
          name = 'fixLevel' annotation = 'Describes the fix level of the DeployedSoftwareSystem instance.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== SoftwareDeployment.DeployedSoftwareSystem.softwareSystem    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3872118C02FF' 
          name = 'softwareSystem' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3731C5FD0337' 
          referencedEnd = 'a3795D55902DA' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== SoftwareDeployment.DataManager    [Class] ==================== -->
    <Model:Class xmi.id = 'a376A2BCD0186' 
      name = 'DataManager' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a3731C67B0071' >
      <Model:ModelElement.annotation>A DataManager represents a DeployedComponent that manages access to data. For example, a deployed DBMS or File Management System would be represented as a DataManager.

The DataManager may be associated with one or more data Packages identifying the Schema, Relational Catalog, Files, or other data container that it provides access to.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== SoftwareDeployment.DataManager.isCaseSensitive    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3826AD6E01D6' 
          name = 'isCaseSensitive' annotation = 'Indicates whether or not the DataManager treats lower case letters within object names as being different from the corresponding upper case letters.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6F650276' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== SoftwareDeployment.DataManager.dataPackage    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a38723C70016D' 
          name = 'dataPackage' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a327A5D19033E' 
          referencedEnd = 'a37B2BB3E01AE' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== SoftwareDeployment.DataProvider    [Class] ==================== -->
    <Model:Class xmi.id = 'a37668549009C' 
      name = 'DataProvider' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a376A2BCD0186' >
      <Model:ModelElement.annotation>A DataProvider is a deployed software Component that acts as a client to provide access to data that is managed by another product. For instance, a DataProvider might represent a deployed ODBC or JDBC product.

The DataProvider may have resourceConnection references to ProviderConnections identifying the DataManagers to which it provides access.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== SoftwareDeployment.DataProvider.resourceConnection    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a387239440206' 
          name = 'resourceConnection' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a378357EA0015' 
          referencedEnd = 'a37835A6E0351' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== SoftwareDeployment.ProviderConnection    [Class] ==================== -->
    <Model:Class xmi.id = 'a378357EA0015' 
      name = 'ProviderConnection' annotation = 'A ProviderConnection represents a connection that allows a DataProvider acting as a client to access data from a specific DataManager. For example a ProviderConnection could represent a connection from an ODBC or JDBC client to a DBMS.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C7301CC' >
      <Model:Namespace.contents>
        <!-- ==================== SoftwareDeployment.ProviderConnection.isReadOnly    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a37836462008D' 
          name = 'isReadOnly' annotation = 'Indicates whether the ProviderConnection only allows read access to the DataManager.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6F650276' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== SoftwareDeployment.ProviderConnection.dataProvider    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a38723A6001FA' 
          name = 'dataProvider' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a37668549009C' 
          referencedEnd = 'a37835A6E0350' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== SoftwareDeployment.ProviderConnection.dataManager    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a38723AD60178' 
          name = 'dataManager' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a376A2BCD0186' 
          referencedEnd = 'a37835AB201AA' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== SoftwareDeployment.Component    [Class] ==================== -->
    <Model:Class xmi.id = 'a3A59C2520149' 
      name = 'Component' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a32989FB2023D' >
      <Model:ModelElement.annotation>A Component represents a physical piece of implementation of a system, including software code (source, binary or executable) or equivalents such as scripts or command files. A Component is a subtype of Classifier, and so may have its own Features, such as Attributes and Operations.

Deployment of a Component on a specific Machine is represented as a DeployedComponent.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== SoftwareDeployment.Component.designPackage    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3BC6289D0150' 
          name = 'designPackage' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a327A5D19033E' 
          referencedEnd = 'a3BC6190C03B2' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== SoftwareDeployment.PackageUsage    [Class] ==================== -->
    <Model:Class xmi.id = 'a3A59EFD80363' 
      name = 'PackageUsage' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A646F00E6' >
      <Model:ModelElement.annotation>A PackageUsage represents a usage of a Package. It is particularly relevant in situations where a specific usage uses an alternative name for the Package, as this alternative name can be recorded using the packageAlias attribute.

For example, if a DataProvider representing an ODBC or JDBC client uses a name for a relational database that is different from the dataPackage name used by the RDBMS server, a PackageUsage that has the relevant ProviderConnection as client and the server&#x0092;s data Package as supplier can be added. Its packageAlias attribute can be used to record the name by which the data Package is known to the DataProvider.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== SoftwareDeployment.PackageUsage.packageAlias    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3A59F0E200D1' 
          name = 'packageAlias' annotation = 'If this attribute is present, it identifies the name by which the Package is known to the client.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6FCF03C0' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== SoftwareDeployment.RelatedSites    [Association] ==================== -->
    <Model:Association xmi.id = 'a37403089008C' 
      name = 'RelatedSites' annotation = 'This may be used to record hierarchical relationships between Sites.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a374030990232' 
          name = 'containingSite' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3731C5690320' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a374030990233' 
          name = 'containedSite' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3731C5690320' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== SoftwareDeployment.ComponentsOnMachine    [Association] ==================== -->
    <Model:Association xmi.id = 'a3766779A02FD' 
      name = 'ComponentsOnMachine' annotation = 'Identifies the Machine on which a DeployedComponent is deployed.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3766779B0280' 
          name = 'machine' annotation = '' 
          isNavigable = 'true' aggregation = 'composite' isChangeable = 'true' 
          type = 'a3731C5D500A4' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3766779B0281' 
          name = 'deployedComponent' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3731C67B0071' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== SoftwareDeployment.SiteMachines    [Association] ==================== -->
    <Model:Association xmi.id = 'a37668AC60399' 
      name = 'SiteMachines' annotation = 'Identifies the Site on which a Machine is located.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a37668AC7031C' 
          name = 'site' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3731C5690320' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a37668AC7031D' 
          name = 'machine' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3731C5D500A4' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== SoftwareDeployment.DataProviderConnections    [Association] ==================== -->
    <Model:Association xmi.id = 'a37835A6C0022' 
      name = 'DataProviderConnections' annotation = 'Identifies the ProviderConnections that a DataProvider acting as a client may use.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a37835A6E0350' 
          name = 'dataProvider' annotation = '' 
          isNavigable = 'true' aggregation = 'composite' isChangeable = 'true' 
          type = 'a37668549009C' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a37835A6E0351' 
          name = 'resourceConnection' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a378357EA0015' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== SoftwareDeployment.DataManagerConnections    [Association] ==================== -->
    <Model:Association xmi.id = 'a37835AB1002C' 
      name = 'DataManagerConnections' annotation = 'Identifies the DataManager that is accessed by a ProviderConnection.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a37835AB201AA' 
          name = 'dataManager' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a376A2BCD0186' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a37835AB201BE' 
          name = 'clientConnection' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a378357EA0015' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== SoftwareDeployment.SoftwareSystemDeployments    [Association] ==================== -->
    <Model:Association xmi.id = 'a3795D5580364' 
      name = 'SoftwareSystemDeployments' annotation = 'Identifies the deployments of a SoftwareSystem.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3795D55902D9' 
          name = 'deployment' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3795CFCF01CC' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3795D55902DA' 
          name = 'softwareSystem' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3731C5FD0337' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== SoftwareDeployment.DataManagerDataPackage    [Association] ==================== -->
    <Model:Association xmi.id = 'a37B2BB3B022C' 
      name = 'DataManagerDataPackage' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:ModelElement.annotation>This associates the Package(s) containing the definition of the data with the DataManager that is used to access it.

For example, it may be used to associate a Schema, Relational Catalog or File with the DataManager that manages access to it.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a37B2BB3E01AE' 
          name = 'dataPackage' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a327A5D19033E' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a37B2BB3E0212' 
          name = 'dataManager' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a376A2BCD0186' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== SoftwareDeployment.DeployedSoftwareSystemComponents    [Association] ==================== -->
    <Model:Association xmi.id = 'a381484320027' 
      name = 'DeployedSoftwareSystemComponents' annotation = 'This association identifies the DeployedComponents that constitute a DeployedSoftwareSystem.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a381484330137' 
          name = 'deployedSoftwareSystem' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3795CFCF01CC' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a38148433014B' 
          name = 'deployedComponent' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3731C67B0071' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== SoftwareDeployment.ComponentDeployments    [Association] ==================== -->
    <Model:Association xmi.id = 'a3A59C2F600FE' 
      name = 'ComponentDeployments' annotation = 'This association identifies the deployments of a Component.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3A59C2F600FF' 
          name = 'component' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3A59C2520149' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3A59C2F60100' 
          name = 'deployment' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3731C67B0071' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== SoftwareDeployment.SystemTypespace    [Association] ==================== -->
    <Model:Association xmi.id = 'a3818830E02FD' 
      name = 'SystemTypespace' annotation = 'A SoftwareSystem&#x0092;s typespace identifies the TypeSystem(s) containing the datatypes supported by the SoftwareSystem.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a38188310007D' 
          name = 'typespace' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a38173AAE02EE' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3818831000AB' 
          name = 'supportingSystem' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3731C5FD0337' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== SoftwareDeployment.ComponentDesign    [Association] ==================== -->
    <Model:Association xmi.id = 'a3BC6190C0047' 
      name = 'ComponentDesign' annotation = 'This associates Components with the Packages containing their design.  Typically this will refrence the logical schema.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3BC6190C03B2' 
          name = 'designPackage' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a327A5D19033E' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3BC6190D0008' 
          name = 'component' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3A59C2520149' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== SoftwareDeployment.DeployedComponentUsage    [Association] ==================== -->
    <Model:Association xmi.id = 'a3BC619DD0141' 
      name = 'DeployedComponentUsage' annotation = 'This links a DeployedComponent to the other DeployedComponents that it uses.  Typically this might link a deployed application to the physical databases (instances of DataManager) that it accesses.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3BC619E00047' 
          name = 'usedComponents' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3731C67B0071' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3BC619E00056' 
          name = 'usingComponents' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3731C67B0071' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
  </Model:Namespace.contents>
</Model:Package>
<!-- ==================== TypeMapping    [Package] ==================== -->
<Model:Package xmi.id = 'a3817221D01F4' 
  name = 'TypeMapping' 
  isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
  <Model:ModelElement.annotation>The TypeMapping package depends on the following packages:

    org.omg::CWM::ObjectModel::Core

The TypeMapping package supports the mapping of data types between different systems. The purpose of these mappings is to indicate data types in different systems that are sufficiently compatible that data values can be interchanged between them. Multiple mappings are allowed between any pair of types and a means of identifying the preferred mapping is provided.

OCL Representation of TypeMapping Constraints

[C-8-1] The sourceType and targetType references may not refer to the same
Classifier instance.
context TypeMapping inv:
self.sourceType &lt;&gt; self.targetType

[C-8-2] A TypeSystem may own only Classifiers and TypeMappings.
context TypeSystem inv:
self.ownedElement-&gt;forAll( e | e.oclIsKindOf(Classifier) or e.oclIsKindOf(TypeMapping))</Model:ModelElement.annotation>
  <Model:Namespace.contents>
    <!-- ==================== TypeMapping.org.omg.xmi.namespace=CWM    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.904' 
      name = 'org.omg.xmi.namespace=CWM' annotation = '' 
      tagId = 'org.omg.xmi.namespace' 
      elements = 'a3817221D01F4' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>CWM</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== TypeMapping.org.omg.mof.idl_prefix=org.omg.cwm.foundation    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.905' 
      name = 'org.omg.mof.idl_prefix=org.omg.cwm.foundation' annotation = '' 
      tagId = 'org.omg.mof.idl_prefix' 
      elements = 'a3817221D01F4' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.foundation</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== TypeMapping.org.omg.mof.idl_substitute_name=TypeMappingModule    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.906' 
      name = 'org.omg.mof.idl_substitute_name=TypeMappingModule' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a3817221D01F4' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>TypeMappingModule</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== TypeMapping.com.urep.jcr.java_prefix=org.omg.java.cwm.foundation    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.907' 
      name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.foundation' annotation = '' 
      tagId = 'com.urep.jcr.java_prefix' 
      elements = 'a3817221D01F4' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.foundation</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <Model:Import xmi.id = 'G.908' 
      name = 'Core' annotation = '' 
      visibility = 'public_vis' isClustered = 'true' 
      importedNamespace = 'a3A6600C5031F' />
    <!-- ==================== TypeMapping.TypeMapping    [Class] ==================== -->
    <Model:Class xmi.id = 'a3817226403A9' 
      name = 'TypeMapping' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C7301CC' >
      <Model:ModelElement.annotation>TypeMapping instances permit the creation of mappings between data types defined within different environments and are used to indicate data type compatibilities that permit direct assignment of values from one environment (the "source" type) into equivalent values in another environment (the "target" type). For example, an integer field data type in a record-oriented DBMS (the source type) might be mapped to a compatible integer data type in a relational DBMS (the target type).

Whereas the actual transfer of data values between environments is accomplished using the CWM&#x0092;s Transformation package, TypeMapping instances can be used the identify both the permissible and preferred mappings between data types. Value interchange between a pair of data types is considered permissible if a TypeMapping instance is defined for the pair. A TypeMapping instance is considered the preferred mapping if the instance&#x0092;s isBestMatch attribute has the value true.

Typically, there will be one TypeMapping Instance between a pair of data types that is considered the preferred mapping. To promote flexible use of this feature, there is no requirement that a preferred TypeMapping instance must be identified between a pair of data types nor are multiple preferred instances prohibited. In these latter cases, however, the precise semantics are usage-defined.

Interchange between data types defined by non-preferred mappings may often function as intended. However, the isLossy boolean may be set to indicate that such interchanges may be subject to validity restrictions in certain circumstances. For example, it may be valid to move data values from a 32-bit integer data type to a 16-bit integer data type as long as the actual values in the 32-bit underlying data type do not exceed the range permitted for 16-bit integers. The CWM Foundation leaves the understanding and handling of such differences to individual tools. If such differences must be modeled, consider using the CWM Transformation package to filter data values during interchange.

TypeMapping instances are unidirectional, so two instances are required to show that a data type pair can be mutually interchanged between environments.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== TypeMapping.TypeMapping.isBestMatch    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3817229802EE' 
          name = 'isBestMatch' annotation = 'True if this TypeMapping instance represents the best available mapping between a pair of data types in different software systems.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6F650276' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== TypeMapping.TypeMapping.isLossy    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a381722B700BB' 
          name = 'isLossy' annotation = 'True if this TypeMapping instance may result in a data conversion error if the source data is within certain ranges. For example, storing a 32-bit unsigned integer value into a 16-bit unsigned integer container will result in a data conversion error only when the source data has a value greater than 65535.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6F650276' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== TypeMapping.TypeMapping.sourceType    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a385FFF0B006A' 
          name = 'sourceType' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a32989FB2023D' 
          referencedEnd = 'a381723B401A5' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== TypeMapping.TypeMapping.targetType    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a385FFF500099' 
          name = 'targetType' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a32989FB2023D' 
          referencedEnd = 'a3817250F009C' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== TypeMapping.TypeSystem    [Class] ==================== -->
    <Model:Class xmi.id = 'a38173AAE02EE' 
      name = 'TypeSystem' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5D19033E' >
      <Model:ModelElement.annotation>Instances of the TypeSystem class collect together the data types (subclasses of Classifier) defined by a software system and the TypeMapping instances defining how they are mapped to data types in other TypeSystems. TypeMapping instances collected by a TypeSystem instance include both those in which the software system&#x0092;s data types act as sources and as targets of mappings. Classifiers and TapeMappings are
maintained in a single collection via the ElementOwnership association but can be distinguished by their respective types.

Because it is a Package, a TypeSystem can also serve to collect together the Classifier instances for a particular software system.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== TypeMapping.TypeSystem.version    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3A5CE02002B8' 
          name = 'version' annotation = 'A string describing the version identification of the type system represented.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== TypeMapping.MappingSource    [Association] ==================== -->
    <Model:Association xmi.id = 'a381723B20196' 
      name = 'MappingSource' annotation = 'The MappingSource association indicates the underlying Classifier instance of a particular TypeMapping.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a381723B401A5' 
          name = 'sourceType' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a32989FB2023D' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a381723B40251' 
          name = 'mappingFrom' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3817226403A9' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== TypeMapping.MappingTarget    [Association] ==================== -->
    <Model:Association xmi.id = 'a3817250D0399' 
      name = 'MappingTarget' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:ModelElement.annotation>The MappingTarget association indicates the exposed data type for a particular TypeMapping instance.
</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3817250F009C' 
          name = 'targetType' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a32989FB2023D' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3817250F00DA' 
          name = 'mappingTo' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3817226403A9' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
  </Model:Namespace.contents>
</Model:Package>
<!-- ==================== Relational    [Package] ==================== -->
<Model:Package xmi.id = 'a362E34A201FF' 
  name = 'Relational' 
  isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
  <Model:ModelElement.annotation>The Relational package describes data accessible through a relational interface such as a native RDBMS, ODBC, or JDBC. The Relational package is based on the [SQL] standard section concerning RDBMS catalogs.

The scope of the top level container, Catalog, is intended to cover all the tables a user can use in a single statement. A catalog is also the unit which is managed by a data resource. A catalog contains schemas which themselves contain tables. Tables are made of columns which have an associated data type.

The Relational package uses constructs in the ObjectModel package to describe the object extensions added to SQL by the [SQL] standards. 

The Relational package also addresses the issues of indexing, primary keys and foreign keys by extending the corresponding concepts from the Foundation packages.

The Relational package depends on the following packages:

    org.omg::CWM::ObjectModel::Behavioral
    org.omg::CWM::ObjectModel::Core
    org.omg::CWM::ObjectModel::Instance
    org.omg::CWM::Foundation::DataTypes
    org.omg::CWM::Foundation::KeysIndexes

The Relational package references the ObjectModel and Foundation packages.

OCL Representation of Relational Constraints

[C-1] temporaryScope is valid only if the isTemporary is True.
context Tabl e inv:
self.temporaryScope.notEmpty implies self.isTemporary=True

[C-2] checkOption is valid only if isReadOnly is False.
context View inv:
self.checkOption implies self.isReadOnly=False

[C-3] scale is valid only if precision is specified.
context Column inv:
self.scale.nonEmpty implies self.precision.notEmpty</Model:ModelElement.annotation>
  <Model:Namespace.contents>
    <!-- ==================== Relational.org.omg.xmi.namespace=CWMRDB    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.910' 
      name = 'org.omg.xmi.namespace=CWMRDB' annotation = '' 
      tagId = 'org.omg.xmi.namespace' 
      elements = 'a362E34A201FF' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>CWMRDB</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Relational.org.omg.mof.idl_prefix=org.omg.cwm.resource    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.911' 
      name = 'org.omg.mof.idl_prefix=org.omg.cwm.resource' annotation = '' 
      tagId = 'org.omg.mof.idl_prefix' 
      elements = 'a362E34A201FF' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.resource</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Relational.org.omg.mof.idl_substitute_name=RelationalModule    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.912' 
      name = 'org.omg.mof.idl_substitute_name=RelationalModule' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a362E34A201FF' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>RelationalModule</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Relational.com.urep.jcr.java_prefix=org.omg.java.cwm.resource    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.913' 
      name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.resource' annotation = '' 
      tagId = 'com.urep.jcr.java_prefix' 
      elements = 'a362E34A201FF' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.resource</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <Model:Import xmi.id = 'G.914' 
      name = 'Core' annotation = '' 
      visibility = 'public_vis' isClustered = 'true' 
      importedNamespace = 'a3A6600C5031F' />
    <Model:Import xmi.id = 'G.915' 
      name = 'Behavioral' annotation = '' 
      visibility = 'public_vis' isClustered = 'true' 
      importedNamespace = 'a3A6342A4000B' />
    <Model:Import xmi.id = 'G.916' 
      name = 'Instance' annotation = '' 
      visibility = 'public_vis' isClustered = 'true' 
      importedNamespace = 'a3A6342930318' />
    <Model:Import xmi.id = 'G.917' 
      name = 'DataTypes' annotation = '' 
      visibility = 'public_vis' isClustered = 'true' 
      importedNamespace = 'a38207A4E0308' />
    <Model:Import xmi.id = 'G.918' 
      name = 'KeysIndexes' annotation = '' 
      visibility = 'public_vis' isClustered = 'true' 
      importedNamespace = 'a38207A680191' />
    <!-- ==================== Relational.Enumerations    [Package] ==================== -->
    <Model:Package xmi.id = 'a36CB6A6C0197' 
      name = 'Enumerations' annotation = 'The enumerations and datatypes used in the Relational model.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
      <Model:Namespace.contents>
        <!-- ==================== Relational.Enumerations.ActionOrientationType    [DataType] ==================== -->
        <Model:DataType xmi.id = 'a36DC89FC02A3' 
          name = 'ActionOrientationType' 
          isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
          <Model:ModelElement.annotation>Used in Trigger. 
It indicates if the trigger is called once per statement execution or before/after each row of the table is modified.</Model:ModelElement.annotation>
          <Model:DataType.typeCode>
            <XMI.CorbaTypeCode>
              <XMI.CorbaTcEnum xmi.tcName = 'ActionOrientationType'>
              <XMI.CorbaTcEnumLabel xmi.tcName = 'row'/>
              <XMI.CorbaTcEnumLabel xmi.tcName = 'statement'/>
              </XMI.CorbaTcEnum>
            </XMI.CorbaTypeCode>
          </Model:DataType.typeCode>
        </Model:DataType>
        <!-- ==================== Relational.Enumerations.ConditionTimingType    [DataType] ==================== -->
        <Model:DataType xmi.id = 'a36DC8A1E02F5' 
          name = 'ConditionTimingType' 
          isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
          <Model:ModelElement.annotation>Used in Triggers.
It indicates if the trigger activity is run before or after the statement or row is modified.</Model:ModelElement.annotation>
          <Model:DataType.typeCode>
            <XMI.CorbaTypeCode>
              <XMI.CorbaTcEnum xmi.tcName = 'ConditionTimingType'>
              <XMI.CorbaTcEnumLabel xmi.tcName = 'before'/>
              <XMI.CorbaTcEnumLabel xmi.tcName = 'after'/>
              </XMI.CorbaTcEnum>
            </XMI.CorbaTypeCode>
          </Model:DataType.typeCode>
        </Model:DataType>
        <!-- ==================== Relational.Enumerations.DeferrabilityType    [DataType] ==================== -->
        <Model:DataType xmi.id = 'a36CC6BBA02A5' 
          name = 'DeferrabilityType' 
          isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
          <Model:ModelElement.annotation>Used in Foreign Keys
Indicates if the Foreign Key validation should be deferred to the end of the transaction or executed immadiately at the end of the statement.
This is the value used at the beginning of a transaction. It can be changed within a transaction.</Model:ModelElement.annotation>
          <Model:DataType.typeCode>
            <XMI.CorbaTypeCode>
              <XMI.CorbaTcEnum xmi.tcName = 'DeferrabilityType'>
              <XMI.CorbaTcEnumLabel xmi.tcName = 'initiallyDeferred'/>
              <XMI.CorbaTcEnumLabel xmi.tcName = 'initiallyImmediate'/>
              <XMI.CorbaTcEnumLabel xmi.tcName = 'notDeferrable'/>
              </XMI.CorbaTcEnum>
            </XMI.CorbaTypeCode>
          </Model:DataType.typeCode>
        </Model:DataType>
        <!-- ==================== Relational.Enumerations.EventManipulationType    [DataType] ==================== -->
        <Model:DataType xmi.id = 'a36DC89D2037E' 
          name = 'EventManipulationType' 
          isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
          <Model:ModelElement.annotation>Used in Trigger.
Indicates what types of events are using the current Trigger. 
</Model:ModelElement.annotation>
          <Model:DataType.typeCode>
            <XMI.CorbaTypeCode>
              <XMI.CorbaTcEnum xmi.tcName = 'EventManipulationType'>
              <XMI.CorbaTcEnumLabel xmi.tcName = 'insert'/>
              <XMI.CorbaTcEnumLabel xmi.tcName = 'delete'/>
              <XMI.CorbaTcEnumLabel xmi.tcName = 'update'/>
              </XMI.CorbaTcEnum>
            </XMI.CorbaTypeCode>
          </Model:DataType.typeCode>
        </Model:DataType>
        <!-- ==================== Relational.Enumerations.NullableType    [DataType] ==================== -->
        <Model:DataType xmi.id = 'a36CB6FAE0093' 
          name = 'NullableType' 
          isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
          <Model:ModelElement.annotation>Used in Column.
Indicates if a Column may contain null values.</Model:ModelElement.annotation>
          <Model:DataType.typeCode>
            <XMI.CorbaTypeCode>
              <XMI.CorbaTcEnum xmi.tcName = 'NullableType'>
              <XMI.CorbaTcEnumLabel xmi.tcName = 'columnNoNulls'/>
              <XMI.CorbaTcEnumLabel xmi.tcName = 'columnNullable'/>
              <XMI.CorbaTcEnumLabel xmi.tcName = 'columnNullableUnknown'/>
              </XMI.CorbaTcEnum>
            </XMI.CorbaTypeCode>
          </Model:DataType.typeCode>
        </Model:DataType>
        <!-- ==================== Relational.Enumerations.ProcedureType    [DataType] ==================== -->
        <Model:DataType xmi.id = 'a36DD71AB015E' 
          name = 'ProcedureType' 
          isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
          <Model:ModelElement.annotation>Used in Procedure.
Indicates if the Procedure is a Function or a Procedure</Model:ModelElement.annotation>
          <Model:DataType.typeCode>
            <XMI.CorbaTypeCode>
              <XMI.CorbaTcEnum xmi.tcName = 'ProcedureType'>
              <XMI.CorbaTcEnumLabel xmi.tcName = 'procedure'/>
              <XMI.CorbaTcEnumLabel xmi.tcName = 'function'/>
              </XMI.CorbaTcEnum>
            </XMI.CorbaTypeCode>
          </Model:DataType.typeCode>
        </Model:DataType>
        <!-- ==================== Relational.Enumerations.ReferentialRuleType    [DataType] ==================== -->
        <Model:DataType xmi.id = 'a36CC6AF10223' 
          name = 'ReferentialRuleType' 
          isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
          <Model:ModelElement.annotation>Used in Foreign Key.
It indicates the action taken on the row containing a foreign key value, when the primary key value referenced is deleted or updated.</Model:ModelElement.annotation>
          <Model:DataType.typeCode>
            <XMI.CorbaTypeCode>
              <XMI.CorbaTcEnum xmi.tcName = 'ReferentialRuleType'>
              <XMI.CorbaTcEnumLabel xmi.tcName = 'importedKeyNoAction'/>
              <XMI.CorbaTcEnumLabel xmi.tcName = 'importedKeyCascade'/>
              <XMI.CorbaTcEnumLabel xmi.tcName = 'importedKeySetNull'/>
              <XMI.CorbaTcEnumLabel xmi.tcName = 'importedKeyRestrict'/>
              <XMI.CorbaTcEnumLabel xmi.tcName = 'importedKeySetDefault'/>
              </XMI.CorbaTcEnum>
            </XMI.CorbaTypeCode>
          </Model:DataType.typeCode>
        </Model:DataType>
      </Model:Namespace.contents>
    </Model:Package>
    <!-- ==================== Relational.Catalog    [Class] ==================== -->
    <Model:Class xmi.id = 'a362E34BC0007' 
      name = 'Catalog' annotation = 'A Catalog is the unit of logon and identification. It also identifies the scope of SQL statements: the tables contained in a catalog can be used in a single SQL statement.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5D19033E' >
      <Model:Namespace.contents>
        <!-- ==================== Relational.Catalog.defaultCharacterSetName    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3A610C660274' 
          name = 'defaultCharacterSetName' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:ModelElement.annotation>The name of the default character set used for the values in the column.
This field applies only to columns whose datatype is a character string.</Model:ModelElement.annotation>
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Relational.Catalog.defaultCollationName    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3A610D760315' 
          name = 'defaultCollationName' annotation = 'The name of the default collation sequence used to sort the data values in the column.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Relational.Schema    [Class] ==================== -->
    <Model:Class xmi.id = 'a3639010F0362' 
      name = 'Schema' annotation = 'A schema is a named collection of tables' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5D19033E' />
    <!-- ==================== Relational.ColumnSet    [Class] ==================== -->
    <Model:Class xmi.id = 'a364CDDC2022D' 
      name = 'ColumnSet' annotation = 'A set of columns, representing either the result of a query, a view or a physical table.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a3298A02900FE' />
    <!-- ==================== Relational.org.omg.IDL Substitute Name=RelationalColumnSet    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.919' 
      name = 'org.omg.IDL Substitute Name=RelationalColumnSet' annotation = '' 
      tagId = 'org.omg.IDL Substitute Name' 
      elements = 'a364CDDC2022D' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>RelationalColumnSet</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Relational.org.omg.mof.idl_substitute_name=CwmColumnSet    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.920' 
      name = 'org.omg.mof.idl_substitute_name=CwmColumnSet' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a364CDDC2022D' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>CwmColumnSet</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Relational.NamedColumnSet    [Class] ==================== -->
    <Model:Class xmi.id = 'a362E664F03B3' 
      name = 'NamedColumnSet' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a364CDDC2022D' >
      <Model:ModelElement.annotation>A catalogued set of columns, which may be Table or View.

Note for typed tables: It is assumed that the typed table will own a set of columns conforming to the type they are OF. This set of columns allows the manipulation of the table by products which ignore this [SQL] extension. It also allows the columns of type REF, to be copied to a column with a SCOPE reference.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Relational.NamedColumnSet.optionScopeColumn    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a387232030307' 
          name = 'optionScopeColumn' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a364CDDD800D0' 
          referencedEnd = 'a379CC77703CE' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Relational.NamedColumnSet.type    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a387232320098' 
          name = 'type' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3648903F0365' 
          referencedEnd = 'a379CC370012B' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Relational.NamedColumnSet.usingTrigger    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a38723276019A' 
          name = 'usingTrigger' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a36DC7E9502F8' 
          referencedEnd = 'a36DC8BBB0190' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Relational.Table    [Class] ==================== -->
    <Model:Class xmi.id = 'a364CDE8501D3' 
      name = 'Table' annotation = 'A materialized NamedColumnSet.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a362E664F03B3' >
      <Model:Namespace.contents>
        <!-- ==================== Relational.Table.isTemporary    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a377A994F0294' 
          name = 'isTemporary' annotation = 'Indicates that the table content is temporary. SQL92 standards provide two types of temporary tables (local Temporary and Global Temporary). However, RDBMS products have implemented variations on this theme. It is recommended that the product manufacturers provide specific temporary information (besides the temporaryScope attribute) in their extensions. ' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6F650276' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Relational.Table.temporaryScope    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a377A9A21020A' 
          name = 'temporaryScope' annotation = 'This attribute is meaningful only when the isTemporary flag is True [C-1]. The scope indicates when the data of this table are available. "SESSION", "APPLICATION" are examples of possible values. Look at the Scope attribute for Global Temporary tables in the SQL standards for more details.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Relational.Table.trigger    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3872331E0278' 
          name = 'trigger' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a36DC7E9502F8' 
          referencedEnd = 'a36DC8BC30079' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Relational.Table.isSystem    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a379CE39B024A' 
          name = 'isSystem' annotation = 'Indicates that the Table is a System Table (generally part of or view on the system catalog).' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6F650276' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Relational.View    [Class] ==================== -->
    <Model:Class xmi.id = 'a364CDE8F01FF' 
      name = 'View' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a362E664F03B3' >
      <Model:ModelElement.annotation>A view is a non-materialized set of rows, defined by the associated query.
</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Relational.View.isReadOnly    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a366C558402E0' 
          name = 'isReadOnly' annotation = 'Indicates whether the underlying tables can be updated through an update to this View.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6F650276' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Relational.View.checkOption    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a36CB6B8B01AE' 
          name = 'checkOption' annotation = 'This field is meaningful only if the view is not ReadOnly. CheckOption indicates that the RDBMS will validate that changes made to the data verify the view filtering condition and belong to the view result set.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6F650276' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Relational.View.queryExpression    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a37D0502D029E' 
          name = 'queryExpression' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a3702A52C0196' >
          <Model:ModelElement.annotation>The query associated with the View.

The query result must match the set of Columns associated with the View (in parent class ColumnSet)</Model:ModelElement.annotation>
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Relational.QueryColumnSet    [Class] ==================== -->
    <Model:Class xmi.id = 'a364CDEA203C9' 
      name = 'QueryColumnSet' annotation = 'The result set of a query.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a364CDDC2022D' >
      <Model:Namespace.contents>
        <!-- ==================== Relational.QueryColumnSet.query    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a38274595001C' 
          name = 'query' annotation = 'The query expression generating this result. The language attribute of the expression should generally begin with "SQL"' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a3702A52C0196' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Relational.SQLDataType    [Class] ==================== -->
    <Model:Class xmi.id = 'a36488C0301BD' 
      name = 'SQLDataType' annotation = 'A SQLDataType is used to reference any datatype associated with a column' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'true' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a32989FB2023D' >
      <Model:Namespace.contents>
        <!-- ==================== Relational.SQLDataType.typeNumber    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3818C81E038E' 
          name = 'typeNumber' annotation = 'The number assigned to the datatype by the owning RDBMS' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6FD7021C' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Relational.SQLDistinctType    [Class] ==================== -->
    <Model:Class xmi.id = 'a363916A10234' 
      name = 'SQLDistinctType' annotation = 'A datatype defined as a Distinct Type, per [SQL] standard.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a36488C0301BD a3731C90A00AA' >
      <Model:Namespace.contents>
        <!-- ==================== Relational.SQLDistinctType.length    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a37F92773035C' 
          name = 'length' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6FD7021C' >
          <Model:ModelElement.annotation>The length of fixed length character or byte strings. Maximum length if length is
variable.</Model:ModelElement.annotation>
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Relational.SQLDistinctType.precision    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a37F9278601B5' 
          name = 'precision' annotation = 'The total number of digits in the field' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6FD7021C' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Relational.SQLDistinctType.scale    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a37F927970119' 
          name = 'scale' annotation = 'The number of digits on the right of the decimal separator.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6FD7021C' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Relational.SQLDistinctType.sqlSimpleType    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a387239950065' 
          name = 'sqlSimpleType' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a363916290336' 
          referencedEnd = 'a37F928110309' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Relational.SQLSimpleType    [Class] ==================== -->
    <Model:Class xmi.id = 'a363916290336' 
      name = 'SQLSimpleType' annotation = 'A simple datatype used with an SQL column. Examples are Integer, Varchar, LOB, CLOB, etc...' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a36488C0301BD a3298A036025B' >
      <Model:Namespace.contents>
        <!-- ==================== Relational.SQLSimpleType.characterMaximumLength    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a36CC64DA01F4' 
          name = 'characterMaximumLength' annotation = 'See [SQL], corresponding field in DATA_TYPE_DESCRIPTOR' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6FD7021C' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Relational.SQLSimpleType.characterOctetLength    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a36F2DDB30115' 
          name = 'characterOctetLength' annotation = 'See [SQL], corresponding field in DATA_TYPE_DESCRIPTOR' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6FD7021C' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Relational.SQLSimpleType.numericPrecision    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a36F2DEB40104' 
          name = 'numericPrecision' annotation = 'See [SQL], corresponding field in DATA_TYPE_DESCRIPTOR' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6FD7021C' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Relational.SQLSimpleType.numericPrecisionRadix    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a36F2DECC0054' 
          name = 'numericPrecisionRadix' annotation = 'See [SQL], corresponding field in DATA_TYPE_DESCRIPTOR' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6FD7021C' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Relational.SQLSimpleType.numericScale    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a36F2DEE800AF' 
          name = 'numericScale' annotation = 'See [SQL], corresponding field in DATA_TYPE_DESCRIPTOR' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6FD7021C' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Relational.SQLSimpleType.dateTimePrecision    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a36F2DEFB0391' 
          name = 'dateTimePrecision' annotation = 'See [SQL], corresponding field in DATA_TYPE_DESCRIPTOR' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6FD7021C' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Relational.SQLStructuredType    [Class] ==================== -->
    <Model:Class xmi.id = 'a3648903F0365' 
      name = 'SQLStructuredType' annotation = 'A Datatype defined as Structured Type, per [SQL] standard.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a36488C0301BD a3298A02900FE' >
      <Model:Namespace.contents>
        <!-- ==================== Relational.SQLStructuredType.referencingColumn    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a38723A6803CF' 
          name = 'referencingColumn' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a364CDDD800D0' 
          referencedEnd = 'a379CC6D003D8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Relational.SQLStructuredType.columnSet    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a38723A940075' 
          name = 'columnSet' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a362E664F03B3' 
          referencedEnd = 'a379CC370018F' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Relational.Column    [Class] ==================== -->
    <Model:Class xmi.id = 'a364CDDD800D0' 
      name = 'Column' annotation = 'A column in a result set, a view, a table, or an SQLStructuredType.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a3A6F62780143' >
      <Model:Namespace.contents>
        <!-- ==================== Relational.Column.precision    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3649E0CC02B6' 
          name = 'precision' annotation = 'The total number of digits in the field.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6FD7021C' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Relational.Column.scale    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3649E0E801A8' 
          name = 'scale' annotation = 'The number of digits on the right of the decimal separator.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6FD7021C' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Relational.Column.isNullable    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a36AA672E0327' 
          name = 'isNullable' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a36CB6FAE0093' >
          <Model:ModelElement.annotation>Indicates if null values are valid in this column.

Note: Default values for Column data are provided in initialValue in the UML Attribute class (the class from which the Column class inherits).</Model:ModelElement.annotation>
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Relational.Column.length    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a37F927C702EF' 
          name = 'length' annotation = 'The length of fixed length character or byte strings. Maximum length if length is variable.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6FD7021C' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Relational.Column.collationName    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a383C1F72018B' 
          name = 'collationName' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:ModelElement.annotation>The name of the collation sequence used to sort the data values in the column.
This applies only to columns whose datatype is a form of character string.</Model:ModelElement.annotation>
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Relational.Column.characterSetName    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a383C1F8A00F0' 
          name = 'characterSetName' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:ModelElement.annotation>The name of the character set used for the values in the column.
This field applies only to columns whose datatype is a character string.</Model:ModelElement.annotation>
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Relational.Column.optionScopeColumnSet    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a38723AE1035B' 
          name = 'optionScopeColumnSet' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a362E664F03B3' 
          referencedEnd = 'a379CC77900CE' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Relational.Column.referencedTableType    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a38723B020363' 
          name = 'referencedTableType' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3648903F0365' 
          referencedEnd = 'a379CC6D00374' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Relational.Procedure    [Class] ==================== -->
    <Model:Class xmi.id = 'a36DC7EA303AC' 
      name = 'Procedure' annotation = 'This class describes Relational DBMS Stored procedures and functions.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327BB67E0028' >
      <Model:Namespace.contents>
        <!-- ==================== Relational.Procedure.type    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a36DD6F5701E0' 
          name = 'type' annotation = 'A Procedure can be either a Function or a true Procedure. This indicates whether this object returns a value or not.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a36DD71AB015E' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Relational.Trigger    [Class] ==================== -->
    <Model:Class xmi.id = 'a36DC7E9502F8' 
      name = 'Trigger' annotation = 'An action run by the DBMS when specified events occur on the table owning the Trigger' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C7301CC' >
      <Model:Namespace.contents>
        <!-- ==================== Relational.Trigger.eventManipulation    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a36DC89B900DA' 
          name = 'eventManipulation' annotation = 'Indicates what types of events are using the current Trigger.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a36DC89D2037E' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Relational.Trigger.actionCondition    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a36DC8A6300D7' 
          name = 'actionCondition' annotation = 'A boolean expression which defines when the trigger has to be executed' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33CFA9DA01D6' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Relational.Trigger.actionStatement    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a36DC8A7A001C' 
          name = 'actionStatement' annotation = 'The Trigger action itself' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a363559050190' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Relational.Trigger.actionOrientation    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a36DC8AFC019F' 
          name = 'actionOrientation' annotation = 'It indicates if the trigger is called once per statement execution or before or after each row of the table is modified.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a36DC89FC02A3' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Relational.Trigger.conditionTiming    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a36DC8A8B0201' 
          name = 'conditionTiming' annotation = 'It indicates if the trigger activity is run before or after the statement or row is modified.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a36DC8A1E02F5' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Relational.Trigger.conditionReferenceNewTable    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a36DC8A9C0378' 
          name = 'conditionReferenceNewTable' annotation = 'The alias for the owning table name, used in the actionStatement, to represent the state of the table after the insert/delete/update' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Relational.Trigger.conditionReferenceOldTable    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a36DC8AB301EA' 
          name = 'conditionReferenceOldTable' annotation = 'The alias for the name of the owning table, used in the actionStatement, to represent the state of the table before the update/delete/insert.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Relational.Trigger.table    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a38723CB400A0' 
          name = 'table' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a364CDE8501D3' 
          referencedEnd = 'a36DC8BC30029' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Relational.Trigger.usedColumnSet    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a38723CD3007C' 
          name = 'usedColumnSet' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a362E664F03B3' 
          referencedEnd = 'a36DC8BBB012C' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Relational.SQLIndex    [Class] ==================== -->
    <Model:Class xmi.id = 'a36CC6C5501E2' 
      name = 'SQLIndex' annotation = 'An Index on a table.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a376A89040331' >
      <Model:Namespace.contents>
        <!-- ==================== Relational.SQLIndex.filterCondition    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a36CC6E0401C4' 
          name = 'filterCondition' annotation = 'Which subset of the table is indexed' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Relational.SQLIndex.isNullable    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a36CC6E150006' 
          name = 'isNullable' annotation = 'Entries in this index can be null' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6F650276' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Relational.SQLIndex.autoUpdate    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a36CC6E3503C3' 
          name = 'autoUpdate' annotation = 'The index is updated automatically' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6F650276' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Relational.UniqueConstraint    [Class] ==================== -->
    <Model:Class xmi.id = 'a36F6E2ED0146' 
      name = 'UniqueConstraint' annotation = 'A condition to define uniqueness of rows in a table. An example of UniqueConstraint is a primary key' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a376A879E0072' >
      <Model:Namespace.contents>
        <!-- ==================== Relational.UniqueConstraint.deferrability    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3870FCCD017A' 
          name = 'deferrability' annotation = 'Indicates if the validity of the UniqueConstraint is to be tested at each statement or at the end of a transaction.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a36CC6BBA02A5' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Relational.ForeignKey    [Class] ==================== -->
    <Model:Class xmi.id = 'a362E6C290149' 
      name = 'ForeignKey' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a376A8A6E00C0' >
      <Model:ModelElement.annotation>A Foreign Key associates columns from one table with columns of another table.

</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Relational.ForeignKey.deleteRule    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a36547F640115' 
          name = 'deleteRule' annotation = 'An enumerated type. Indicates the disposition of the data records containing the foreign key value when the record of the matching primary key is deleted.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a36CC6AF10223' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Relational.ForeignKey.updateRule    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a36548E0F0184' 
          name = 'updateRule' annotation = 'Same as deleteRule for updates of the primary key data record' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a36CC6AF10223' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Relational.ForeignKey.deferrability    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a36CC6B7D004E' 
          name = 'deferrability' annotation = 'Indicates if the validity of the ForeignKey is to be tested at each statement or at the end of a transaction.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a36CC6BBA02A5' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Relational.SQLIndexColumn    [Class] ==================== -->
    <Model:Class xmi.id = 'a36CC6F570117' 
      name = 'SQLIndexColumn' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a377BD3F9017F' >
      <Model:ModelElement.annotation>Associates an index with its columns.

This is really an association (link) class. It is associated with one index and one column.
</Model:ModelElement.annotation>
    </Model:Class>
    <!-- ==================== Relational.PrimaryKey    [Class] ==================== -->
    <Model:Class xmi.id = 'a3870E1AD031C' 
      name = 'PrimaryKey' annotation = 'There is only one UniqueConstraint of type PrimaryKey per Table. It is implemented specifically by each RDBMS.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a36F6E2ED0146' />
    <!-- ==================== Relational.Row    [Class] ==================== -->
    <Model:Class xmi.id = 'a3870F1D702A0' 
      name = 'Row' annotation = 'An instance of a ColumnSet.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a33BC99D60302' />
    <!-- ==================== Relational.ColumnValue    [Class] ==================== -->
    <Model:Class xmi.id = 'a3870F1E200C5' 
      name = 'ColumnValue' annotation = 'The value in a column instance.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a33BC9AFB02E4' />
    <!-- ==================== Relational.CheckConstraint    [Class] ==================== -->
    <Model:Class xmi.id = 'a3870FB0E020E' 
      name = 'CheckConstraint' annotation = 'A rule that specifies the values allowed in one or more columns of every row of a table.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A649B000A' >
      <Model:Namespace.contents>
        <!-- ==================== Relational.CheckConstraint.deferrability    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3870FD1A01A8' 
          name = 'deferrability' annotation = 'Indicates the timing of the constraint enforcement during multiple-user updates.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a36CC6BBA02A5' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Relational.RowSet    [Class] ==================== -->
    <Model:Class xmi.id = 'a3896223901CC' 
      name = 'RowSet' annotation = 'Each instance of RowSet owns a collection of Row instances. The inherited association between Namespace (a superclass of Package) and ModelElement is used to contain Instances.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a387E624E0365' />
    <!-- ==================== Relational.org.omg.mof.idl_substitute_name=CwmRowSet    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.921' 
      name = 'org.omg.mof.idl_substitute_name=CwmRowSet' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a3896223901CC' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>CwmRowSet</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Relational.SQLParameter    [Class] ==================== -->
    <Model:Class xmi.id = 'a3A6105950078' 
      name = 'SQLParameter' annotation = 'Parameters of stored procedures.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327BBB9F02B2' />
    <!-- ==================== Relational.TriggerUsingColumnSet    [Association] ==================== -->
    <Model:Association xmi.id = 'a36DC8BB70234' 
      name = 'TriggerUsingColumnSet' annotation = 'This associates a Trigger with the NamedColumnSets it uses in its expressions.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a36DC8BBB012C' 
          name = 'usedColumnSet' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a362E664F03B3' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a36DC8BBB0190' 
          name = 'usingTrigger' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a36DC7E9502F8' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Relational.TableOwningTrigger    [Association] ==================== -->
    <Model:Association xmi.id = 'a36DC8BC1024D' 
      name = 'TableOwningTrigger' annotation = 'Associates a Table with its Triggers. The Trigger will be activated when an action is performed on the Table.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a36DC8BC30029' 
          name = 'table' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a364CDE8501D3' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a36DC8BC30079' 
          name = 'trigger' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a36DC7E9502F8' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Relational.ColumnSetOfStructuredType    [Association] ==================== -->
    <Model:Association xmi.id = 'a379CC36E0178' 
      name = 'ColumnSetOfStructuredType' annotation = 'Associates structured types with NamedColumnSets defined of this type.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a379CC370012B' 
          name = 'type' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3648903F0365' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a379CC370018F' 
          name = 'columnSet' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a362E664F03B3' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Relational.ColumnRefStructuredType    [Association] ==================== -->
    <Model:Association xmi.id = 'a379CC6CE0050' 
      name = 'ColumnRefStructuredType' annotation = 'Associates Columns of a StructuredType with the Type they reference in the REF clause' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a379CC6D00374' 
          name = 'referencedTableType' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3648903F0365' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a379CC6D003D8' 
          name = 'referencingColumn' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a364CDDD800D0' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Relational.ColumnOptionsColumnSet    [Association] ==================== -->
    <Model:Association xmi.id = 'a379CC77700CB' 
      name = 'ColumnOptionsColumnSet' annotation = 'Associates Columns with NamedColumnSets they reference in their OPTIONS clause.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a379CC77703CE' 
          name = 'optionScopeColumn' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a364CDDD800D0' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a379CC77900CE' 
          name = 'optionScopeColumnSet' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a362E664F03B3' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Relational.DistinctTypeHasSimpleType    [Association] ==================== -->
    <Model:Association xmi.id = 'a37F9281001C8' 
      name = 'DistinctTypeHasSimpleType' annotation = '' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a37F9281102F5' 
          name = 'sqlDistinctType' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a363916A10234' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a37F928110309' 
          name = 'sqlSimpleType' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a363916290336' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
  </Model:Namespace.contents>
</Model:Package>
<!-- ==================== Record    [Package] ==================== -->
<Model:Package xmi.id = 'a35F6F41A0299' 
  name = 'Record' 
  isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
  <Model:ModelElement.annotation>The Record package covers the basic concept of a record and its structure. The package takes a broad view of the notion of record, including both traditional data records such as those stored in files and databases, as well as programming language structured data types. In fact, the concepts described here can be used as a foundation for extension packages describing any information structure that is fundamentally hierarchical, or "nested," in nature such as documents, questionnaires, and organizational structures.

The Record package depends on the following packages:

    org.omg::CWM::ObjectModel::Core
    org.omg::CWM::ObjectModel::Instance

Because of the antiquity of many record-based models, individual system implementations employing record models may have unusual features (such as occurs-depending arrays, various COBOL rename/remapping semantics, etc.) that are not shared with other implementations. When such features are limited to single
implementations or languages, they have been purposefully left out of the Record metamodel. Rather, unusual features of this sort should be placed into extension packages designed to meet the needs of those implementations or languages. For example, record structuring features endemic to the COBOL language have been placed in the COBOLData metamodel in the CWMX package described in Volume 2 and do not appear here. In this way, COBOL-only features do not burden other record oriented implementations unnecessarily.

OCL Representation of Record Constraints

[C-1] The owner of a Field and the type of a Field may not refer to the same Classifier instance.
context Field inv:
self.owner &lt;&gt; self.type

[C-2] The scale attribute is valid only if the precision attribute is specified.
context Field inv:
self.scale-&gt;notEmpty implies self.precision-&gt;notEmpty

[C-3] The precision attribute is valid only if the length attribute is not specified.
context Field inv:
self.precision-&gt;notEmpty implies self.length-&gt;isEmpty::filely one</Model:ModelElement.annotation>
  <Model:Namespace.contents>
    <!-- ==================== Record.org.omg.xmi.namespace=CWMREC    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.922' 
      name = 'org.omg.xmi.namespace=CWMREC' annotation = '' 
      tagId = 'org.omg.xmi.namespace' 
      elements = 'a35F6F41A0299' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>CWMREC</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Record.org.omg.mof.idl_prefix=org.omg.cwm.resource    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.923' 
      name = 'org.omg.mof.idl_prefix=org.omg.cwm.resource' annotation = '' 
      tagId = 'org.omg.mof.idl_prefix' 
      elements = 'a35F6F41A0299' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.resource</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Record.org.omg.mof.idl_substitute_name=RecordModule    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.924' 
      name = 'org.omg.mof.idl_substitute_name=RecordModule' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a35F6F41A0299' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>RecordModule</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Record.com.urep.jcr.java_prefix=org.omg.java.cwm.resource    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.925' 
      name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.resource' annotation = '' 
      tagId = 'com.urep.jcr.java_prefix' 
      elements = 'a35F6F41A0299' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.resource</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <Model:Import xmi.id = 'G.926' 
      name = 'Core' annotation = '' 
      visibility = 'public_vis' isClustered = 'true' 
      importedNamespace = 'a3A6600C5031F' />
    <Model:Import xmi.id = 'G.927' 
      name = 'Instance' annotation = '' 
      visibility = 'public_vis' isClustered = 'true' 
      importedNamespace = 'a3A6342930318' />
    <!-- ==================== Record.Field    [Class] ==================== -->
    <Model:Class xmi.id = 'a3730B40B002A' 
      name = 'Field' annotation = 'A Field is the fundamental information container within a RecordDef. It holds one piece of information, which may itself have structure. The inherited associations StructuralFeatureType and ElementOwnership provide access to a Field instance&#x0092;s type and owning classifier, respectively.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a3A6F62780143' >
      <Model:Namespace.contents>
        <!-- ==================== Record.Field.length    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3A5CE1A903E1' 
          name = 'length' annotation = 'The length of a fixed length character or byte string field.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6FD7021C' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Record.Field.precision    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3A5CE1CF0335' 
          name = 'precision' annotation = 'The total number of digits in a numeric field.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6FD7021C' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Record.Field.scale    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3A5CE1BF023B' 
          name = 'scale' annotation = 'The number of digits on the right of the decimal separator in a numeric field.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6FD7021C' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Record.RecordDef    [Class] ==================== -->
    <Model:Class xmi.id = 'a3731BA330352' 
      name = 'RecordDef' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a3298A02900FE' >
      <Model:ModelElement.annotation>A RecordDef is an ordered collection of Fields representing the structure of a Record.

Examples of RecordDefs include definitions of

    language-specific data structures
    database records
    IMS segments

The internal structure of a RecordDef instance is constructed by adding Field instances as features (using the ElementOwnership association) and pointing each Field instance&#x0092;s inherited type reference to the Classifier instance representing the Field&#x0092;s data type. The referenced instance can be either a primitive data type (an instance of DataType, such as "integer") or a structured data type (such as a Group instance).

Refer to the example for more details of the relationships between RecordDefs, Fields, Records, and their values.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Record.RecordDef.fieldDelimiter    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3768142100EF' 
          name = 'fieldDelimiter' annotation = 'The value of a fieldDelimiter used to separate field values in an input stream.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Record.RecordDef.isFixedWidth    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3768181C0285' 
          name = 'isFixedWidth' annotation = 'True if the record is fixed length. Otherwise, the record can be of variable length.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6F650276' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Record.RecordDef.textDelimiter    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a37681F5E01F9' 
          name = 'textDelimiter' annotation = 'The delimiter of a text string in the record, such as a quote.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Record.RecordDef.file    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a385831EC03AC' 
          name = 'file' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a379CDD470029' 
          referencedEnd = 'a379CDDC80100' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Record.FixedOffsetField    [Class] ==================== -->
    <Model:Class xmi.id = 'a377BE6930160' 
      name = 'FixedOffsetField' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a3730B40B002A' >
      <Model:ModelElement.annotation>Instances of FixeOffsetField represent fields that have a fixed location in a record.

FixedOffsetFields can be used as a foundation for recording details of physical record layouts and as a means of representing the internal structure of undiscriminated (ie, C-type) unions.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Record.FixedOffsetField.offset    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a377BE6A40112' 
          name = 'offset' annotation = 'Specifies the offset of the field within its container in units of the number of bits indicated in the offsetUnitBits attribute.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6FD7021C' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Record.FixedOffsetField.offsetUnitBits    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a377BE6A80102' 
          name = 'offsetUnitBits' annotation = 'The number of bits making up one record offset unit. For example, for a byte-relative offset, the value of this attribute would typically be 8.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6FD7021C' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Record.RecordFile    [Class] ==================== -->
    <Model:Class xmi.id = 'a379CDD470029' 
      name = 'RecordFile' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5D19033E' >
      <Model:ModelElement.annotation>A RecordFile is the definition of a file. It may have one or more RecordDefs, defining the structure of the records in the file. Each of these RecordDefs defines a valid structure for records in the file. Subclasses of RecordFile in extensions to support specific languages and systems may be used to represent specific types of files such as COBOL CopyLib files and C-language header files.

Physical deployments of a RecordFile can be found via the DataManagerDataPackage association in the SoftwareDeployment package .</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Record.RecordFile.isSelfDescribing    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3768184E02E3' 
          name = 'isSelfDescribing' annotation = 'True if the contents of fields in the first record of the file contain field names applicable to subsequent records.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6F650276' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Record.RecordFile.recordDelimiter    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3A5CE4350306' 
          name = 'recordDelimiter' annotation = 'Contains the value that serves as a logical end-of-record indication in a stream-oriented file. A common examples include the usage of carriage-return characters and carriage-return/line-feed character pairs as new-line characters in ASCII text files.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6FD7021C' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Record.RecordFile.skipRecords    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3768185900DF' 
          name = 'skipRecords' annotation = 'The number of records to ignore at the beginning of a file. The specific semantics of records that are skipped may be beyond the scope of CWM.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6FD7021C' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Record.RecordFile.record    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a385831D00064' 
          name = 'record' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3731BA330352' 
          referencedEnd = 'a379CDDC8010A' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Record.FieldValue    [Class] ==================== -->
    <Model:Class xmi.id = 'a3858286A0172' 
      name = 'FieldValue' annotation = 'The value currently held in a Field instance.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a33BC9AFB02E4' />
    <!-- ==================== Record.Record    [Class] ==================== -->
    <Model:Class xmi.id = 'a385828750014' 
      name = 'Record' annotation = 'A Record, a subclass of Object, represents a single data record. Each Record is described by a RecordDef instance found via the Object&#x0092;s InstanceClassifier association.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a33BC99D60302' />
    <!-- ==================== Record.RecordSet    [Class] ==================== -->
    <Model:Class xmi.id = 'a387E63C801FE' 
      name = 'RecordSet' annotation = 'A RecordSet represents a collection of Record instances.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a387E624E0365' />
    <!-- ==================== Record.org.omg.mof.idl_substitute_name=CwmRecordSet    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.928' 
      name = 'org.omg.mof.idl_substitute_name=CwmRecordSet' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a387E63C801FE' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>CwmRecordSet</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Record.Group    [Class] ==================== -->
    <Model:Class xmi.id = 'a3768108E00DF' 
      name = 'Group' annotation = 'A Group is a structured data type and is used to collect together Field instances within a Record. Groups can be used in RecordDef instances as shown in the foregoing example.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a32989FB2023D' />
    <!-- ==================== Record.RecordToFile    [Association] ==================== -->
    <Model:Association xmi.id = 'a379CDDC70113' 
      name = 'RecordToFile' annotation = 'A Record definition can appy to records stored in a RecordFile.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a379CDDC80100' 
          name = 'file' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a379CDD470029' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a379CDDC8010A' 
          name = 'record' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3731BA330352' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
  </Model:Namespace.contents>
</Model:Package>
<!-- ==================== Multidimensional    [Package] ==================== -->
<Model:Package xmi.id = 'a374EBFFB0357' 
  name = 'Multidimensional' 
  isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
  <Model:ModelElement.annotation>The CWM Multidimensional metamodel is a generic representation of a multidimensional database.

Multidimensional databases are OLAP databases that are directly implemented by multidimensional database systems. In a multidimensional database, key OLAP constructs (dimensions, hierarchies, etc.) are represented by the internal data structures of a ultidimensional database server, and common OLAP operations (consolidation, drill-down, etc.) are performed by the server acting on those data structures. 

Multidimensional databases are often classified as "physical OLAP" or "MOLAP" (memory-based OLAP) databases.

Multidimensional databases offer enhanced performance and flexibility over OLAP systems that simulate multidimensional functionality using other technologies (e.g., relational database or spreadsheet):

Performance: Multidimensional databases provide rapid consolidation times and formula calculations, and consistent query response times regardless of query complexity. This is accomplished, in part, through the use of efficient cell storage techniques and highly-optimized index paths.

Flexibility: The specification and use of multidimensional schemas and queries (including the design of cubes, dimensions, hierarchies, member formulas, the manipulation of query result sets, etc.) can be accomplished in a relatively straight-forward manner, since the server directly supports (and exposes) the multidimensional paradigm.

The CWM Multidimensional metamodel does not attempt to provide a complete representation of all aspects of commercially available, multidimensional databases. Unlike relational database management systems, multidimensional databases tend to be proprietary in structure, and there are no published, widely agreed upon, standard representations of the logical schema of a multidimensional database. Therefore, the CWM Multidimensional Database metamodel is oriented toward complete generality of specification. Tool-specific extensions to the metamodel are relatively easy to formulate, and several examples are provided in Volume 2, Extensions, of the CWM Specification.

The Multidimensional package depends on the following packages:

    org.omg::CWM::ObjectModel::Core
    org.omg::CWM::ObjectModel::Instance

The major classes and associations of the Multidimensional metamodel are shown in Figure 11-1.

Schema is the container of all elements comprising a Multidimensional model. It also represents the logical unit of deployment of a Multidimensional database instance.
Dimension represents a physical dimension in a Multidimensional database. Whereas
the OLAP metamodel defines &#x0093;dimension&#x0094; as a purely conceptual entity, this
Dimension represents the dimension object exposed by the programming model of a
Multidimensional database.
A Dimension may reference other instances of Dimension to form arbitrarily complex
dimensional structures (e.g., hierarchies with varying levels of detail).

DimensionedObject represents an attribute of Dimension. Examples of DimensionedObjects include measures (variables), formulas, consolidation functions, member alias names, etc. DimensionedObjects are contained by the Schema and referenced by the Dimensions that use them. 

MemberSet represents the collection of Members associated with an instance of Dimension, and MemberValue represents an instance value of a Member. MemberSet, Member and MemberValue enable the specification and interchange of both M1-level Multidimensional models and associated M0-level data values.

Figure 11-2 illustrates the inheritance of the Multidimensional classes from metaclasses of the Object Model.

OCL Representation of Multidimensional Constraints

[C-1] A Dimension may not reference itself as a component, nor as a composite.
context Dimension
inv: self.component-&gt;excludes( self )
inv: self.composite-&gt;excludes( self )

The transitive closure of components of an instance of Dimension must not include the
Dimension instance.

The transitive closure of composites of an instance of Dimension must not include the
Dimension instance.</Model:ModelElement.annotation>
  <Model:Namespace.contents>
    <!-- ==================== Multidimensional.org.omg.xmi.namespace=CWMMDB    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.929' 
      name = 'org.omg.xmi.namespace=CWMMDB' annotation = '' 
      tagId = 'org.omg.xmi.namespace' 
      elements = 'a374EBFFB0357' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>CWMMDB</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Multidimensional.org.omg.mof.idl_prefix=org.omg.cwm.resource    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.930' 
      name = 'org.omg.mof.idl_prefix=org.omg.cwm.resource' annotation = '' 
      tagId = 'org.omg.mof.idl_prefix' 
      elements = 'a374EBFFB0357' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.resource</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Multidimensional.org.omg.mof.idl_substitute_name=MultidimensionalModule    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.931' 
      name = 'org.omg.mof.idl_substitute_name=MultidimensionalModule' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a374EBFFB0357' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>MultidimensionalModule</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Multidimensional.com.urep.jcr.java_prefix=org.omg.java.cwm.resource    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.932' 
      name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.resource' annotation = '' 
      tagId = 'com.urep.jcr.java_prefix' 
      elements = 'a374EBFFB0357' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.resource</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <Model:Import xmi.id = 'G.933' 
      name = 'Core' annotation = '' 
      visibility = 'public_vis' isClustered = 'true' 
      importedNamespace = 'a3A6600C5031F' />
    <Model:Import xmi.id = 'G.934' 
      name = 'Instance' annotation = '' 
      visibility = 'public_vis' isClustered = 'true' 
      importedNamespace = 'a3A6342930318' />
    <!-- ==================== Multidimensional.Dimension    [Class] ==================== -->
    <Model:Class xmi.id = 'a374CB3BA032A' 
      name = 'Dimension' annotation = 'Dimension represents physical dimension in a multidimensional database (e.g., a dimension object defined by the programming model/API of an OLAP database server). Tool-specific extensions to the Multidimensional package will generally contain classes that derive from Dimension.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a3298A02900FE' >
      <Model:Namespace.contents>
        <!-- ==================== Multidimensional.Dimension.dimensionedObject    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3866BB3701F2' 
          name = 'dimensionedObject' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a374CB311034F' 
          referencedEnd = 'a374CB3CD01D4' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Multidimensional.Dimension.component    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3866BBD9011D' 
          name = 'component' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a374CB3BA032A' 
          referencedEnd = 'a374CB45500DE' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Multidimensional.Dimension.composite    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a38814290018F' 
          name = 'composite' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a374CB3BA032A' 
          referencedEnd = 'a374CB45500D4' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Multidimensional.Dimension.memberSet    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3A5E216E037D' 
          name = 'memberSet' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a38963CD7009C' 
          referencedEnd = 'a3A5E210A0329' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Multidimensional.Dimension.schema    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3A5E22970095' 
          name = 'schema' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3793D1C503DE' 
          referencedEnd = 'a3A5CC42A0038' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Multidimensional.org.omg.mof.idl_substitute_name=CwmDimension    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.935' 
      name = 'org.omg.mof.idl_substitute_name=CwmDimension' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a374CB3BA032A' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>CwmDimension</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Multidimensional.com.urep.jcr.java_substitute_name=CwmDimension    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.936' 
      name = 'com.urep.jcr.java_substitute_name=CwmDimension' annotation = '' 
      tagId = 'com.urep.jcr.java_substitute_name' 
      elements = 'a374CB3BA032A' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>CwmDimension</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Multidimensional.DimensionedObject    [Class] ==================== -->
    <Model:Class xmi.id = 'a374CB311034F' 
      name = 'DimensionedObject' annotation = 'DimensionedObject represents an attribute of Dimension.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a3A6F62780143' >
      <Model:Namespace.contents>
        <!-- ==================== Multidimensional.DimensionedObject.dimension    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3866BABE0360' 
          name = 'dimension' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a374CB3BA032A' 
          referencedEnd = 'a374CB3CD01D3' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Multidimensional.DimensionedObject.schema    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3A5CCD630178' 
          name = 'schema' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3793D1C503DE' 
          referencedEnd = 'a3A5CC427001F' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Multidimensional.Member    [Class] ==================== -->
    <Model:Class xmi.id = 'a3862763E0366' 
      name = 'Member' annotation = 'Member represents a member of a Dimension.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a33BC99D60302' />
    <!-- ==================== Multidimensional.MemberSet    [Class] ==================== -->
    <Model:Class xmi.id = 'a38963CD7009C' 
      name = 'MemberSet' annotation = 'MemberSet represents the collection of Members associated with an instance of Dimension.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a387E624E0365' >
      <Model:Namespace.contents>
        <!-- ==================== Multidimensional.MemberSet.dimension    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3A5E21D60110' 
          name = 'dimension' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a374CB3BA032A' 
          referencedEnd = 'a3A5E210A0365' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Multidimensional.org.omg.mof.idl_substitute_name=CwmMemberSet    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.937' 
      name = 'org.omg.mof.idl_substitute_name=CwmMemberSet' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a38963CD7009C' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>CwmMemberSet</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Multidimensional.MemberValue    [Class] ==================== -->
    <Model:Class xmi.id = 'a3862710900E5' 
      name = 'MemberValue' annotation = 'MemberValue represents an instance value of a Member.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a33BC9AFB02E4' />
    <!-- ==================== Multidimensional.Schema    [Class] ==================== -->
    <Model:Class xmi.id = 'a3793D1C503DE' 
      name = 'Schema' annotation = 'Schema contains all elements comprising a Multidimensional database.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5D19033E' >
      <Model:Namespace.contents>
        <!-- ==================== Multidimensional.Schema.dimensionedObject    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3A5E22E4038F' 
          name = 'dimensionedObject' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a374CB311034F' 
          referencedEnd = 'a3A5CC4260277' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Multidimensional.Schema.dimension    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3A5E234000B6' 
          name = 'dimension' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a374CB3BA032A' 
          referencedEnd = 'a3A5CC4290357' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Multidimensional.DimensionsReferenceDimensionedObjects    [Association] ==================== -->
    <Model:Association xmi.id = 'a374CB3CC03E5' 
      name = 'DimensionsReferenceDimensionedObjects' annotation = 'A Dimension may reference several instances of DimensionedObject. A DimensionedObject may be referenced by several Dimensions.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a374CB3CD01D3' 
          name = 'dimension' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a374CB3BA032A' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a374CB3CD01D4' 
          name = 'dimensionedObject' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a374CB311034F' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Multidimensional.CompositesReferenceComponents    [Association] ==================== -->
    <Model:Association xmi.id = 'a374CB45202A7' 
      name = 'CompositesReferenceComponents' annotation = 'A Dimension may reference other instances of Dimension in order to derive more complex dimensional structures.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a374CB45500D4' 
          name = 'composite' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a374CB3BA032A' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a374CB45500DE' 
          name = 'component' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a374CB3BA032A' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Multidimensional.MDSchemaOwnsDimensionedObjects    [Association] ==================== -->
    <Model:Association xmi.id = 'a3A5CC426005A' 
      name = 'MDSchemaOwnsDimensionedObjects' annotation = 'A Multidimensional Schema may own any number of DimensionedObjects.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3A5CC4260277' 
          name = 'dimensionedObject' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a374CB311034F' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3A5CC427001F' 
          name = 'schema' annotation = '' 
          isNavigable = 'true' aggregation = 'composite' isChangeable = 'true' 
          type = 'a3793D1C503DE' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Multidimensional.MDSchemaOwnsDimensions    [Association] ==================== -->
    <Model:Association xmi.id = 'a3A5CC4290127' 
      name = 'MDSchemaOwnsDimensions' annotation = 'A Multidimensional Schema may own any number of Dimensions.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3A5CC4290357' 
          name = 'dimension' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a374CB3BA032A' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3A5CC42A0038' 
          name = 'schema' annotation = '' 
          isNavigable = 'true' aggregation = 'composite' isChangeable = 'true' 
          type = 'a3793D1C503DE' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== Multidimensional.DimensionOwnsMemberSets    [Association] ==================== -->
    <Model:Association xmi.id = 'a3A5E2105028C' 
      name = 'DimensionOwnsMemberSets' annotation = 'A Dimension may own any number of MemberSets.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3A5E210A0329' 
          name = 'memberSet' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a38963CD7009C' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3A5E210A0365' 
          name = 'dimension' annotation = '' 
          isNavigable = 'true' aggregation = 'composite' isChangeable = 'true' 
          type = 'a374CB3BA032A' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
  </Model:Namespace.contents>
</Model:Package>
<!-- ==================== XML    [Package] ==================== -->
<Model:Package xmi.id = 'a379CA3670197' 
  name = 'XML' 
  isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
  <Model:ModelElement.annotation>XML is rapidly becoming a very important type of data resource, especially in the Internet environment. On the one hand, HTML is evolving to be XML-compliant; in the near future, all HTML documents can be expected to become valid XML documents. On the other hand, XML is quickly becoming the standard format for interchange of data and/or metadata (e.g., XMI). Therefore, XML documents (or streams) representing data and/or metadata can be expected to appear everywhere. 

The XML package contains classes and associations that represent common metadata describing XML data resources. It is based on XML 1.0 [XML]. XML Schema is an ongoing activity in the W3C. As future standards are adopted by the W3C on XML Schema, this package will be revised and extended accordingly.

This section provides a description of the main features of the XML package.

An XML schema contains a set of definitions and declarations, in the form of XML element type definitions. An XML element type may contain a set of XML attributes and/or a content model. An attribute can have one of the following defaults: required, implied, default, or fixed. The content model can be one of the following types: empty, any, mixed, or element. Except for the empty content model, a content model consists of constituent parts, particularly element type references. The allowed occurrence of the constituents can be one of the following types: one, zero or one, zero or more, or
one or more.

An any content model consists of any element types. A mixed content model consists of character data and specified element type references. An element content model consists of specified element type references and/or element content models. An element content model can be one of the following types: choice or sequence.

The XML package depends on the following packages:

    omg.org::CWM::ObjectModel::Core
    omg.org::CWM::ObjectModel::Instance
    omg.org::CWM::Foundation::DataTypes

The metamodel diagram for the XML package is split into two parts. The first diagram shows the XML classes and associations, while the second shows the inheritance hierarchy.

OCL Representation of XML Constraints

   None</Model:ModelElement.annotation>
  <Model:Namespace.contents>
    <!-- ==================== XML.org.omg.xmi.namespace=CWMXML    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.938' 
      name = 'org.omg.xmi.namespace=CWMXML' annotation = '' 
      tagId = 'org.omg.xmi.namespace' 
      elements = 'a379CA3670197' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>CWMXML</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== XML.org.omg.mof.idl_prefix=org.omg.cwm.resource    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.939' 
      name = 'org.omg.mof.idl_prefix=org.omg.cwm.resource' annotation = '' 
      tagId = 'org.omg.mof.idl_prefix' 
      elements = 'a379CA3670197' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.resource</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== XML.org.omg.mof.idl_substitute_name=XMLModule    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.940' 
      name = 'org.omg.mof.idl_substitute_name=XMLModule' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a379CA3670197' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>XMLModule</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== XML.com.urep.jcr.java_prefix=org.omg.java.cwm.resource    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.941' 
      name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.resource' annotation = '' 
      tagId = 'com.urep.jcr.java_prefix' 
      elements = 'a379CA3670197' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.resource</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <Model:Import xmi.id = 'G.942' 
      name = 'Core' annotation = '' 
      visibility = 'public_vis' isClustered = 'true' 
      importedNamespace = 'a3A6600C5031F' />
    <Model:Import xmi.id = 'G.943' 
      name = 'Instance' annotation = '' 
      visibility = 'public_vis' isClustered = 'true' 
      importedNamespace = 'a3A6342930318' />
    <!-- ==================== XML.Schema    [Class] ==================== -->
    <Model:Class xmi.id = 'a3786599903AB' 
      name = 'Schema' annotation = 'This represents an XML schema which contains a set of definitions and declarations. In XML, this is known as document type definition, or DTD, which provides a grammar for a class of documents.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5D19033E' >
      <Model:Namespace.contents>
        <!-- ==================== XML.Schema.version    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3796325B039A' 
          name = 'version' annotation = 'Identifies the version of the XML.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== XML.Schema.xmlNamespace    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a379633FF038E' 
          name = 'xmlNamespace' annotation = 'Identifies the XML namespace of the Schema.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== XML.Schema.elementType    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a387183680041' 
          name = 'elementType' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a327A5C7301CC' 
          referencedEnd = 'a3A2C186203A1' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== XML.ElementType    [Class] ==================== -->
    <Model:Class xmi.id = 'a378659AF0258' 
      name = 'ElementType' annotation = 'This represents an XML element type definition. In XML, each document contains one or more elements. The element structure may, for validation purposes, be constrained using element type and attribute declarations. An element type declaration constrains the element&#x0092;s content.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a3298A02900FE' >
      <Model:Namespace.contents>
        <!-- ==================== XML.ElementType.schema    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a38717F620145' 
          name = 'schema' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a32B69F3A0118' 
          referencedEnd = 'a3A2C18630036' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== XML.ElementType.attribute    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a38717F9F01EC' 
          name = 'attribute' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a32989F9700FE' 
          referencedEnd = 'a32B5D7EF03DD' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== XML.ElementType.content    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a38717FCC00EC' 
          name = 'content' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3796417C012B' 
          referencedEnd = 'a37B5A6E0001A' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== XML.org.omg.mof.idl_substitute_name=xmlAttribute    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.944' 
      name = 'org.omg.mof.idl_substitute_name=xmlAttribute' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a38717F9F01EC' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>xmlAttribute</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== XML.Attribute    [Class] ==================== -->
    <Model:Class xmi.id = 'a379631680282' 
      name = 'Attribute' annotation = 'This represents an XML attribute declaration. In XML, attributes are used to associate name-value pairs with elements. Each attribute declaration specifies the name, data type, and default value (if any) of each attribute associated with a given element type.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a3A6F62780143' >
      <Model:Namespace.contents>
        <!-- ==================== XML.Attribute.defaultKind    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a379638FD01A6' 
          name = 'defaultKind' annotation = 'Identifies the kind of attribute default.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a37B5AF5001F2' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== XML.Attribute.elementType    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3871786900FF' 
          name = 'elementType' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a32989FB2023D' 
          referencedEnd = 'a32B5D7EF03D3' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== XML.org.omg.IDL Substitute Name=XmlAttribute    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.945' 
      name = 'org.omg.IDL Substitute Name=XmlAttribute' annotation = '' 
      tagId = 'org.omg.IDL Substitute Name' 
      elements = 'a379631680282' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>XmlAttribute</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== XML.org.omg.mof.idl_substitute_name=XmlAttribute    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.946' 
      name = 'org.omg.mof.idl_substitute_name=XmlAttribute' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a379631680282' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>XmlAttribute</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== XML.Content    [Class] ==================== -->
    <Model:Class xmi.id = 'a3796417C012B' 
      name = 'Content' annotation = 'This represents the content model of an ElementType. In XML, each document contains one or more elements, the boundaries of which are normally delimited by start-tags and end-tags. The body between the start-tag and end-tag is called the element&#x0092;s content. An element type declaration constrains the element&#x0092;s content.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C7301CC' >
      <Model:Namespace.contents>
        <!-- ==================== XML.Content.type    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a37964D7E0065' 
          name = 'type' annotation = 'Identifies the type of the content model.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a37B5B09E035B' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== XML.Content.occurrence    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a37B6364A0070' 
          name = 'occurrence' annotation = 'Identifies the allowed occurrence of the content constituents.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a37B5C29302FE' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== XML.Content.elementType    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a38717A390308' 
          name = 'elementType' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a378659AF0258' 
          referencedEnd = 'a37B5A6E00038' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== XML.Content.ownedElementType    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a38717A600246' 
          name = 'ownedElementType' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3870FE7E0022' 
          referencedEnd = 'a3871031B002A' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== XML.ElementContent    [Class] ==================== -->
    <Model:Class xmi.id = 'a3796465A0087' 
      name = 'ElementContent' annotation = 'This represents an element content which contains only ElementTypeReferences. In XML, an element type has element content when elements of that type must contain only child elements (no character data), optionally separated by white space. In this case, the constraint includes a content model that governs the allowed types of the child elements and the order in which they are allowed to appear.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a3796417C012B' >
      <Model:Namespace.contents>
        <!-- ==================== XML.ElementContent.order    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a37B5C61700FC' 
          name = 'order' annotation = 'Identifies the order type of the element content.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a37B5C648003E' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== XML.ElementContent.ownedContent    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a38717CD7033E' 
          name = 'ownedContent' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3796465A0087' 
          referencedEnd = 'a37B641D50123' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== XML.ElementContent.ownerContent    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a38717D06029B' 
          name = 'ownerContent' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3796465A0087' 
          referencedEnd = 'a37B641D500FB' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== XML.MixedContent    [Class] ==================== -->
    <Model:Class xmi.id = 'a3796466F03DB' 
      name = 'MixedContent' annotation = 'This represents a mixed content of character data and ElementTypeReferences. In XML, an element type has mixed content when elements of that type may contain character data, optionally interspersed with child elements. In this case, the types of the child elements may be constrained, but not their order or their number of occurrences.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a3796417C012B' >
      <Model:Namespace.contents>
        <!-- ==================== XML.MixedContent.text    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a387185E803B2' 
          name = 'text' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a387100F30388' 
          referencedEnd = 'a38710460006E' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== XML.AttributeDefault    [DataType] ==================== -->
    <Model:DataType xmi.id = 'a37B5AF5001F2' 
      name = 'AttributeDefault' annotation = 'required, implied, default, fixed' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
      <Model:DataType.typeCode>
        <XMI.CorbaTypeCode>
          <XMI.CorbaTcEnum xmi.tcName = 'AttributeDefault'>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'xml_required'/>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'xml_implied'/>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'xml_default'/>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'xml_fixed'/>
          </XMI.CorbaTcEnum>
        </XMI.CorbaTypeCode>
      </Model:DataType.typeCode>
    </Model:DataType>
    <!-- ==================== XML.org.omg.xmi.enumerationUnprefix=xml_    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.947' 
      name = 'org.omg.xmi.enumerationUnprefix=xml_' annotation = '' 
      tagId = 'org.omg.xmi.enumerationUnprefix' 
      elements = 'a37B5AF5001F2 a37B5B09E035B a37B5C29302FE a37B5C648003E' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>xml_</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== XML.ContentType    [DataType] ==================== -->
    <Model:DataType xmi.id = 'a37B5B09E035B' 
      name = 'ContentType' annotation = 'empty, any, mixed, element' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
      <Model:DataType.typeCode>
        <XMI.CorbaTypeCode>
          <XMI.CorbaTcEnum xmi.tcName = 'ContentType'>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'xml_empty'/>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'xml_any'/>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'xml_mixed'/>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'xml_element'/>
          </XMI.CorbaTcEnum>
        </XMI.CorbaTypeCode>
      </Model:DataType.typeCode>
    </Model:DataType>
    <!-- ==================== XML.OccurrenceType    [DataType] ==================== -->
    <Model:DataType xmi.id = 'a37B5C29302FE' 
      name = 'OccurrenceType' annotation = 'one, zeroOrOne, zeroOrMore, OneOrMore' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
      <Model:DataType.typeCode>
        <XMI.CorbaTypeCode>
          <XMI.CorbaTcEnum xmi.tcName = 'OccurrenceType'>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'xml_one'/>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'xml_zeroOrOne'/>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'xml_zeroOrMore'/>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'xml_oneOrMore'/>
          </XMI.CorbaTcEnum>
        </XMI.CorbaTypeCode>
      </Model:DataType.typeCode>
    </Model:DataType>
    <!-- ==================== XML.ElementOrderType    [DataType] ==================== -->
    <Model:DataType xmi.id = 'a37B5C648003E' 
      name = 'ElementOrderType' annotation = 'choice, sequence' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
      <Model:DataType.typeCode>
        <XMI.CorbaTypeCode>
          <XMI.CorbaTcEnum xmi.tcName = 'ElementOrderType'>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'xml_choice'/>
          <XMI.CorbaTcEnumLabel xmi.tcName = 'xml_sequence'/>
          </XMI.CorbaTcEnum>
        </XMI.CorbaTypeCode>
      </Model:DataType.typeCode>
    </Model:DataType>
    <!-- ==================== XML.ElementTypeReference    [Class] ==================== -->
    <Model:Class xmi.id = 'a3870FE7E0022' 
      name = 'ElementTypeReference' annotation = 'This represents an XML element type reference. In XML, an element content or a mixed content of an element type may contain references to element type definitions.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a3A6F62780143' >
      <Model:Namespace.contents>
        <!-- ==================== XML.ElementTypeReference.occurrence    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a3871007F02D7' 
          name = 'occurrence' annotation = 'Identifies the allowed occurrence of the ElementTypeReference.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a37B5C29302FE' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== XML.ElementTypeReference.ownerContent    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a387182190202' 
          name = 'ownerContent' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3796417C012B' 
          referencedEnd = 'a3871031B003E' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== XML.Text    [Class] ==================== -->
    <Model:Class xmi.id = 'a387100F30388' 
      name = 'Text' annotation = 'This represents character data. In XML, a mixed content of an element type may contain text.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a3A6F62780143' >
      <Model:Namespace.contents>
        <!-- ==================== XML.Text.ownerContent    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3871862F00BB' 
          name = 'ownerContent' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a3796466F03DB' 
          referencedEnd = 'a38710460008C' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== XML.Element    [Class] ==================== -->
    <Model:Class xmi.id = 'a3887821D01A4' 
      name = 'Element' annotation = 'This represents an instance of an ElementType.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a33BC99D60302' />
    <!-- ==================== XML.org.omg.mof.idl_substitute_name=XmlElement    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.948' 
      name = 'org.omg.mof.idl_substitute_name=XmlElement' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a3887821D01A4' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>XmlElement</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== XML.com.urep.jcr.java_substitute_name=XmlElement    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.949' 
      name = 'com.urep.jcr.java_substitute_name=XmlElement' annotation = '' 
      tagId = 'com.urep.jcr.java_substitute_name' 
      elements = 'a3887821D01A4' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>XmlElement</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== XML.Document    [Class] ==================== -->
    <Model:Class xmi.id = 'a3887828E0002' 
      name = 'Document' annotation = 'This represents an XML document, which is a collection of XML Elements.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a387E624E0365' />
    <!-- ==================== XML.ElementTypeContent    [Association] ==================== -->
    <Model:Association xmi.id = 'a37B5A6DE022A' 
      name = 'ElementTypeContent' annotation = 'This association relates an ElementType with its Content.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a37B5A6E0001A' 
          name = 'content' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3796417C012B' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a37B5A6E00038' 
          name = 'elementType' annotation = '' 
          isNavigable = 'true' aggregation = 'shared' isChangeable = 'true' 
          type = 'a378659AF0258' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== XML.OwnedElementContent    [Association] ==================== -->
    <Model:Association xmi.id = 'a37B641CB01BF' 
      name = 'OwnedElementContent' annotation = 'This association relates an ElementContent with its constituent ElementContents.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a37B641D500FB' 
          name = 'ownerContent' annotation = '' 
          isNavigable = 'true' aggregation = 'shared' isChangeable = 'true' 
          type = 'a3796465A0087' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a37B641D50123' 
          name = 'ownedContent' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3796465A0087' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== XML.ContentElementTypeReference    [Association] ==================== -->
    <Model:Association xmi.id = 'a3871031902A8' 
      name = 'ContentElementTypeReference' annotation = 'This association relates a Content with its constituent ElementTypeReferences.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a3871031B002A' 
          name = 'ownedElementType' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a3870FE7E0022' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a3871031B003E' 
          name = 'ownerContent' annotation = '' 
          isNavigable = 'true' aggregation = 'shared' isChangeable = 'true' 
          type = 'a3796417C012B' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
    <!-- ==================== XML.MixedContentText    [Association] ==================== -->
    <Model:Association xmi.id = 'a3871045D0380' 
      name = 'MixedContentText' annotation = 'This association relates a MixedContent with its Text.' 
      isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis' 
      isDerived = 'false' >
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id = 'a38710460006E' 
          name = 'text' annotation = '' 
          isNavigable = 'true' aggregation = 'none' isChangeable = 'true' 
          type = 'a387100F30388' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id = 'a38710460008C' 
          name = 'ownerContent' annotation = '' 
          isNavigable = 'true' aggregation = 'composite' isChangeable = 'true' 
          type = 'a3796466F03DB' >
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
      </Model:Namespace.contents>
    </Model:Association>
  </Model:Namespace.contents>
</Model:Package>
<!-- ==================== Transformation    [Package] ==================== -->
<Model:Package xmi.id = 'a35E1B0B40042' 
  name = 'Transformation' 
  isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
  <Model:ModelElement.annotation>A key aspect of data warehousing is to extract, transform, and load data from
operational resources to a data warehouse or data mart for analysis. Extraction,
transformation, and loading can all be characterized as transformations. In fact,
whenever data needs to be converted from one form to another in data warehousing,
whether for storage, retrieval, or presentation purposes, transformations are involved.
Transformation, therefore, is central to data warehousing.
The Transformation package contains classes and associations that represent common
transformation metadata used in data warehousing. It covers basic transformations
among all types of data sources and targets: object-oriented, relational, record,
multidimensional, XML, OLAP, and data mining.
The Transformation package is designed to enable interchange of common metadata about transformation tools and activities. Specifically it is designed to: 

1. Relate a transformation with its data sources and targets. These data sources and targets can be of any type (e.g., object-oriented, relational) or granularity (e.g., class, attribute, table, column). They can be persistent (e.g., stored in a relational database) or transient.

2. Accommodate both "black box" and "white box" transformations. In the case of "black box" transformations, data sources and targets are related to a transformation and to each other at a coarse-grain level. We know the data sources and targets are related through the transformation, but we don&#x0092;t know how a specific piece of a data source is related to a specific piece of a data target. In the case of "white box" transformations, however, data sources and targets are related to a transformation and to each other at a fine-grain level. We know exactly how a specific piece of a data source is related to a specific piece of a data target through a specific part of the transformation.

3. Allow grouping of transformations into logical units. At the functional level, a logical unit defines a single unit of work, within which all transformations must be executed and completed together. At the execution level, logical units can be used to define the execution grouping and sequencing (either explicitly through precedence constraints or implicitly through data dependencies). A key consideration here is that both parallel and sequential executions (or a combination of both) can be accommodated.

The Transformation package assumes the existence of the following packages that represent types of potential data sources or targets: ObjectModel (object-oriented), Relational, Record, Multidimensional, XML, OLAP, and Data Mining. The Transformation package is an integral part of the following packages: OLAP, Data Mining, Warehouse Process, and Warehouse Operation. In particular, the Transformation and Warehouse Process packages together provide metamodel constructs that facilitate scheduling and execution in data warehousing, and the Transformation and Warehouse Operation packages together provide metamodel constructs that enable data lineage in data  warehousing.

This section provides a description of the main features of the Transformation package,
as illustrated in Figure 13-1 (see specification document for figure).

A transformation transforms a set of source objects into a set of target objects. The elements of a data object set can be any ObjectModel model elements, but typically are tables, columns, or model elements that represent transient, in memory, objects. Data object sets can be both sources and targets for different transformations. In particular, a given data object set can be the target of one transformation and the source of one or more transformations within the same logical unit. This is often the case with transformation that produce and consume temporary objects. 

Transformations allow a wide range of types (and granularity) to be defined for their data sources and targets. For example, the source type of a transformation can be an XML schema while the target type is a column, if the transformation deals with storing an XML document in a column of a relational database. More typically, the source types of a transformation are classes and attributes while the target types are tables and columns, or vice versa, if the transformation deals with converting object data into relational data, or vice versa.

Existing programs, queries, or rules (in fact, any ObjectModel operations) can be used to perform a transformation by associating them with the transformation using the transformation use dependency.

Transformations can be grouped into logical units. At the functional level, they are grouped into transformation tasks, each of which defines a set of transformations that must be executed and completed together - a logical unit of work. At the execution level, transformation steps are used to coordinate the flow of control between transformation tasks, with each transformation step executing a single transformation task. The transformation steps are further grouped into transformation activities.
Within each transformation activity, the execution sequence of its transformation steps are defined either explicitly by using the step precedence dependency or precedence constraint, or implicitly through data dependency.

There are certain "white-box" transformations which are commonly used and which can relate data sources and targets to a transformation and to each other at a detailed level. These transformations are convenient to use and they provide data lineage at a fine-grain level. One such transformation is the transformation map which consists of a set of classifier maps that in turn consists of a set of feature maps or classifier-feature maps. The other is the transformation tree, which represents a transformation as an unary or binary expression tree. For an example usage of the transformation map, please see Figure 13-4.

The Transformation package depends on the following packages: 

    omg.org::CWM::ObjectModel::Behavioral
    omg.org::CWM::ObjectModel::Core
    omg.org::CWM::Foundation::Expressions
    omg.org::CWM::Foundation::SoftwareDeployment

The CWM uses packages to control complexity and create groupings of logically interrelated classes and associations. The Transformation package is one such package. Within the Transformation package itself, however, the definition of subpackages is purposefully left out to reduce the length and complexity of the fully qualified names of Transformation classes and associations. There are, however, several groupings of classes and associations that form related sets of functionality within the Transformation package. Although separate subpackages have not been created for these functional areas, their identification improves the understandability of the Transformation package.

The Transformation package contains metamodel elements that support the following functions:

1. Transformation and data lineage. These classes and associations deal with transformations and their sources, targets, constraints, and operations.

2. Transformation grouping and execution. These classes and associations deal with grouping of transformations to form logical units and to define execution sequences.

3. Specialized transformations. These classes and associations define specialized, "white box", transformations that are commonly used in data warehousing. The specific Transformation classes and associations supporting each functional area are delineated in Table 13-1 (see specification document for table).

The metamodel diagram for the Transformation package is split into four parts. The first two diagrams show the Transformation classes and associations, while the last two show the inheritance hierarchy.

13.5 OCL Representation of Transformation Constraints

[C-1] The preceding step and succeeding step of StepPrecedence must not be the same.
context StepPrecedence
inv: self.precedingStep-&gt;forAll( p | self.succeedingStep-&gt;forAll( q | p &lt;&gt; q ) )

[C-2] A TransformationTask may not be its own inverse task.
Identifies the Transformation
context TransformationTask
inv: self.inverseTask-&gt;forAll( p | p &lt;&gt; self )

[C-3] A TransformationTask may not be its own original task.
context TransformationTask
inv: self.originalTask-&gt;forAll( p | p &lt;&gt; self )

[C-4] The ClassifierMapToCFMap association is derived from the Namespace-ModelElement association. All ownedElement ends of the association must be ClassifierFeatureMaps.
context ClassifierMapToCFMap
inv Namespace-ModelElement.allInstances.select( ownedElement.oclIsKindOf(
ClassifierFeatureMap ) )

[C-5] The ClassifierMapToFeatureMap association is derived from the Namespace-ModelElement association. All ownedElement ends of the association must be FeatureMaps.
context ClassifierMapToFeatureMap
inv Namespace-ModelElement.allInstances.select( ownedElement.oclIsKindOf(
FeatureMap ) )</Model:ModelElement.annotation>
  <Model:Namespace.contents>
    <!-- ==================== Transformation.org.omg.xmi.namespace=CWMTFM    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.951' 
      name = 'org.omg.xmi.namespace=CWMTFM' annotation = '' 
      tagId = 'org.omg.xmi.namespace' 
      elements = 'a35E1B0B40042' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>CWMTFM</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Transformation.org.omg.mof.idl_prefix=org.omg.cwm.analysis    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.952' 
      name = 'org.omg.mof.idl_prefix=org.omg.cwm.analysis' annotation = '' 
      tagId = 'org.omg.mof.idl_prefix' 
      elements = 'a35E1B0B40042' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.analysis</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Transformation.org.omg.mof.idl_substitute_name=TransformationModule    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.953' 
      name = 'org.omg.mof.idl_substitute_name=TransformationModule' annotation = '' 
      tagId = 'org.omg.mof.idl_substitute_name' 
      elements = 'a35E1B0B40042' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>TransformationModule</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Transformation.com.urep.jcr.java_prefix=org.omg.java.cwm.analysis    [Tag] ==================== -->
    <Model:Tag xmi.id = 'G.954' 
      name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.analysis' annotation = '' 
      tagId = 'com.urep.jcr.java_prefix' 
      elements = 'a35E1B0B40042' >
      <Model:Tag.values>
        <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.analysis</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <Model:Import xmi.id = 'G.955' 
      name = 'Core' annotation = '' 
      visibility = 'public_vis' isClustered = 'true' 
      importedNamespace = 'a3A6600C5031F' />
    <Model:Import xmi.id = 'G.956' 
      name = 'Expressions' annotation = '' 
      visibility = 'public_vis' isClustered = 'true' 
      importedNamespace = 'a38207A600078' />
    <Model:Import xmi.id = 'G.957' 
      name = 'SoftwareDeployment' annotation = '' 
      visibility = 'public_vis' isClustered = 'true' 
      importedNamespace = 'a3731C42F0314' />
    <!-- ==================== Transformation.Transformation    [Class] ==================== -->
    <Model:Class xmi.id = 'a36D1C5900149' 
      name = 'Transformation' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a32B69F3A0118' >
      <Model:ModelElement.annotation>This represents a transformation from a set of sources to a set of targets. 

If a model already exists for the object that performs the Transformation, then the model can be related to the Transformation via a TransformationUse dependency.
</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Transformation.Transformation.function    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a37097EFD0302' 
          name = 'function' annotation = 'Any code or script for the Transformation.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a363559050190' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Transformation.Transformation.functionDescription    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a37449EED0210' 
          name = 'functionDescription' annotation = 'A short description for any code or script performed by the Transformation.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD702401B8' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Transformation.Transformation.isPrimary    [Attribute] ==================== -->
        <Model:Attribute xmi.id = 'a37449EFF00FE' 
          name = 'isPrimary' annotation = 'This Transformation is the primary transformation for the associated TransformationTask.' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          isDerived = 'false' 
          type = 'a33DD6F650276' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Transformation.Transformation.source    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3856BB430348' 
          name = 'source' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a36D1C6960146' 
          referencedEnd = 'a36D1C87601BE' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Transformation.Transformation.target    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3874DE1F009B' 
          name = 'target' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a36D1C6960146' 
          referencedEnd = 'a36D1C8880232' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Transformation.Transformation.use    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3874DF44016F' 
          name = 'use' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a327A646F00E6' 
          referencedEnd = 'a33FFE57B03B3' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Transformation.DataObjectSet    [Class] ==================== -->
    <Model:Class xmi.id = 'a36D1C6960146' 
      name = 'DataObjectSet' annotation = 'This represents a set of data objects that can be the source or target of a Transformation.' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C7301CC' >
      <Model:Namespace.contents>
        <!-- ==================== Transformation.DataObjectSet.element    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3874DFCD0375' 
          name = 'element' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a327A5C7301CC' 
          referencedEnd = 'a37093FA10030' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Transformation.DataObjectSet.sourceTransformation    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3874DFF30033' 
          name = 'sourceTransformation' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a36D1C5900149' 
          referencedEnd = 'a36D1C87601B4' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Transformation.DataObjectSet.targetTransformation    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3874E01D03D7' 
          name = 'targetTransformation' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a36D1C5900149' 
          referencedEnd = 'a36D1C8880228' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Transformation.TransformationTask    [Class] ==================== -->
    <Model:Class xmi.id = 'a36D58FEC013E' 
      name = 'TransformationTask' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a3A59C2520149' >
      <Model:ModelElement.annotation>This represents a set of Transformations that must be executed together as a single task (logical unit).

A TransformationTask may have an inverse task. A transformation task that maps a source set "A" into a target set "B" can be reversed by the inverse transformation task that maps "B" into "A".</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Transformation.TransformationTask.transformation    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3874E105029A' 
          name = 'transformation' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a36D1C5900149' 
          referencedEnd = 'a3744AC390355' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Transformation.TransformationTask.inverseTask    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3874E13400B7' 
          name = 'inverseTask' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a36D58FEC013E' 
          referencedEnd = 'a36E06500016E' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Transformation.TransformationTask.originalTask    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3874E1620208' 
          name = 'originalTask' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a36D58FEC013E' 
          referencedEnd = 'a36E065000159' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Transformation.TransformationStep    [Class] ==================== -->
    <Model:Class xmi.id = 'a36D590F003B9' 
      name = 'TransformationStep' 
      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' 
      isSingleton = 'false' 
      supertypes = 'a327A5C7301CC' >
      <Model:ModelElement.annotation>This represents the usage of a TransformationTask in a TransformationActivity. A TransformationStep relates to one TransformationTask. 

TransformationSteps are used to coordinate the flow of control between their TransformationTasks. Ordering of the TransformationSteps are defined using the PrecedenceConstrainedBy dependency.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Transformation.TransformationStep.task    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3874E9FE03CE' 
          name = 'task' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a36D58FEC013E' 
          referencedEnd = 'a36D59A840057' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Transformation.TransformationStep.activity    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3874EA0500AD' 
          name = 'activity' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a32B69F3A0118' 
          referencedEnd = 'a3A2C18630036' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Transformation.TransformationStep.precedence    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3874EA0A03C1' 
          name = 'precedence' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a327A649B000A' 
          referencedEnd = 'a33EA67BB010F' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Transformation.TransformationStep.precedingStep    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3874EB33001E' 
          name = 'precedingStep' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a327A646F00E6' 
          referencedEnd = 'a33FFE57B03B3' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Transformation.TransformationStep.succeedingStep    [Reference] ==================== -->
        <Model:Reference xmi.id = 'a3874EB2400F9' 
          name = 'succeedingStep' annotation = '' 
          scope = 'instance_level' visibility = 'public_vis' 
          isChangeable = 'true' 
          type = 'a327A646F00E6' 
          referencedEnd = 'a335C0D7A02E4' >
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    </Model:Class>
    <!-- ==================== Transformation.TransformationActivity    [Class] ==================== -->
    <Model:Class xmi.id = 'a36E070680112' 
