Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<!-- <!DOCTYPE XMI SYSTEM 'Model1311.DTD' > -->
<XMI xmlns:Model="omg.org/mof.Model/1.3" xmi.version="1.1" 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>
<Model:Package visibility="public_vis" isAbstract="false" isLeaf="false" isRoot="false" annotation="Top-level package" name="Pentaho" xmi.id="z1">
<Model:Namespace.contents>
<Model:Tag elements="z1" tagId="javax.jmi.packagePrefix">
<Model:Tag.values>org.pentaho.pms.cwm</Model:Tag.values>
</Model:Tag>
<Model:Tag elements="z1" tagId="org.netbeans.implPackagePrefix">
<Model:Tag.values>org.pentaho.pms.cwm</Model:Tag.values>
</Model:Tag>
<Model:Package visibility="public_vis" isAbstract="false" isLeaf="false" isRoot="false" annotation="CWM Metadata Container" name="Meta">
<Model:Namespace.contents>
<!-- ==================== 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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a327A5C330208">
<Model:Tag.values>CwmElement</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a327A5C7301CC">
<Model:Tag.values>CwmModelElement</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a32B69F3A0118">
<Model:Tag.values>CwmNamespace</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a32989FB2023D">
<Model:Tag.values>CwmClassifier</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3298A02900FE">
<Model:Tag.values>CwmClass</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3298A036025B">
<Model:Tag.values>CwmDataType</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</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 &#147;see&#148; 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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a327A5D19033E">
<Model:Tag.values>CwmPackage</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a33CD6DE5030C">
<Model:Tag.values>CwmSubsystem</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a327A5D1E0032">
<Model:Tag.values>CwmModel</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a32989F9700FE">
<Model:Tag.values>CwmFeature</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3298F1A403BF">
<Model:Tag.values>CwmStructuralFeature</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3A6F62780143">
<Model:Tag.values>CwmAttribute</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a327A649B000A">
<Model:Tag.values>CwmConstraint</Model:Tag.values>
</Model:Tag>
</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 &quot;Abstraction&quot; and &quot;Usage&quot;." 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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a327A646F00E6">
<Model:Tag.values>CwmDependency</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a33CFA00203A2">
<Model:Tag.values>CwmExpression</Model:Tag.values>
</Model:Tag>
</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">
<Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a33CFA9DA01D6">
<Model:Tag.values>CwmBooleanExpression</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== 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">
<Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a363559050190">
<Model:Tag.values>CwmProcedureExpression</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== 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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a33DD6FC5001E">
<Model:Tag.values>CwmMultiplicity</Model:Tag.values>
</Model:Tag>
</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 &#146;unlimited&#146; 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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a33E93BD00075">
<Model:Tag.values>CwmMultiplicityRange</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3A24417902EF">
<Model:Tag.values>CwmStereotype</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a337A4EF7002C">
<Model:Tag.values>CwmTaggedValue</Model:Tag.values>
</Model:Tag>
</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="public_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="public_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="public_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="public_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="public_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="public_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="public_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" 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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a33D9073E03B6">
<Model:Tag.values>CwmArgument</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3298BCF00260">
<Model:Tag.values>CwmBehavioralFeature</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3A638B7E0318">
<Model:Tag.values>CwmCallAction</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3288E51203DE">
<Model:Tag.values>CwmEvent</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3342A195014D">
<Model:Tag.values>CwmInterface</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</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&#146;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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a327BB67E0028">
<Model:Tag.values>CwmMethod</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a327BB68C0398">
<Model:Tag.values>CwmOperation</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a327BBB9F02B2">
<Model:Tag.values>CwmParameter</Model:Tag.values>
</Model:Tag>
</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&#146;s &quot;signature&quot;." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_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&#146;s parameters as represented by the ordering of the BehavioralFeatureParameter association." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_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="public_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="public_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&#146;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" 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&#146;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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3A54CBFF0090">
<Model:Tag.values>CwmAssociation</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</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 &quot;target&quot; end), specifies whether the class on the target end is an aggregation with respect to the class on the other end (the &quot;source&quot; 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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3A6F584F03A5">
<Model:Tag.values>CwmAssociationEnd</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3A54BFAC011D">
<Model:Tag.values>CwmGeneralization</Model:Tag.values>
</Model:Tag>
</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&#146;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" 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's feature (Attribute) and must obey any constraints on the full descriptor of the Attribute'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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3BCB15050021">
<Model:Tag.values>CwmDataSlot</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a33BC9AFB02E4">
<Model:Tag.values>CwmDataValue</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a387E624E0365">
<Model:Tag.values>CwmExtent</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a327BC77C038E">
<Model:Tag.values>CwmInstance</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a33BC99D60302">
<Model:Tag.values>CwmObject</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3A244A10030F">
<Model:Tag.values>CwmSlot</Model:Tag.values>
</Model:Tag>
</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="public_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" 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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a364CD88902CE">
<Model:Tag.values>CwmResponsibleParty</Model:Tag.values>
</Model:Tag>
</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&#146;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&#146;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&#146;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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3731CE29023A">
<Model:Tag.values>CwmTelephone</Model:Tag.values>
</Model:Tag>
</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&#146;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 &quot;home&quot; or &quot;work&quot;, or perhaps an indication of the type of email system for which the eMailAddress is formatted, such as &quot;SMTP&quot; or &quot;X.400&quot;." 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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3731CEAE010E">
<Model:Tag.values>CwmEmail</Model:Tag.values>
</Model:Tag>
</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&#146;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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3731CF0A02C6">
<Model:Tag.values>CwmLocation</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3731D0010334">
<Model:Tag.values>CwmContact</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a375FF5A2008E">
<Model:Tag.values>CwmDescription</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a378B694F014B">
<Model:Tag.values>CwmDocument</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3810D01501DC">
<Model:Tag.values>CwmResourceLocator</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== BusinessInformation.ContactEmail    [Association] ==================== -->
    <Model:Association xmi.id="a3820871D02AB" name="ContactEmail" isRoot="true" isLeaf="true" isAbstract="false" visibility="public_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="public_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="public_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="public_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="public_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" 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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a376ACDB70218">
<Model:Tag.values>CwmEnumeration</Model:Tag.values>
</Model:Tag>
</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&#146;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&#146;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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a375EF35D035C">
<Model:Tag.values>CwmEnumerationLiteral</Model:Tag.values>
</Model:Tag>
</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">
<Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3702A52C0196">
<Model:Tag.values>CwmQueryExpression</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== 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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3731C90A00AA">
<Model:Tag.values>CwmTypeAlias</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3702894E0157">
<Model:Tag.values>CwmUnion</Model:Tag.values>
</Model:Tag>
</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&#146;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&#146;s discriminator would assume this instance&#146;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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a37028B93006D">
<Model:Tag.values>CwmUnionMember</Model:Tag.values>
</Model:Tag>
</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="public_vis" isDerived="false">
      <Model:ModelElement.annotation>The EnumerationLiterals association links enumeration literals to the Enumeration instances that contain them.

If the Enumeration&#146;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 &#147;a + b&#148; can be thought of as the function &#147;sum(a, b).&#148; 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&#146;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&#146;s parameters, plus one for the &#147;this&#148; 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" 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 &#147;root&#148;) 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&#146;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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a376A84310237">
<Model:Tag.values>CwmExpressionNode</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a376A84C202B4">
<Model:Tag.values>CwmConstantNode</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a376A84CD0321">
<Model:Tag.values>CwmElementNode</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a376A84D70341">
<Model:Tag.values>CwmFeatureNode</Model:Tag.values>
</Model:Tag>
</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="public_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&#146;s concept of a primary key or an object model&#146;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" 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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a376A879E0072">
<Model:Tag.values>CwmUniqueKey</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a376A89040331">
<Model:Tag.values>CwmIndex</Model:Tag.values>
</Model:Tag>
</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 &quot;foreign key&quot; 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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a376A8A6E00C0">
<Model:Tag.values>CwmKeyRelationship</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a377BD3F9017F">
<Model:Tag.values>CwmIndexedFeature</Model:Tag.values>
</Model:Tag>
</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&#146;s key are used by the Index." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_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="public_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" importedNamespace="a3A6600C5031F"/>
    <Model:Import xmi.id="G.902" name="BusinessInformation" annotation="" visibility="public_vis" importedNamespace="a38207A770114"/>
    <Model:Import xmi.id="G.903" name="TypeMapping" annotation="" visibility="public_vis" 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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3731C5690320">
<Model:Tag.values>CwmSite</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3731C5D500A4">
<Model:Tag.values>CwmMachine</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3731C5FD0337">
<Model:Tag.values>CwmSoftwareSystem</Model:Tag.values>
</Model:Tag>
</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&#146;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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3731C67B0071">
<Model:Tag.values>CwmDeployedComponent</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3795CFCF01CC">
<Model:Tag.values>CwmDeployedSoftwareSystem</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a376A2BCD0186">
<Model:Tag.values>CwmDataManager</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a37668549009C">
<Model:Tag.values>CwmDataProvider</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a378357EA0015">
<Model:Tag.values>CwmProviderConnection</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3A59C2520149">
<Model:Tag.values>CwmComponent</Model:Tag.values>
</Model:Tag>
</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&#146;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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3A59EFD80363">
<Model:Tag.values>CwmPackageUsage</Model:Tag.values>
</Model:Tag>
</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="public_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="public_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&#146;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" 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&#146;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&#146;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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3817226403A9">
<Model:Tag.values>CwmTypeMapping</Model:Tag.values>
</Model:Tag>
</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&#146;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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a38173AAE02EE">
<Model:Tag.values>CwmTypeSystem</Model:Tag.values>
</Model:Tag>
</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" importedNamespace="a3A6600C5031F"/>
    <Model:Import xmi.id="G.915" name="Behavioral" annotation="" visibility="public_vis" importedNamespace="a3A6342A4000B"/>
    <Model:Import xmi.id="G.916" name="Instance" annotation="" visibility="public_vis" importedNamespace="a3A6342930318"/>
    <Model:Import xmi.id="G.917" name="DataTypes" annotation="" visibility="public_vis" importedNamespace="a38207A4E0308"/>
    <Model:Import xmi.id="G.918" name="KeysIndexes" annotation="" visibility="public_vis" 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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a362E34BC0007">
<Model:Tag.values>CwmCatalog</Model:Tag.values>
</Model:Tag>
</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">
<Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3639010F0362">
<Model:Tag.values>CwmSchema</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== 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">
<Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a364CDDC2022D">
<Model:Tag.values>CwmColumnSet</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== 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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a362E664F03B3">
<Model:Tag.values>CwmNamedColumnSet</Model:Tag.values>
</Model:Tag>
</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. &quot;SESSION&quot;, &quot;APPLICATION&quot; 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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a364CDE8501D3">
<Model:Tag.values>CwmTable</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a364CDE8F01FF">
<Model:Tag.values>CwmView</Model:Tag.values>
</Model:Tag>
</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 &quot;SQL&quot;" 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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a364CDEA203C9">
<Model:Tag.values>CwmQueryColumnSet</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a36488C0301BD">
<Model:Tag.values>CwmSQLDataType</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a363916A10234">
<Model:Tag.values>CwmSQLDistinctType</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a363916290336">
<Model:Tag.values>CwmSQLSimpleType</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3648903F0365">
<Model:Tag.values>CwmSQLStructuredType</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a364CDDD800D0">
<Model:Tag.values>CwmColumn</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a36DC7EA303AC">
<Model:Tag.values>CwmProcedure</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a36DC7E9502F8">
<Model:Tag.values>CwmTrigger</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a36CC6C5501E2">
<Model:Tag.values>CwmSQLIndex</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a36F6E2ED0146">
<Model:Tag.values>CwmUniqueConstraint</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a362E6C290149">
<Model:Tag.values>CwmForeignKey</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a36CC6F570117">
<Model:Tag.values>CwmSQLIndexColumn</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</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">
<Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3870E1AD031C">
<Model:Tag.values>CwmPrimaryKey</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== 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">
<Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3870F1D702A0">
<Model:Tag.values>CwmRow</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== 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">
<Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3870F1E200C5">
<Model:Tag.values>CwmColumnValue</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== 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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3870FB0E020E">
<Model:Tag.values>CwmCheckConstraint</Model:Tag.values>
</Model:Tag>
</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">
<Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3896223901CC">
<Model:Tag.values>CwmRowSet</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== 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">
<Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3A6105950078">
<Model:Tag.values>CwmSQLParameter</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== 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="public_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="public_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="public_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="public_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="public_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] ==================== -->

<!-- ==================== 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 &#147;dimension&#148; 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" importedNamespace="a3A6600C5031F"/>
    <Model:Import xmi.id="G.934" name="Instance" annotation="" visibility="public_vis" 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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a374CB3BA032A">
<Model:Tag.values>CwmDimension</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a374CB311034F">
<Model:Tag.values>CwmDimensionedObject</Model:Tag.values>
</Model:Tag>
</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">
<Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3862763E0366">
<Model:Tag.values>CwmMember</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== 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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a38963CD7009C">
<Model:Tag.values>CwmMemberSet</Model:Tag.values>
</Model:Tag>
</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">
<Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3862710900E5">
<Model:Tag.values>CwmMemberValue</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== 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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3793D1C503DE">
<Model:Tag.values>CwmSchema</Model:Tag.values>
</Model:Tag>
</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] ==================== -->

