<?xml version='1.0' encoding='UTF-8' ?>

<!ENTITY % uri "CDATA">

<!ENTITY % version "NMTOKEN">

<!ENTITY % esvar "NMTOKEN">

<!ENTITY % esvars "CDATA">

<!ENTITY % expression "CDATA">

<!ENTITY % boolean "(true | false)">

<!ENTITY % content.type "CDATA">

<!ENTITY % duration "CDATA">

<!ENTITY % string "CDATA">


<!ENTITY % executable.content "accept | createcall | join | unjoin | createconference | destroyconference | dialogstart | dialogterminate | send | disconnect | assign | var | script | if | goto | fetch |  exit | redirect | move">


<!ELEMENT accept EMPTY>
<!ATTLIST accept  
	callid %expression;  '_event.callid' 
>

<!ELEMENT authenticate EMPTY>
<!ATTLIST authenticate  
	server  %expression;  #REQUIRED
	userid   %expression;  #REQUIRED
	password %expression;  #REQUIRED 
>

<!ELEMENT assign EMPTY>
<!ATTLIST assign  
	name %esvar;  #REQUIRED
	expr %expression;  #REQUIRED 
>

<!ELEMENT ccxml (assign | var | eventhandler | script)* >
<!ATTLIST ccxml  
	version %version;  #REQUIRED 
>

<!ELEMENT createcall EMPTY>
<!ATTLIST createcall  
	dest %expression;	#REQUIRED 
	name %esvar;			#IMPLIED
>

<!ELEMENT createccxml EMPTY>
<!ATTLIST createccxml  
	fetchid %expression;  #REQUIRED 
	start %expression;  #IMPLIED 
	sessionid %esvar;  #IMPLIED 
>

<!ELEMENT createconference EMPTY>
<!ATTLIST createconference  
	id  %esvar;  #REQUIRED 
>

<!ELEMENT destroyconference EMPTY>
<!ATTLIST destroyconference  
	id %expression; #REQUIRED 
>

<!ELEMENT dialogstart EMPTY>
<!ATTLIST dialogstart  
	callid   %expression;    '_event.dialogid'
	src      %expression;           #REQUIRED
	type     %content.type;  'application/xml+vxml'
	namelist %esvars;         #IMPLIED
	dialogid %esvar;         #IMPLIED
>

<!ELEMENT dialogterminate EMPTY>
<!ATTLIST dialogterminate  
	dialogid  %expression;  '_event.dialogid'
	immediate  (true | false )  'false' 
>

<!ELEMENT disconnect EMPTY>
<!ATTLIST disconnect  
	callid %expression;  '_event.callid' 
	reason %expression;  #IMPLIED
>

<!ELEMENT else (%executable.content; | elseif | else)*>

<!ELEMENT elseif (%executable.content; | elseif | else)*>
<!ATTLIST elseif  
	cond %expression;  #REQUIRED 
>

<!ELEMENT eventhandler (transition)*>
<!ATTLIST eventhandler  
	id    ID       #IMPLIED
	statevariable  %esvar;  #REQUIRED 
>


<!ELEMENT exit EMPTY>
<!ATTLIST exit  
	expr     %expression;   '0'
	namelist %esvars;  #IMPLIED 
>

<!ELEMENT fetch EMPTY>
<!ATTLIST fetch  
	next     %expression;   #REQUIRED
	namelist %esvars;  #IMPLIED 
	method (get | post) 'get'
	fetchid %esvar; #IMPLIED
	sync %esvar; #IMPLIED
>

<!ELEMENT goto EMPTY>
<!ATTLIST goto  
	fetchid  %expression;  #REQUIRED 
>

<!ELEMENT if (%executable.content; | elseif | else)*>
<!ATTLIST if  
	cond %expression;  #REQUIRED 
>

<!ELEMENT join EMPTY>
<!ATTLIST join  
	id1    %expression;  #REQUIRED
	id2    %expression;  #REQUIRED
	duplex  %expression;  'full' 
>

<!ELEMENT move EMPTY>
<!ATTLIST move   
	endpoint    %expression;     #IMPLIED
	event       %expression;        #IMPLIED
	sessionid   %expression;     #REQUIRED
>

<!ELEMENT redirect EMPTY>
<!ATTLIST redirect  
	callid %expression;  '_event.callid'
	dest   %expression;    #REQUIRED
	reason %expression;  #IMPLIED 
>

<!ELEMENT reject EMPTY>
<!ATTLIST reject  
	reason %expression;  #IMPLIED
	callid %expression;  '_event.callid' 
>


<!ELEMENT script (#PCDATA)*>
<!ATTLIST script  
	src %expression;  #IMPLIED 
>

<!ELEMENT send EMPTY>
<!ATTLIST send  
	event    %expression;        #REQUIRED
	target   %expression;             #IMPLIED
	name     %expression;        #IMPLIED
	delay    %duration;     #IMPLIED
	namelist %esvars;  #IMPLIED 
>


<!ELEMENT transition (%executable.content;)*>
<!ATTLIST transition  
	state %string;       #IMPLIED
	event %expression;       #REQUIRED
	cond  %expression;  #IMPLIED
	name  %esvar;       #IMPLIED
>


<!ELEMENT unjoin EMPTY>
<!ATTLIST unjoin  
	id1 %expression;  #REQUIRED
	id2 %expression;  #REQUIRED 
>

<!ELEMENT var EMPTY>
<!ATTLIST var  
	name %esvar;  #REQUIRED
	expr %expression;  #IMPLIED 
>

