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

<!-- OOA of OOA Elements -->

<!ELEMENT Project (Description?, Domain*, Bridge*, DomainChart?, Configuration*)>
<!ATTLIST Project
    Name          CDATA #REQUIRED
    Location      CDATA #IMPLIED
    FormatVersion CDATA #FIXED "0.01">
<!-- Name          : Name
     Location      : URL (1c)
     FormatVersion : * -->

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

<!ELEMENT Domain (MissionStatement?, InformationModel?)>
<!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?,
                            (EnumeratedType | SymbolicType | NumericType)*,
                            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 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
    MaximumDecimalPlaces   CDATA #IMPLIED
    PreferredDecimalPlaces CDATA "0"
    Precision              CDATA #IMPLIED
    DefaultValue           CDATA #IMPLIED>
<!-- Name                       : Name
     Predefined                 : Boolean
     ValueFormat                : Value Format
     Unit                       : Name (1c)
     TimeUnit               (M) : Time Unit (1c)
     MinimumValue               : Real (1c)
     MaximumValue               : Real (1c)
     MaximumDecimalPlaces       : Integer (1c)
     PreferredDecimalPlaces     : Non-Negative Integer
     Precision              (M) : Real
     DefaultValue               : Real (1c) -->

<!ELEMENT Object (Description?,
                  (SimpleAttribute | 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?, Constraints?)>
<!ATTLIST SimpleAttribute
    Name              CDATA #REQUIRED
    Naming            (False | True) "False"
    Identifying       (False | True) #IMPLIED
    ManualDataType    CDATA ""
    DataType          CDATA #IMPLIED
    InitialValue      CDATA #IMPLIED
    FinalValue        (False | True) "False"
    ManualConditional (False | True) "False"
    Conditional       (False | True) #IMPLIED>
<!-- Name                  : Name
     Naming                : Boolean
     Identifying       (M) : Boolean
     ManualDataType    (R) : Name (1c) // #REQUIRED if InitialValue specified
     DataType          (M) : Name (1c)
     InitialValue          : String (1c)
     FinalValue            : Boolean
     ManualConditional     : Boolean
     Conditional       (M) : Boolean -->

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

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

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

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

<!ELEMENT PolymorphicAttribute (PolymorphicAttributeMapping*, Description?, Constraints?)>
<!ATTLIST PolymorphicAttribute
    Name                         CDATA #REQUIRED
    Identifying                  (False | True) #IMPLIED
    SubtypeSupertypeRelationship CDATA ""
    MappingComplete              (False | True) #IMPLIED
    MappingCompatible            (False | True) #IMPLIED
    ManualDataType               CDATA ""
    DataType                     CDATA #IMPLIED
    ManualConditional            (False | True) "False"
    Conditional                  (False | True) #IMPLIED>
<!-- Name                             : Name
     Identifying                  (M) : Boolean
     SubtypeSupertypeRelationship (R) : String (1c)
     MappingComplete              (M) : Boolean
     MappingCompatible            (M) : Boolean
     ManualDataType               (R) : Name (1c)
     DataType                     (M) : Name (1c)
     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) : String
     Preferred        : Boolean -->

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

<!ELEMENT SimpleRelationship (Description?, ((FirstParticipant, SecondParticipant)
                                           | (SecondParticipant, FirstParticipant)))>
<!ATTLIST SimpleRelationship
    ManualNumber   CDATA ""
    Number         CDATA #IMPLIED
    RelationshipID CDATA #REQUIRED>
<!-- ManualNumber       : Positive Integer (1c)
     Number         (M) : Positive Integer
     RelationshipID (M) : String // 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) : String -->

<!ELEMENT ReferentialAttributeMapping EMPTY>
<!ATTLIST ReferentialAttributeMapping
    ReferentialAttribute CDATA #REQUIRED
    IdentifyingAttribute CDATA #REQUIRED
    Constrained          (False | True) "False">
<!-- ReferentialAttribute (R) : Name
     IdentifyingAttribute (R) : Name
     Constrained              : 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) : String -->

<!ELEMENT AssociativeRelationship (Description?, FirstParticipant, SecondParticipant, AssociativeParticipant)>
<!ATTLIST AssociativeRelationship
    ManualNumber   CDATA ""
    Number         CDATA #IMPLIED
    RelationshipID CDATA #REQUIRED>