<!-- ==================== 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&#146;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" importedNamespace="a3A6600C5031F"/>
    <Model:Import xmi.id="G.956" name="Expressions" annotation="" visibility="public_vis" importedNamespace="a38207A600078"/>
    <Model:Import xmi.id="G.957" name="SoftwareDeployment" annotation="" visibility="public_vis" 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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a36D1C5900149">
<Model:Tag.values>CwmTransformation</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a36D1C6960146">
<Model:Tag.values>CwmDataObjectSet</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a36D58FEC013E">
<Model:Tag.values>CwmTransformationTask</Model:Tag.values>
</Model:Tag>
</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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a36D590F003B9">
<Model:Tag.values>CwmTransformationStep</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== Transformation.TransformationActivity    [Class] ==================== -->
    <Model:Class xmi.id="a36E070680112" name="TransformationActivity" isRoot="false" isLeaf="false" isAbstract="false" visibility="public_vis" isSingleton="false" supertypes="a33CD6DE5030C">
      <Model:ModelElement.annotation>This represents a transformation activity. Each TransformationActivity consists of a set
of TransformationSteps.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Transformation.TransformationActivity.creationDate    [Attribute] ==================== -->
        <Model:Attribute xmi.id="a36E4629500E6" name="creationDate" annotation="When the TransformationActivity was created." 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.TransformationActivity.step    [Reference] ==================== -->
        <Model:Reference xmi.id="a3874F3F4030D" name="step" 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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a36E070680112">
<Model:Tag.values>CwmTransformationActivity</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== Transformation.PrecedenceConstraint    [Class] ==================== -->
    <Model:Class xmi.id="a36E071090100" name="PrecedenceConstraint" annotation="This is used to define order-of-execution constraint among TransformationSteps. It may be used independent of or in conjunction with StepPrecedence." isRoot="false" isLeaf="false" isAbstract="false" visibility="public_vis" isSingleton="false" supertypes="a327A649B000A">
<Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a36E071090100">
<Model:Tag.values>CwmPrecedenceConstraint</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== Transformation.TransformationUse    [Class] ==================== -->
    <Model:Class xmi.id="a36E071EC03C3" name="TransformationUse" annotation="This is a specialized dependency used to associate a Transformation to the model of an existing object (e.g., program, query, or rule) that performs the transformation." isRoot="false" isLeaf="false" isAbstract="false" visibility="public_vis" isSingleton="false" supertypes="a327A646F00E6">
      <Model:Namespace.contents>
        <!-- ==================== Transformation.TransformationUse.type    [Attribute] ==================== -->
        <Model:Attribute xmi.id="a36E465970039" name="type" annotation="Identifies the type of object that can perform 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.TransformationUse.transformation    [Reference] ==================== -->
        <Model:Reference xmi.id="a38751DA40074" name="transformation" 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>
        <!-- ==================== Transformation.TransformationUse.operation    [Reference] ==================== -->
        <Model:Reference xmi.id="a38751DAB00A6" name="operation" 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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a36E071EC03C3">
<Model:Tag.values>CwmTransformationUse</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== Transformation.TransformationMap    [Class] ==================== -->
    <Model:Class xmi.id="a374322890098" name="TransformationMap" annotation="This represents a specialized Transformation which consists of a group of ClassifierMaps." isRoot="false" isLeaf="false" isAbstract="false" visibility="public_vis" isSingleton="false" supertypes="a36D1C5900149">
      <Model:Namespace.contents>
        <!-- ==================== Transformation.TransformationMap.classifierMap    [Reference] ==================== -->
        <Model:Reference xmi.id="a3874FCC901B0" name="classifierMap" 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:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a374322890098">
<Model:Tag.values>CwmTransformationMap</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== Transformation.TransformationTree    [Class] ==================== -->
    <Model:Class xmi.id="a374322B301CE" name="TransformationTree" annotation="This represents a specialized Transformation which can be modeled as an expression tree. " isRoot="false" isLeaf="false" isAbstract="false" visibility="public_vis" isSingleton="false" supertypes="a36D1C5900149">
      <Model:Namespace.contents>
        <!-- ==================== Transformation.TransformationTree.type    [Attribute] ==================== -->
        <Model:Attribute xmi.id="a37498C0303A3" name="type" annotation="Identifies the type of TransformationTree, which can be unary or binary." scope="instance_level" visibility="public_vis" isChangeable="true" isDerived="false" type="a37B2FFD8035B">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="1" upper="1" is_ordered="false" is_unique="false"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
        <!-- ==================== Transformation.TransformationTree.body    [Attribute] ==================== -->
        <Model:Attribute xmi.id="a37498C0F0288" name="body" annotation="Identifies the expression tree that embodies the TransformationTree." scope="instance_level" visibility="public_vis" isChangeable="true" isDerived="false" type="a376A84310237">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="1" upper="1" is_ordered="false" is_unique="false"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
      </Model:Namespace.contents>
    <Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a374322B301CE">
<Model:Tag.values>CwmTransformationTree</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== Transformation.ClassifierMap    [Class] ==================== -->
    <Model:Class xmi.id="a374324450028" name="ClassifierMap" annotation="This represents a mapping of source Classifiers to target Classifiers. A ClassifierMap may consists of a group of ClassifierFeatureMaps and/or FeatureMaps." isRoot="false" isLeaf="false" isAbstract="false" visibility="public_vis" isSingleton="false" supertypes="a32B69F3A0118">
      <Model:Namespace.contents>
        <!-- ==================== Transformation.ClassifierMap.function    [Attribute] ==================== -->
        <Model:Attribute xmi.id="a38751AC903CE" name="function" annotation="Any code or script for the ClassifierMap." 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.ClassifierMap.functionDescription    [Attribute] ==================== -->
        <Model:Attribute xmi.id="a38751AD00298" name="functionDescription" annotation="A short description for any code or script performed by the ClassifierMap." 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.ClassifierMap.source    [Reference] ==================== -->
        <Model:Reference xmi.id="a3875035203C1" name="source" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a32989FB2023D" referencedEnd="a387500880138">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="1" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Transformation.ClassifierMap.target    [Reference] ==================== -->
        <Model:Reference xmi.id="a387503590032" name="target" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a32989FB2023D" referencedEnd="a3875009900ED">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="1" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Transformation.ClassifierMap.transformationMap    [Reference] ==================== -->
        <Model:Reference xmi.id="a387521930159" name="transformationMap" 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.ClassifierMap.featureMap    [Reference] ==================== -->
        <Model:Reference xmi.id="a3875035E010C" name="featureMap" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a374324600063" referencedEnd="a37498826004E">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Transformation.ClassifierMap.cfMap    [Reference] ==================== -->
        <Model:Reference xmi.id="a3875036401DD" name="cfMap" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a3874FE01032B" referencedEnd="a3874FE2C0066">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    <Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a374324450028">
<Model:Tag.values>CwmClassifierMap</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== Transformation.FeatureMap    [Class] ==================== -->
    <Model:Class xmi.id="a374324600063" name="FeatureMap" annotation="This represents a mapping of source Features to target Features." isRoot="false" isLeaf="false" isAbstract="false" visibility="public_vis" isSingleton="false" supertypes="a327A5C7301CC">
      <Model:Namespace.contents>
        <!-- ==================== Transformation.FeatureMap.function    [Attribute] ==================== -->
        <Model:Attribute xmi.id="a38751B170312" name="function" annotation="Any code or script for the FeatureMap." 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.FeatureMap.functionDescription    [Attribute] ==================== -->
        <Model:Attribute xmi.id="a38751B1D0375" name="functionDescription" annotation="A short description for any code or script performed by the FeatureMap." 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.FeatureMap.source    [Reference] ==================== -->
        <Model:Reference xmi.id="a387503CA0193" name="source" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a32989F9700FE" referencedEnd="a387500C70139">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="1" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Transformation.FeatureMap.target    [Reference] ==================== -->
        <Model:Reference xmi.id="a387503D00354" name="target" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a32989F9700FE" referencedEnd="a387500B00013">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="1" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Transformation.FeatureMap.classifierMap    [Reference] ==================== -->
        <Model:Reference xmi.id="a387503D602C7" name="classifierMap" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a374324450028" referencedEnd="a374988260062">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="1" is_ordered="false" is_unique="false"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    <Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a374324600063">
<Model:Tag.values>CwmFeatureMap</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== Transformation.TreeType    [DataType] ==================== -->
    <Model:DataType xmi.id="a37B2FFD8035B" name="TreeType" annotation="unary, binary" isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis">
      <Model:DataType.typeCode>
        <XMI.CorbaTypeCode>
          <XMI.CorbaTcEnum xmi.tcName="TreeType">
          <XMI.CorbaTcEnumLabel xmi.tcName="tfm_unary"/>
          <XMI.CorbaTcEnumLabel xmi.tcName="tfm_binary"/>
          </XMI.CorbaTcEnum>
        </XMI.CorbaTypeCode>
      </Model:DataType.typeCode>
    </Model:DataType>
    <!-- ==================== Transformation.org.omg.xmi.enumerationUnprefix=tfm_    [Tag] ==================== -->
    <Model:Tag xmi.id="G.958" name="org.omg.xmi.enumerationUnprefix=tfm_" annotation="" tagId="org.omg.xmi.enumerationUnprefix" elements="a37B2FFD8035B">
      <Model:Tag.values>
        <XMI.any xmi.type="string" xmi.name="">tfm_</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Transformation.StepPrecedence    [Class] ==================== -->
    <Model:Class xmi.id="a385A942E0286" name="StepPrecedence" annotation="This is used to define explicit order-of-execution relationships among TransformationSteps. It may be used independent of or in conjunction with PrecedenceConstraint" isRoot="false" isLeaf="false" isAbstract="false" visibility="public_vis" isSingleton="false" supertypes="a327A646F00E6">
      <Model:Namespace.contents>
        <!-- ==================== Transformation.StepPrecedence.precedingStep    [Reference] ==================== -->
        <Model:Reference xmi.id="a3874FABE0006" name="precedingStep" 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>
        <!-- ==================== Transformation.StepPrecedence.succeedingStep    [Reference] ==================== -->
        <Model:Reference xmi.id="a3874FAC90002" name="succeedingStep" 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>
      </Model:Namespace.contents>
    <Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a385A942E0286">
