<!-- 
		A DTD for Voice Extensible Markup Language
		as currently supported by the Tellme Platform
		based on the official v1.0 VXML DTD. 

		Copyright (c) 2000 VoiceXML Forum (AT&T, IBM, Lucent Technologies, Motorola)
		http://www.vxml.org 
		
		The Tellme VXML DTD is Copyright (C) 2000 Tellme Networks, Inc. All Rights Reserved.
		http://www.tellme.com
		
		The URL for this document is http://resources.tellme.com/toolbox/vxml-tellme.dtd 
-->		





<!--	*********************************************************************
	SECTION 1: Entity definitions for reuse in defining other elements
	*********************************************************************
-->

<!ENTITY % boolean "CDATA" >  <!-- because of variables and literal substitution -->
<!ENTITY % integer "CDATA" >  <!-- because of variables and literal substitution -->
<!ENTITY % float "CDATA" >   <!-- because of variables and literal substitution -->
<!ENTITY % duration "CDATA" >   <!-- because of variables and literal substitution -->


<!ENTITY % uri "CDATA" >
<!ENTITY % expression "CDATA" >


<!ENTITY % event.handler "catch | help | noinput | nomatch | default" >
<!ENTITY % event.name "NMTOKEN" >
<!ENTITY % field.name "NMTOKEN" >
<!ENTITY % field.names "NMTOKENS" >


<!ENTITY % executable.content	
	"assign | audio | clear | debug | disconnect | exit | foreach |
	goto | if | listen | pause | reprompt | return |
	script | submit | throw | var" >

								
<!ENTITY % next.attrs 
	"next %uri; #IMPLIED" >
<!ENTITY % cache.attrs  
	"caching CDATA #IMPLIED " >
 
<!ENTITY % grammar.attrs
	"name %field.name; #IMPLIED 
	 src %uri; #IMPLIED
	 type CDATA 'application/x-gsl'
	 %cache.attrs;" >

<!ENTITY % input        "dtmf | grammar" >
								

<!--	*********************************************************************
	SECTION 2: Document Elements
	*********************************************************************
-->