<!-- ManualNumber       : Positive Integer (1c)
     Number         (M) : Positive Integer
     RelationshipID (M) : String // 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) : String -->

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

<!ELEMENT ComposedRelationship (Description?, FirstParticipant, SecondParticipant,
                                ComponentParticipant, ComponentParticipant+)>
<!ATTLIST ComposedRelationship
    ManualNumber   CDATA ""
    Number         CDATA #IMPLIED
    RelationshipID CDATA #REQUIRED>
<!-- ManualNumber       : Positive Integer (1c)
     Number         (M) : Positive Integer
     RelationshipID (M) : String // Should be #IMPLIED -->

<!ELEMENT ComponentParticipant EMPTY>
<!ATTLIST ComponentParticipant
    ComponentRelationship CDATA #REQUIRED
    ComponentObject       CDATA #REQUIRED
    ComponentRole         CDATA #IMPLIED>
<!-- ComponentRelationship (R) : String
     ComponentObject       (R) : Name
     ComponentRole         (R) : Name -->

<!ELEMENT MathematicallyDependentRelationship (Description?, FirstParticipant, SecondParticipant)>
<!ATTLIST MathematicallyDependentRelationship
    ManualNumber   CDATA ""
    Number         CDATA #IMPLIED
    RelationshipID CDATA #REQUIRED>
<!-- ManualNumber       : Positive Integer (1c)
     Number         (M) : Positive Integer
     RelationshipID (M) : String // 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) : String // 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) : String -->

<!ELEMENT Subsystem (Description?, AssignedObject*, AssignedRelationship*,
                     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) : String -->

<!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 EMPTY>
<!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 EMPTY>
<!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 (ReceivedDataItem*, Action?, 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>
<!-- Name             : Name
     ManualNumber     : Positive Integer (1c)
     Number       (M) : Positive Integer
     InitialState     : Boolean
     FinalState   (M) : Boolean
     WaitState    (M) : Boolean -->

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

<!ELEMENT Action (Description?)>

<!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 (ReceivedDataItem*, Action?, 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 (ReceivedDataItem*, Action?, InternalEvent*)>
<!ATTLIST DeletionState
    Name          CDATA #REQUIRED
    ManualNumber  CDATA ""
    Number        CDATA #IMPLIED>
<!-- Name             : Name
     ManualNumber     : Positive Integer (1c)
     Number       (M) : Positive Integer -->

<!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) : String
     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) : String
     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) : String
     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) : String
     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 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>
<!-- Path         : *
     RelativePath : *
     Width        : Non-Negative Integer
     Height       : Non-Negative Integer
     Font         : Font -->

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

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

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

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

<!ELEMENT StateTransitionDiagram (Shape*, (BinaryLink | UnaryLink)*)>
<!ATTLIST StateTransitionDiagram
    Path         CDATA #IMPLIED
    RelativePath CDATA #IMPLIED
    Width        CDATA #REQUIRED
    Height       CDATA #REQUIRED
    Font         CDATA #REQUIRED>
<!-- Path         : *
     RelativePath : *
     Width        : Non-Negative Integer
     Height       : Non-Negative Integer
     Font         : Font -->

<!ELEMENT Shape EMPTY>
<!ATTLIST Shape
    Name   CDATA #REQUIRED
    X      CDATA #REQUIRED
    Y      CDATA #REQUIRED
    Width  CDATA #REQUIRED
    Height CDATA #REQUIRED>
<!-- Name   : String
     X      : Integer
     Y      : Integer
     Width  : Non-Negative Integer
     Height : Non-Negative Integer -->

<!ELEMENT BinaryLink (WayPoint*)>
<!ATTLIST BinaryLink
    Label       CDATA #REQUIRED
    SourceShape CDATA #REQUIRED
    TargetShape CDATA #REQUIRED>
<!-- Label           : String
     SourceShape (R) : String
     TargetShape (R) : String -->

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

<!ELEMENT SpurLink (WayPoint*)>
<!ATTLIST SpurLink
    Label     CDATA #REQUIRED
    SpurShape CDATA #REQUIRED>
<!-- Label         : String
     SpurShape (R) : String -->

<!ELEMENT ParentLink (WayPoint*, BranchPoint)>
<!ATTLIST ParentLink
    Label       CDATA #REQUIRED
    ParentShape CDATA #REQUIRED>
<!-- Label           : String
     ParentShape (R) : String -->

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

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

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

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

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