<?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.04">
<!-- 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?, Activity*)>
<!ATTLIST Domain
    Name           CDATA #REQUIRED
    DomainCategory (Application | Service | Architectural | Implementation) "Service">
<!-- Name           : Name
     DomainCategory : Domain Category -->

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

<!ELEMENT InformationModel (Description?,
                            (BooleanType | EnumeratedType | SymbolicType | NumericType | ArbitraryIDType)*,
                            Object*,
                            (SimpleRelationship | AssociativeRelationship | ComposedRelationship
                                                | MathematicallyDependentRelationship | SubtypeSupertypeRelationship)*,
                            Subsystem*,
                            (LifecycleModel | SingleAssignerModel | MultipleAssignerModel
                                            | Terminator | PolymorphicDestination)*,
                            ((SubsystemRelationshipModel?, SubsystemCommunicationModel?)
                                | (ObjectInformationModel?, ObjectCommunicationModel?, Report?)),
                            PatternFile*)>
<!ATTLIST InformationModel
    Name                        CDATA #REQUIRED
    ManualObjectNumbering       (False | True) "False"
    ManualRelationshipNumbering (False | True) "False">
<!-- Name                        : Name
     ManualObjectNumbering       : Boolean
     ManualRelationshipNumbering : Boolean -->

<!ELEMENT BooleanType (Description?)>
<!ATTLIST BooleanType
    Name         CDATA #REQUIRED
    Predefined   (False | True) "False"
    FalseAlias   CDATA "FALSE"
    TrueAlias    CDATA "TRUE"
    DefaultValue CDATA #IMPLIED>
<!-- Name         : Name
     Predefined   : Boolean
     FalseAlias   : Name
     TrueAlias    : Name
     DefaultValue : Name (1c) -->

<!ELEMENT EnumeratedType (Description?, LegalValue+)>
<!ATTLIST EnumeratedType
    Name         CDATA #REQUIRED
    Predefined   (False | True) "False"
    DefaultValue CDATA #IMPLIED>
<!-- Name             : Name
     Predefined       : Boolean
     DefaultValue (R) : Name (1c) -->

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

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

