<?xml version='1.0' encoding='us-ascii'?>


<!-- **************** DOCUMENT TYPE DEFINITION ************* -->



<!-- A component info document will contain the following info:

      -   unique ID
      -   name of the component
      -   author(s) information (optional)
      -   date (optional)
      -   version (optional)
      -   person who gave me the component
      -   source (location)
      -   description of the component (optional)
      -   port type list that contains description of 
          different port types available.
      -   port list that contains information about one
          or more ports associated with the component.
      -   parameters information (optional)
      -   installations information
      -   other details (such as performance model info)  -->
<!ELEMENT component-info
                          (uniqueID,
                           component-name,
                           author-list?,
                           date?,
                           version?,
                           source-human?,
                           source-location?,
                           component-description?,
                           port-type-list,
                           port-list,
                           parameter-block-list?,
                           installation*, 
                           other-details?) >


<!-- globally unique identifier for the particlular
     xml file -->
<!ELEMENT uniqueID  (#PCDATA) >

                           
<!-- the name of the component is going to be parsed
     character data -->
<!ELEMENT component-name  (#PCDATA) >


<!-- the list of authors who created this component -->
<!ELEMENT author-list (author+) >


<!-- author info is assumed to be just the name of 
     the author for the time being -->
<!ELEMENT author  (#PCDATA) >


<!-- Date is assumed to be parsed character data.
     It is going to be the date when the component 
     was obtained. --> 
<!ELEMENT date  (#PCDATA) >


<!-- The version number of the component
     when it was obtained. -->
<!ELEMENT version  (#PCDATA) >


<!-- the person who gave me the component -->
<!ELEMENT source-human   (#PCDATA) >


<!-- the place where the component came from -->
<!ELEMENT source-location   (#PCDATA) >



<!-- description is going to be a piece of text that
     is going to describe the features of the component -->
<!ELEMENT component-description  (#PCDATA) >



<!-- List of port types that the component is going to use -->
<!ELEMENT port-type-list  (port-type*)  >


<!-- Each port type will have a name, direction of the port,
     and a list of methods.  --> 
<!ELEMENT  port-type  (type-name,
                       port-dir,
                       method-list)  >



<!-- Name of the port type. This has to be unique in the
     port type list. -->
<!ELEMENT type-name  (#PCDATA)  >


<!-- Direction of the port that specifies whether it is
     input or output -->
<!ELEMENT port-dir  (#PCDATA)  >

<!-- List of methods belonging to the port type -->
<!ELEMENT method-list  (method*) >


<!-- Description of a method -->
<!ELEMENT method  (method-name,
                   method-param-list,
                   return-value,
                   exception-type?) >


<!-- Name of a method -->
<!ELEMENT method-name  (#PCDATA) >


<!-- Parameters of a method -->
<!ELEMENT method-param-list  (param-info*) >


<!-- Parameter info will contain name of the parameter,
     direction of the parameter (in/out/inout), and type 
     of the parameter (string/int/...). -->
<!ELEMENT param-info   (param-name,
                        param-dir,
                        param-type)  >


<!-- Name of the parameter. This must be unique within
     the method parameter list. -->
<!ELEMENT param-name  (#PCDATA) >


<!-- Direction of the parameter that specifies whether
     it should be input or output or both -->
<!ELEMENT param-dir  (#PCDATA) >


<!-- Type of the parameter (string/integer/.....) -->
<!ELEMENT param-type  (#PCDATA)  >


<!-- Specification of the return value type -->
<!ELEMENT return-value  (#PCDATA) >


<!-- Type of exception thrown by the method -->
<!ELEMENT exception-type  (#PCDATA)  >


<!-- port list will be a list of port information -->
<!ELEMENT port-list 
                    (port+) >



<!-- Port information will consist of name of the 
     port, information about the port type, and
     an optional description of the port. -->
<!ELEMENT port 
                    (port-name,
                     my-port-type,
                     port-description? ) >



<!-- port name will be parsed character data -->
<!ELEMENT port-name  (#PCDATA) >


<!-- port type is going to be the name of the 
     port type. -->
<!ELEMENT my-port-type  (#PCDATA) >




<!-- description of the port -->
<!ELEMENT port-description  (#PCDATA)  >



<!-- list of parameter blocks -->
<!ELEMENT parameter-block-list  (parameter-block+)  >



<!-- parameter block information -->
<!ELEMENT parameter-block  (parameterID,
                            default-value)  >



<!-- ID of the parameter. This will have
     a reference to the port ID to identify
     the port to which the parameter belongs to,
     the method to which it belongs to,
     and a parameter ID to uniquely identify 
     the parameter inside the method. -->
<!ELEMENT parameterID  (param-port-name,
                        param-method-name,
                        name-of-param)  >


<!-- Name of the port to which the parameter 
     belongs to -->
<!ELEMENT param-port-name  (#PCDATA)  >


<!-- Name of the method that contains the
     parameter -->
<!ELEMENT param-method-name  (#PCDATA)  >



<!-- Name of the parameter within the method -->
<!ELEMENT name-of-param  (#PCDATA)  >



<!-- Default value for the parameter. The parameter
     will take this value if the user does not
     specify anything. -->
<!ELEMENT default-value  (#PCDATA)  >





<!-- installation information will include the name
     of the machine where the component is installed,
     and a list of creation methods info-->
<!ELEMENT installation
                       (host-name,
                        creation-info+) >


<!-- host name will be parsed character data -->
<!ELEMENT host-name  (#PCDATA) >


<!-- creation information will contain the creation
     method (like gram), the creation environment
     (like TMPDIR = "/tmp"), and the path to the
     executable -->
<!ELEMENT creation-info
                          (creation-method,
                           creation-env,
                           path) >



<!-- creation method will be parsed character data -->
<!ELEMENT creation-method  (#PCDATA) >


<!-- creation environment will be a set of
     name-value pairs  -->
<!ELEMENT creation-env  (name-value-pair*) >


<!-- A name value pair is going to be a set of
     name of the environment variable, and its
     value -->
<!ELEMENT name-value-pair
                (name,
                 value)  >


<!ELEMENT name   (#PCDATA)  >


<!ELEMENT value   (#PCDATA)  >



<!-- path will be parsed character data -->
<!ELEMENT path  (#PCDATA) >



<!-- other details will list auxiliary information 
     like performance model info -->
<!ELEMENT other-details  (#PCDATA) >
