<!--
     Copyright 2000, The Open Group.
-->

<!--
**********************************************************************
ELEMENT: Design
COMMENT:  
**********************************************************************
-->

<!ELEMENT Design (ImportPathname | ComponentType | ConnectorType | PortType | RoleType | PropertyTypeDeclaration | Family | System | MetaProperty)*>
<!ATTLIST Design identifier ID #REQUIRED name CDATA #IMPLIED>

<!--
**********************************************************************
ELEMENT: ImportPathname
COMMENT:  
**********************************************************************
-->

<!ELEMENT ImportPathname EMPTY >
<!ATTLIST ImportPathname identifier ID #REQUIRED pathname CDATA #REQUIRED>

<!--
**********************************************************************
ELEMENT: Family
COMMENT:  
**********************************************************************
-->

<!ELEMENT Family (ComponentType | ConnectorType | PortType | RoleType | PropertyTypeDeclaration | Component |   Connector | Port | Role | Property | Attachments | Representation | MetaProperty )+>
<!ATTLIST Family identifier ID #REQUIRED name CDATA #IMPLIED>


<!--
**********************************************************************
ELEMENT: System
COMMENT:  
**********************************************************************
-->

<!ELEMENT System (SystemDescription, MetaProperty* )>
<!ATTLIST System identifier ID #REQUIRED name CDATA #IMPLIED>

<!--
**********************************************************************
ELEMENT: SystemDescription
COMMENT:  
**********************************************************************
-->

<!ELEMENT SystemDescription ((ExtendedSystemType | SystemStructure)?)>



<!--
**********************************************************************
ELEMENT: ExtendedSystemType
COMMENT:  
**********************************************************************
-->

<!ELEMENT ExtendedSystemType (ElementID* , SystemStructure?) >

<!--
**********************************************************************
ELEMENT: SystemStructure
COMMENT:  
**********************************************************************
-->

<!ELEMENT SystemStructure (Component | Connector | Port | Role | Property | Attachments | Representation)*  >



<!--
**********************************************************************
ELEMENT: Representation
COMMENT:  
**********************************************************************
-->

<!ELEMENT Representation (System, BindingsMap?)>
<!ATTLIST Representation identifier ID #REQUIRED name CDATA #IMPLIED>

<!--
**********************************************************************
ELEMENT: BindingsMap
COMMENT:  
**********************************************************************
-->

<!ELEMENT BindingsMap (Binding)* >
<!ATTLIST BindingsMap identifier ID #REQUIRED>

<!--
**********************************************************************
ELEMENT: Binding
COMMENT:  
**********************************************************************
-->

<!ELEMENT Binding (Property)*>
<!ATTLIST Binding SourceID CDATA #REQUIRED TargetID CDATA #REQUIRED >



<!--
**********************************************************************
ELEMENT: Attachment
COMMENT:  
**********************************************************************
-->

<!ELEMENT Attachment (Property)*>
<!ATTLIST Attachment identifier ID #REQUIRED PortID CDATA #REQUIRED RoleID CDATA #REQUIRED>

<!--
**********************************************************************
ELEMENT: Attachments
COMMENT:  
**********************************************************************
-->

<!ELEMENT Attachments (Attachment)*>
<!ATTLIST Attachments identifier ID #REQUIRED>

<!--
**********************************************************************
ELEMENT: ComponentType
COMMENT:  
**********************************************************************
-->

<!ELEMENT ComponentType (ComponentDescription, MetaProperty*)>
<!ATTLIST ComponentType identifier ID #REQUIRED name CDATA #IMPLIED>

<!--
**********************************************************************
ELEMENT: Component
COMMENT:  
**********************************************************************
-->

<!ELEMENT Component (ComponentDescription, MetaProperty*)>
<!ATTLIST Component identifier ID #REQUIRED name CDATA #IMPLIED>

<!--
**********************************************************************
ELEMENT: ComponentDescription
COMMENT:  
**********************************************************************
-->

<!ELEMENT ComponentDescription (ExtendedComponentType | ComponentBody)?>



<!--
**********************************************************************
ELEMENT: ExtendedComponentType
COMMENT:  
**********************************************************************
-->

<!ELEMENT ExtendedComponentType (ElementID* , ComponentBody?) >

<!--
**********************************************************************
ELEMENT: ComponentBody
COMMENT:  
**********************************************************************
-->

<!ELEMENT ComponentBody (Port|Property|Representation)*  >








<!--
**********************************************************************
ELEMENT: ConnectorType
COMMENT:  
**********************************************************************
-->