<Model:Tag.values>CwmStepPrecedence</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== Transformation.ClassifierFeatureMap    [Class] ==================== -->
    <Model:Class xmi.id="a3874FE01032B" name="ClassifierFeatureMap" annotation="This represents a mapping of Classifiers to Features." isRoot="false" isLeaf="false" isAbstract="false" visibility="public_vis" isSingleton="false" supertypes="a327A5C7301CC">
      <Model:Namespace.contents>
        <!-- ==================== Transformation.ClassifierFeatureMap.function    [Attribute] ==================== -->
        <Model:Attribute xmi.id="a38751BC203E0" name="function" annotation="Any code or script for the FeatureMap." 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.ClassifierFeatureMap.functionDescription    [Attribute] ==================== -->
        <Model:Attribute xmi.id="a38751BC9017F" name="functionDescription" annotation="A short description for any code or script performed by the FeatureMap." 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.ClassifierFeatureMap.classifierToFeature    [Attribute] ==================== -->
        <Model:Attribute xmi.id="a3887892901B8" name="classifierToFeature" annotation="Identifies if the mapping is from Classifiers (source) to Features (target). The default is true." 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.ClassifierFeatureMap.classifier    [Reference] ==================== -->
        <Model:Reference xmi.id="a387504260159" name="classifier" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a32989FB2023D" referencedEnd="a387500E10104">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="1" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Transformation.ClassifierFeatureMap.feature    [Reference] ==================== -->
        <Model:Reference xmi.id="a3875043F021E" name="feature" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a32989F9700FE" referencedEnd="a387500F9022B">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="1" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Transformation.ClassifierFeatureMap.classifierMap    [Reference] ==================== -->
        <Model:Reference xmi.id="a387504480022" name="classifierMap" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a374324450028" referencedEnd="a3874FE2C0070">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="1" is_ordered="false" is_unique="false"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    <Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3874FE01032B">
<Model:Tag.values>CwmClassifierFeatureMap</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== Transformation.TransformationSource    [Association] ==================== -->
    <Model:Association xmi.id="a36D1C872001E" name="TransformationSource" annotation="This association relates a Transformation to its sources." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a36D1C87601B4" name="sourceTransformation" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a36D1C5900149">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a36D1C87601BE" name="source" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a36D1C6960146">
          <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>
    <!-- ==================== Transformation.TransformationTarget    [Association] ==================== -->
    <Model:Association xmi.id="a36D1C886035C" name="TransformationTarget" annotation="This association relates a Transformation to its targets." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a36D1C8880228" name="targetTransformation" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a36D1C5900149">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a36D1C8880232" name="target" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a36D1C6960146">
          <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>
    <!-- ==================== Transformation.TransformationStepTask    [Association] ==================== -->
    <Model:Association xmi.id="a36D59A820285" name="TransformationStepTask" annotation="This association relates a TransformationStep to its TransformationTask." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a36D59A84004D" name="step" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a36D590F003B9">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a36D59A840057" name="task" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a36D58FEC013E">
          <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>
    <!-- ==================== Transformation.InverseTransformationTask    [Association] ==================== -->
    <Model:Association xmi.id="a36E064FC0366" name="InverseTransformationTask" annotation="This association relates a TransformationTask to its inverse. A transformation task that maps a source set &quot;A&quot; into a target set &quot;B&quot; can be reversed by the inverse transformation task that maps &quot;B&quot; into &quot;A&quot;" isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a36E065000159" name="originalTask" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a36D58FEC013E">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a36E06500016E" name="inverseTask" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a36D58FEC013E">
          <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>
    <!-- ==================== Transformation.DataObjectSetElement    [Association] ==================== -->
    <Model:Association xmi.id="a37093F9E02FD" name="DataObjectSetElement" annotation="This association relates a DataObjectSet to its elements." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a37093FA10030" name="element" 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="a37093FA10153" name="set" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a36D1C6960146">
          <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>
    <!-- ==================== Transformation.TransformationTaskElement    [Association] ==================== -->
    <Model:Association xmi.id="a3744AC38012D" name="TransformationTaskElement" annotation="This association relates a TransformationTask to its Transformations." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a3744AC390341" name="task" annotation="" isNavigable="true" aggregation="shared" isChangeable="true" type="a36D58FEC013E">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a3744AC390355" name="transformation" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a36D1C5900149">
          <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>
    <!-- ==================== Transformation.ClassifierMapToFeatureMap    [Association] ==================== -->
    <Model:Association xmi.id="a3749882402AE" name="ClassifierMapToFeatureMap" isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:ModelElement.annotation>This association relates a ClassifierMap to its FeatureMaps.

This association is derived from the Namespace-ModelElement association. All ownedElement ends of the association must be FeatureMaps. [C-5]</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a37498826004E" name="featureMap" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a374324600063">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a374988260062" name="classifierMap" annotation="" isNavigable="true" aggregation="composite" isChangeable="true" type="a374324450028">
          <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>
    <!-- ==================== Transformation.ClassifierMapToCFMap    [Association] ==================== -->
    <Model:Association xmi.id="a3874FE2802AF" name="ClassifierMapToCFMap" isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:ModelElement.annotation>This association relates a ClassifierMap to its ClassifierFeatureMaps.

This association is derived from the Namespace-ModelElement association. All ownedElement ends of the association must be ClassifierFeatureMaps. [C-4]</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a3874FE2C0066" name="cfMap" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a3874FE01032B">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a3874FE2C0070" name="classifierMap" annotation="" isNavigable="true" aggregation="composite" isChangeable="true" type="a374324450028">
          <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>
    <!-- ==================== Transformation.ClassifierMapSource    [Association] ==================== -->
    <Model:Association xmi.id="a3875008700BF" name="ClassifierMapSource" annotation="This association relates a ClassifierMap to its source Classifiers." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a387500880138" name="source" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a32989FB2023D">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="1" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a3875008900CC" name="classifierMap" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a374324450028">
          <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>
    <!-- ==================== Transformation.ClassifierMapTarget    [Association] ==================== -->
    <Model:Association xmi.id="a38750098004B" name="ClassifierMapTarget" annotation="This association relates a ClassifierMap to its target Classifiers." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a3875009900ED" name="target" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a32989FB2023D">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="1" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a3875009902CD" name="classifierMap" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a374324450028">
          <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>
    <!-- ==================== Transformation.FeatureMapTarget    [Association] ==================== -->
    <Model:Association xmi.id="a387500AF00EE" name="FeatureMapTarget" annotation="This association relates an FeatureMap to its target Features." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a387500B00013" name="target" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a32989F9700FE">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="1" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a387500B00140" name="featureMap" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a374324600063">
          <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>
    <!-- ==================== Transformation.FeatureMapSource    [Association] ==================== -->
    <Model:Association xmi.id="a387500C601BA" name="FeatureMapSource" annotation="This association relates an FeatureMap to its source Features." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a387500C70139" name="source" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a32989F9700FE">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="1" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a387500C7021F" name="featureMap" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a374324600063">
          <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>
    <!-- ==================== Transformation.CFMapClassifier    [Association] ==================== -->
    <Model:Association xmi.id="a387500E000EF" name="CFMapClassifier" annotation="This association relates a ClassifierFeatureMap to its source/target Features." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a387500E10104" 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="true"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a387500E102E5" name="cfMap" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a3874FE01032B">
          <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>
    <!-- ==================== Transformation.CFMapFeature    [Association] ==================== -->
    <Model:Association xmi.id="a387500F80324" name="CFMapFeature" annotation="Identifies the ClassifierFeatureMap" isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a387500F9022B" 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="true"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a387500F90311" name="cfMap" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a3874FE01032B">
          <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>
<!-- ==================== Olap    [Package] ==================== -->
<Model:Package xmi.id="a365348E80125" name="Olap" isRoot="false" isLeaf="false" isAbstract="false" visibility="public_vis">
  <Model:ModelElement.annotation>Online Analytical Processing (OLAP) is a class of analytic application software that exposes business data in a multidimensional format. This multidimensional format usually includes the consolidation of data drawn from multiple and diverse information sources. Unlike more traditionally structured representations (e.g., the tabular format of a relational database), the multidimensional orientation is a more natural expression of the way business enterprises view their strategic data. For example, an analyst might use an OLAP application to examine total sales revenue by product and geographic region over time, or, perhaps, compare sales margins for the same fiscal periods of two consecutive years. The ultimate objective of OLAP is the efficient construction of analytical models that transform raw business data into strategic business insight.

There are many ways to implement OLAP. Most OLAP systems are constructed using OLAP server tools that enable logical OLAP structures to be built on top of a variety of physical database systems, such as relational or native multidimensional databases.

The following features are generally found in most OLAP systems:

    Multidimensional representation of business data.
    Upward consolidation of multidimensional data in a hierarchical manner, possibly with the application of specialized processing rules.
    The ability to navigate a hierarchy from a consolidated value to the lower level values forming it.
    Support for time-series analysis; i.e., OLAP users are generally concerned with data and consolidations at specific points in time -- By date, week, quarter, etc.
    Support for modeling and scenario analysis -- A user should be able to apply arbitrary "what-if" analyses to a result set without affecting the stored information.
    Consistent response times, regardless of how queries are formulated -- This is critical for effective analysis and modeling.

OLAP applications integrate well into the data warehousing environment, because a data warehouse provides relatively clean and stable data stores to drive the OLAP application. These data stores are usually maintained in relational tables that can be read directly by OLAP tools or loaded into OLAP servers. These relational tables are often structured in a manner that reveals the inherent dimensionality of the data (such as the ubiquitous Star and Snowflake schemas). Also, the data transformation and mapping services provided by a data warehouse can be used to supply OLAP systems with both metadata and data. Transformation-related metadata can be used to track the
lineage of consolidated OLAP data back to its various sources.

The primary objectives of the CWM OLAP package are:

    Define a metamodel of essential OLAP concepts common to most OLAP systems.
    Provide a facility whereby instances of the OLAP metamodel are mapped to deployment-capable structures (i.e., models of physical data resources, such as the CWM Relational and Multidimensional packages).
    Ensure that navigation through the logical OLAP model hierarchy and its various resource models is always performed in a uniform manner (i.e., by defining a standard usage of the CWM Transformation package as a means of implementing these mappings).
    Leverage services provided by other CWM packages, where appropriate (e.g., use the CWM Foundation package to supply a standard representation of expressions).

The OLAP package depends on the following packages:

   org.omg::CWM::ObjectModel::Core
   org.omg::CWM::Foundation::Expressions
   org.omg::CWM::Analysis::Transformation

The major classes and associations of the OLAP metamodel are shown in Figure 14-1.  Schema is the logical container of all elements comprising an OLAP model. It is the root element of the model hierarchy and marks the entry point for navigating OLAP models.

A Schema contains Dimensions and Cubes. A Dimension is an ordinate within a multidimensional structure and consists of a list of unique values (i.e., members) that share a common semantic meaning within the domain being modeled. Each member designates a unique position along its ordinate.

A Cube is a collection of analytic values (i.e., measures) that share the same dimensionality. This dimensionality is specified by a set of unique Dimensions from the Schema. Each unique combination of members in the Cartesian product of the Cube&#146;s Dimensions identifies precisely one data cell within a multidimensional structure.

CubeDimensionAssociation relates a Cube to its defining Dimensions. Features relevant to Cube-Dimension relationships (e.g., calcHierarchy) are exposed by this class.

