<!--
# Author: Microelectronics and Computer Technology Corporation (MCC)
# Version: 1.0
# Organization: Software Engineering
# Date: 12/17/99

     Copyright 1999 2000, Microelectronics and Computer Technology Corporation.

     Permission to use, copy, modify and distribute the ADML DTD and
     its accompanying documentation for any purpose and without fee is
     hereby granted in perpetuity, provided that the above copyright
     notice and this paragraph appear in all copies.  The copyright
     holders make no representation about the suitability of the DTD for
     any purpose.  It is provided "as is" without expressed or implied
     warranty.

     If you modify the ADML DTD in any way, except for declaring and
     referencing additional sets of general entities and declaring
     additional notations, label your DTD as a variant of DocBook.  See
     the maintenance documentation for more information.

     Please direct all questions, bug reports, or suggestions for
     changes to one of the following:

     T.W. Cook, MCC
     3500 West Balcones Center Drive
     Austin, Texas  78759-5398
     tw@mcc.com

     Steve Pruitt, MCC
     3500 West Balcones Center Drive
     Austin, Texas  78759-5398
     pruitt@mcc.com

     Doug Stuart, MCC
     3500 West Balcones Center Drive
     Austin, Texas  78759-5398
     stuart@mcc.com

-->

<!--
**********************************************************************
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>