<!ELEMENT ConnectorType (ConnectorDescription, MetaProperty*)>
<!ATTLIST ConnectorType identifier ID #REQUIRED name CDATA #IMPLIED>

<!--
**********************************************************************
ELEMENT: Connector
COMMENT:  
**********************************************************************
-->

<!ELEMENT Connector (ConnectorDescription, MetaProperty*)>
<!ATTLIST Connector identifier ID #REQUIRED name CDATA #IMPLIED>

<!--
**********************************************************************
ELEMENT: ConnectorDescription
COMMENT:  
**********************************************************************
-->

<!ELEMENT ConnectorDescription (ExtendedConnectorType | ConnectorBody)?>



<!--
**********************************************************************
ELEMENT: ExtendedConnectorType
COMMENT:  
**********************************************************************
-->

<!ELEMENT ExtendedConnectorType (ElementID* , ConnectorBody?) >

<!--
**********************************************************************
ELEMENT: ConnectorBody
COMMENT:  
**********************************************************************
-->

<!ELEMENT ConnectorBody (Role|Property|Representation)*  >



<!--
**********************************************************************
ELEMENT: PortType
COMMENT:  
**********************************************************************
-->

<!ELEMENT PortType (PortDescription, MetaProperty*)>
<!ATTLIST PortType identifier ID #REQUIRED name CDATA #IMPLIED>

<!--
**********************************************************************
ELEMENT: Port
COMMENT:  
**********************************************************************
-->

<!ELEMENT Port (PortDescription, MetaProperty*)>
<!ATTLIST Port identifier ID #REQUIRED name CDATA #IMPLIED>

<!--
**********************************************************************
ELEMENT: PortDescription
COMMENT:  
**********************************************************************
-->

<!ELEMENT PortDescription (ExtendedPortType | PortBody)?>



<!--
**********************************************************************
ELEMENT: ExtendedPortType
COMMENT:  
**********************************************************************
-->

<!ELEMENT ExtendedPortType (ElementID* , PortBody?) >

<!--
**********************************************************************
ELEMENT: PortBody
COMMENT:  
**********************************************************************
-->

<!ELEMENT PortBody (Property|Representation)*  >



<!--
**********************************************************************
ELEMENT: RoleType
COMMENT:  
**********************************************************************
-->

<!ELEMENT RoleType (RoleDescription, MetaProperty*)>
<!ATTLIST RoleType identifier ID #REQUIRED name CDATA #IMPLIED>

<!--
**********************************************************************
ELEMENT: Role
COMMENT:  
**********************************************************************
-->

<!ELEMENT Role (RoleDescription, MetaProperty*)>
<!ATTLIST Role identifier ID #REQUIRED name CDATA #IMPLIED>

<!--
**********************************************************************
ELEMENT: RoleDescription
COMMENT:  
**********************************************************************
-->

<!ELEMENT RoleDescription (ExtendedRoleType | RoleBody)?>



<!--
**********************************************************************
ELEMENT: ExtendedRoleType
COMMENT:  
**********************************************************************
-->

<!ELEMENT ExtendedRoleType (ElementID* , RoleBody?) >

<!--
**********************************************************************
ELEMENT: RoleBody
COMMENT:  
**********************************************************************
-->

<!ELEMENT RoleBody (Property|Representation)*  >


<!--
**********************************************************************
ELEMENT: ElementID
COMMENT:  may need to add more type values
**********************************************************************
-->