A Dimension has zero or more Hierarchies. A Hierarchy is an organizational structure that describes a traversal pattern through a Dimension, based on parent/child relationships between members of a Dimension. Hierarchies are used to define both navigational and consolidation/computational paths through the Dimension (i.e., a value associated with a child member is aggregated by one or more parents). For example, a Time Dimension with a base periodicity of days might have a Hierarchy
specifying the consolidation of days into weeks, weeks into months, months into quarters, and quarters into years.

A specific Hierarchy may be designated as the default Hierarchy for display purposes (e.g., a user interface that displays the Dimension as a hierarchical tree of members).  CubeDimensionAssociation can also identify a particular Hierarchy as the default Hierarchy for consolidation calculations performed on the Cube.

MemberSelection models mechanisms capable of partitioning a Dimension&#146;s collection of members. For example, consider a Geography Dimension with members representing cities, states, and regions. An OLAP client interested specifically in cities might define an instance of MemberSelection that extracts the city members.

CubeRegion models a sub-unit of a Cube that is of the same dimensionality as the Cube itself. Each "dimension" of a CubeRegion is represented by a MemberSelection of the corresponding Dimension  of the Cube. Each MemberSelection may define some subset of its Dimension&#146;s members.

CubeRegions are used to implement Cubes. A Cube may be realized by a set of CubeRegions that map portions of the logical Cube to physical data sources. The MemberSelections defining CubeRegions can also be grouped together via MemberSelectionGroups, enabling the definition of CubeRegions with specific semantics. For example, one can specify a CubeRegion containing only the "input level" data cells of a Cube.

A CubeRegion may own any number of CubeDeployments. CubeDeployment is a metaclass that represents an implementation strategy for a multidimensional structure. The ordering of the CubeDeployment classes may optionally be given some implementation-specific meaning (e.g., desired order of selection of several possible deployment strategies, based on optimization considerations).

The OLAP metamodel defines two special types of Dimension: Time and Measure. A Time Dimension provides a means of representing time-series data within a multidimensional structure. The members of a Time Dimension usually define some base periodicity (e.g., days of the week). The implementation of a Time Dimension might provide support for advanced "time-intelligent" functionality, such as the ability to automatically convert between different periodicities and calendars.

The members of a Measure Dimension describe the meaning of the analytic values stored in each data cell of a multidimensional structure. For example, an OLAP application may define Sales, Quantity and Weight as its measures. In this case, each data cell within the Cube stores three values, with each value corresponding to one of the three measures. A measure may have an associated data type. For example, Sales might be of a monetary type, Quantity an integer, and Weight a real number.

The OLAP metamodel specifies two subclasses of Hierarchy: LevelBasedHierarchy and ValueBasedHierarchy.

LevelBasedHierarchy describes hierarchical relationships between specific levels of a Dimension. LevelBasedHierarchy is used to model both "pure level" hierarchies (e.g., dimension-level tables) and "mixed" hierarchies (i.e., levels plus linked nodes). Dimensional levels are modeled by the Level class, a subclass of MemberSelection that partitions a Dimension&#146;s members into disjoint subsets, each representing a distinct level.

For example, the Geography Dimension cited earlier contains members representing cities, states, and regions, such as "Stamford", "Connecticut", and "NorthEast". It might also contain a single member called "USA" representing all regions of the United States. Therefore, the Geography Dimension could have four Levels named "City", "State", 'Region", and "ALL", respectively. Each Level specifies the subset of members belonging to it: All cities belong to the "City" Level, all states belong to the "State" Level, all regions belong to the "Region" Level, and the single "USA" member belongs to the "ALL" Level.

When used in the definition of a consolidation path, the meaning of "level" is quite clear: Members occupying a given Level consolidate into the next higher Level (e.g., City rolls up into State, State into Region, and Region into ALL).

LevelBasedHierarchy contains an ordered collection of HierarchyLevelAssocations that defines the natural hierarchy of the Dimension. The ordering defines the hierarchical structure in top-down fashion (i.e., the "first" HierarchyLevelAssociation in the ordered collection represents the upper-most level of the dimensional hierarchy).

A HierarchyLevelAssociation may own any number of DimensionDeployments. DimensionDeployment is a metaclass that represents an implementation strategy for hierarchical Dimensions. The ordering of the DimensionDeployment classes may optionally be given an implementation-specific meaning (e.g., desired order of selection of several possible deployment strategies, based on optimization
considerations).

A ValueBasedHierarchy defines a hierarchical ordering of members in which the concept of level has little or no significance. Instead, the topological structure of the hierarchy conveys meaning. ValueBasedHierarchies are often used to model situations where members are classified or ranked according to their distance from a common root member (e.g., an organizational chart of a corporation). In this case, each member of the hierarchy has some specific "metric" or "value" associated it with it. ValueBasedHierarchy can be used to model pure "linked node" hierarchies (e.g.,
asymmetric hierarchical graphs or parent-child tables). 

As with LevelBasedHierarchy, ValueBasedHierarchy also has an ordered collection of dimensionDeployments, where the ordering semantics are left to implementations to define.

Figure 14-3 illustrates how classes of the OLAP metamodel inherit from the CWM
Object Model. Two classes requiring further explanation are:

    Measure: A subclass of Attribute that describes the meaning of values stored in the data cells of a multidimensional structure. Different OLAP models often give different interpretations to the term "measure". In a relational Star Schema, individual measures might be represented by non-key columns of a Fact table (e.g., "Sales" and "Quantity" columns). In this case, measure may be an attribute of a Cube or CubeRegion that models the Fact table. On the other hand, measures can
also be represented by members of a Measure Dimension. A Fact table supporting this representation has a single Measure column with column values consisting of the members "Sales" and "Quantity", and a single "value" column (i.e., an implicit data dimension) storing the corresponding measure values. A similar notion of Measure Dimension is used in modeling pure hypercube representations of
multidimensional servers. Thus, the concept of measure can be represented either as a Dimenson or as an Attribute, depending on the type of OLAP system being modeled.

    Coded Level: A subclass of Level that assigns a unique encoding, or label, to each of its members. CodedLevel is not essential to the OLAP metamodel, but is provided as a helper class for certain applications that might benefit from the ability of OLAP systems to structure data hierarchically. For example, CodedLevel could be used to model systems of nomenclature or classification.

The CWM OLAP metamodel describes logical models of OLAP systems, but does not directly specify how an OLAP system is physically deployed. Modeling the deployment of an OLAP system requires mapping instances of OLAP metaclasses to instances of other CWM metaclasses representing physical resources (e.g., mapping an OLAP Dimension to a Relational Table). This approach offers several advantages:

    The status of the OLAP metamodel as a conceptual model is preserved by this level of indirection. When using OLAP, a client may perceive to be working directly with OLAP objects, but the actual implementation of those objects is hidden from the client. For example, a client may view a member as a value of a Dimension, but whether that member value comes from a row of a relational table, or from a cell in a multidimensional database, is usually not obvious to the client. On the other hand, if a client needs to determine how a logical OLAP structure is physically realized, the metadata describing this mapping is fully available (assuming that the implementation allows the client to drill-down through the metadata).

    The possibility of defining mappings based on expressions means that the amount of metadata required to describe large models (e.g., Dimensions containing large collections of members) can be kept within reasonable bounds. It is generally more efficient to provide expressions that specify where large metadata sets reside, how to connect to them, and how to map their contents, rather than representing them directly as part of the metadata content.

All of the OLAP metaclasses are potential candidates for such deployment mappings. In addition, some OLAP models may also define mappings between several OLAP metaclass instances, forming a natural hierarchy of logical objects (e.g., Dimension Attributes are mapped to Level Attributes which, in turn, are mapped to Table Columns).

The CWM Transformation package is used as the primary means of describing these mappings. A modeler constructing an OLAP model based on CWM will generally define instances of the TransformationMap metaclass to link logical OLAP objects together, and to link those logical objects to other objects representing their physical data sources.

StructureMap is a subclass of TransformationMap that models structure-oriented transformation mappings (i.e., member identity and hierarchical structure). This type of transformation mapping needs to be connected to the OLAP metamodel in a very specific way (according to Level and Hierarchy), so the StructureMap subclass is defined to make these associations explicit. Two specific usages of StructureMap are defined: ListOfValues, which maps attributes identifying members residing at a specific Level, or at a specific Level within a particular Hierarchy, and ImmediateParent, which maps attributes identifying the hierarchical parent(s) of the members.

On the other hand, relatively simple TransformationMaps can be defined within any OLAP model to represent attribute-oriented transformations (e.g., mapping Dimension Attributes to Table Columns that store attribute values).

ContentMap is a subclass of TransformationMap that models content-oriented transformaton mappings (i.e., cell data or measure values). For example, an instance of ContentMap might be used to map each of a CubeRegion&#146;s Measures to Columns of an underlying Fact Table.

Note that, in either case (structural mapping or content mapping), the traversal patterns used by any CWM OLAP implementation are always the same, since both deployment mappings are based on the same usage of CWM TransformationMaps. In addition to representing structural mappings, instances of TransformationMap and its subclasses are also capable of storing implementation-dependent functions or procedures that yield the instance values associated with mapped model elements. For example, a "list of values" StructureMap might store an SQL statement such as "select memberName from Product where productFamily = &#146;consumerElectronics&#146; ", as the value of its formula attribute.

Figure 14-4 illustrates the CWM metaclasses and associations that describe deployment mappings between logical OLAP models and physical resource models. Note that it is possible to combine both Cube (content) and Dimension (structure) deployments together within the context of a single OLAP Schema (via the DeploymentGroup metaclass). Thus, an OLAP Schema can have several possible deployments that users may select based on implementation-specific considerations (e.g., physical optimizations).

OCL Representation of OLAP Constraints

[C-1] Ensure that the Dimensions defining a Cube are unique.
context Cube inv:
self.cubeDimensionAssociation-&gt;forAll( c1, c2 | c1 &lt;&gt; c2 implies
c1.dimension &lt;&gt; c2.dimension )

[C-2] A Cube without CubeRegions cannot be mapped to a deployment structure (i.e., physical source of data).
context Cube inv:
self.cubeRegion-&gt;isEmpty implies self.isVirtual = true

[C-3] If a calcHierarchy is defined, it must be a Hierarchy owned by the Dimension referenced by the CubeDimensionAssociation.
context CubeDimensionAssociation inv:
self.calcHierarchy-&gt;notEmpty implies self.calcHierarchy.dimension = self.dimension

[C-4] A "fully realized" CubeRegion has no MemberSelectionGroups (and hence, no MemberSelections).
context CubeRegion inv:
self.isFullyRealized implies self.memberSelectionGroup-&gt;isEmpty

[C-5] A CubeRegion defined by MemberSelections must have, for each Dimension of its owning Cube, a corresponding MemberSelection within each of its
MemberSelectionGroups.
context CubeRegion inv:
self.memberSelectionGroup-&gt;notEmpty implies
self.cube.cubeDimensionAssociation-&gt;forAll( d |
self.memberSelectionGroup-&gt;forAll( g |
g.memberSelection-&gt;exists( m | m.dimension = d.dimension ) ) )

[C-6] A CubeRegion defined by MemberSelections must have, within each MemberSelectionGroup, a MemberSelection corresponding to each Dimension of its
owning Cube.
context CubeRegion inv:
self.memberSelectionGroup-&gt;notEmpty implies
self.memberSelectionGroup-&gt;forAll( g |
g.memberSelection-&gt;forAll( m |
self.cube.cubeDimensionAssociation-&gt;exists( d | d.dimension = m.dimension ) ) )

[C-7] A Dimension may be a Time Dimension, a Measure Dimension, or neither, but never both types at the same time.
context Dimension inv:
not ( self.isTime and self.isMeasure )