<!ELEMENT debug (#PCDATA) >  <!-- Tellme Extension to VXML 1.0 -->

<!ELEMENT form
	(block | %event.handler; | initial | filled | field | transfer | gosub | %input; | subdialog | record )* >  
	<!-- "gosub" is a deprecated Tellme-specific element -->

<!ATTLIST form
	id %field.name; #IMPLIED 
	anchor %boolean; 'false'>

<!ELEMENT grammar (#PCDATA) >

<!ATTLIST grammar
	%grammar.attrs; >

<!ELEMENT dtmf (#PCDATA) >

<!ATTLIST dtmf
	%grammar.attrs; >

<!ELEMENT link (%input;)* >

<!ATTLIST link 
	%cache.attrs;
	%next.attrs;
        event %event.name; #IMPLIED
        expr %expression; #IMPLIED >

<!ELEMENT menu (choice | %event.handler; | prompt)* >

<!ATTLIST menu
	id %field.name; #IMPLIED
	dtmf %boolean; 'false'>

<!ELEMENT meta EMPTY >

<!ATTLIST meta
	name NMTOKEN #IMPLIED
	content CDATA #REQUIRED >

<!ELEMENT var EMPTY >

<!ATTLIST var
	name %field.name; #REQUIRED 
	expr %expression; #IMPLIED >

<!ELEMENT vxml 
	(meta | %input; | link | var | form | menu | script)+ >

<!ATTLIST vxml 
	application %uri; #IMPLIED
	base %uri; #IMPLIED
	lang CDATA #IMPLIED
	version CDATA #IMPLIED >





<!--	*********************************************************************
	SECTION 3: Form Elements
	*********************************************************************
-->

<!ELEMENT block 
	(%executable.content;)* >

<!ATTLIST block
	name %field.name; #IMPLIED >

<!ELEMENT initial 
	(%executable.content;)* >

<!ATTLIST initial
	name %field.name; #IMPLIED >

<!ELEMENT field 
	(%input; | filled | confirm | prompt | %event.handler;)* >

<!ATTLIST field
	name %field.name; #REQUIRED 
	id %field.name; #IMPLIED
	timeout %duration; #IMPLIED
	interdigittimeout %duration; #IMPLIED
	timeoutondtmf %boolean; 'false'
	confirm (yes|no) 'no'
	acceptthresh %integer; #IMPLIED
	rejectthresh %integer; #IMPLIED
	rejectthreshold %integer; #IMPLIED
	bargein %boolean; 'true'
	bargeinlevel %integer; #IMPLIED
	endseconds %duration; #IMPLIED
	magicword %boolean; 'false'
	pruning %float; #IMPLIED 
	phoneticpruning %boolean; 'false'
	errorhandler %uri; #IMPLIED >
	
<!ELEMENT gosub
	(%event.handler;)* >    <!-- Deprecrated Extension to VXML 1.0 -->

<!ATTLIST gosub
	name %field.name; #IMPLIED
	next %expression; #REQUIRED >

<!ELEMENT record        
	(audio | %event.handler; | filled | %input; | prompt)* >

<!ATTLIST record
	name %field.name; #IMPLIED
	beep %boolean; 'false'
	maxtime %duration; #IMPLIED 
	finalsilence %duration; #IMPLIED
	dtmfterm %boolean; 'true' >

<!ELEMENT subdialog
	(%event.handler; | filled)* >

<!ATTLIST subdialog
	src %uri; #REQUIRED
	name %field.name; #IMPLIED
	namelist CDATA #IMPLIED
	method (get|post) 'get'>

<!ELEMENT transfer 
	(%input; | %event.handler;)* >

<!ATTLIST transfer
	dest %uri; #REQUIRED
	connecttimeout %duration; #IMPLIED
	maxtime %duration; #IMPLIED
	maxlength %duration; #IMPLIED
	>


<!--	*********************************************************************
	SECTION 4: Field Elements
	*********************************************************************
-->
<!ELEMENT confirm
	(%executable.content; | prompt)* > <!-- Tellme Extension to VXML 1.0 -->

<!ELEMENT filled 
	(%executable.content; | result)* >

<!ELEMENT result
	(%executable.content;)* > <!-- Tellme Extension to VXML 1.0 -->

<!ATTLIST result
	name CDATA #REQUIRED > 




<!--	*********************************************************************
	SECTION 5: Menu Elements
	*********************************************************************
-->

<!ELEMENT choice (#PCDATA) >

<!ATTLIST choice
	%cache.attrs;
	next %uri; #REQUIRED
	dtmf %boolean; #IMPLIED>
	





<!--	*********************************************************************
	SECTION 6: Event Handlers
	*********************************************************************
-->

<!ELEMENT catch 
	(%executable.content;)* >

<!ATTLIST catch
	event %event.name; #REQUIRED>

<!ELEMENT default  
	(%executable.content;)* > <!-- Tellme Extension to VXML 1.0 -->

<!ELEMENT help 
	(%executable.content;)* >

<!ELEMENT noinput
	(%executable.content;)* >

<!ELEMENT nomatch 
	(%executable.content;)* >

<!ELEMENT prompt
	(%executable.content;)* >

<!ATTLIST prompt 
	item NMTOKEN #IMPLIED
	in CDATA #IMPLIED >  





<!--	*********************************************************************
	SECTION 7: Directives
	*********************************************************************
-->

<!ELEMENT assign EMPTY >

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

<!ELEMENT audio (#PCDATA) >

<!ATTLIST audio
	src %uri; #IMPLIED
        data CDATA #IMPLIED
	%cache.attrs; >
	
<!ELEMENT clear EMPTY >

<!ATTLIST clear
	name NMTOKEN #REQUIRED >

<!ELEMENT disconnect EMPTY >

<!ELEMENT exit EMPTY >

<!ATTLIST exit
	expr %expression; #IMPLIED >

<!ELEMENT foreach 
	(%executable.content;)* > <!-- Tellme Extension to VXML 1.0 -->

<!ATTLIST foreach
	item NMTOKEN #REQUIRED
	in CDATA #REQUIRED >

<!ELEMENT goto EMPTY >

<!ATTLIST goto 
	%next.attrs;
	method (get|post) 'get'
	submit CDATA #IMPLIED
	%cache.attrs; >

<!ENTITY % if.attrs 
	"cond %expression; #REQUIRED" >

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

<!ATTLIST if
	%if.attrs; >

<!ELEMENT elseif EMPTY >

<!ATTLIST elseif
	%if.attrs; >

<!ELEMENT else EMPTY >

<!ELEMENT listen EMPTY >  <!-- Tellme Extension to VXML 1.0 -->
 
<!ELEMENT pause (#PCDATA) >  <!-- Tellme Extension to VXML 1.0 -->

<!ELEMENT reprompt EMPTY >

<!ATTLIST reprompt
	order (prev|previous|curr|current|next) 'curr'>

<!ELEMENT script (#PCDATA) >

<!ATTLIST script 
	src %uri; #IMPLIED
	type CDATA #REQUIRED
	%cache.attrs; >

<!ELEMENT submit EMPTY >

<!ATTLIST submit
	%next.attrs;
	namelist CDATA #IMPLIED
	method (get|post) 'get' >

<!ELEMENT throw EMPTY >

<!ATTLIST throw 
	event CDATA #REQUIRED >

<!ELEMENT return EMPTY >

<!ATTLIST return 
	event CDATA #IMPLIED >


