<?xml version="1.0" encoding="UTF-8"?>
<!--DTD generated by XML Spy v4.3 U (http://www.xmlspy.com)-->
<!--A description-->
<!ELEMENT description (#PCDATA)>
<!--A Java action-->
<!ELEMENT javaAction EMPTY>
<!ATTLIST javaAction
	actionName CDATA #IMPLIED
	className CDATA #REQUIRED
>
<!--Transformation description-->
<!ELEMENT transformation (description?, ruleSet)>
<!--models: The models used by the transformation.
A comma separated list of model declarion. A model declaration is made of the name of the model and the name of its metamodel (uml:UML). The name of the model is used inside the rules.
ex: models=”uml:UML, deploy:Deployment”
-->
<!--defaultTargets: The model used as targets.
A comma separated list of model names.
This defines the direction of the transformation.
ex: targets=”deploy”
-->
<!ATTLIST transformation
	models CDATA #REQUIRED
	defaultTargets CDATA #IMPLIED
>
<!ELEMENT ruleSet (rule | topRule | selectRule)*>
<!ELEMENT rule (description?, domain*, dependsOn?, enterGuards?, exitGuards?, actions?, postActions?)>
<!ATTLIST rule
	name CDATA #REQUIRED
>
<!ELEMENT topRule (description?, domain*, dependsOn?, enterGuards?, exitGuards?, actions?, postActions?)>
<!ATTLIST topRule
	name CDATA #REQUIRED
>
<!ELEMENT selectRule  (description?)>
<!ATTLIST selectRule
	name CDATA #REQUIRED
	rules CDATA #REQUIRED
>
<!ELEMENT domain (description?, ((property | primitiveProperty | collProperty | enterGuards | exitGuards | log)*), actions?, postActions?)>
<!ATTLIST domain
	varName CDATA #IMPLIED
	type CDATA #IMPLIED
	initValue CDATA #IMPLIED
	exprLanguage CDATA #IMPLIED
	model CDATA #IMPLIED
>
<!ELEMENT dependsOn ANY>
<!ELEMENT enterGuards (script | log)*>
<!ELEMENT exitGuards (script | log)*>
<!--A list of actions-->
<!ELEMENT actions ((script | call | log | javaAction | openWriter | generate | closeWriter)*, (openWriter | generate | closeWriter)*)>
<!--A list of actions-->
<!ELEMENT postActions (script | call | log | javaAction | openWriter | generate | closeWriter)*>
<!ELEMENT property ((property | primitiveProperty | collProperty | enterGuards | exitGuards | log)*)>
<!ATTLIST property
	varName CDATA #IMPLIED
	type CDATA #IMPLIED
	initValue CDATA #IMPLIED
	exprLanguage CDATA #IMPLIED
	name CDATA #REQUIRED
>
<!ELEMENT primitiveProperty EMPTY>
<!ATTLIST primitiveProperty
	varName CDATA #IMPLIED
	type CDATA #IMPLIED
	initValue CDATA #IMPLIED
	exprLanguage CDATA #IMPLIED
	name CDATA #REQUIRED
>
<!ELEMENT collProperty EMPTY>
<!ATTLIST collProperty
	varName CDATA #IMPLIED
	type CDATA #IMPLIED
	initValue CDATA #IMPLIED
	exprLanguage CDATA #IMPLIED
	name CDATA #REQUIRED
>
<!--A log-->
<!ELEMENT log EMPTY>
<!ATTLIST log
	logname CDATA #IMPLIED
	level CDATA #IMPLIED
	msg CDATA #REQUIRED
	exprLanguage CDATA #IMPLIED
>
<!--A script-->
<!ELEMENT script (body?)>
<!--script: The script. Only one of 'script' or &lt;body&gt; should be set.-->
<!ATTLIST script
	script CDATA #IMPLIED
	language CDATA #IMPLIED
>
<!--To call a rule-->
<!ELEMENT call (arg)*>
<!ATTLIST call
	rule CDATA #IMPLIED
>
<!--Open a writer-->
<!ELEMENT openWriter EMPTY>
<!ATTLIST openWriter
	writerName CDATA #REQUIRED
	path CDATA #IMPLIED
	filename CDATA #IMPLIED
	ext CDATA #IMPLIED
	exprLanguage CDATA #IMPLIED
>
<!--Generate code-->
<!ELEMENT generate EMPTY>
<!ATTLIST generate
	writerName CDATA #IMPLIED
	template CDATA #IMPLIED
	path CDATA #IMPLIED
	filename CDATA #IMPLIED
	ext CDATA #IMPLIED
	exprLanguage CDATA #IMPLIED
>
<!--Close a writer-->
<!ELEMENT closeWriter EMPTY>
<!ATTLIST closeWriter
	writerName CDATA #REQUIRED
>
<!ELEMENT body (#PCDATA)>
<!ELEMENT arg EMPTY>
<!ATTLIST arg
	expr CDATA #REQUIRED
	language CDATA #IMPLIED
>