[C-8] The default display Hierarchy (if defined) must be one of the Hierarchies owned by the Dimension.
context Dimension inv:
self.displayDefault-&gt;notEmpty implies self.hierarchy-&gt;includes( self.displayDefault )

[C-9] An instance of DimensionDeployment must be referenced exclusively by either a HierarchyLevelAssociation or a ValueBasedHierarchy.
context DimensionDeployment inv:
self.hierarchyLevelAssociation-&gt;isEmpty xor self.valueBasedHierarchy-&gt;isEmpty

[C-10] Within a DimensionDeployment, an "immediate parent" StructureMap must always have an associated and distinct "list of values" StructureMap.
context DimensionDeployment inv:
self.immediateParent-&gt;notEmpty implies
( self.listOfValues-&gt;notEmpty and self.listOfValues &lt;&gt; self.immediateParent )

[C-11] A StructureMap referenced as a "list of values" StructureMap must not reside outside of the DimensionDeployment&#146;s collection of StructureMaps.
context DimensionDeployment inv:
self.listOfValues-&gt;notEmpty implies self.structureMap-&gt;includes( self.listOfValues )

[C-12] A StructureMap referenced as an "immediate parent" StructureMap must not reside outside of the DimensionDeployment&#146;s collection of StructureMaps.
context DimensionDeployment inv:
self.immediateParent-&gt;notEmpty implies
self.structureMap-&gt;includes( self.immediateParent )

[C-13] The currentLevel of each HierarchyLevelAssociation must refer to a Level owned by the Dimension of the LevelBasedHierarchy containing the HierarchyLevelAssociation.
context LevelBasedHierarchy inv:
self.hierarchyLevelAssociation-&gt;notEmpty implies
self.hierarchyLevelAssociation-&gt;forAll( h |
self.dimension.memberSelection
-&gt;select( oclType = Olap::Level )-&gt;includes( h.currentLevel ) )

[C-14] No two HierarchyLevelAssociations may designate the same Level instance as their "current level".
context LevelBasedHierarchy inv:
self.hierarchyLevelAssociation-&gt;forAll( h1, h2 | h1 &lt;&gt; h2 implies
h1.currentLevel &lt;&gt; h2.currentLevel )</Model:ModelElement.annotation>
  <Model:Namespace.contents>
    <!-- ==================== Olap.org.omg.xmi.namespace=CWMOLAP    [Tag] ==================== -->
    <Model:Tag xmi.id="G.959" name="org.omg.xmi.namespace=CWMOLAP" annotation="" tagId="org.omg.xmi.namespace" elements="a365348E80125">
      <Model:Tag.values>
        <XMI.any xmi.type="string" xmi.name="">CWMOLAP</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Olap.org.omg.mof.idl_prefix=org.omg.cwm.analysis    [Tag] ==================== -->
    <Model:Tag xmi.id="G.960" name="org.omg.mof.idl_prefix=org.omg.cwm.analysis" annotation="" tagId="org.omg.mof.idl_prefix" elements="a365348E80125">
      <Model:Tag.values>
        <XMI.any xmi.type="string" xmi.name="">org.omg.cwm.analysis</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Olap.org.omg.mof.idl_substitute_name=OlapModule    [Tag] ==================== -->
    <Model:Tag xmi.id="G.961" name="org.omg.mof.idl_substitute_name=OlapModule" annotation="" tagId="org.omg.mof.idl_substitute_name" elements="a365348E80125">
      <Model:Tag.values>
        <XMI.any xmi.type="string" xmi.name="">OlapModule</XMI.any>
      </Model:Tag.values>
    </Model:Tag>
    <!-- ==================== Olap.com.urep.jcr.java_prefix=org.omg.java.cwm.analysis    [Tag] ==================== -->
    <Model:Tag xmi.id="G.962" name="com.urep.jcr.java_prefix=org.omg.java.cwm.analysis" annotation="" tagId="com.urep.jcr.java_prefix" elements="a365348E80125">
      <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.963" name="Core" annotation="" visibility="public_vis" importedNamespace="a3A6600C5031F"/>
    <Model:Import xmi.id="G.964" name="Expressions" annotation="" visibility="public_vis" importedNamespace="a38207A600078"/>
    <Model:Import xmi.id="G.965" name="Transformation" annotation="" visibility="public_vis" importedNamespace="a35E1B0B40042"/>
    <!-- ==================== Olap.ContentMap    [Class] ==================== -->
    <Model:Class xmi.id="a3A5680DA0284" name="ContentMap" annotation="ContentMap is a subclass of TransformationMap that maps CubeRegion attributes to their physical data sources." isRoot="false" isLeaf="false" isAbstract="false" visibility="public_vis" isSingleton="false" supertypes="a374322890098">
      <Model:Namespace.contents>
        <!-- ==================== Olap.ContentMap.cubeDeployment    [Reference] ==================== -->
        <Model:Reference xmi.id="a3A5683CC021A" name="cubeDeployment" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a3A5634210088" referencedEnd="a3A5681810162">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="1" upper="1" is_ordered="false" is_unique="false"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    <Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3A5680DA0284">
<Model:Tag.values>CwmContentMap</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== Olap.Cube    [Class] ==================== -->
    <Model:Class xmi.id="a36F832E20069" name="Cube" isRoot="false" isLeaf="false" isAbstract="false" visibility="public_vis" isSingleton="false" supertypes="a3298A02900FE">
      <Model:ModelElement.annotation>A Cube is a collection of analytic values (i.e., measures) that share the same dimensionality.  This dimensionality is specified by a set of unique Dimensions from the Schema.  Each unique combination of members in the Cartesian product of the Cube&#146;s Dimensions identifies precisely one data cell within a multidimensional structure.

Synonyms: Multidimensional Array, Hypercube, Hypervolume.
</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Olap.Cube.isVirtual    [Attribute] ==================== -->
        <Model:Attribute xmi.id="a378B3FA90038" name="isVirtual" annotation="If true, then this Cube is a Virtual Cube (i.e., it has no physical realization)." 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>
        <!-- ==================== Olap.Cube.cubeDimensionAssociation    [Reference] ==================== -->
        <Model:Reference xmi.id="a3858E5780008" name="cubeDimensionAssociation" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a378B40100236" referencedEnd="a378B40D102A2">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Olap.Cube.cubeRegion    [Reference] ==================== -->
        <Model:Reference xmi.id="a3858E75E01D4" name="cubeRegion" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a3A4E8CEF02F0" referencedEnd="a3A4E8EAF02D8">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Olap.Cube.schema    [Reference] ==================== -->
        <Model:Reference xmi.id="a3A6B4871001E" name="schema" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a36F832D2039C" referencedEnd="a3A48C1700212">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="1" upper="1" is_ordered="false" is_unique="false"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    <Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a36F832E20069">
<Model:Tag.values>CwmCube</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== Olap.CubeDeployment    [Class] ==================== -->
    <Model:Class xmi.id="a3A5634210088" name="CubeDeployment" annotation="CubeDeployment represents a particular implementation strategy for the data portions of an OLAP model.  It does so by organizing a collection of ContentMaps, which in turn define a mapping to an implementation model." isRoot="false" isLeaf="false" isAbstract="false" visibility="public_vis" isSingleton="false" supertypes="a3298A02900FE">
      <Model:Namespace.contents>
        <!-- ==================== Olap.CubeDeployment.cubeRegion    [Reference] ==================== -->
        <Model:Reference xmi.id="a3A5638A60177" name="cubeRegion" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a3A4E8CEF02F0" referencedEnd="a3A5636B10271">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="1" upper="1" is_ordered="false" is_unique="false"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Olap.CubeDeployment.deploymentGroup    [Reference] ==================== -->
        <Model:Reference xmi.id="a3A563AF6008B" name="deploymentGroup" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a3A5639C9022D" referencedEnd="a3A563A2E01CE">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="1" upper="1" is_ordered="false" is_unique="false"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Olap.CubeDeployment.contentMap    [Reference] ==================== -->
        <Model:Reference xmi.id="a3A56835E0316" name="contentMap" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a3A5680DA0284" referencedEnd="a3A5681810144">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    <Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3A5634210088">
<Model:Tag.values>CwmCubeDeployment</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== Olap.CubeDimensionAssociation    [Class] ==================== -->
    <Model:Class xmi.id="a378B40100236" name="CubeDimensionAssociation" isRoot="false" isLeaf="false" isAbstract="false" visibility="public_vis" isSingleton="false" supertypes="a3298A02900FE">
      <Model:ModelElement.annotation>CubeDimensionAssociation relates a Cube to the Dimensions that define it.  Features relevant to Cube-Dimension relationships (e.g., calcHierarchy) are exposed by this class.
</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Olap.CubeDimensionAssociation.dimension    [Reference] ==================== -->
        <Model:Reference xmi.id="a38592DFB021B" name="dimension" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a3777B4770109" referencedEnd="a378B40D9019F">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="1" upper="1" is_ordered="false" is_unique="false"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Olap.CubeDimensionAssociation.cube    [Reference] ==================== -->
        <Model:Reference xmi.id="a38592DF40044" name="cube" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a36F832E20069" referencedEnd="a378B40D10248">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="1" upper="1" is_ordered="false" is_unique="false"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Olap.CubeDimensionAssociation.calcHierarchy    [Reference] ==================== -->
        <Model:Reference xmi.id="a3859421302FF" name="calcHierarchy" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a36F91D39014A" referencedEnd="a37A791DE0201">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="1" is_ordered="false" is_unique="false"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    <Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a378B40100236">
<Model:Tag.values>CwmCubeDimensionAssociation</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== Olap.CubeRegion    [Class] ==================== -->
    <Model:Class xmi.id="a3A4E8CEF02F0" name="CubeRegion" isRoot="false" isLeaf="false" isAbstract="false" visibility="public_vis" isSingleton="false" supertypes="a3298A02900FE">
      <Model:ModelElement.annotation>CubeRegion models a sub-unit of a Cube of the same dimensionality as the Cube itself, with each Dimension optionally subsetted in its list of members.

When mapped to its physical source, a CubeRegion contains data cells identified by the member combinations of the Cartesian product of the CubeRegion's associated Dimensions and Measures.

The relative ordering of CubeDeployment classes optionally implies a desired order of selection of the CubeDeployments, based on implementation-specific considerations (e.g., optimized access of aggregate data).

Synonyms: Sub-Cube, Partition, Slice, Region, Area.

Misc. notes:
1.  A CubeRegion is not a Cube, and a Cube is not a CubeRegion.
2.  A Cube has a Measure and CubeRegion may have a corresponding measure (Measures are Attributes).
3.  A Cube may or may not have CubeRegions.
4.  If a Cube does not have a CubeRegion, then it's not physically mapped (it's virtual).  All physical mapping is based on the CubeRegion , not the Cube.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Olap.CubeRegion.isReadOnly    [Attribute] ==================== -->
        <Model:Attribute xmi.id="a3A4E8DB00366" name="isReadOnly" annotation="If true, then the CubeRegion content is read-only (i.e., may not be written or updated through the CubeRegion -- e.g., a CubeRegion implemented via an SQL view may not permit updates to the underlying base table)." 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>
        <!-- ==================== Olap.CubeRegion.isFullyRealized    [Attribute] ==================== -->
        <Model:Attribute xmi.id="a3A4E8DA3024F" name="isFullyRealized" annotation="If true, then this CubeRegion has a direct physical realization and is not bound by any MemberSelections." 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>
        <!-- ==================== Olap.CubeRegion.memberSelectionGroup    [Reference] ==================== -->
        <Model:Reference xmi.id="a3A4E8DED00D9" name="memberSelectionGroup" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a3846924F008C" referencedEnd="a3A4E8EB502CC">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Olap.CubeRegion.cube    [Reference] ==================== -->
        <Model:Reference xmi.id="a3A4E8DF30163" name="cube" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a36F832E20069" referencedEnd="a3A4E8EAF0300">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="1" upper="1" is_ordered="false" is_unique="false"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Olap.CubeRegion.cubeDeployment    [Reference] ==================== -->
        <Model:Reference xmi.id="a3A56372A03D3" name="cubeDeployment" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a3A5634210088" referencedEnd="a3A5636B1025D">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="true" is_unique="true"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    <Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3A4E8CEF02F0">
