<?xml version="1.0" encoding="utf-8" ?>

<!-- ________________________________________________________ -->
<!--                                                          -->
<!-- XIM is the top-level XML element for XIM transfer text.  -->
<!-- ________________________________________________________ -->

<!ELEMENT XIM (header, content) >
<!ATTLIST XIM
            XIM-version CDATA #FIXED "1.0"
            timestamp   CDATA #IMPLIED
            verified (true | false) #IMPLIED
>

<!-- ______________________________________________________________ -->
<!--                                                                -->
<!-- header contains metadata about the transfer and data about -->
<!-- the metamodels which define the content of the transfer.       -->
<!-- ______________________________________________________________ -->

<!ELEMENT header (documentation?, metamodel+) >

<!-- _____________________________________________________________________ -->
<!--                                                                       -->
<!-- documentation contains data about the information being transferred.  -->
<!-- _____________________________________________________________________ -->

<!ELEMENT documentation (#PCDATA |
                         owner | contact |
                         longDescription |
                         shortDescription | exporter |
                         exporterVersion | notice | nameSpace)* >

<!ELEMENT owner ANY >
<!ELEMENT contact ANY >
<!ELEMENT longDescription ANY >
<!ELEMENT shortDescription ANY >
<!ELEMENT exporter ANY >
<!ELEMENT exporterVersion ANY >
<!ELEMENT exporterID ANY >
<!ELEMENT notice ANY >

<!-- _____________________________________________________________________ -->
<!--                                                                       -->
<!-- metamodel contains data about the metamodel(s) to which the content   -->
<!-- conforms.                                                             -->
<!-- _____________________________________________________________________ -->

<!ELEMENT metamodel ANY>
<!ATTLIST metamodel
              name    CDATA #REQUIRED
              version CDATA #REQUIRED
              href    CDATA #IMPLIED
>

<!-- _______________________________________________ -->
<!--                                                 -->
<!-- content is the actual data being transferred.   -->
<!-- _______________________________________________ -->

<!ELEMENT content (Description) >

<!ELEMENT Description (name, ownedElement)>
<!ATTLIST Description
             id CDATA #REQUIRED
>

<!ELEMENT name ANY >
<!ELEMENT Name EMPTY>
<!ATTLIST Name
             value CDATA #REQUIRED
>

<!ELEMENT ownedElement (Container)* >

<!ENTITY % ElementKind
         ' type (element | relation) #REQUIRED ' >

<!ENTITY % RelationAccess
         ' access (0 | 1) #REQUIRED ' >

<!ELEMENT Container (versionName, predVersionID, subVersionIDs, containerElement)
>
<!ATTLIST Container 
            id CDATA #REQUIRED
>

<!ELEMENT versionName EMPTY>
<!ATTLIST versionName
             value CDATA #REQUIRED
>

<!ELEMENT predVersionID EMPTY>
<!ATTLIST predVersionID
             id CDATA #REQUIRED
>

<!ELEMENT subVersionIDs EMPTY>
<!ATTLIST subVersionIDs
             list CDATA #REQUIRED
>

<!ELEMENT containerElement (GraphicInteractorDescription | ManipulatedData)* >


<!ELEMENT GraphicInteractorDescription (
          Name,
          Width,
          Height,
          ManipulatedData,
          ElementaryTask)
>
<!ATTLIST GraphicInteractorDescription
            %ElementKind;
            id CDATA #REQUIRED
>

<!ELEMENT Width EMPTY>
<!ATTLIST Width
             value CDATA #REQUIRED
>

<!ELEMENT Height EMPTY>
<!ATTLIST Height
             value CDATA #REQUIRED
>

<!ELEMENT ManipulatedData (
          Name,
          Type,
          Restriction?)
>
<!ATTLIST ManipulatedData
            %ElementKind;
            id CDATA #REQUIRED
>

<!ELEMENT Type EMPTY>
<!ATTLIST Type
             value (typeSimple|typeComplex) #REQUIRED
>

<!ELEMENT ElementaryTask EMPTY>
<!ATTLIST ElementaryTask
            list CDATA #REQUIRED
>

<!ATTLIST UseData
            %ElementKind;
            id CDATA #REQUIRED
            %RelationAccess;
            elements CDATA #REQUIRED            
>