<!ELEMENT Pattern (#PCDATA)>

<!ELEMENT NumericType (Description?)>
<!ATTLIST NumericType
    Name                   CDATA #REQUIRED
    Predefined             (False | True) "False"
    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>
<!-- Name                       : Name
     Predefined                 : Boolean
     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
    Name                                    CDATA #REQUIRED
    Predefined                              (False | True) "False"
    Ordinal                                 (False | True) "False"
    IdentifiedObject                        CDATA ""
    ChildParentRelationship                 CDATA ""
    ChildMappedToParent                     (False | True) #IMPLIED
    MinimumValue                            CDATA "0"
    MaximumValue                            CDATA #IMPLIED
    UnallocatedPercentageBeforeReallocation CDATA #IMPLIED
    MinimumUnallocatedBeforeReallocation    CDATA "1">
<!-- Name                                        : Name
     Predefined                                  : Boolean
     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 -->

<!ELEMENT Object (Description?,
                  (SimpleAttribute | ArbitraryIDAttribute | MathematicallyDependentAttribute
                                   | ReferentialAttribute | PolymorphicAttribute)*,
                  Identifier*)>
<!ATTLIST Object
    Name           CDATA #REQUIRED
    FirstLetters   CDATA #IMPLIED
    CustomLetters  CDATA ""
    KeyLetters     CDATA #IMPLIED
    ManualNumber   CDATA ""
    Number         CDATA #IMPLIED
    ObjectCategory (TangibleThing | Role | Incident | Interaction | Specification) #IMPLIED
    Prominent      (False | True) "False">
<!-- Name               : Name
     FirstLetters   (M) : Key Letters
     CustomLetters      : Key Letters (1c)
     KeyLetters     (M) : Key Letters
     ManualNumber       : Positive Integer (1c)
     Number         (M) : Positive Integer
     ObjectCategory     : Object Category (1c)
     Prominent          : Boolean -->

<!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
    InitialValue       CDATA #IMPLIED
    Final              (False | True) "False"
    ManualConditional  (False | True) "False"
    Conditional        (False | True) #IMPLIED>
<!-- Name                   : Name
     Naming                 : Boolean
     IdentifyingSuffix  (M) : Identifying Suffix
     ManualDataType     (R) : Name (1c) // #REQUIRED if InitialValue specified
     DataType           (M) : Name (1c)
     DataTypeAcceptable (M) : Boolean
     InitialValue           : String (1c)
     Final                  : Boolean
     ManualConditional      : Boolean
     Conditional        (M) : Boolean -->

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

<!ELEMENT ArbitraryIDAttribute (Description?, ValueDomain?)>
<!ATTLIST ArbitraryIDAttribute
    Name               CDATA #REQUIRED
    IdentifyingSuffix  CDATA #IMPLIED
    ManualDataType     CDATA ""
    DataType           CDATA #IMPLIED
    DataTypeAcceptable (False | True) #IMPLIED
    ManualConditional  (False | True) "False"
    Conditional        (False | True) #IMPLIED>
<!-- Name                   : Name
     IdentifyingSuffix  (M) : Identifying Suffix
     ManualDataType     (R) : Name (1c)
     DataType           (M) : Name (1c)
     DataTypeAcceptable (M) : Boolean
     ManualConditional      : Boolean
     Conditional        (M) : Boolean -->

<!ELEMENT MathematicallyDependentAttribute (Description?, ValueDomain?)>
<!ATTLIST MathematicallyDependentAttribute
    Name               CDATA #REQUIRED
    IdentifyingSuffix  CDATA #IMPLIED
    ManualDataType     CDATA ""
    DataType           CDATA #IMPLIED
    DataTypeAcceptable (False | True) #IMPLIED
    ManualConditional  (False | True) "False"
    Conditional        (False | True) #IMPLIED>
<!-- Name                   : Name
     IdentifyingSuffix  (M) : Identifying Suffix
     ManualDataType     (R) : Name (1c)
     DataType           (M) : Name (1c)
     DataTypeAcceptable (M) : Boolean
     ManualConditional      : Boolean
     Conditional        (M) : Boolean -->

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

<!ELEMENT PolymorphicAttribute (PolymorphicAttributeMapping*, Description?)>
<!ATTLIST PolymorphicAttribute
    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
    ManualConditional            (False | True) "False"
    Conditional                  (False | True) #IMPLIED>
<!-- Name                             : Name
     IdentifyingSuffix            (M) : Identifying Suffix
     SubtypeSupertypeRelationship (R) : Relationship ID (1c)
     MappingComplete              (M) : Boolean
     MappingCompatible            (M) : Boolean
     ManualDataType               (R) : Name (1c)
     DataType                     (M) : Name (1c)
     DataTypeAcceptable           (M) : Boolean
     ManualConditional                : Boolean
     Conditional                  (M) : Boolean -->

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

<!ELEMENT Identifier (IdentifyingAttribute+)>
<!ATTLIST Identifier
    IdentifierID CDATA #IMPLIED
    Preferred    (False | True) "False">
<!-- IdentifierID (M) : Identifier ID
     Preferred        : 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>
<!-- ManualNumber       : Positive Integer (1c)
     Number         (M) : Positive Integer
     RelationshipID (M) : Relationship ID // Should be #IMPLIED -->

<!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
    Constrained          (False | True) "False"
    LoopConstrained      (False | True) #IMPLIED>
<!-- ReferentialAttribute (R) : Name
     IdentifyingAttribute (R) : Name
     Constrained              : Boolean
     LoopConstrained (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>
<!-- ManualNumber       : Positive Integer (1c)
     Number         (M) : Positive Integer
     RelationshipID (M) : Relationship ID // Should be #IMPLIED -->

<!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>
<!-- ManualNumber       : Positive Integer (1c)
     Number         (M) : Positive Integer
     RelationshipID (M) : Relationship ID // Should be #IMPLIED -->

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

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

<!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?,
                          (AttributeDataItem | TransientDataItem)*,
                          (CreationEvent | TransitionEvent)*,
                          TransitionNote*,
                          (SimpleState | CreationState | DeletionState)*,
                          StateTransitionDiagram?)>
<!ATTLIST LifecycleModel
    ActiveObject         CDATA #REQUIRED
    ManualEventNumbering (False | True) "False"
    LabelPrefix          CDATA #IMPLIED
    ManualStateNumbering (False | True) "False">
<!-- ActiveObject         (R) : Name
     ManualEventNumbering     : Boolean
     LabelPrefix          (M) : String
     ManualStateNumbering     : Boolean -->

<!ELEMENT AttributeDataItem (Description?)>
<!ATTLIST AttributeDataItem
    Name        CDATA #REQUIRED
    Object      CDATA #REQUIRED
    Attribute   CDATA #REQUIRED
    Many        (False | True) "False"
    Conditional (False | True) "False">
<!-- Name            : Name
     Object      (R) : Name
     Attribute   (R) : Name
     Many            : Boolean
     Conditional     : Boolean -->

<!ELEMENT TransientDataItem (Description?)>
<!ATTLIST TransientDataItem
    Name        CDATA #REQUIRED
    DataType    CDATA ""
    Many        (False | True) "False"
    Conditional (False | True) "False">
<!-- Name            : Name
     DataType    (R) : Name (1c)
     Many            : Boolean
     Conditional     : Boolean -->

<!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
    SupplementalDataItem CDATA #REQUIRED>
<!-- SupplementalDataItem (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 (Description?)>
<!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
    SupplementalDataItem CDATA #REQUIRED>
<!-- SupplementalDataItem (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?, (AttributeDataItem | TransientDataItem)*,
                               TransitionEvent*, TransitionNote*, SimpleState*, StateTransitionDiagram?)>
<!ATTLIST SingleAssignerModel
    CompetitiveRelationship CDATA #REQUIRED
    ManualEventNumbering    (False | True) "False"
    LabelPrefix             CDATA #IMPLIED
    ManualStateNumbering    (False | True) "False">
<!-- CompetitiveRelationship (R) : Relationship ID
     ManualEventNumbering        : Boolean
     LabelPrefix             (M) : String
     ManualStateNumbering        : Boolean -->

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

<!ELEMENT Terminator (Description?, (AttributeDataItem | TransientDataItem)*, DomainCrossingEvent*, ExternalEvent*)>
<!ATTLIST Terminator
    Name                 CDATA #REQUIRED
    FirstLetters         CDATA #IMPLIED
    CustomLetters        CDATA ""
    KeyLetters           CDATA #IMPLIED
    ManualEventNumbering (False | True) "False"
    LabelPrefix          CDATA #IMPLIED>
<!-- Name                 (R) : Name
     FirstLetters         (M) : Key Letters
     CustomLetters            : Key Letters (1c)
     KeyLetters           (M) : Key Letters
     ManualEventNumbering     : 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 PolymorphicDestination (Description?, (AttributeDataItem | TransientDataItem)*, PolymorphicEvent*)>
<!ATTLIST PolymorphicDestination
    SubtypeSupertypeRelationship CDATA #REQUIRED
    ManualEventNumbering         (False | True) "False"
    LabelPrefix                  CDATA #IMPLIED>
<!-- SubtypeSupertypeRelationship (R) : Relationship ID
     ManualEventNumbering             : 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 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?)>
<!ATTLIST Bridge
    ClientDomain CDATA #REQUIRED
    ServerDomain CDATA #REQUIRED>
<!-- ClientDomain (R) : Name
     ServerDomain (R) : Name -->

<!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 -->