<Model:Tag.values>CwmCubeRegion</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== Olap.DeploymentGroup    [Class] ==================== -->
    <Model:Class xmi.id="a3A5639C9022D" name="DeploymentGroup" isRoot="false" isLeaf="false" isAbstract="false" visibility="public_vis" isSingleton="false" supertypes="a327A5D19033E">
      <Model:ModelElement.annotation>DeploymentGroup represents a logical grouping of model elements defining a single, complete deployment of an instance of Olap Schema (i.e., CubeDeployments and DimensionDeployments).

The usage of DeploymentGroup is as follows: A user may specify a particular DeploymentGroup as the session-wide, default deployment for all metadata queries performed throughout the session. Alternatively, for queries involving some particular deployed object (e.g., a Cube or a Dimension), the user may be asked to choose from a list of deployments.  This either becomes the default deployment for the remainder of the session, or the user may continue to be asked to specify a deployment for each  subsequent query against deployed objects.</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Olap.DeploymentGroup.schema    [Reference] ==================== -->
        <Model:Reference xmi.id="a3A5A1765016A" name="schema" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a36F832D2039C" referencedEnd="a3A5639DA00C9">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="1" upper="1" is_ordered="false" is_unique="false"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Olap.DeploymentGroup.cubeDeployment    [Reference] ==================== -->
        <Model:Reference xmi.id="a3A563BC30306" name="cubeDeployment" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a3A5634210088" referencedEnd="a3A563A2E01A6">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Olap.DeploymentGroup.dimensionDeployment    [Reference] ==================== -->
        <Model:Reference xmi.id="a3A563BCB02AE" name="dimensionDeployment" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a3A48C4C001EC" referencedEnd="a3A563A3002F3">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    <Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3A5639C9022D">
<Model:Tag.values>CwmDeploymentGroup</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== Olap.Dimension    [Class] ==================== -->
    <Model:Class xmi.id="a3777B4770109" name="Dimension" isRoot="false" isLeaf="false" isAbstract="false" visibility="public_vis" isSingleton="false" supertypes="a3298A02900FE">
      <Model:ModelElement.annotation>A Dimension is an ordinate within a multidimensional structure, and consists of an ordered list of values (i.e.,  members) that share a common semantic meaning within the domain being modeled.  Each member designates a unique position along its ordinate.

Typical Dimensions are: Time, Product, Geography, Scenario (e.g., actual, budget, forecast), Measure (e.g., sales, quantity).
</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Olap.Dimension.isTime    [Attribute] ==================== -->
        <Model:Attribute xmi.id="a378EB9EC017C" name="isTime" annotation="If true, then this Dimension is a Time Dimension (i.e., its members collectively represent a time series)." 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>
        <!-- ==================== Olap.Dimension.isMeasure    [Attribute] ==================== -->
        <Model:Attribute xmi.id="a37781F670265" name="isMeasure" annotation="If true, then this Dimension is a Measure Dimension (i.e., its members represent Measures)." 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>
        <!-- ==================== Olap.Dimension.hierarchy    [Reference] ==================== -->
        <Model:Reference xmi.id="a3859403D0259" name="hierarchy" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a36F91D39014A" referencedEnd="a378EBB17015E">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Olap.Dimension.memberSelection    [Reference] ==================== -->
        <Model:Reference xmi.id="a385940440154" name="memberSelection" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a36F91E2C00D9" referencedEnd="a377D39B6015D">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Olap.Dimension.cubeDimensionAssociation    [Reference] ==================== -->
        <Model:Reference xmi.id="a385E551503B2" name="cubeDimensionAssociation" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a378B40100236" referencedEnd="a378B40D901E5">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Olap.Dimension.displayDefault    [Reference] ==================== -->
        <Model:Reference xmi.id="a385943F2002A" name="displayDefault" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a36F91D39014A" referencedEnd="a378EBB2B010C">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="1" is_ordered="false" is_unique="false"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Olap.Dimension.schema    [Reference] ==================== -->
        <Model:Reference xmi.id="a3A6B48AB0248" name="schema" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a36F832D2039C" referencedEnd="a3A48C1730068">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="1" upper="1" is_ordered="false" is_unique="false"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    <Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3777B4770109">
<Model:Tag.values>CwmDimension</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== Olap.DimensionDeployment    [Class] ==================== -->
    <Model:Class xmi.id="a3A48C4C001EC" name="DimensionDeployment" isRoot="false" isLeaf="false" isAbstract="false" visibility="public_vis" isSingleton="false" supertypes="a3298A02900FE">
      <Model:ModelElement.annotation>DimensionDeployment represents a particular implementation strategy for the dimensional/hierarchical portions of an OLAP model.  It does so by organizing a collection of StructureMaps, which in turn define a mapping to an implementation model.
</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Olap.DimensionDeployment.hierarchyLevelAssociation    [Reference] ==================== -->
        <Model:Reference xmi.id="a3A48E6DF000C" name="hierarchyLevelAssociation" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a37488CDF03BA" referencedEnd="a3A48E4C50037">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="1" is_ordered="false" is_unique="false"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Olap.DimensionDeployment.valueBasedHierarchy    [Reference] ==================== -->
        <Model:Reference xmi.id="a3A48E6E80380" name="valueBasedHierarchy" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a374992C8031C" referencedEnd="a3A48E4CD02C4">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="1" is_ordered="false" is_unique="false"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Olap.DimensionDeployment.structureMap    [Reference] ==================== -->
        <Model:Reference xmi.id="a3A48E96802B8" name="structureMap" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a374CB0810199" referencedEnd="a3A48E8D40157">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Olap.DimensionDeployment.listOfValues    [Reference] ==================== -->
        <Model:Reference xmi.id="a3A48EB61015A" name="listOfValues" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a374CB0810199" referencedEnd="a3A48E9FE024A">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="1" is_ordered="false" is_unique="false"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Olap.DimensionDeployment.immediateParent    [Reference] ==================== -->
        <Model:Reference xmi.id="a3A48EBDD0131" name="immediateParent" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a374CB0810199" referencedEnd="a3A48EA08003C">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="1" is_ordered="false" is_unique="false"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Olap.DimensionDeployment.deploymentGroup    [Reference] ==================== -->
        <Model:Reference xmi.id="a3A563B420289" name="deploymentGroup" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a3A5639C9022D" referencedEnd="a3A563A300343">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="1" upper="1" is_ordered="false" is_unique="false"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    <Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3A48C4C001EC">
<Model:Tag.values>CwmDimensionDeployment</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== Olap.Hierarchy    [Class] ==================== -->
    <Model:Class xmi.id="a36F91D39014A" name="Hierarchy" annotation="A Hierarchy is an organizational structure that imposes a parent/child ordering on the members of the Dimension, usually to define either a navigational or consolidation/computational paths through the Dimension (i.e., a value associated with a child member is aggregated into one or more parents). " isRoot="false" isLeaf="false" isAbstract="false" visibility="public_vis" isSingleton="false" supertypes="a3298A02900FE">
      <Model:Namespace.contents>
        <!-- ==================== Olap.Hierarchy.dimension    [Reference] ==================== -->
        <Model:Reference xmi.id="a385E5B61032B" name="dimension" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a3777B4770109" referencedEnd="a378EBB170118">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="1" upper="1" is_ordered="false" is_unique="false"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Olap.Hierarchy.cubeDimensionAssociation    [Reference] ==================== -->
        <Model:Reference xmi.id="a387F1D6A01FC" name="cubeDimensionAssociation" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a378B40100236" referencedEnd="a37A791DE021F">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Olap.Hierarchy.defaultedDimension    [Reference] ==================== -->
        <Model:Reference xmi.id="a3A6B59B302CE" name="defaultedDimension" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a3777B4770109" referencedEnd="a378EBB2B013E">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="1" is_ordered="false" is_unique="false"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Olap.Hierarchy.hierarchyMemberSelectionGroup    [Reference] ==================== -->
        <Model:Reference xmi.id="a3BCC47E60350" name="hierarchyMemberSelectionGroup" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a3BCC44C502D3" referencedEnd="a3BCC4698011F">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    <Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a36F91D39014A">
<Model:Tag.values>CwmHierarchy</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== Olap.HierarchyLevelAssociation    [Class] ==================== -->
    <Model:Class xmi.id="a37488CDF03BA" name="HierarchyLevelAssociation" isRoot="false" isLeaf="false" isAbstract="false" visibility="public_vis" isSingleton="false" supertypes="a3298A02900FE">
      <Model:ModelElement.annotation>HierarchyLevelAssociation is a class that orders Levels within a LevelBasedHierarchy, and provides a means of mapping Level/Hierarchy-oriented  Dimension attributes to one or more physical deployments.

The relative ordering of DimensionDeployment classes optionally implies a desired order of selection of DimensionDeployments, based on implementation-specific considerations (e.g., optimized access of aggregate data).</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Olap.HierarchyLevelAssociation.levelBasedHierarchy    [Reference] ==================== -->
        <Model:Reference xmi.id="a385E673D0379" name="levelBasedHierarchy" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a37488B69027C" referencedEnd="a37488D0602D0">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="1" upper="1" is_ordered="false" is_unique="false"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Olap.HierarchyLevelAssociation.currentLevel    [Reference] ==================== -->
        <Model:Reference xmi.id="a38724903031F" name="currentLevel" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a37488DB702D4" referencedEnd="a37488F180037">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="1" upper="1" is_ordered="false" is_unique="false"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Olap.HierarchyLevelAssociation.dimensionDeployment    [Reference] ==================== -->
        <Model:Reference xmi.id="a385E6E9D0399" name="dimensionDeployment" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a3A48C4C001EC" referencedEnd="a3A48E4C50019">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="true" is_unique="true"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    <Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a37488CDF03BA">
<Model:Tag.values>CwmHierarchyLevelAssociation</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== Olap.LevelBasedHierarchy    [Class] ==================== -->
    <Model:Class xmi.id="a37488B69027C" name="LevelBasedHierarchy" isRoot="false" isLeaf="false" isAbstract="false" visibility="public_vis" isSingleton="false" supertypes="a36F91D39014A">
      <Model:ModelElement.annotation>A LevelBasedHierarchy is a hierarchy that describes relationships between specific levels of a Dimension. LevelBasedHierarchy can be used to model to "pure level" hierarchies (e.g., dimension-level tables) and "mixed" hierarchies (i.e., levels + linked nodes).
</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Olap.LevelBasedHierarchy.hierarchyLevelAssociation    [Reference] ==================== -->
        <Model:Reference xmi.id="a385E66E8010A" name="hierarchyLevelAssociation" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a37488CDF03BA" referencedEnd="a37488D0602D1">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="true" is_unique="true"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    <Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a37488B69027C">
