<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XML Spy v4.3 U (http://www.xmlspy.com) by Joseph Pelrine (MetaProg) -->
<!-- ===== PARAMETER ENTITY DECLARATIONS ===== -->
<!ENTITY % semanticDefinition "( namespaceDefinition | scopedPoolDefinition | scopedVariableDefinition | classDefinition | methodDefinition |  classMethodDefinition )">
<!ELEMENT Rosetta (annotation*, package)+>
<!ATTLIST Rosetta
	version CDATA #FIXED "1.1"
>
<!--
**********************************************************************
ELEMENT: moduleSpecification
**********************************************************************
-->
<!ELEMENT moduleSpecification (#PCDATA)>
<!ATTLIST moduleSpecification
	moduleName CDATA #REQUIRED
	moduleType (program | subsystem | cluster | package) "package"
	moduleVersion CDATA ""
	exportingDialect (VA | VW | D | OS | GNU | STX | MT | GS | VSE | AOS) "VA"
	exportingDialectVersion CDATA ""
	timeStamp CDATA ""
	moduleURL CDATA ""
	UID CDATA ""
>
<!-- PACKAGE -->
<!--
**********************************************************************
ELEMENT: package
COMMENT: A package contains a collection of semantic definitions
**********************************************************************
-->
<!ELEMENT package (moduleSpecification, comment?, prerequisite*, semanticElement*, annotation*, binaryResource*)>
<!-- PREREQUISITE -->
<!--
**********************************************************************
ELEMENT: prerequisite 
COMMENT: A package contains a collection of semantic definitions
**********************************************************************
-->
<!ELEMENT prerequisite (moduleSpecification, inclusionContext*)>
<!-- INCLUSION CONTEXT -->
<!--
**********************************************************************
ELEMENT: inclusionContext
COMMENT: Any Smalltalk comment.
**********************************************************************
-->
<!ELEMENT inclusionContext (#PCDATA)>
<!-- SEMANTIC ELEMENT -->
<!--
**********************************************************************
ELEMENT: semantic element
COMMENT: Represents abstract interchangeable element.
**********************************************************************
-->
<!ELEMENT semanticElement (%semanticDefinition;, annotation*)>
<!ATTLIST semanticElement
	namespace CDATA ""
>
<!-- ##NAMESPACE DEFINITION -->
<!--
**********************************************************************
ELEMENT: namespaceDefinition
**********************************************************************
-->
<!ELEMENT namespaceDefinition (namespaceImport*, comment?)>
<!ATTLIST namespaceDefinition
	namespaceName CDATA #REQUIRED
	parentNamespaceName CDATA "Smalltalk"
	private (true | false) "false"
>
<!-- #NAMESPACE IMPORT -->
<!--
**********************************************************************
ELEMENT: namespaceImport 
COMMENT: a namespaceImport describes the name and
				visibility of an external namespace imported
				into a namespaceDefinition
**********************************************************************
-->
<!ELEMENT namespaceImport EMPTY>
<!ATTLIST namespaceImport
	importName CDATA #REQUIRED
	private CDATA ""
>
<!-- #SCOPED POOL -->
<!--
**********************************************************************
ELEMENT: scopedPoolDefinition
COMMENT: A scoped variable represents a holder for scoped
	variables (nominally a Dictionary), defined in the scope of a 
	"globally" resolving name. This can be either
	- a global dictionary such as Smalltalk
	- a pool dictionary
	
	It could also theoretically be mapped to:
	- a namespace
	- a class pool

**********************************************************************
-->
<!ELEMENT scopedPoolDefinition EMPTY>
<!ATTLIST scopedPoolDefinition
	name CDATA #REQUIRED
	globalName CDATA #REQUIRED
	private (true | false) "false"
	constant (true | false) "false"
	comment CDATA ""
>
<!-- #SCOPED VARIABLE -->
<!--
**********************************************************************
ELEMENT: scopedVariableDefinition 
COMMENT: A scoped variable represents a variable defined in
	the scope of a "globally" resolving name. This can be either
	- a global variable, resolving in Smalltalk
	- a static variable, resolved in a namespace
	- a pool variable, resolved in a pool dictionary
**********************************************************************
-->
<!ELEMENT scopedVariableDefinition EMPTY>
<!ATTLIST scopedVariableDefinition
	name CDATA #REQUIRED
	globalName CDATA #REQUIRED
	private (true | false) "false"
	constant (true | false) "false"
	valueExpression CDATA ""
	comment CDATA ""
>
<!-- ##CLASS DEFINITION -->
<!--
**********************************************************************
ELEMENT: classDefinition
**********************************************************************
-->
<!ELEMENT classDefinition (instVarNames?, classVarNames?, importNames?, classInstVarNames?, comment?, binaryResource*)>
<!ATTLIST classDefinition
	className CDATA #REQUIRED
	superclassName CDATA "Object"
	indexedInstVarType (byte | word | long | object | none) "none"
	private (true | false) "false"
	category CDATA ""
	namespace CDATA ""
	superclassNamespace CDATA ""	
	UID CDATA ""
>
<!--
**********************************************************************
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: importNames
COMMENT: Pool names separated by space. In VW, these
				are the imported namespaces
**********************************************************************
-->
<!ELEMENT importNames (#PCDATA)>
<!--
**********************************************************************
ELEMENT: classInstVarNames
COMMENT: Class instance variable names separated by space.
**********************************************************************
-->
<!ELEMENT classInstVarNames (#PCDATA)>
<!-- ##METHOD DEFINITION -->
<!--
**********************************************************************
ELEMENT: methodDefinition
**********************************************************************
-->
<!ELEMENT methodDefinition (#PCDATA)>
<!ATTLIST methodDefinition
	className CDATA #REQUIRED
	selector CDATA #REQUIRED
	private (true | false) "false"
	category CDATA ""
	namespace CDATA ""
	timeStamp CDATA ""
>
<!--
**********************************************************************
ELEMENT: classMethodDefinition
**********************************************************************
-->
<!ELEMENT classMethodDefinition (#PCDATA)>
<!ATTLIST classMethodDefinition
	className CDATA #REQUIRED
	selector CDATA #REQUIRED
	private (true | false) "false"
	category CDATA ""
	namespace CDATA ""
	timeStamp CDATA ""
>
<!--
**********************************************************************
ELEMENT: comment
COMMENT: Any Smalltalk comment.
**********************************************************************
-->
<!ELEMENT comment (#PCDATA)>
<!-- #BINARY RESOURCE -->
<!--
**********************************************************************
ELEMENT: binaryResource 
COMMENT: a binary resource is a binary-coded string which
				can be attached to a package or class. 
**********************************************************************
-->
<!ELEMENT binaryResource (#PCDATA)>
<!ATTLIST binaryResource
	resourceName CDATA #REQUIRED
	ownerName CDATA #REQUIRED
	exportingDialect (VA | VW | D | OS | GNU | STX | MT | GS | VSE | AOS) "VA"
	exportingDialectVersion CDATA ""
>
<!-- #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 various implementations. 
**********************************************************************
-->
<!ELEMENT annotation EMPTY>
<!ATTLIST annotation
	key CDATA #REQUIRED
	value CDATA #REQUIRED
>