<!ELEMENT ElementID (#PCDATA)>
<!ATTLIST ElementID identifier ID #REQUIRED name CDATA #IMPLIED type (componenttype| component | connectortype | connector | roletype | role | porttype | port | family | system | property | propertytype | enumvalue ) #REQUIRED>




<!--
**********************************************************************
ELEMENT: PropertyTypeDeclaration
COMMENT:  
**********************************************************************
-->

<!ELEMENT PropertyTypeDeclaration (PropertyType, MetaProperty*)>
<!ATTLIST PropertyTypeDeclaration identifier ID #REQUIRED name CDATA #IMPLIED>




<!--
**********************************************************************
ELEMENT: PropertyType
COMMENT:  
**********************************************************************
-->

<!ELEMENT PropertyType (PropertyEnumType | PropertyLiteralType | PropertySetType | PropertySequenceType | PropertyRecordType | ElementID )>
<!ATTLIST PropertyType identifier ID #REQUIRED name CDATA #IMPLIED>



<!--
**********************************************************************
ELEMENT: PropertyLiteralType
COMMENT:  
**********************************************************************
-->

<!ELEMENT PropertyLiteralType EMPTY >
<!ATTLIST PropertyLiteralType identifier ID #REQUIRED name CDATA #IMPLIED type (int | float | string | boolean | any | identifier | uri | char) #REQUIRED >



<!--
**********************************************************************
ELEMENT: PropertyEnumType
COMMENT:  
**********************************************************************
-->

<!ELEMENT PropertyEnumType (ElementID*)>
<!ATTLIST PropertyEnumType identifier ID #REQUIRED name CDATA #IMPLIED>



<!--
**********************************************************************
ELEMENT: PropertySetType
COMMENT:  
**********************************************************************
-->

<!ELEMENT PropertySetType (PropertyType?)>
<!ATTLIST PropertySetType identifier ID #REQUIRED name CDATA #IMPLIED>



<!--
**********************************************************************
ELEMENT: PropertySequenceType
COMMENT:  
**********************************************************************
-->

<!ELEMENT PropertySequenceType (PropertyType?)>
<!ATTLIST PropertySequenceType identifier ID #REQUIRED name CDATA #IMPLIED>



<!--
**********************************************************************
ELEMENT: PropertyRecordType
COMMENT:  
**********************************************************************
-->

<!ELEMENT PropertyRecordType (PropertyFieldDeclaration*)>
<!ATTLIST PropertyRecordType identifier ID #REQUIRED name CDATA #IMPLIED>



<!--
**********************************************************************
ELEMENT: PropertyFieldDeclaration
COMMENT:  
**********************************************************************
-->

<!ELEMENT PropertyFieldDeclaration (PropertyType?)>
<!ATTLIST PropertyFieldDeclaration identifier ID #REQUIRED name CDATA #IMPLIED>



<!--
**********************************************************************
ELEMENT: PropertyValue
COMMENT:  
**********************************************************************
-->

<!ELEMENT PropertyValue (PropertyLiteralValue | PropertySetValue | PropertySequenceValue|PropertyRecordValue)>
<!ATTLIST PropertyValue identifier ID #REQUIRED name CDATA #IMPLIED>



<!--
**********************************************************************
ELEMENT: PropertyLiteralValue
COMMENT:  
**********************************************************************
-->

<!ELEMENT PropertyLiteralValue EMPTY >
<!ATTLIST PropertyLiteralValue identifier ID #REQUIRED name CDATA #IMPLIED value CDATA #REQUIRED>



<!--
**********************************************************************
ELEMENT: PropertySetValue
COMMENT:  
**********************************************************************
-->

<!ELEMENT PropertySetValue (PropertyValue*)>
<!ATTLIST PropertySetValue identifier ID #REQUIRED name CDATA #IMPLIED>



<!--
**********************************************************************
ELEMENT: PropertySequenceValue
COMMENT:  
**********************************************************************
-->

<!ELEMENT PropertySequenceValue (PropertySequenceElement*)>
<!ATTLIST PropertySequenceValue identifier ID #REQUIRED name CDATA #IMPLIED>



<!--
**********************************************************************
ELEMENT: PropertySequenceElement
COMMENT:  
**********************************************************************
-->

<!ELEMENT PropertySequenceElement (PropertyValue)>
<!ATTLIST PropertySequenceElement identifier ID #REQUIRED name CDATA #IMPLIED position CDATA #REQUIRED >



<!--
**********************************************************************
ELEMENT: PropertyRecordValue
COMMENT:  
**********************************************************************
-->

<!ELEMENT PropertyRecordValue (PropertyFieldValue*)>
<!ATTLIST PropertyRecordValue identifier ID #REQUIRED name CDATA #IMPLIED>



<!--
**********************************************************************
ELEMENT: PropertyFieldValue
COMMENT:  
**********************************************************************
-->

<!ELEMENT PropertyFieldValue (PropertyType? , PropertyValue)>
<!ATTLIST PropertyFieldValue identifier ID #REQUIRED name CDATA #IMPLIED fieldname CDATA #REQUIRED>



<!--
**********************************************************************
ELEMENT: Property
COMMENT:  
**********************************************************************
-->

<!ELEMENT Property (PropertyType? , PropertyValue?, MetaProperty*)>
<!ATTLIST Property identifier ID #REQUIRED name CDATA #IMPLIED>



<!--
**********************************************************************
ELEMENT: MetaProperty
COMMENT:  
**********************************************************************
-->

<!ELEMENT MetaProperty (PropertyType? , PropertyValue?)>
<!ATTLIST MetaProperty identifier ID #REQUIRED name CDATA #IMPLIED>