<Model:Tag.values>CwmLevelBasedHierarchy</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== Olap.MemberSelectionGroup    [Class] ==================== -->
    <Model:Class xmi.id="a3846924F008C" name="MemberSelectionGroup" annotation="MemberSelectionGroup enables the grouping together of semantically-related MemberSelections." isRoot="false" isLeaf="false" isAbstract="false" visibility="public_vis" isSingleton="false" supertypes="a3298A02900FE">
      <Model:Namespace.contents>
        <!-- ==================== Olap.MemberSelectionGroup.memberSelection    [Reference] ==================== -->
        <Model:Reference xmi.id="a385E40B6037E" name="memberSelection" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a36F91E2C00D9" referencedEnd="a37BE29740058">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="1" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Olap.MemberSelectionGroup.cubeRegion    [Reference] ==================== -->
        <Model:Reference xmi.id="a385E59C00012" name="cubeRegion" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a3A4E8CEF02F0" referencedEnd="a3A4E8EB502F4">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="1" upper="1" is_ordered="false" is_unique="false"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    <Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3846924F008C">
<Model:Tag.values>CwmMemberSelectionGroup</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== Olap.MemberSelection    [Class] ==================== -->
    <Model:Class xmi.id="a36F91E2C00D9" name="MemberSelection" annotation="MemberSelection represents an arbitrary subset of the members of a Dimension." isRoot="false" isLeaf="false" isAbstract="false" visibility="public_vis" isSingleton="false" supertypes="a3298A02900FE">
      <Model:Namespace.contents>
        <!-- ==================== Olap.MemberSelection.dimension    [Reference] ==================== -->
        <Model:Reference xmi.id="a385E5836028C" name="dimension" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a3777B4770109" referencedEnd="a377D39B60153">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="1" upper="1" is_ordered="false" is_unique="false"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Olap.MemberSelection.memberSelectionGroup    [Reference] ==================== -->
        <Model:Reference xmi.id="a385E584F0129" name="memberSelectionGroup" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a3846924F008C" referencedEnd="a37BE2974009E">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    <Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a36F91E2C00D9">
<Model:Tag.values>CwmMemberSelection</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== Olap.Schema    [Class] ==================== -->
    <Model:Class xmi.id="a36F832D2039C" name="Schema" annotation="Schema contains all elements comprising an OLAP model.  A Schema may also contain any number of DeploymentGroups, representing the various physical deployments of the logical Schema." isRoot="false" isLeaf="false" isAbstract="false" visibility="public_vis" isSingleton="false" supertypes="a327A5D19033E">
      <Model:Namespace.contents>
        <!-- ==================== Olap.Schema.cube    [Reference] ==================== -->
        <Model:Reference xmi.id="a3A5A17DA03DF" name="cube" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a36F832E20069" referencedEnd="a3A48C17001E0">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Olap.Schema.dimension    [Reference] ==================== -->
        <Model:Reference xmi.id="a3A5A18BA011A" name="dimension" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a3777B4770109" referencedEnd="a3A48C1730018">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Olap.Schema.deploymentGroup    [Reference] ==================== -->
        <Model:Reference xmi.id="a3A5A19000193" name="deploymentGroup" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a3A5639C9022D" referencedEnd="a3A5639DA00BE">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    <Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a36F832D2039C">
<Model:Tag.values>CwmSchema</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== Olap.ValueBasedHierarchy    [Class] ==================== -->
    <Model:Class xmi.id="a374992C8031C" name="ValueBasedHierarchy" isRoot="false" isLeaf="false" isAbstract="false" visibility="public_vis" isSingleton="false" supertypes="a36F91D39014A">
      <Model:ModelElement.annotation>ValueBasedHierarchy is a subclass of Hierarchy that ranks Dimension members according to their relative distance from the root.  Each member of a ValueBasedHierarchy has a specific "metric" or "value" associated with it.
ValueBasedHierarchy is used to model pure "linked node" hierarchies (e.g., parent-child tables).</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Olap.ValueBasedHierarchy.dimensionDeployment    [Reference] ==================== -->
        <Model:Reference xmi.id="a3A48E62E0069" name="dimensionDeployment" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a3A48C4C001EC" referencedEnd="a3A48E4CD02A6">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="true" is_unique="true"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    <Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a374992C8031C">
<Model:Tag.values>CwmValueBasedHierarchy</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== Olap.Level    [Class] ==================== -->
    <Model:Class xmi.id="a37488DB702D4" name="Level" annotation="Level is a subclass of MemberSelection that assigns each member of a Dimension to a specific hierarchical level within the Dimension." isRoot="false" isLeaf="false" isAbstract="false" visibility="public_vis" isSingleton="false" supertypes="a36F91E2C00D9">
      <Model:Namespace.contents>
        <!-- ==================== Olap.Level.hierarchyLevelAssociation    [Reference] ==================== -->
        <Model:Reference xmi.id="a385E64F60077" name="hierarchyLevelAssociation" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a37488CDF03BA" referencedEnd="a37488F180041">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    <Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a37488DB702D4">
<Model:Tag.values>CwmLevel</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== Olap.CodedLevel    [Class] ==================== -->
    <Model:Class xmi.id="a37A8A21000D4" name="CodedLevel" annotation="CodedLevel is a subclass of Level that assigns a unique encoding, or label, to each of its Dimension members." isRoot="false" isLeaf="false" isAbstract="false" visibility="public_vis" isSingleton="false" supertypes="a37488DB702D4">
      <Model:Namespace.contents>
        <!-- ==================== Olap.CodedLevel.encoding    [Attribute] ==================== -->
        <Model:Attribute xmi.id="a37A8A28A00C5" name="encoding" annotation="Encoding is an expression that generates a unique encoding, or label, for each member of a CodedLevel." scope="instance_level" visibility="public_vis" isChangeable="true" isDerived="false" type="a376A84310237">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="1" upper="1" is_ordered="false" is_unique="false"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Attribute>
      </Model:Namespace.contents>
    <Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a37A8A21000D4">
<Model:Tag.values>CwmCodedLevel</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== Olap.Measure    [Class] ==================== -->
    <Model:Class xmi.id="a382ADE680343" name="Measure" annotation="Measure is a subclass of Attribute representing Dimension Measures (e.g., Sales, Quantity, Weight).  Synonym: Variable." isRoot="false" isLeaf="false" isAbstract="false" visibility="public_vis" isSingleton="false" supertypes="a3A6F62780143">
<Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a382ADE680343">
<Model:Tag.values>CwmMeasure</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== Olap.StructureMap    [Class] ==================== -->
    <Model:Class xmi.id="a374CB0810199" name="StructureMap" isRoot="false" isLeaf="false" isAbstract="false" visibility="public_vis" isSingleton="false" supertypes="a374322890098">
      <Model:ModelElement.annotation>StructureMap is a subclass of TransformationMap that maps Dimension attributes to their physical data sources.

(Note: Multiple StructureMaps may be grouped together into single, cohesive unit via TransformationTask.)</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <!-- ==================== Olap.StructureMap.dimensionDeployment    [Reference] ==================== -->
        <Model:Reference xmi.id="a3A48EC7A01A4" name="dimensionDeployment" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a3A48C4C001EC" referencedEnd="a3A48E8D40175">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="1" upper="1" is_ordered="false" is_unique="false"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Olap.StructureMap.dimensionDeploymentLV    [Reference] ==================== -->
        <Model:Reference xmi.id="a3A6B363F017D" name="dimensionDeploymentLV" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a3A48C4C001EC" referencedEnd="a3A48E9FE0272">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="1" is_ordered="false" is_unique="false"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
        <!-- ==================== Olap.StructureMap.dimensionDeploymentIP    [Reference] ==================== -->
        <Model:Reference xmi.id="a3A6B36500037" name="dimensionDeploymentIP" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a3A48C4C001EC" referencedEnd="a3A48EA08006E">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="0" upper="1" is_ordered="false" is_unique="false"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    <Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a374CB0810199">
<Model:Tag.values>CwmStructureMap</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== Olap.HierarchyMemberSelectionGroup    [Class] ==================== -->
    <Model:Class xmi.id="a3BCC44C502D3" name="HierarchyMemberSelectionGroup" annotation="This subtype of MemberSelectionGroup allows users to specify that a particular cube region is determined by hierarchy. This allows the description of data to vary by hierarchy and, therefore, provides the ability to model multiple measure values per hierarchy" isRoot="false" isLeaf="false" isAbstract="false" visibility="public_vis" isSingleton="false" supertypes="a3846924F008C">
      <Model:Namespace.contents>
        <!-- ==================== Olap.HierarchyMemberSelectionGroup.hierarchy    [Reference] ==================== -->
        <Model:Reference xmi.id="a3BCC46FA03B5" name="hierarchy" annotation="" scope="instance_level" visibility="public_vis" isChangeable="true" type="a36F91D39014A" referencedEnd="a3BCC469800D9">
          <Model:StructuralFeature.multiplicity>
            <Model:MultiplicityType lower="1" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:StructuralFeature.multiplicity>
        </Model:Reference>
      </Model:Namespace.contents>
    <Model:Namespace.contents>
