<!--
	** SMIX.DTD **

	- SMalltalk Interchange format in XML -

	# Author: Masashi Umezawa <umejava@mars.dti.ne.jp>
	# Version: 2.0
	# Date: 2000/06/10
	
	SMIX is intended to be a new Smalltalk Interchange Format.
	It is basically based on the ANSI Smalltalk Interchange Format(ver1.0).
	For further information, please see the site:
		http://www.mars.dti.ne.jp/~umejava/smalltalk/smix/index.html 

-->

<!-- ===== PARAMETER ENTITY DECLARATIONS ===== -->

<!ENTITY % interchangeElement "( classDefinition |  classInitialization |  globalDefinition |  globalValueInitialization |  poolDefinition |  poolVariableDefinition |  poolValueInitialization |  methodDefinition |  classMethodDefinition |  programInitialization | comment )">

<!ENTITY % methodSpecifier " className  CDATA   #REQUIRED
 selector  CDATA   #REQUIRED">

<!ENTITY % poolVariableSpecifier " poolName  CDATA   #REQUIRED 
poolVariableName  CDATA   #REQUIRED">

<!-- ===== ELEMENT TYPE DECLARATIONS ===== -->

<!-- ROOT -->
<!--
**********************************************************************
ELEMENT: SMIX
COMMENT: The root element of SMIX
ATTRIBUTES: version - Specifies the version of SMIX.
**********************************************************************
-->
<!ELEMENT SMIX  ( interchangeUnit+ )  >
<!ATTLIST SMIX  version  CDATA    "2.0"
 >

<!-- INTERCHANGE UNIT -->
<!--
**********************************************************************
ELEMENT: interchangeUnit
COMMENT: Represents abstract interchangeable element.
**********************************************************************
-->
<!ELEMENT interchangeUnit  ( %interchangeElement; , annotation* )  >


<!-- #INTERCHANGE ELEMENT -->

<!-- ##CLASS DEFINITION -->
<!--
**********************************************************************
ELEMENT: classDefinition
**********************************************************************
-->
<!ELEMENT classDefinition  ( instVarNames?, classVarNames?, sharedPoolNames?, 
          classInstVarNames? )  >
<!ATTLIST classDefinition  
 className  CDATA   #REQUIRED 
 superclassName   CDATA   "Object" 
 indexedInstVarType  (byte | object | none)  "none"
 >

<!--
**********************************************************************
ELEMENT: instVarNames
COMMENT: Instance variable names separated by space.
**********************************************************************
-->
<!ELEMENT instVarNames  (#PCDATA)  >

<!--
**********************************************************************
ELEMENT: classVarNames
COMMENT: Class variable names separated by space.
**********************************************************************
-->
<!ELEMENT classVarNames  (#PCDATA)  >

<!--
**********************************************************************
ELEMENT: sharedPoolNames
COMMENT: Pool names separated by space.
**********************************************************************
-->
<!ELEMENT sharedPoolNames  (#PCDATA)  >

<!--
**********************************************************************
ELEMENT: classInstVarNames
COMMENT: Class instance variable names separated by space.
**********************************************************************
-->
<!ELEMENT classInstVarNames  (#PCDATA)  >

<!-- ##METHOD DEFINITION -->
<!--
**********************************************************************
ELEMENT: methodDefinition
**********************************************************************
-->
<!ELEMENT methodDefinition  (#PCDATA)  >
<!ATTLIST methodDefinition  %methodSpecifier; >

<!--
**********************************************************************
ELEMENT: classMethodDefinition
**********************************************************************
-->
<!ELEMENT classMethodDefinition  (#PCDATA)  >
<!ATTLIST classMethodDefinition  %methodSpecifier; >

<!-- ##CLASS INITIALIZATION -->
<!--
**********************************************************************
ELEMENT: classInitialization
COMMENT: Class initialization code.
**********************************************************************
-->
<!ELEMENT classInitialization  (#PCDATA)  >
<!ATTLIST classInitialization  
 className  CDATA  #REQUIRED
 >

<!-- ##POOL -->
<!--
**********************************************************************
ELEMENT: poolDefinition 
**********************************************************************
-->
<!ELEMENT poolDefinition  EMPTY  >
<!ATTLIST poolDefinition  
 poolName  CDATA   #REQUIRED
 >

<!--
**********************************************************************
ELEMENT: poolVariableDefinition
**********************************************************************
-->
<!ELEMENT poolVariableDefinition  EMPTY  >
<!ATTLIST poolVariableDefinition  
 %poolVariableSpecifier;
 isConstant  (true | false)  "false"
 >

<!--
**********************************************************************
ELEMENT: poolValueInitialization
**********************************************************************
-->
<!ELEMENT poolValueInitialization  (#PCDATA)  >
<!ATTLIST poolValueInitialization  %poolVariableSpecifier; >

<!-- ##GLOBAL -->
<!--
**********************************************************************
ELEMENT: globalDefinition
**********************************************************************
-->
<!ELEMENT globalDefinition  EMPTY  >
<!ATTLIST globalDefinition  
 globalName  CDATA   #REQUIRED
 isConstant  (true | false)  "false"
 >

<!--
**********************************************************************
ELEMENT: globalValueInitialization
**********************************************************************
-->
<!ELEMENT globalValueInitialization  (#PCDATA)  >
<!ATTLIST globalValueInitialization  
 globalName  CDATA   #REQUIRED
 >

<!-- ##OTHERS -->
<!--
**********************************************************************
ELEMENT: programInitialization
COMMENT: Any Smalltalk code for initialization.
**********************************************************************
-->
<!ELEMENT programInitialization  (#PCDATA)  >

<!--
**********************************************************************
ELEMENT: comment
COMMENT: Any Smalltalk comment.
**********************************************************************
-->
<!ELEMENT comment  (#PCDATA)  >

<!-- #ANNOTATION -->
<!--
**********************************************************************
ELEMENT: annotation
COMMENT: Implementation specific annotation for a Smalltalk program
 ANSI Smalltalk defines standard attribute key for usability.
 (category,comment,copyright,author).
 Additional attribute keys may be defined by SMIX implementations. 
**********************************************************************
-->
<!ELEMENT annotation  EMPTY  >
<!ATTLIST annotation
 key  CDATA   #REQUIRED
 value  CDATA   #REQUIRED
 >

<!-- ===== END OF SMIX ===== -->