<?xml encoding="UTF-8"?>
<!-- Copyright (c) 2007-2010 by Kavanagh Consultancy Limited. All rights reserved. -->

<!-- OOA of OOA Elements -->

<!ELEMENT Project (Description?, Task*, Domain*, Bridge*, ModelPopulation*, MetamodelPopulation*, DomainChart?,
                   Configuration*)>
<!ATTLIST Project
    Name           CDATA #REQUIRED
    Notation       (ShlaerMellor | ExecutableUML | ExecutableUML2) "ShlaerMellor"
    Location       CDATA ""
    LocationFormat CDATA #FIXED "OOA Interchange Format 0.05">
<!-- Name           : Name
     Notation       : Notation
     Location       : Project Location
     LocationFormat : Project Location Format -->

<!ELEMENT Description (#PCDATA)>
<!ATTLIST Description
    TextFormat (Plain | HTML) "Plain">
<!-- TextFormat : * -->

<!ELEMENT Task (Description?)>
<!ATTLIST Task
    Name CDATA #REQUIRED>
<!-- Name : Name -->

<!ELEMENT Domain (MissionStatement?, InformationModel?,
                  (ObjectObserver | EventGeneratedObserver | OperationInvokedObserver)*, Activity*)>
<!ATTLIST Domain
    Name                     CDATA #REQUIRED
    DomainCategory           (Application | Service | Architectural | Implementation) "Service"
    ManualOperationNumbering (False | True) "False"
    LabelPrefix              CDATA #IMPLIED>
<!-- Name                         : Name
     DomainCategory               : Domain Category
     ManualOperationNumbering     : Boolean
     LabelPrefix              (M) : String -->

<!ELEMENT MissionStatement (#PCDATA)>
<!ATTLIST MissionStatement
    TextFormat (Plain | HTML) "Plain">
<!-- TextFormat : * -->

<!ELEMENT InformationModel (Description?,
                            (BooleanType | EnumeratedType | SymbolicType | NumericType | ArbitraryIDType
                                         | ExternalType | ObjectInstanceType | EventInstanceType
                                         | ReturnCoordinateType | TransferVectorType)*,
                            Object*,
                            (SimpleRelationship | AssociativeRelationship | ComposedRelationship
                                                | MathematicallyDependentRelationship | SubtypeSupertypeRelationship)*,
                            Subsystem*,
                            (LifecycleModel | SingleAssignerModel | MultipleAssignerModel
                                            | PolymorphicDestination | ExternalEntity)*,
                            Function*,
                            ((SubsystemRelationshipModel?, SubsystemCommunicationModel?)
                                | (ObjectInformationModel?, ObjectCommunicationModel?, Report?)),
                            PatternFile*)>
<!ATTLIST InformationModel
    Name                        CDATA #REQUIRED
    ManualObjectNumbering       (False | True) "False"
    ManualRelationshipNumbering (False | True) "False"
    ManualOperationNumbering    (False | True) "False"
    LabelPrefix                 CDATA #IMPLIED>
<!-- Name                            : Name
     ManualObjectNumbering           : Boolean
     ManualRelationshipNumbering     : Boolean
     ManualOperationNumbering        : Boolean
     LabelPrefix                 (M) : String -->

<!ELEMENT BooleanType (Description?)>
<!ATTLIST BooleanType
    DataTypeID     CDATA #IMPLIED
    Name           CDATA #REQUIRED
    Predefined     (False | True) "False"
    ReferenceCount CDATA #IMPLIED
    FalseAlias     CDATA "False"
    TrueAlias      CDATA "True"
    DefaultValue   CDATA #IMPLIED>
<!-- DataTypeID     (M) : Data Type ID
     Name               : Name
     Predefined         : Boolean
     ReferenceCount (M) : Non-Negative Integer
     FalseAlias         : Name
     TrueAlias          : Name
     DefaultValue       : Name (1c) -->

<!ELEMENT EnumeratedType (Description?, LegalValue+)>
<!ATTLIST EnumeratedType
    DataTypeID     CDATA #IMPLIED
    Name           CDATA #REQUIRED
    Predefined     (False | True) "False"
    ReferenceCount CDATA #IMPLIED
    DefaultValue   CDATA #IMPLIED>
<!-- DataTypeID     (M) : Data Type ID
     Name               : Name
     Predefined         : Boolean
     ReferenceCount (M) : Non-Negative Integer
     DefaultValue   (R) : Name (1c) -->

<!ELEMENT LegalValue (Description?)>
<!ATTLIST LegalValue
    Name CDATA #REQUIRED>
<!-- Name : Name -->

<!ELEMENT SymbolicType (Description?, Pattern?)>
<!ATTLIST SymbolicType
    DataTypeID     CDATA #IMPLIED
    Name           CDATA #REQUIRED
    Predefined     (False | True) "False"
    ReferenceCount CDATA #IMPLIED
    MinimumLength  CDATA "0"
    MaximumLength  CDATA #IMPLIED
    DefaultValue   CDATA #IMPLIED>
<!-- DataTypeID     (M) : Data Type ID
     Name               : Name
     Predefined         : Boolean
     ReferenceCount (M) : Non-Negative Integer
     MinimumLength      : Non-Negative Integer
     MaximumLength      : Non-Negative Integer (1c)
     DefaultValue       : String (1c) -->

<!ELEMENT Pattern (#PCDATA)>

<!ELEMENT NumericType (Description?)>
<!ATTLIST NumericType
    DataTypeID             CDATA #IMPLIED
    Name                   CDATA #REQUIRED
    Predefined             (False | True) "False"
    ReferenceCount         CDATA #IMPLIED
    ValueFormat            (Binary | Octal | Decimal | Hexadecimal | Time) "Decimal"
    Unit                   CDATA ""
    TimeUnit               (Year | Month | Day | Hour | Minute | Second
                                 | Millisecond | Microsecond | Nanosecond) #IMPLIED
    MinimumValue           CDATA #IMPLIED
    MaximumValue           CDATA #IMPLIED
    PreferredDecimalPlaces CDATA "0"
    MaximumDecimalPlaces   CDATA #IMPLIED
    Precision              CDATA #IMPLIED
    DefaultValue           CDATA #IMPLIED>
<!-- DataTypeID             (M) : Data Type ID
     Name                       : Name
     Predefined                 : Boolean
     ReferenceCount         (M) : Non-Negative Integer
     ValueFormat                : Numeric Value Format
     Unit                       : Name (1c)
     TimeUnit               (M) : Time Unit (1c)
     MinimumValue               : Real (1c)
     MaximumValue               : Real (1c)
     PreferredDecimalPlaces     : Non-Negative Integer
     MaximumDecimalPlaces       : Integer (1c)
     Precision              (M) : Real
     DefaultValue               : Real (1c) -->

<!ELEMENT ArbitraryIDType (Description?)>
<!ATTLIST ArbitraryIDType
    DataTypeID                              CDATA #IMPLIED
    Name                                    CDATA #REQUIRED
    Predefined                              (False | True) "False"
    ReferenceCount                          CDATA #IMPLIED
    Ordinal                                 (False | True) "False"
    IdentifiedObject                        CDATA ""
    ChildParentRelationship                 CDATA ""
    ChildMappedToParent                     (False | True) #IMPLIED
    MinimumValue                            CDATA "0"
    MaximumValue                            CDATA #IMPLIED
    UnallocatedPercentageBeforeReallocation CDATA #IMPLIED
    MinimumUnallocatedBeforeReallocation    CDATA "1"
    DefaultValue                            CDATA #IMPLIED>
<!-- DataTypeID                               (M): Data Type ID
     Name                                        : Name
     Predefined                                  : Boolean
     ReferenceCount                          (M) : Non-Negative Integer
     Ordinal                                     : Boolean
     IdentifiedObject                        (R) : Name (1c)
     ChildParentRelationship                 (R) : Relationship ID (1c)
     ChildMappedToParent                     (M) : Boolean
     MinimumValue                                : Non-Negative Integer
     MaximumValue                                : Non-Negative Integer (1c)
     UnallocatedPercentageBeforeReallocation     : Non-Negative Integer (1c)
     MinimumUnallocatedBeforeReallocation        : Positive Integer
     DefaultValue                                : Non-Negative Integer (1c) -->

<!ELEMENT ExternalType (Description?)>
<!ATTLIST ExternalType
    DataTypeID     CDATA #IMPLIED
    Name           CDATA #REQUIRED
    Predefined     (False | True) "False"
    ReferenceCount CDATA #IMPLIED
    ExternalEntity CDATA #REQUIRED
    LiteralType    CDATA "">
<!-- DataTypeID     (M) : Data Type ID
     Name               : Name
     Predefined         : Boolean
     ReferenceCount (M) : Non-Negative Integer
     ExternalEntity (R) : Name
     LiteralType    (R) : Name (1c) -->

<!ELEMENT ObjectInstanceType (Description?)>
<!ATTLIST ObjectInstanceType
    DataTypeID     CDATA #IMPLIED
    Name           CDATA #REQUIRED
    Predefined     CDATA #FIXED "True"
    ReferenceCount CDATA #IMPLIED
    Object         CDATA #REQUIRED>
<!-- DataTypeID     (M) : Data Type ID
     Name               : Name
     Predefined         : Boolean
     ReferenceCount (M) : Non-Negative Integer
     Object         (R) : Name -->

<!ELEMENT EventInstanceType (Description?)>
<!ATTLIST EventInstanceType
    DataTypeID     CDATA #IMPLIED
    Name           CDATA #REQUIRED
    Predefined     CDATA #FIXED "True"
    ReferenceCount CDATA #IMPLIED
    Event          CDATA #REQUIRED>
<!-- DataTypeID     (M) : Data Type ID
     Name               : Name
     Predefined         : Boolean
     ReferenceCount (M) : Non-Negative Integer
     Event          (R) : Event Label -->

<!ELEMENT ReturnCoordinateType (Description?)>
<!ATTLIST ReturnCoordinateType
    DataTypeID         CDATA #IMPLIED
    Name               CDATA #REQUIRED
    Predefined         CDATA #FIXED "True"
    ReferenceCount     CDATA #IMPLIED
    SynchronousService CDATA #REQUIRED>
<!-- DataTypeID         (M) : Data Type ID
     Name                   : Name
     Predefined             : Boolean
     ReferenceCount     (M) : Non-Negative Integer
     SynchronousService (R) : Operation Label -->

<!ELEMENT TransferVectorType (Description?)>
<!ATTLIST TransferVectorType
    DataTypeID                CDATA #IMPLIED
    Name                      CDATA #REQUIRED
    Predefined                CDATA #FIXED "True"
    ReferenceCount            CDATA #IMPLIED
    AsynchronousReturnProcess CDATA "">
<!-- DataTypeID                (M) : Data Type ID
     Name                          : Name
     Predefined                    : Boolean
     ReferenceCount            (M) : Non-Negative Integer
     AsynchronousReturnProcess (R) : Operation Label (1c) -->

<!ELEMENT Object (Description?,
                  (SimpleAttribute | ArbitraryIDAttribute | MathematicallyDependentAttribute
                                   | ReferentialTrueAttribute | ReferentialPolymorphicAttribute
                                   | SimplePolymorphicAttribute)*,
                  Identifier*, AttributeCalculation*)>
<!ATTLIST Object
    Name                     CDATA #REQUIRED
    CustomLetters            CDATA ""
    FirstLetters             CDATA #IMPLIED
    KeyLetters               CDATA #IMPLIED
    ManualNumber             CDATA ""
    Number                   CDATA #IMPLIED
    ObjectCategory           (TangibleThing | Role | Incident | Interaction | Specification) #IMPLIED
    Prominent                (False | True) "False"
    PreferredIdentifier      CDATA ""
    OrderedByIdentifier      CDATA ""
    ManualOperationNumbering (False | True) "False"
    LabelPrefix              CDATA #IMPLIED>
<!-- Name                         : Name
     CustomLetters                : Key Letters (1c)
     FirstLetters             (M) : Key Letters
     KeyLetters               (M) : Key Letters
     ManualNumber                 : Positive Integer (1c)
     Number                   (M) : Positive Integer
     ObjectCategory               : Object Category (1c)
     Prominent                    : Boolean
     PreferredIdentifier      (R) : Identifier ID (1c)
     OrderedByIdentifier      (R) : Identifier ID (1c)
     ManualOperationNumbering     : Boolean
     LabelPrefix              (M) : String -->

<!ELEMENT SimpleAttribute (Description?, ValueDomain?)>
<!ATTLIST SimpleAttribute
    Name                CDATA #REQUIRED
    Naming              (False | True) "False"
    IdentifyingSuffix   CDATA #IMPLIED
    ManualDataType      CDATA ""
    DataType            CDATA #IMPLIED
    DataTypeAcceptable  (False | True) #IMPLIED
    ManuallyConditional (False | True) "False"
    Conditional         (False | True) #IMPLIED
    DefaultValue        CDATA #IMPLIED
    DefaultValueFinal   (False | True) "False"
    InitialValue        CDATA #IMPLIED
    InitialValueFinal   (False | True) #IMPLIED>
<!-- Name                    : Name
     Naming                  : Boolean
     IdentifyingSuffix   (M) : Identifying Suffix
     ManualDataType      (R) : Name (1c) // #REQUIRED if DefaultValue specified
     DataType            (M) : Name (1c)
     DataTypeAcceptable  (M) : Boolean
     ManuallyConditional     : Boolean
     Conditional         (M) : Boolean
     DefaultValue            : String (1c)
     DefaultValueFinal       : Boolean
     InitialValue        (M) : String (1c)
     InitialValueFinal   (M) : Boolean -->

<!ELEMENT ValueDomain (#PCDATA)>
<!ATTLIST ValueDomain
    TextFormat (Plain | HTML) "Plain">
<!-- TextFormat : * -->

<!ELEMENT ArbitraryIDAttribute (Description?, ValueDomain?)>
<!ATTLIST ArbitraryIDAttribute
    Name                  CDATA #REQUIRED
    Naming                (False | True) "False"
    IdentifyingSuffix     CDATA #IMPLIED
    ManualDataType        CDATA ""
    DataType              CDATA #IMPLIED
    DataTypeAcceptable    (False | True) #IMPLIED
    ManuallyConditional   (False | True) "False"
    NavigationConditional (False | True) #IMPLIED
    Conditional           (False | True) #IMPLIED
    DefaultValue          CDATA #IMPLIED
    DefaultValueFinal     (False | True) "False"
    InitialValue          CDATA #IMPLIED
    InitialValueFinal     (False | True) #IMPLIED>
<!-- Name                      : Name
     Naming                    : Boolean
     IdentifyingSuffix     (M) : Identifying Suffix
     ManualDataType        (R) : Name (1c) // #REQUIRED if DefaultValue specified
     DataType              (M) : Name (1c)
     DataTypeAcceptable    (M) : Boolean
     ManuallyConditional       : Boolean
     NavigationConditional (M) : Boolean
     Conditional           (M) : Boolean
     DefaultValue              : String (1c)
     DefaultValueFinal         : Boolean
     InitialValue          (M) : String (1c)
     InitialValueFinal     (M) : Boolean -->

<!ELEMENT MathematicallyDependentAttribute (Description?, ValueDomain?)>
<!ATTLIST MathematicallyDependentAttribute
    Name                                          CDATA #REQUIRED
    Naming                                        (False | True) "False"
    IdentifyingSuffix                             CDATA #IMPLIED
    MathematicallyDependentRelationship           CDATA ""
    MathematicallyDependentRelationshipCompatible (False | True) #IMPLIED
    ManualDataType                                CDATA ""
    DataType                                      CDATA #IMPLIED
    DataTypeAcceptable                            (False | True) #IMPLIED
    ManuallyConditional                           (False | True) "False"
    NavigationConditional                         (False | True) #IMPLIED
    Conditional                                   (False | True) #IMPLIED
    DefaultValue                                  CDATA #IMPLIED
    DefaultValueFinal                             (False | True) "False"
    InitialValue                                  CDATA #IMPLIED
    InitialValueFinal                             (False | True) #IMPLIED>
<!-- Name                                              : Name
     Naming                                            : Boolean
     IdentifyingSuffix                             (M) : Identifying Suffix
     MathematicallyDependentRelationship           (R) : Relationship ID (1c)
     MathematicallyDependentRelationshipCompatible (M) : Boolean
     ManualDataType                                (R) : Name (1c) // #REQUIRED if DefaultValue specified
     DataType                                      (M) : Name (1c)
     DataTypeAcceptable                            (M) : Boolean
     ManuallyConditional                               : Boolean
     NavigationConditional                         (M) : Boolean
     Conditional                                   (M) : Boolean
     DefaultValue                                      : String (1c)
     DefaultValueFinal                                 : Boolean
     InitialValue                                  (M) : String (1c)
     InitialValueFinal                             (M) : Boolean -->

<!ELEMENT ReferentialTrueAttribute (Description?)>
<!ATTLIST ReferentialTrueAttribute
    Name                  CDATA #REQUIRED
    IdentifyingSuffix     CDATA #IMPLIED
    ReferentialSuffix     CDATA #IMPLIED
    BaseAttribute         CDATA #IMPLIED
    BaseAttributeStatus   (Unresolved | PartiallyResolved | FullyResolved | Incompatible
                                      | MultipleBaseAttributes | OnlyCircularReferences) #IMPLIED
    ManualDataType        CDATA ""
    DataType              CDATA #IMPLIED
    DataTypeAcceptable    (False | True) #IMPLIED
    ManuallyConditional   (False | True) "False"
    NavigationConditional (False | True) #IMPLIED
    Conditional           (False | True) #IMPLIED
    DefaultValue          CDATA #IMPLIED
    DefaultValueFinal     (False | True) "False"
    InitialValue          CDATA #IMPLIED
    InitialValueFinal     (False | True) #IMPLIED>
<!-- Name                      : Name
     IdentifyingSuffix     (M) : Identifying Suffix
     ReferentialSuffix     (M) : Referential Suffix
     BaseAttribute         (M) : Name (1c)
     BaseAttributeStatus   (M) : Base Attribute Status
     ManualDataType        (R) : Name (1c) // #REQUIRED if DefaultValue specified
     DataType              (M) : Name (1c)
     DataTypeAcceptable    (M) : Boolean
     ManuallyConditional       : Boolean
     NavigationConditional (M) : Boolean
     Conditional           (M) : Boolean
     DefaultValue              : String (1c)
     DefaultValueFinal         : Boolean
     InitialValue          (M) : String (1c)
     InitialValueFinal     (M) : Boolean -->

<!ELEMENT ReferentialPolymorphicAttribute (PolymorphicAttributeMapping*, Description?)>
<!ATTLIST ReferentialPolymorphicAttribute
    Name                         CDATA #REQUIRED
    IdentifyingSuffix            CDATA #IMPLIED
    ReferentialSuffix            CDATA #IMPLIED
    BaseAttribute                CDATA #IMPLIED
    BaseAttributeStatus          (Unresolved | PartiallyResolved | FullyResolved | Incompatible
                                             | MultipleBaseAttributes | OnlyCircularReferences) #IMPLIED
    SubtypeSupertypeRelationship CDATA ""
    MappingComplete              (False | True) #IMPLIED
    MappingCompatible            (False | True) #IMPLIED
    ManualDataType               CDATA ""
    DataType                     CDATA #IMPLIED
    DataTypeAcceptable           (False | True) #IMPLIED
    ManuallyConditional          (False | True) "False"
    NavigationConditional        (False | True) #IMPLIED
    Conditional                  (False | True) #IMPLIED
    DefaultValue                 CDATA #IMPLIED
    DefaultValueFinal            (False | True) "False"
    InitialValue                 CDATA #IMPLIED
    InitialValueFinal            (False | True) #IMPLIED>
<!-- Name                             : Name
     IdentifyingSuffix            (M) : Identifying Suffix
     ReferentialSuffix            (M) : Referential Suffix
     BaseAttribute                (M) : Name (1c)
     BaseAttributeStatus          (M) : Base Attribute Status
     SubtypeSupertypeRelationship (R) : Relationship ID (1c)
     MappingComplete              (M) : Boolean
     MappingCompatible            (M) : Boolean
     ManualDataType               (R) : Name (1c) // #REQUIRED if DefaultValue specified
     DataType                     (M) : Name (1c)
     DataTypeAcceptable           (M) : Boolean
     ManuallyConditional              : Boolean
     NavigationConditional        (M) : Boolean
     Conditional                  (M) : Boolean
     DefaultValue                     : String (1c)
     DefaultValueFinal                : Boolean
     InitialValue                 (M) : String (1c)
     InitialValueFinal            (M) : Boolean -->

<!ELEMENT PolymorphicAttributeMapping EMPTY>
<!ATTLIST PolymorphicAttributeMapping
    SubtypeObject    CDATA #REQUIRED
    SubtypeAttribute CDATA #REQUIRED>
<!-- SubtypeObject    (R) : Name
     SubtypeAttribute (R) : Name -->

<!ELEMENT SimplePolymorphicAttribute (PolymorphicAttributeMapping*, Description?)>
<!ATTLIST SimplePolymorphicAttribute
    Name                         CDATA #REQUIRED
    IdentifyingSuffix            CDATA #IMPLIED
    SubtypeSupertypeRelationship CDATA ""
    MappingComplete              (False | True) #IMPLIED
    MappingCompatible            (False | True) #IMPLIED
    ManualDataType               CDATA ""
    DataType                     CDATA #IMPLIED
    DataTypeAcceptable           (False | True) #IMPLIED
    ManuallyConditional          (False | True) "False"
    NavigationConditional        (False | True) #IMPLIED
    Conditional                  (False | True) #IMPLIED
    DefaultValue                 CDATA #IMPLIED
    DefaultValueFinal            (False | True) "False"
    InitialValue                 CDATA #IMPLIED
    InitialValueFinal            (False | True) #IMPLIED>
<!-- Name                             : Name
     IdentifyingSuffix            (M) : Identifying Suffix
     SubtypeSupertypeRelationship (R) : Relationship ID (1c)
     MappingComplete              (M) : Boolean
     MappingCompatible            (M) : Boolean
     ManualDataType               (R) : Name (1c) // #REQUIRED if DefaultValue specified
     DataType                     (M) : Name (1c)
     DataTypeAcceptable           (M) : Boolean
     ManuallyConditional              : Boolean
     NavigationConditional        (M) : Boolean
     Conditional                  (M) : Boolean
     DefaultValue                     : String (1c)
     DefaultValueFinal                : Boolean
     InitialValue                 (M) : String (1c)
     InitialValueFinal            (M) : Boolean -->

<!ELEMENT Identifier (IdentifyingAttribute+)>
<!ATTLIST Identifier
    IdentifierID      CDATA #IMPLIED
    CompletelyOrdered (False | True) #IMPLIED>
<!-- IdentifierID      (M) : Identifier ID
     CompletelyOrdered (M) : Boolean -->

<!ELEMENT IdentifyingAttribute EMPTY>
<!ATTLIST IdentifyingAttribute
    Attribute CDATA #REQUIRED>
<!-- Attribute (R) : Name -->

<!ELEMENT SimpleRelationship (Description?,
                              ((FirstParticipant, SecondParticipant) | (SecondParticipant, FirstParticipant)),
                              LoopTraversalMapping*)>
<!ATTLIST SimpleRelationship
    ManualNumber      CDATA ""
    Number            CDATA #IMPLIED
    RelationshipID    CDATA #REQUIRED
    CustomVerbPhrase  CDATA ""
    DefaultVerbPhrase CDATA #IMPLIED
    VerbPhrase        CDATA #IMPLIED>
<!-- ManualNumber          : Positive Integer (1c)
     Number            (M) : Positive Integer
     RelationshipID    (M) : Relationship ID // Should be #IMPLIED
     CustomVerbPhrase      : Name (1c)
     DefaultVerbPhrase (M) : Name
     VerbPhrase        (M) : Name -->

<!ELEMENT FirstParticipant (FirstToSecondMapping?)>
<!ATTLIST FirstParticipant
    Object      CDATA #REQUIRED
    Role        CDATA "First"
    VerbPhrase  CDATA ""
    Many        (False | True) "False"
    Conditional (False | True) "False">
<!-- Object      (R) : Name
     Role            : Name
     VerbPhrase      : Name (1c)
     Many            : Boolean
     Conditional     : Boolean -->

<!ELEMENT FirstToSecondMapping (ReferentialAttributeMapping+)>
<!ATTLIST FirstToSecondMapping
    TargetIdentifier CDATA #REQUIRED>
<!-- TargetIdentifier (R) : Identifier ID -->

<!ELEMENT ReferentialAttributeMapping EMPTY>
<!ATTLIST ReferentialAttributeMapping
    ReferentialAttribute CDATA #REQUIRED
    IdentifyingAttribute CDATA #REQUIRED
    ManualConstrained    (False | True) "False"
    LoopConstrained      (False | True) #IMPLIED
    Constrained          (False | True) #IMPLIED>
<!-- ReferentialAttribute (R) : Name
     IdentifyingAttribute (R) : Name
     ManualConstrained        : Boolean
     LoopConstrained (M)      : Boolean
     Constrained (M)          : Boolean -->

<!ELEMENT SecondParticipant (SecondToFirstMapping?)>
<!ATTLIST SecondParticipant
    Object      CDATA #REQUIRED
    Role        CDATA "Second"
    VerbPhrase  CDATA ""
    Many        (False | True) "False"
    Conditional (False | True) "False">
<!-- Object      (R) : Name
     Role            : Name
     VerbPhrase      : Name (1c)
     Many            : Boolean
     Conditional     : Boolean -->

<!ELEMENT SecondToFirstMapping (ReferentialAttributeMapping+)>
<!ATTLIST SecondToFirstMapping
    TargetIdentifier CDATA #REQUIRED>
<!-- TargetIdentifier (R) : Identifier ID -->

<!ELEMENT LoopTraversalMapping EMPTY>
<!ATTLIST LoopTraversalMapping
    TraversedRelationship CDATA #REQUIRED
    SourceObject          CDATA #IMPLIED
    SourceRole            CDATA #IMPLIED
    SourceRoleRequired    CDATA #IMPLIED
    TargetObject          CDATA #REQUIRED
    TargetRole            CDATA #IMPLIED
    TargetRoleRequired    CDATA #IMPLIED>
<!-- TraversedRelationship (R) : Relationship ID
     SourceObject          (R) : Name
     SourceRole            (R) : Name
     SourceRoleRequired    (M) : Boolean
     TargetObject          (R) : Name
     TargetRole            (R) : Name
     TargetRoleRequired    (M) : Boolean -->

<!ELEMENT AssociativeRelationship (Description?, FirstParticipant, SecondParticipant, AssociativeParticipant,
                                   LoopTraversalMapping*)>
<!ATTLIST AssociativeRelationship
    ManualNumber      CDATA ""
    Number            CDATA #IMPLIED
    RelationshipID    CDATA #REQUIRED
    CustomVerbPhrase  CDATA ""
    DefaultVerbPhrase CDATA #IMPLIED
    VerbPhrase        CDATA #IMPLIED>
<!-- ManualNumber          : Positive Integer (1c)
     Number            (M) : Positive Integer
     RelationshipID    (M) : Relationship ID // Should be #IMPLIED
     CustomVerbPhrase      : Name (1c)
     DefaultVerbPhrase (M) : Name
     VerbPhrase        (M) : Name -->

<!ELEMENT AssociativeParticipant (AssociativeToFirstMapping?, AssociativeToSecondMapping?)>
<!ATTLIST AssociativeParticipant
    Object          CDATA #REQUIRED
    Role            CDATA #FIXED "Associative"
    VerbPhrase      CDATA ""
    ConnectorPhrase CDATA ""
    Many            (False | True) "False"
    Conditional     (False | True) "False">
<!-- Object          (R) : Name
     Role                : Name = "Associative"
     VerbPhrase          : Name (1c)
     ConnectorPhrase     : Name (1c)
     Many                : Boolean
     Conditional         : Boolean -->

<!ELEMENT AssociativeToFirstMapping (ReferentialAttributeMapping+)>
<!ATTLIST AssociativeToFirstMapping
    TargetIdentifier CDATA #REQUIRED>
<!-- TargetIdentifier (R) : Identifier ID -->

<!ELEMENT AssociativeToSecondMapping (ReferentialAttributeMapping+)>
<!ATTLIST AssociativeToSecondMapping
    TargetIdentifier CDATA #REQUIRED>
<!-- TargetIdentifier (R) : Identifier ID -->

<!ELEMENT ComposedRelationship (Description?,
                                ((FirstParticipant, SecondParticipant) | (SecondParticipant, FirstParticipant)),
                                LoopTraversalMapping, LoopTraversalMapping+)>
<!ATTLIST ComposedRelationship
    ManualNumber      CDATA ""
    Number            CDATA #IMPLIED
    RelationshipID    CDATA #REQUIRED
    CustomVerbPhrase  CDATA ""
    DefaultVerbPhrase CDATA #IMPLIED
    VerbPhrase        CDATA #IMPLIED>
<!-- ManualNumber          : Positive Integer (1c)
     Number            (M) : Positive Integer
     RelationshipID    (M) : Relationship ID // Should be #IMPLIED
     CustomVerbPhrase      : Name (1c)
     DefaultVerbPhrase (M) : Name
     VerbPhrase        (M) : Name -->

<!ELEMENT MathematicallyDependentRelationship (Description?, FirstParticipant, SecondParticipant,
                                               LoopTraversalMapping*, RelationshipNavigation*)>
<!ATTLIST MathematicallyDependentRelationship
    ManualNumber             CDATA ""
    Number                   CDATA #IMPLIED
    RelationshipID           CDATA #REQUIRED
    CustomVerbPhrase         CDATA ""
    DefaultVerbPhrase        CDATA #IMPLIED
    VerbPhrase               CDATA #IMPLIED
    ManualOperationNumbering (False | True) "False"
    LabelPrefix              CDATA #IMPLIED>
<!-- ManualNumber                 : Positive Integer (1c)
     Number                   (M) : Positive Integer
     RelationshipID           (M) : Relationship ID // Should be #IMPLIED
     CustomVerbPhrase             : Name (1c)
     DefaultVerbPhrase        (M) : Name
     VerbPhrase               (M) : Name
     ManualOperationNumbering     : Boolean
     LabelPrefix              (M) : String -->

<!ELEMENT SubtypeSupertypeRelationship (Description?, SupertypeParticipant, SubtypeParticipant, SubtypeParticipant+)>
<!ATTLIST SubtypeSupertypeRelationship
    ManualNumber         CDATA ""
    Number               CDATA #IMPLIED
    RelationshipID       CDATA #REQUIRED
    CustomVerbPhrase     CDATA ""
    DefaultVerbPhrase    CDATA #IMPLIED
    VerbPhrase           CDATA #IMPLIED
    DefaultSubtypeObject CDATA "">
<!-- ManualNumber             : Positive Integer (1c)
     Number               (M) : Positive Integer
     RelationshipID       (M) : Relationship ID // Should be #IMPLIED
     CustomVerbPhrase         : Name (1c)
     DefaultVerbPhrase    (M) : Name
     VerbPhrase           (M) : Name
     DefaultSubtypeObject (R) : Name (1c) -->

<!ELEMENT SupertypeParticipant EMPTY>
<!ATTLIST SupertypeParticipant
    Object CDATA #REQUIRED
    Role   CDATA #FIXED "Supertype">
<!-- Object (R) : Name
     Role       : Name = "Supertype" -->

<!ELEMENT SubtypeParticipant (SubtypeToSupertypeMapping?)>
<!ATTLIST SubtypeParticipant
    Object CDATA #REQUIRED
    Role   CDATA #FIXED "Subtype">
<!-- Object (R) : Name
     Role       : Name = "Subtype" -->

<!ELEMENT SubtypeToSupertypeMapping (ReferentialAttributeMapping+)>
<!ATTLIST SubtypeToSupertypeMapping
    TargetIdentifier CDATA #REQUIRED>
<!-- TargetIdentifier (R) : Identifier ID -->

<!ELEMENT Subsystem (Description?, AssignedObject*, AssignedRelationship*, Activity*,
                     ObjectInformationModel?, ObjectCommunicationModel?, Report?)>
<!ATTLIST Subsystem
    Name                CDATA #REQUIRED
    PrefixLetters       CDATA ""
    ManualLowestNumber  CDATA ""
    ManualHighestNumber CDATA ""
    LowestNumber        CDATA #IMPLIED
    HighestNumber       CDATA #IMPLIED>
<!-- Name                    : Name
     PrefixLetters           : Key Letters (1c)
     ManualLowestNumber      : Positive Integer (1c)
     ManualHighestNumber     : Positive Integer (1c)
     LowestNumber        (M) : Positive Integer
     HighestNumber       (M) : Positive Integer -->

<!ELEMENT AssignedObject EMPTY>
<!ATTLIST AssignedObject
    Object CDATA #REQUIRED>
<!-- Object (R) : Name -->

<!ELEMENT AssignedRelationship EMPTY>
<!ATTLIST AssignedRelationship
    Relationship CDATA #REQUIRED>
<!-- Relationship (R) : Relationship ID -->

<!ELEMENT Activity (ShortNote?, LongNote?)>
<!ATTLIST Activity
    Task   CDATA #REQUIRED
    Row    CDATA #IMPLIED
    Column CDATA #IMPLIED>
<!-- Task   (R) : Name
     Row    (M) : Positive Integer
     Column (M) : Positive Integer -->

<!ELEMENT ShortNote (#PCDATA)>
<!ATTLIST ShortNote
    TextFormat (Plain | HTML) "Plain">
<!-- TextFormat : * -->

<!ELEMENT LongNote (#PCDATA)>
<!ATTLIST LongNote
    TextFormat (Plain | HTML) "Plain">
<!-- TextFormat : * -->

<!ELEMENT LifecycleModel (Description?, EventDataItem*, (CreationEvent | TransitionEvent)*,
                          TransitionNote*, (SimpleState | CreationState | DeletionState)*,
                          (Action | StateModelProcess)*, StateTransitionDiagram?)>
<!ATTLIST LifecycleModel
    ActiveObject             CDATA #REQUIRED
    ManualEventNumbering     (False | True) "False"
    ManualStateNumbering     (False | True) "False"
    ManualOperationNumbering (False | True) "False"
    LabelPrefix              CDATA #IMPLIED>
<!-- ActiveObject             (R) : Name
     ManualEventNumbering         : Boolean
     ManualStateNumbering         : Boolean
     ManualOperationNumbering     : Boolean
     LabelPrefix              (M) : String -->

<!ELEMENT EventDataItem (Description?)>
<!ATTLIST EventDataItem
    Name               CDATA #REQUIRED
    Object             CDATA ""
    Attribute          CDATA ""
    ManualDataType     CDATA ""
    DataType           CDATA #IMPLIED
    DataTypeAcceptable (False | True) #IMPLIED
    Many               (False | True) "False"
    Conditional        (False | True) "False"
    DefaultValue       CDATA #IMPLIED>
<!-- Name                   : Name
     Object             (R) : Name (1c)
     Attribute          (R) : Name (1c)
     ManualDataType     (R) : Name (1c) // #REQUIRED if DefaultValue specified
     DataType           (M) : Name (1c)
     DataTypeAcceptable (M) : Boolean
     Many                   : Boolean
     Conditional            : Boolean
     DefaultValue           : String (1c) -->

<!ELEMENT CreationEvent (CarriedDataItem*, Description?)>
<!ATTLIST CreationEvent
    Meaning       CDATA #REQUIRED
    ManualNumber  CDATA ""
    Number        CDATA #IMPLIED
    Label         CDATA #IMPLIED>
<!-- Meaning      (R) : Name
     ManualNumber     : Positive Integer (1c)
     Number       (M) : Positive Integer
     Label        (M) : String -->

<!ELEMENT CarriedDataItem EMPTY>
<!ATTLIST CarriedDataItem
    EventDataItem CDATA #REQUIRED>
<!-- EventDataItem (R) : Name -->

<!ELEMENT TransitionEvent (CarriedDataItem*, Description?)>
<!ATTLIST TransitionEvent
    Meaning       CDATA #REQUIRED
    ManualNumber  CDATA ""
    Number        CDATA #IMPLIED
    Label         CDATA #IMPLIED>
<!-- Meaning      (R) : Name
     ManualNumber     : Positive Integer (1c)
     Number       (M) : Positive Integer
     Label        (M) : String -->

<!ELEMENT TransitionNote (ShortNote?, LongNote?)>
<!ATTLIST TransitionNote
    TransitionNoteID CDATA #IMPLIED>
<!-- TransitionNoteID (M) : String -->

<!ELEMENT SimpleState (Description?, ReceivedDataItem*, SimpleAction?, InternalEvent*,
                       (NewStateTransition | EventIgnoredTransition | CannotHappenTransition)*)>
<!ATTLIST SimpleState
    Name                       CDATA #REQUIRED
    ManualNumber               CDATA ""
    Number                     CDATA #IMPLIED
    InitialState               (False | True) "False"
    FinalState                 (False | True) #IMPLIED
    WaitState                  (False | True) #IMPLIED
    TransitionEventsCompatible (False | True) #IMPLIED>
<!-- Name                           : Name
     ManualNumber                   : Positive Integer (1c)
     Number                     (M) : Positive Integer
     InitialState                   : Boolean
     FinalState                 (M) : Boolean
     WaitState                  (M) : Boolean
     TransitionEventsCompatible (M) : Boolean -->

<!ELEMENT ReceivedDataItem EMPTY>
<!ATTLIST ReceivedDataItem
    EventDataItem CDATA #REQUIRED>
<!-- EventDataItem (R) : Name -->

<!ELEMENT SimpleAction (StatementBlock?)>
<!ATTLIST SimpleAction
    MaximumVisibleLOC CDATA "">
<!-- MaximumVisibleLOC : Non-Negative Integer (1c) -->

<!ELEMENT StatementBlock (#PCDATA)>

<!ELEMENT InternalEvent EMPTY>
<!ATTLIST InternalEvent
    Event CDATA #REQUIRED>
<!-- Event (R) : String -->

<!ELEMENT NewStateTransition EMPTY>
<!ATTLIST NewStateTransition
    TransitionEvent    CDATA #REQUIRED
    NewState           CDATA #REQUIRED
    NewStateCompatible (False | True) #IMPLIED
    TransferOfControl  (False | True) "False"
    TransitionNote     CDATA "">
<!-- TransitionEvent    (R) : Name
     NewState           (R) : Name
     NewStateCompatible (M) : Boolean
     TransferOfControl      : Boolean
     TransitionNote     (R) : String (1c) -->

<!ELEMENT EventIgnoredTransition EMPTY>
<!ATTLIST EventIgnoredTransition
    TransitionEvent CDATA #REQUIRED
    TransitionNote  CDATA "">
<!-- TransitionEvent (R) : Name
     TransitionNote  (R) : String (1c) -->

<!ELEMENT CannotHappenTransition EMPTY>
<!ATTLIST CannotHappenTransition
    TransitionEvent CDATA #REQUIRED
    TransitionNote  CDATA "">
<!-- TransitionEvent (R) : Name
     TransitionNote  (R) : String (1c) -->

<!ELEMENT CreationState (Description?, ReceivedDataItem*, SimpleAction?, InternalEvent*,
                         (NewStateTransition | EventIgnoredTransition | CannotHappenTransition)*)>
<!ATTLIST CreationState
    Name                    CDATA #REQUIRED
    ManualNumber            CDATA ""
    Number                  CDATA #IMPLIED
    CreationEvent           CDATA #REQUIRED
    CreationEventCompatible (False | True) #IMPLIED
    InitialState            (False | True) "False"
    FinalState              (False | True) #IMPLIED
    WaitState               (False | True) #IMPLIED>
<!-- Name                        : Name
     ManualNumber                : Positive Integer (1c)
     Number                  (M) : Positive Integer
     CreationEvent           (R) : Name
     CreationEventCompatible (M) : Boolean
     InitialState                : Boolean
     FinalState              (M) : Boolean
     WaitState               (M) : Boolean -->

<!ELEMENT DeletionState (Description?, ReceivedDataItem*, SimpleAction?, InternalEvent*)>
<!ATTLIST DeletionState
    Name                       CDATA #REQUIRED
    ManualNumber               CDATA ""
    Number                     CDATA #IMPLIED
    TransitionEventsCompatible (False | True) #IMPLIED>
<!-- Name                           : Name
     ManualNumber                   : Positive Integer (1c)
     Number                     (M) : Positive Integer
     TransitionEventsCompatible (M) : Boolean -->

<!ELEMENT SingleAssignerModel (Description?, EventDataItem*, TransitionEvent*, TransitionNote*, SimpleState*,
                               (Action | StateModelProcess)*, StateTransitionDiagram?)>
<!ATTLIST SingleAssignerModel
    CompetitiveRelationship  CDATA #REQUIRED
    ManualEventNumbering     (False | True) "False"
    ManualStateNumbering     (False | True) "False"
    ManualOperationNumbering (False | True) "False"
    LabelPrefix              CDATA #IMPLIED>
<!-- CompetitiveRelationship  (R) : Relationship ID
     ManualEventNumbering         : Boolean
     ManualStateNumbering         : Boolean
     ManualOperationNumbering     : Boolean
     LabelPrefix              (M) : String -->

<!ELEMENT MultipleAssignerModel (Description?, EventDataItem*, TransitionEvent*, TransitionNote*, SimpleState*,
                                 (Action | StateModelProcess)*, StateTransitionDiagram?)>
<!ATTLIST MultipleAssignerModel
    CompetitiveRelationship  CDATA #REQUIRED
    PartitioningObject       CDATA #REQUIRED
    ManualEventNumbering     (False | True) "False"
    ManualStateNumbering     (False | True) "False"
    ManualOperationNumbering (False | True) "False"
    LabelPrefix              CDATA #IMPLIED>
<!-- CompetitiveRelationship  (R) : Relationship ID
     PartitioningObject       (R) : Name
     ManualEventNumbering         : Boolean
     ManualStateNumbering         : Boolean
     ManualOperationNumbering     : Boolean
     LabelPrefix              (M) : String -->

<!ELEMENT PolymorphicDestination (Description?, EventDataItem*, PolymorphicEvent*, PolymorphicProcess*)>
<!ATTLIST PolymorphicDestination
    SubtypeSupertypeRelationship CDATA #REQUIRED
    ManualEventNumbering         (False | True) "False"
    ManualOperationNumbering     (False | True) "False"
    LabelPrefix                  CDATA #IMPLIED>
<!-- SubtypeSupertypeRelationship (R) : Relationship ID
     ManualEventNumbering             : Boolean
     ManualOperationNumbering         : Boolean
     LabelPrefix                  (M) : String -->

<!ELEMENT PolymorphicEvent (CarriedDataItem*, Description?, PolymorphicEventMapping*)>
<!ATTLIST PolymorphicEvent
    Meaning           CDATA #REQUIRED
    ManualNumber      CDATA ""
    Number            CDATA #IMPLIED
    Label             CDATA #IMPLIED
    MappingComplete   CDATA #IMPLIED
    MappingCompatible CDATA #IMPLIED>
<!-- Meaning           (R) : Name
     ManualNumber          : Positive Integer (1c)
     Number            (M) : Positive Integer
     Label             (M) : String
     MappingComplete   (M) : Boolean
     MappingCompatible (M) : Boolean -->

<!ELEMENT PolymorphicEventMapping EMPTY>
<!ATTLIST PolymorphicEventMapping
    SubtypeEvent CDATA #REQUIRED>
<!-- SubtypeEvent (R) : String -->

<!ELEMENT ExternalEntity (Description?, EventDataItem*, DomainCrossingEvent*, ExternalEvent*,
                          (SynchronousService | BridgingProcess | SynchronousReturnWormhole
                                              | AsynchronousReturnWormhole)*)>
<!ATTLIST ExternalEntity
    Name                     CDATA #REQUIRED
    CustomLetters            CDATA ""
    FirstLetters             CDATA #IMPLIED
    KeyLetters               CDATA #IMPLIED
    ManualEventNumbering     (False | True) "False"
    ManualOperationNumbering (False | True) "False"
    LabelPrefix              CDATA #IMPLIED>
<!-- Name                     (R) : Name
     CustomLetters                : Key Letters (1c)
     FirstLetters             (M) : Key Letters
     KeyLetters               (M) : Key Letters
     ManualEventNumbering         : Boolean
     ManualOperationNumbering     : Boolean
     LabelPrefix              (M) : String -->

<!ELEMENT DomainCrossingEvent (CarriedDataItem*, Description?)>
<!ATTLIST DomainCrossingEvent
    Meaning       CDATA #REQUIRED
    ManualNumber  CDATA ""
    Number        CDATA #IMPLIED
    Label         CDATA #IMPLIED>
<!-- Meaning      (R) : Name
     ManualNumber     : Positive Integer (1c)
     Number       (M) : Positive Integer
     Label        (M) : String -->

<!ELEMENT ExternalEvent EMPTY>
<!ATTLIST ExternalEvent
    Event CDATA #REQUIRED>
<!-- Event (R) : String -->

<!ELEMENT PatternFile (#PCDATA)>
<!ATTLIST PatternFile
    Path         CDATA #IMPLIED
    RelativePath CDATA #IMPLIED
    Cached       (False | True) "False"
    RuleSetName  CDATA #REQUIRED>
<!-- Path         : *
     RelativePath : *
     Cached       : *
     RuleSetName  : * -->

<!ELEMENT Bridge (ClientAssumptions?, ServerRequirements?,
                  (RequestMapping | SynchronousReturnMapping | AsynchronousReturnMapping
                                  | CounterpartMapping | SemanticShiftMapping)*)>
<!ATTLIST Bridge
    ClientDomain             CDATA #REQUIRED
    ServerDomain             CDATA #REQUIRED
    ManualOperationNumbering (False | True) "False"
    LabelPrefix              CDATA #IMPLIED>
<!-- ClientDomain             (R) : Name
     ServerDomain             (R) : Name
     ManualOperationNumbering     : Boolean
     LabelPrefix              (M) : String -->

<!ELEMENT ClientAssumptions (#PCDATA)>
<!ATTLIST ClientAssumptions
    TextFormat (Plain | HTML) "Plain">
<!-- TextFormat : * -->

<!ELEMENT ServerRequirements (#PCDATA)>
<!ATTLIST ServerRequirements
    TextFormat (Plain | HTML) "Plain">
<!-- TextFormat : * -->

<!ELEMENT ModelPopulation (Description?, DomainPopulation*)>
<!ATTLIST ModelPopulation
    Name CDATA #REQUIRED>
<!-- Name : Name -->

<!ELEMENT DomainPopulation (ObjectInstanceTable*, RelationshipInstanceTable*)>
<!ATTLIST DomainPopulation
    Domain CDATA #REQUIRED>
<!-- Domain (R) : Name -->

<!ELEMENT ObjectInstanceTable (ObjectInstance*)>
<!ATTLIST ObjectInstanceTable
    Object CDATA #REQUIRED>
<!-- Object (R) : Name -->

<!ELEMENT ObjectInstance (AttributeInstance*)>
<!ATTLIST ObjectInstance
    ObjectInstanceID CDATA #IMPLIED>
<!-- ObjectInstanceID (M) : String -->

<!ELEMENT AttributeInstance EMPTY>
<!ATTLIST AttributeInstance
    Attribute      CDATA #REQUIRED
    AttributeValue CDATA #IMPLIED>
<!-- Attribute      (R) : Name
     AttributeValue     : String (1c) -->

<!ELEMENT RelationshipInstanceTable (RelationshipInstance*)>
<!ATTLIST RelationshipInstanceTable
    Relationship CDATA #REQUIRED>
<!-- Relationship (R) : Relationship ID -->

<!ELEMENT RelationshipInstance (ParticipantInstance, ParticipantInstance, ParticipantInstance?)>

<!ELEMENT ParticipantInstance EMPTY>
<!ATTLIST ParticipantInstance
    Object         CDATA #REQUIRED
    Role           CDATA #IMPLIED
    ObjectInstance CDATA #REQUIRED>
<!-- Object         (R) : Name
     Role           (R) : Name
     ObjectInstance (R) : String -->

<!ELEMENT MetamodelPopulation EMPTY>
<!ATTLIST MetamodelPopulation
    MetamodelVersion CDATA #REQUIRED>
<!-- MetamodelVersion : String -->

<!ELEMENT Configuration (Description?, ArchetypeFile*, Translation*)>
<!ATTLIST Configuration
    Name CDATA #REQUIRED>
<!-- Name : * -->

<!ELEMENT ArchetypeFile (#PCDATA)>
<!ATTLIST ArchetypeFile
    Path         CDATA #IMPLIED
    RelativePath CDATA #IMPLIED
    Cached       (False | True) "False">
<!-- Path         : *
     RelativePath : *
     Cached       : * -->

<!ELEMENT Translation (ErrorMessages?, GeneratedFile*, Notes?)>
<!ATTLIST Translation
    ArchetypeFile CDATA #REQUIRED
    StartTime     CDATA #REQUIRED
    Duration      CDATA #REQUIRED
    ExitStatus    CDATA #REQUIRED>
<!-- ArchetypeFile : *
     StartTime     : *
     Duration      : *
     ExitStatus    : * -->

<!ELEMENT ErrorMessages (#PCDATA)>
<!ATTLIST ErrorMessages
    TextFormat (Plain | HTML) "Plain">
<!-- TextFormat : * -->

<!ELEMENT GeneratedFile (#PCDATA)>
<!ATTLIST GeneratedFile
    Path         CDATA #IMPLIED
    RelativePath CDATA #IMPLIED
    Cached       (False | True) "False">
<!-- Path         : *
     RelativePath : *
     Cached       : * -->

<!ELEMENT Notes (#PCDATA)>
<!ATTLIST Notes
    TextFormat (Plain | HTML) "Plain">
<!-- TextFormat : * -->

<!-- Diagramming Elements -->
<!-- All diagrams are optional in OOA Interchange Format. -->

<!ELEMENT DomainChart (Shape*, BinaryLink*)>
<!ATTLIST DomainChart
    Path         CDATA #IMPLIED
    RelativePath CDATA #IMPLIED
    Width        CDATA #REQUIRED
    Height       CDATA #REQUIRED
    Font         CDATA #REQUIRED
    Notation     (ShlaerMellor | ExecutableUML | ExecutableUML2) "ShlaerMellor">
<!-- Path         : *
     RelativePath : *
     Width        : Non-Negative Integer
     Height       : Non-Negative Integer
     Font         : Font
     Notation     : Notation -->

<!ELEMENT SubsystemRelationshipModel (Shape*, BinaryLink*)>
<!ATTLIST SubsystemRelationshipModel
    Path         CDATA #IMPLIED
    RelativePath CDATA #IMPLIED
    Width        CDATA #REQUIRED
    Height       CDATA #REQUIRED
    Font         CDATA #REQUIRED
    Notation     (ShlaerMellor | ExecutableUML | ExecutableUML2) "ShlaerMellor">
<!-- Path         : *
     RelativePath : *
     Width        : Non-Negative Integer
     Height       : Non-Negative Integer
     Font         : Font
     Notation     : Notation -->

<!ELEMENT SubsystemCommunicationModel (Shape*, BinaryLink*)>
<!ATTLIST SubsystemCommunicationModel
    Path         CDATA #IMPLIED
    RelativePath CDATA #IMPLIED
    Width        CDATA #REQUIRED
    Height       CDATA #REQUIRED
    Font         CDATA #REQUIRED
    Notation     (ShlaerMellor | ExecutableUML | ExecutableUML2) "ShlaerMellor">
<!-- Path         : *
     RelativePath : *
     Width        : Non-Negative Integer
     Height       : Non-Negative Integer
     Font         : Font
     Notation     : Notation -->

<!ELEMENT ObjectInformationModel (Shape*, (BinaryLink | SpurLink | ParentLink | ChildLink)*)>
<!ATTLIST ObjectInformationModel
    Path         CDATA #IMPLIED
    RelativePath CDATA #IMPLIED
    Width        CDATA #REQUIRED
    Height       CDATA #REQUIRED
    Font         CDATA #REQUIRED
    Notation     (ShlaerMellor | ExecutableUML | ExecutableUML2) "ShlaerMellor">
<!-- Path         : *
     RelativePath : *
     Width        : Non-Negative Integer
     Height       : Non-Negative Integer
     Font         : Font
     Notation     : Notation -->

<!ELEMENT ObjectCommunicationModel (Shape*, BinaryLink*)>
<!ATTLIST ObjectCommunicationModel
    Path         CDATA #IMPLIED
    RelativePath CDATA #IMPLIED
    Width        CDATA #REQUIRED
    Height       CDATA #REQUIRED
    Font         CDATA #REQUIRED
    Notation     (ShlaerMellor | ExecutableUML | ExecutableUML2) "ShlaerMellor">
<!-- Path         : *
     RelativePath : *
     Width        : Non-Negative Integer
     Height       : Non-Negative Integer
     Font         : Font
     Notation     : Notation -->

<!ELEMENT StateTransitionDiagram (Shape*, (BinaryLink | SimpleUnaryLink)*)>
<!ATTLIST StateTransitionDiagram
    Path         CDATA #IMPLIED
    RelativePath CDATA #IMPLIED
    Width        CDATA #REQUIRED
    Height       CDATA #REQUIRED
    Font         CDATA #REQUIRED
    Notation     (ShlaerMellor | ExecutableUML | ExecutableUML2) "ShlaerMellor">
<!-- Path         : *
     RelativePath : *
     Width        : Non-Negative Integer
     Height       : Non-Negative Integer
     Font         : Font
     Notation     : Notation -->

<!ELEMENT Shape EMPTY>
<!ATTLIST Shape
    Name               CDATA #REQUIRED
    X                  CDATA #REQUIRED
    Y                  CDATA #REQUIRED
    Width              CDATA #REQUIRED
    Height             CDATA #REQUIRED
    PreferredSizeUsage (None | UseAsSize | UseAsMinimumSize | UseAsMaximumSize) "UseAsSize">
<!-- Name               : String
     X                  : Integer
     Y                  : Integer
     Width              : Non-Negative Integer
     Height             : Non-Negative Integer
     PreferredSizeUsage : Preferred Size Usage -->

<!ELEMENT BinaryLink (WayPoint*)>
<!ATTLIST BinaryLink
    LinkID             CDATA #REQUIRED
    SourceShape        CDATA #REQUIRED
    TargetShape        CDATA #REQUIRED
    LabelAnchorFlipped (False | True) "False">
<!-- LinkID                 : String
     SourceShape        (R) : String
     TargetShape        (R) : String
     LabelAnchorFlipped     : Boolean -->

<!ELEMENT WayPoint EMPTY>
<!ATTLIST WayPoint
    X CDATA #REQUIRED
    Y CDATA #REQUIRED>
<!-- X : Integer
     Y : Integer -->

<!ELEMENT SimpleUnaryLink (WayPoint*, TargetPoint)>
<!ATTLIST SimpleUnaryLink
    LinkID      CDATA #REQUIRED
    SourceShape CDATA #REQUIRED>
<!-- LinkID          : String
     SourceShape (R) : String -->

<!ELEMENT TargetPoint EMPTY>
<!ATTLIST TargetPoint
    X CDATA #REQUIRED
    Y CDATA #REQUIRED>
<!-- X : Integer
     Y : Integer -->

<!ELEMENT SpurLink (WayPoint*, TargetPoint)>
<!ATTLIST SpurLink
    LinkID      CDATA #REQUIRED
    SourceShape CDATA #REQUIRED>
<!-- LinkID          : String
     SourceShape (R) : String -->

<!ELEMENT ParentLink (WayPoint*, TargetPoint)>
<!ATTLIST ParentLink
    LinkID      CDATA #REQUIRED
    SourceShape CDATA #REQUIRED>
<!-- LinkID          : String
     SourceShape (R) : String -->

<!ELEMENT ChildLink (WayPoint*)>
<!ATTLIST ChildLink
    LinkID      CDATA #REQUIRED
    SourceShape CDATA #REQUIRED>
<!-- LinkID          : String
     SourceShape (R) : String -->

<!-- Reporting Elements -->
<!-- All reports are optional in OOA Interchange Format.
     Furthermore, all reporting elements will become obsolete
     when current Information Model Report is replaced with an archetype template. -->

<!ELEMENT Report (Attachment*)>
<!ATTLIST Report
    Path         CDATA #IMPLIED
    RelativePath CDATA #IMPLIED
    Id           CDATA #REQUIRED>
<!-- Path         : *
     RelativePath : *
     Id           : * -->

<!ELEMENT Attachment EMPTY>
<!ATTLIST Attachment
    Path         CDATA #IMPLIED
    RelativePath CDATA #IMPLIED
    Id           CDATA #REQUIRED>
<!-- Path         : *
     RelativePath : *
     Id           : * -->

<!-- End of File -->