<Model:Tag tagId="javax.jmi.substituteName" elements="a3BCC44C502D3">
<Model:Tag.values>CwmHierarchyMemberSelectionGroup</Model:Tag.values>
</Model:Tag>
</Model:Namespace.contents>
</Model:Class>
    <!-- ==================== Olap.LevelBasedHierarchyOwnsHierarchyLevelAssociations    [Association] ==================== -->
    <Model:Association xmi.id="a37488D06008B" name="LevelBasedHierarchyOwnsHierarchyLevelAssociations" annotation="A LevelBasedHierarchy generally owns one or more HierarchyLevelAssociations." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a37488D0602D0" name="levelBasedHierarchy" annotation="" isNavigable="true" aggregation="composite" isChangeable="true" type="a37488B69027C">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="1" upper="1" is_ordered="false" is_unique="false"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a37488D0602D1" name="hierarchyLevelAssociation" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a37488CDF03BA">
          <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>
    <!-- ==================== Olap.HierarchyLevelAssocsReferenceLevel    [Association] ==================== -->
    <Model:Association xmi.id="a37488F140168" name="HierarchyLevelAssocsReferenceLevel" annotation="Each HierarchyLevelAssoc references precisely one Level as its current level." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a37488F180037" name="currentLevel" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a37488DB702D4">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="1" upper="1" is_ordered="false" is_unique="false"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a37488F180041" name="hierarchyLevelAssociation" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a37488CDF03BA">
          <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>
    <!-- ==================== Olap.DimensionOwnsMemberSelections    [Association] ==================== -->
    <Model:Association xmi.id="a377D39B30221" name="DimensionOwnsMemberSelections" annotation="A Dimension may own any number of MemberSelections." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a377D39B60153" name="dimension" annotation="" isNavigable="true" aggregation="composite" isChangeable="true" type="a3777B4770109">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="1" upper="1" is_ordered="false" is_unique="false"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a377D39B6015D" name="memberSelection" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a36F91E2C00D9">
          <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>
    <!-- ==================== Olap.CubeOwnsCubeDimensionAssociations    [Association] ==================== -->
    <Model:Association xmi.id="a378B40D00305" name="CubeOwnsCubeDimensionAssociations" annotation="The dimensionality of a Cube is defined by a collection of unique Dimensions.  Each Dimension is represented by an instance of CubeDimensionAssociation." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a378B40D10248" name="cube" annotation="" isNavigable="true" aggregation="composite" isChangeable="true" type="a36F832E20069">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="1" upper="1" is_ordered="false" is_unique="false"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a378B40D102A2" name="cubeDimensionAssociation" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a378B40100236">
          <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>
    <!-- ==================== Olap.CubeDimensionAssociationsReferenceDimension    [Association] ==================== -->
    <Model:Association xmi.id="a378B40D802A2" name="CubeDimensionAssociationsReferenceDimension" annotation="Each CubeDimenjsionAssociation references a single Dimension." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a378B40D9019F" name="dimension" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a3777B4770109">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="1" upper="1" is_ordered="false" is_unique="false"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a378B40D901E5" name="cubeDimensionAssociation" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a378B40100236">
          <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>
    <!-- ==================== Olap.DimensionOwnsHierarchies    [Association] ==================== -->
    <Model:Association xmi.id="a378EBB1601E8" name="DimensionOwnsHierarchies" annotation="A Dimension may own several Hierarchies." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a378EBB170118" name="dimension" annotation="" isNavigable="true" aggregation="composite" isChangeable="true" type="a3777B4770109">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="1" upper="1" is_ordered="false" is_unique="false"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a378EBB17015E" name="hierarchy" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a36F91D39014A">
          <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>
    <!-- ==================== Olap.DimensionHasDefaultHierarchy    [Association] ==================== -->
    <Model:Association xmi.id="a378EBB2802CB" name="DimensionHasDefaultHierarchy" annotation="A Dimension may designate a default Hierarchy for display purposes." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a378EBB2B010C" name="displayDefault" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a36F91D39014A">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="0" upper="1" is_ordered="false" is_unique="false"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a378EBB2B013E" name="defaultedDimension" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a3777B4770109">
          <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>
    <!-- ==================== Olap.CubeDimensionAssociationsReferenceCalcHierarchy    [Association] ==================== -->
    <Model:Association xmi.id="a37A791DE0002" name="CubeDimensionAssociationsReferenceCalcHierarchy" annotation="A CubeDimensionAssociation may designate a default Hierarchy for calculation purposes." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a37A791DE0201" name="calcHierarchy" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a36F91D39014A">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="0" upper="1" is_ordered="false" is_unique="false"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a37A791DE021F" name="cubeDimensionAssociation" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a378B40100236">
          <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>
    <!-- ==================== Olap.MemberSelectionGroupReferencesMemberSelections    [Association] ==================== -->
    <Model:Association xmi.id="a37BE29730219" name="MemberSelectionGroupReferencesMemberSelections" annotation="A MemberSelectionGroup references at least one unique MemberSelection." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a37BE29740058" name="memberSelection" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a36F91E2C00D9">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="1" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a37BE2974009E" name="memberSelectionGroup" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a3846924F008C">
          <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>
    <!-- ==================== Olap.SchemaOwnsCubes    [Association] ==================== -->
    <Model:Association xmi.id="a3A48C16F0379" name="SchemaOwnsCubes" annotation="A Schema may own any number of Cubes." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a3A48C17001E0" name="cube" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a36F832E20069">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a3A48C1700212" name="schema" annotation="" isNavigable="true" aggregation="composite" isChangeable="true" type="a36F832D2039C">
          <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>
    <!-- ==================== Olap.SchemaOwnsDimensions    [Association] ==================== -->
    <Model:Association xmi.id="a3A48C172019D" name="SchemaOwnsDimensions" annotation="A 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="a3A48C1730018" name="dimension" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a3777B4770109">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a3A48C1730068" name="schema" annotation="" isNavigable="true" aggregation="composite" isChangeable="true" type="a36F832D2039C">
          <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>
    <!-- ==================== Olap.HierarchyLevelAssociationOwnsDimensionDeployments    [Association] ==================== -->
    <Model:Association xmi.id="a3A48E4C400FE" name="HierarchyLevelAssociationOwnsDimensionDeployments" isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:ModelElement.annotation>A HierarchyLevelAssociation may own any number of DimensionDeployments.

The ordering of the DimensionDeployment classes may optionally be assigned an implementation-specific meaning (e.g., desired order of selection of multiple deployments, based on optimized access to aggregated data).</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a3A48E4C50019" name="dimensionDeployment" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a3A48C4C001EC">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="true" is_unique="true"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a3A48E4C50037" name="hierarchyLevelAssociation" annotation="" isNavigable="true" aggregation="composite" isChangeable="true" type="a37488CDF03BA">
          <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>
    <!-- ==================== Olap.ValueBasedHierarchyOwnsDimensionDeployments    [Association] ==================== -->
    <Model:Association xmi.id="a3A48E4CC03D1" name="ValueBasedHierarchyOwnsDimensionDeployments" isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:ModelElement.annotation>A ValueBasedHierarchy may own any number of DimensionDeployments.

The ordering of the DimensionDeployment classes may optionally be assigned an implementation-specific meaning (e.g., desired order of selection of multiple deployments, based on optimized access to aggregated data).</Model:ModelElement.annotation>
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a3A48E4CD02A6" name="dimensionDeployment" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a3A48C4C001EC">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="true" is_unique="true"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a3A48E4CD02C4" name="valueBasedHierarchy" annotation="" isNavigable="true" aggregation="composite" isChangeable="true" type="a374992C8031C">
          <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>
    <!-- ==================== Olap.DimensionDeploymentOwnsStructureMaps    [Association] ==================== -->
    <Model:Association xmi.id="a3A48E8D3015F" name="DimensionDeploymentOwnsStructureMaps" annotation="An instance of DimensionDeployment may own zero or more StructureMaps." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a3A48E8D40157" name="structureMap" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a374CB0810199">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a3A48E8D40175" name="dimensionDeployment" annotation="" isNavigable="true" aggregation="composite" isChangeable="true" type="a3A48C4C001EC">
          <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>
    <!-- ==================== Olap.DimensionDeploymentHasListOfValues    [Association] ==================== -->
    <Model:Association xmi.id="a3A48E9FE0073" name="DimensionDeploymentHasListOfValues" annotation="An instance of DimensionDeployment may reference zero or one StructureMaps as its &quot;list of values&quot; StructureMap." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a3A48E9FE024A" name="listOfValues" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a374CB0810199">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="0" upper="1" is_ordered="false" is_unique="false"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a3A48E9FE0272" name="dimensionDeploymentLV" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a3A48C4C001EC">
          <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>
    <!-- ==================== Olap.DimensionDeploymentHasImmediateParent    [Association] ==================== -->
    <Model:Association xmi.id="a3A48EA07021B" name="DimensionDeploymentHasImmediateParent" annotation="An instance of DimensionDeployment may reference zero or one StructureMaps as its &quot;immediate parent&quot; StructureMap." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a3A48EA08003C" name="immediateParent" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a374CB0810199">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="0" upper="1" is_ordered="false" is_unique="false"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a3A48EA08006E" name="dimensionDeploymentIP" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a3A48C4C001EC">
          <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>
    <!-- ==================== Olap.CubeOwnsCubeRegions    [Association] ==================== -->
    <Model:Association xmi.id="a3A4E8EAF0039" name="CubeOwnsCubeRegions" annotation="A Cube may own any number of CubeRegions." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a3A4E8EAF02D8" name="cubeRegion" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a3A4E8CEF02F0">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a3A4E8EAF0300" name="cube" annotation="" isNavigable="true" aggregation="composite" isChangeable="true" type="a36F832E20069">
          <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>
    <!-- ==================== Olap.CubeRegionOwnsMemberSelectionGroups    [Association] ==================== -->
    <Model:Association xmi.id="a3A4E8EB50114" name="CubeRegionOwnsMemberSelectionGroups" annotation="A CubeRegion may own any number of MemberSelectionGroups." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a3A4E8EB502CC" name="memberSelectionGroup" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a3846924F008C">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a3A4E8EB502F4" name="cubeRegion" annotation="" isNavigable="true" aggregation="composite" isChangeable="true" type="a3A4E8CEF02F0">
          <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>
    <!-- ==================== Olap.CubeRegionOwnsCubeDeployments    [Association] ==================== -->
    <Model:Association xmi.id="a3A5636B100A4" name="CubeRegionOwnsCubeDeployments" annotation="A CubeRegion may own any number of CubeDeployments." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a3A5636B1025D" name="cubeDeployment" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a3A5634210088">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="true" is_unique="true"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a3A5636B10271" name="cubeRegion" annotation="" isNavigable="true" aggregation="composite" isChangeable="true" type="a3A4E8CEF02F0">
          <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>
    <!-- ==================== Olap.SchemaOwnsDeploymentGroups    [Association] ==================== -->
    <Model:Association xmi.id="a3A5639D9033E" name="SchemaOwnsDeploymentGroups" annotation="A Schema may own any number of DeploymentGroups." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a3A5639DA00BE" name="deploymentGroup" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a3A5639C9022D">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a3A5639DA00C9" name="schema" annotation="" isNavigable="true" aggregation="composite" isChangeable="true" type="a36F832D2039C">
          <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>
    <!-- ==================== Olap.DeploymentGroupReferencesCubeDeployments    [Association] ==================== -->
    <Model:Association xmi.id="a3A563A2D03AD" name="DeploymentGroupReferencesCubeDeployments" annotation="A DeploymentGroup may reference any number of CubeDeployments." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a3A563A2E01A6" name="cubeDeployment" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a3A5634210088">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a3A563A2E01CE" name="deploymentGroup" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a3A5639C9022D">
          <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>
    <!-- ==================== Olap.DeploymentGroupReferencesDimensionDeployments    [Association] ==================== -->
    <Model:Association xmi.id="a3A563A300130" name="DeploymentGroupReferencesDimensionDeployments" annotation="A DeploymentGroup may reference any number of DimensionDeployments." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a3A563A3002F3" name="dimensionDeployment" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a3A48C4C001EC">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a3A563A300343" name="deploymentGroup" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a3A5639C9022D">
          <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>
    <!-- ==================== Olap.CubeDeploymentOwnsContentMaps    [Association] ==================== -->
    <Model:Association xmi.id="a3A568180028D" name="CubeDeploymentOwnsContentMaps" annotation="A CubeDeployment owns any number of ContentMaps." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a3A5681810144" name="contentMap" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a3A5680DA0284">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="0" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a3A5681810162" name="cubeDeployment" annotation="" isNavigable="true" aggregation="composite" isChangeable="true" type="a3A5634210088">
          <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>
    <!-- ==================== Olap.HierarchyMemberSelectionGroupReferencesHierarchy    [Association] ==================== -->
    <Model:Association xmi.id="a3BCC46970069" name="HierarchyMemberSelectionGroupReferencesHierarchy" annotation="A HierarchyMemberSelectionGroup references one or more Hierarchies." isRoot="true" isLeaf="true" isAbstract="false" visibility="public_vis" isDerived="false">
      <Model:Namespace.contents>
        <Model:AssociationEnd xmi.id="a3BCC469800D9" name="hierarchy" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a36F91D39014A">
          <Model:AssociationEnd.multiplicity>
            <Model:MultiplicityType lower="1" upper="-1" is_ordered="false" is_unique="true"/>
          </Model:AssociationEnd.multiplicity>
        </Model:AssociationEnd>
        <Model:AssociationEnd xmi.id="a3BCC4698011F" name="hierarchyMemberSelectionGroup" annotation="" isNavigable="true" aggregation="none" isChangeable="true" type="a3BCC44C502D3">
          <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>
<!-- ==================== MiningCore    [Package] ==================== -->

<!-- ==================== Clustering    [Package] ==================== -->

<!-- ==================== AssociationRules    [Package] ==================== -->

<!-- ==================== Supervised    [Package] ==================== -->

<!-- ==================== Classification    [Package] ==================== -->

<!-- ==================== Approximation    [Package] ==================== -->

<!-- ==================== AttributeImportance    [Package] ==================== -->

<!-- ==================== InformationVisualization    [Package] ==================== -->

<!-- ==================== BusinessNomenclature    [Package] ==================== -->

<!-- ==================== WarehouseProcess    [Package] ==================== -->

<!-- ==================== WarehouseOperation    [Package] ==================== -->

<!-- ==================== CWMComplete    [Package] ==================== -->

</Model:Namespace.contents>
</Model:Package>
</Model:Namespace.contents>
</Model:Package>
</XMI.content>
</XMI>
New to GrepCode? Check out our FAQ X