VoiceXML 2.1 DTD
VoiceXML 2.0 DTD

VoiceXML 2.1 DTD (20021115)

Copyright 1998-2002 W3C (MIT, INRIA, Keio), All Rights Reserved. 

Permission to use, copy, modify and distribute the VoiceXML DTD and 
its accompanying documentation for any purpose and without fee is 
hereby granted in perpetuity, provided that the above copyright 
notice and this paragraph appear in all copies.  

The copyright holders make no representation about the suitability 
of the DTD for any purpose. It is provided "as is" without expressed 
or implied warranty.
-->
<!--==== VoiceGenie DTD 7.0 (Version 20050301) Description ====-->
<!--
This DTD is the merger of:
  VoiceXML 2.1 (20041117)
  VoiceXML 2.0 (20040316)
  VoiceXML 2.0 (20030220)
  VoiceXML 2.0 (20020424)
  Speech Synthesis Markup Language 1.0
  Speech Recognition Grammar Specification 1.0
with changes, additions, deletions noted.
This DTD should reflect the VoiceGenie implementation, v7.0
Copyright (c) 2005 VoiceGenie Technologies, Inc.
-->
<!ENTITY % audio "#PCDATA | audio | enumerate | value">
<!--VG Extension: removed hotword value-->
<!--VG Extension: added energy, recognition values-->
<!ENTITY % bargeintype "(energy|recognition|speech)">
<!ENTITY % boolean "(true|false)">
<!--VG Extension: added the connect.when entity-->
<!ENTITY % connect.when "(analysis|answered|immediate)">
<!ENTITY % content.type "CDATA">
<!ENTITY % duration "CDATA">
<!ENTITY % event.handler "catch | error | help | noinput | nomatch">
<!ENTITY % event.name "NMTOKEN">
<!ENTITY % event.names "NMTOKENS">
<!--VG Extension: added call, foreach, fork, join-->
<!--VG Extension: added receive, release, send-->
<!--VoiceXML 2.1: (New in 7.0) added data-->
<!ENTITY % executable.content "%audio; | assign | call | clear | data | disconnect | 
                               exit | foreach | fork | goto | if | join | log |
                               prompt | receive | release | reprompt | return |
                               script | send | submit | throw | var">
<!ENTITY % expression "CDATA">
<!--VG Extension: added expression.array entity for foreach tag-->
<!ENTITY % expression.array "CDATA">
<!--VG Extension: added expression.object entity for signalvar attribute-->
<!ENTITY % expression.object "CDATA">
<!ENTITY % restrictedvariable.name "NMTOKEN">
<!ENTITY % variable.name "CDATA">
<!ENTITY % restrictedvariable.names "NMTOKENS">
<!ENTITY % variable.names "CDATA">
<!ENTITY % integer "CDATA">
<!--VG Extension: cond default is true-->
<!ENTITY % item.attrs "name	%restrictedvariable.name; 	#IMPLIED 
                       cond	%expression;			'true'
                       expr	%expression;			#IMPLIED">
<!ENTITY % uri "CDATA">
<!ENTITY % cache.attrs "fetchhint	(prefetch|safe)	#IMPLIED
                        fetchtimeout	%duration;	#IMPLIED
                        maxage		%integer;	#IMPLIED
                        maxstale	%integer;	#IMPLIED">
<!ENTITY % next.attrs "next	%uri;		#IMPLIED
                       expr	%expression;	#IMPLIED">
<!ENTITY % submit.attrs "method		(get|post)		'get'
                         enctype	%content.type;		'application/x-www-form-urlencoded'
                         namelist	%variable.names;	#IMPLIED">
<!--VG Extension: added the fetch.attrs entity-->
<!ENTITY % fetch.attrs "fetchaudio		%uri;		#IMPLIED
                        fetchaudiodelay		%duration;	#IMPLIED
                        fetchaudiominimum	%duration;	#IMPLIED">
<!ENTITY % throw.attrs "event		%event.name;	#IMPLIED
                        eventexpr	%expression;	#IMPLIED
                        message		CDATA		#IMPLIED
                        messageexpr	%expression;	#IMPLIED">
<!--VoiceXML 2.1: (New in 7.0) added data-->
<!ENTITY % variable "block | data | field | var">
<!--================================= Root ================================-->
<!--VG Extension: removed metadata-->
<!--VG Extension: added logpage attribute-->
<!--VG Extension: changed xmlns attribute to #IMPLIED-->
<!--VoiceXML 2.1: (New in 7.0) added data-->
<!ELEMENT vxml (%event.handler; | data | form | link | menu | meta | property | script | var)+>
<!ATTLIST vxml
	application %uri; #IMPLIED
	logpage (0 | 1) "0"
	version CDATA #REQUIRED
	xml:base %uri; #IMPLIED
	xml:lang NMTOKEN #IMPLIED
	xmlns CDATA #IMPLIED
	xmlns:xsi CDATA #IMPLIED
	xsi:schemaLocation CDATA #IMPLIED
>
<!ELEMENT meta EMPTY>
<!ATTLIST meta
	name NMTOKEN #IMPLIED
	content CDATA #REQUIRED
	http-equiv NMTOKEN #IMPLIED
>
<!--VG Extension: removed metadata element-->
<!--================================ Prompts ==============================-->
<!-- definitions adapted from SSML 1.0 DTD -->
<!ENTITY % structure "paragraph | p | sentence | s">
<!--VG Extension: removed mark and sub-->
<!--SSML 1.0: (New in 6.3) added back sub-->
<!--VoiceXML 2.1: (New in 7.0) added mark-->
<!ENTITY % sentence-elements "break | emphasis | mark | phoneme | prosody | 
                              say-as | voice | sub">
<!-- addition of enumerate and value elements as 'allowed-within-sentence' 
     audio elements -->
<!ENTITY % allowed-within-sentence "%audio; | %sentence-elements;">
<!-- Prompt is modelled on SSML 1.0 DTD speak element:
- addition of 'bargein', 'bargeintype', 'cond', 'count' and 'timeout' attributes
- removal of xmlns, xmlns:xsi, and xsi:schemaLocation attributes
-->
<!--VG Extension: removed lexicon and metadata-->
<!--VG Extension: removed version attribute-->
<!--VG Extension: added dtmf value for bargein attribute and default is true-->
<!--VG Extension: added broadcast, ttsengine attributes-->
<!--VG Extension: cond default is true, count default is 1-->
<!--SSML 1.0: (New in 7.0) added back lexicon, metadata-->
<!--VoiceXML 2.1: (New in 7.0) added foreach-->
<!--VoiceXML 2.1: added version-->
<!ELEMENT prompt (%allowed-within-sentence; | foreach | %structure; | lexicon | metadata)*>
<!ATTLIST prompt
	bargein (dtmf | false | true) "true"
	bargeintype %bargeintype; #IMPLIED
	broadcast %boolean; "false"
	cond %expression; "true"
	count %integer; "1"
	timeout %duration; #IMPLIED
	ttsengine CDATA #IMPLIED
	xml:base %uri; #IMPLIED
	xml:lang NMTOKEN #IMPLIED
	version CDATA #FIXED "1.0"
>
<!ELEMENT enumerate (%allowed-within-sentence; | %structure;)*>
<!ELEMENT reprompt EMPTY>
<!--================================= Dialogs =============================-->
<!--VG Extension: added dtmf-->
<!ENTITY % input "grammar | dtmf">
<!ENTITY % scope "(document|dialog)">
<!--VG Extension: added cleardtmf attribute-->
<!ELEMENT form (%input; | %event.handler; | filled | initial | object | link | property | record | script | subdialog | transfer | %variable;)*>
<!ATTLIST form
	id ID #IMPLIED
	cleardtmf %boolean; "false"
	scope %scope; "dialog"
>
<!ENTITY % accept.attrs "accept (exact|approximate)	'exact'">
<!--VG Extension: added wakeupword attribute-->
<!--VoiceXML 2.1: (New in 7.0) added data-->
<!ELEMENT menu (%audio; | choice | data | %event.handler; | prompt | property)*>
<!ATTLIST menu
	%accept.attrs; 
	dtmf %boolean; "false"
	id ID #IMPLIED
	scope %scope; "dialog"
	wakeupword %boolean; "false"
>
<!--VG Extension: removed #PCDATA-->
<!--VG Extension: added %allowed-within-sentence, %structure-->
<!--VG Extension: removed fetchaudio attribute-->
<!--VG Extension: added fetch.attrs attributes-->
<!ELEMENT choice (%allowed-within-sentence; | %input; | %structure;)*>
<!ATTLIST choice
	%accept.attrs; 
	%cache.attrs; 
	%fetch.attrs; 
	%next.attrs; 
	%throw.attrs; 
	dtmf CDATA #IMPLIED
>
<!--================================ Audio Output ==============================-->
<!-- definitions adapted from SSML 1.0 DTD -->
<!ELEMENT paragraph (%allowed-within-sentence; | sentence | s)*>
<!ATTLIST paragraph
	xml:lang NMTOKEN #IMPLIED
>
<!ELEMENT sentence (%allowed-within-sentence;)*>
<!ATTLIST sentence
	xml:lang NMTOKEN #IMPLIED
>
<!ELEMENT p (%allowed-within-sentence; | sentence | s)*>
<!ATTLIST p
	xml:lang NMTOKEN #IMPLIED
>
<!ELEMENT s (%allowed-within-sentence;)*>
<!ATTLIST s
	xml:lang NMTOKEN #IMPLIED
>
<!--VG Extension: removed xml:lang attribute-->
<!--VG Extension: added category attribute-->
<!ELEMENT voice (%allowed-within-sentence; | %structure;)*>
<!ATTLIST voice
	age %integer; #IMPLIED
	category (child | teenager | adult | elder) #IMPLIED
	gender (male | female | neutral) #IMPLIED
	name CDATA #IMPLIED
	variant %integer; #IMPLIED
>
<!ELEMENT prosody (%allowed-within-sentence; | %structure;)*>
<!ATTLIST prosody
	contour CDATA #IMPLIED
	duration %duration; #IMPLIED
	pitch CDATA #IMPLIED
	range CDATA #IMPLIED
	rate CDATA #IMPLIED
	volume CDATA #IMPLIED
>
<!-- Changes to SSML 1.0 DTD audio element:
- src not obligatory, addition of 'expr' and caching attributes
-->
<!--VG Extension: removed desc-->
<!--VG Extension: added volume, offsetexpr, lengthexpr attributes-->
<!ELEMENT audio (%allowed-within-sentence; | %structure;)*>
<!ATTLIST audio
	%cache.attrs; 
	expr %expression; #IMPLIED
	lengthexpr %expression; #IMPLIED
	offsetexpr %expression; #IMPLIED
	src %uri; #IMPLIED
	volume %integer; #IMPLIED
>
<!--VG Extension: removed desc element-->
<!ELEMENT emphasis (%allowed-within-sentence;)*>
<!ATTLIST emphasis
	level (strong | moderate | none | reduced) "moderate"
>
<!-- Changes to SSML 1.0 DTD say-as element:
- allows value element as child
-->
<!--VG Extension: removed interpret-as, format, detail attributes-->
<!--VG Extension: added sub, type attributes-->
<!ELEMENT say-as (#PCDATA | value)*>
<!ATTLIST say-as
	sub CDATA #IMPLIED
	type CDATA #REQUIRED
>
<!--VG Extension: removed sub element-->
<!ELEMENT phoneme (#PCDATA)>
<!ATTLIST phoneme
	alphabet CDATA #IMPLIED
	ph CDATA #REQUIRED
>
<!--VG Extension: renamed time attribute size-->
<!--VG Extension: added time attribute to specify actual duration-->
<!ELEMENT break EMPTY>
<!ATTLIST break
	size (large | medium | small | none) "medium"
	time %duration; #IMPLIED
>
<!--VG Extension: removed mark element-->
<!--VoiceXML 2.1: (New in 7.0) added back mark-->
<!ELEMENT mark EMPTY>
<!ATTLIST mark
    name ID #IMPLIED
    nameexpr %expression; #IMPLIED
>
<!--================================ Fields ===============================-->
<!--VG Extension: added audioinexpr, endbeep, saveutterance attributes-->
<!--VG Extension: added utterancedest, wakeupword attributes-->
<!ELEMENT field (%audio; | %event.handler; | filled | %input; | link | option | prompt | property)*>
<!ATTLIST field
	%item.attrs; 
	audioinexpr %expression; #IMPLIED
	endbeep %boolean; "false"
	modal %boolean; "false"
	saveutterance %boolean; "false"
	slot NMTOKEN #IMPLIED
	type CDATA #IMPLIED
	utterancedest CDATA #IMPLIED
	wakeupword %boolean; "false"
>
<!ELEMENT option (#PCDATA)>
<!ATTLIST option
	%accept.attrs; 
	dtmf CDATA #IMPLIED
	value CDATA #IMPLIED
>
<!ELEMENT var EMPTY>
<!ATTLIST var
	name %variable.name; #REQUIRED
	expr %expression; #IMPLIED
>
<!--VG Extension: added endbeep, wakeupword attributes-->
<!ELEMENT initial (%audio; | %event.handler; | link | prompt | property)*>
<!ATTLIST initial
	%item.attrs; 
	endbeep %boolean; "false"
	wakeupword %boolean; "false"
>
<!ELEMENT block (%executable.content;)*>
<!ATTLIST block
	%item.attrs; 
>
<!ELEMENT assign EMPTY>
<!ATTLIST assign
	expr %expression; #REQUIRED
	name %variable.name; #REQUIRED
>
<!ELEMENT clear EMPTY>
<!ATTLIST clear
	namelist %variable.names; #IMPLIED
>
<!ELEMENT value EMPTY>
<!ATTLIST value
	expr %expression; #REQUIRED
>
<!--================================== Events =============================-->
<!--VG Extension: cond default is true, count default is 1-->
<!ENTITY % event.handler.attrs "cond	%expression;	'true'
                                count	%integer;	'1'">
<!ELEMENT catch (%executable.content;)*>
<!ATTLIST catch
	%event.handler.attrs; 
	event %event.names; #IMPLIED
>
<!ELEMENT error (%executable.content;)*>
<!ATTLIST error
	%event.handler.attrs; 
>
<!ELEMENT help (%executable.content;)*>
<!ATTLIST help
	%event.handler.attrs; 
>
<!--VG Extension: removed fetchaudio attribute-->
<!--VG Extension: added fetch.attrs attributes-->
<!ELEMENT link (%input;)*>
<!ATTLIST link
	%cache.attrs; 
	%fetch.attrs; 
	%next.attrs; 
	%throw.attrs; 
	dtmf CDATA #IMPLIED
>
<!ELEMENT noinput (%executable.content;)*>
<!ATTLIST noinput
	%event.handler.attrs; 
>
<!ELEMENT nomatch (%executable.content;)*>
<!ATTLIST nomatch
	%event.handler.attrs; 
>
<!ELEMENT throw EMPTY>
<!ATTLIST throw
	%throw.attrs; 
>
<!--============================= Grammar Input =============================-->
<!-- definitions adapted from SRGS 1.0 DTD -->
<!--VG Extension: added count for OSR 1.x-->
<!ENTITY % rule-expansion "#PCDATA | count | item | one-of | ruleref | tag | token">
<!--VG Extension: added alias element for Nuance 8.0-->
<!ELEMENT alias EMPTY>
<!ATTLIST alias
	name NMTOKEN #REQUIRED
	uri %uri; #REQUIRED
>
<!--VG Extension: added alias attribute for Nuance 8.0-->
<!--VG Extension: added lang-list attribute for Nuance 8.0/BBN-->
<!--VG Extension: added import, tag attributes for OSR 1.x-->
<!--VG Extension: added type attribute for BBN-->
<!ELEMENT ruleref EMPTY>
<!ATTLIST ruleref
	alias CDATA #IMPLIED
	import CDATA #IMPLIED
	lang-list NMTOKENS #IMPLIED
	special (NULL | VOID | GARBAGE) #IMPLIED
	tag CDATA #IMPLIED
	type CDATA #IMPLIED
	uri %uri; #IMPLIED
	xml:lang NMTOKEN #IMPLIED
>
<!ELEMENT token (#PCDATA)>
<!--VG Extension: added lang-list attribute for Nuance 8.0/BBN-->
<!ATTLIST token
	lang-list NMTOKENS #IMPLIED
	xml:lang NMTOKEN #IMPLIED
>
<!ELEMENT tag (#PCDATA)>
<!--VG Extension: added lang-list attribute for Nuance 8.0/BBN-->
<!--VG Extension: added tag attribute for OSR 1.x-->
<!ELEMENT one-of (item)+>
<!ATTLIST one-of
	lang-list NMTOKENS #IMPLIED
	tag CDATA #IMPLIED
	xml:lang NMTOKEN #IMPLIED
>
<!--VG Extension: added tag attribute for OSR 1.x-->
<!ELEMENT item (%rule-expansion;)*>
<!ATTLIST item
	repeat NMTOKEN #IMPLIED
	repeat-prob NMTOKEN #IMPLIED
	tag CDATA #IMPLIED
	weight NMTOKEN #IMPLIED
	xml:lang NMTOKEN #IMPLIED
>
<!--VG Extension: added count element for OSR 1.x-->
<!ELEMENT count (%rule-expansion;)*>
<!ATTLIST count
	number CDATA #IMPLIED
	xml:lang NMTOKEN #IMPLIED
>
<!ELEMENT rule (%rule-expansion; | example)*>
<!ATTLIST rule
	id ID #REQUIRED
	scope (private | public) "private"
>
<!ELEMENT example (#PCDATA)>
<!--VG Extension: removed lexicon element-->
<!--SSML 1.0: (New in 7.0) added back lexicon-->
<!ELEMENT lexicon EMPTY>
<!ATTLIST lexicon
    uri %uri; #REQUIRED
    type CDATA #IMPLIED
>
<!--VG Extension: added import element for OSR 1.x-->
<!ELEMENT import EMPTY>
<!ATTLIST import
	name CDATA #REQUIRED
	uri %uri; #REQUIRED
>
<!-- Changes to SRGS 1.0 DTD grammar element:
- mixed, unordered content model 
- addition of 'scope', 'src', 'type', 'weight' and caching attributes
- 'version' attribute is optional
- removal of xmlns, xmlns:xsi, and xsi:schemaLocation attributes
-->
<!--VG Extension: removed lexicon, metadata-->
<!--VG Extension: added import for OSR 1.x and alias for Nuance 8.0-->
<!--VG Extension: added expr attribute-->
<!--VG Extension: added speech value to mode attribute for OSR 1.x-->
<!--VG Extension: scope default is dialog-->
<!--VG Extension: tag-format is CDATA, rather than uri-->
<!--VG Extension: version default is 1.0-->
<!--VoiceXML 2.1: (New in 7.0) added srcexpr attribute-->
<!ELEMENT grammar (#PCDATA | alias | import | meta | rule)*>
<!ATTLIST grammar
	%cache.attrs; 
	expr %expression; #IMPLIED
	mode (speech | voice | dtmf) #IMPLIED
	root IDREF #IMPLIED
	scope %scope; "dialog"
	src %uri; #IMPLIED
	tag-format CDATA #IMPLIED
	type CDATA #IMPLIED
	weight CDATA #IMPLIED
	xml:base %uri; #IMPLIED
	xml:lang NMTOKEN #IMPLIED
	xmlns CDATA #IMPLIED
	version CDATA "1.0"
	srcexpr %expression; #IMPLIED
>
<!--VG Extension: added dtmf element-->
<!ELEMENT dtmf (#PCDATA | rule)*>
<!ATTLIST dtmf
	%cache.attrs;
	expr %expression; #IMPLIED
	root IDREF #IMPLIED
	scope %scope; "dialog"
	src %uri; #IMPLIED
	type CDATA #IMPLIED
	xmlns CDATA #IMPLIED
	version CDATA "1.0"
>
<!--============================= Audio Input =============================-->
<!--VG Extension: removed %input-->
<!--VG Extension: added agc, beginsilence, dest attributes-->
<!--VG Extension: added destexpr, mintime attributes-->
<!ELEMENT record (%audio; | %event.handler; | filled | prompt | property)*>
<!ATTLIST record
	%item.attrs; 
	agc (off | on) #IMPLIED
	beep %boolean; "false"
	beginsilence %duration; #IMPLIED
	dest CDATA #IMPLIED
	destexpr %expression; #IMPLIED
	dtmfterm %boolean; "true"
	finalsilence %duration; #IMPLIED
	maxtime %duration; #IMPLIED
	mintime %duration; #IMPLIED
	modal %boolean; "true"
	type CDATA #IMPLIED
>
<!--============================ Call Control ============================-->
<!--VG Extension: added the call element-->
<!ELEMENT call EMPTY>
<!ATTLIST call
	aai CDATA #IMPLIED
	aaiexpr %expression; #IMPLIED
	analysis %boolean; "false"
	connecttimeout %duration; #IMPLIED
	dest %uri; #IMPLIED
	destexpr %expression; #IMPLIED
	maxtime %duration; #IMPLIED
	name %variable.name; #REQUIRED
	returnwhen (answered | immediate) "answered"
	signalvar %expression.object; #IMPLIED
>
<!--VG Extension: added name, chan attributes-->
<!--VG Extension: (New in 6.3) namelist, expr attributes-->
<!ELEMENT disconnect EMPTY>
<!ATTLIST disconnect
	name %variable.name; #IMPLIED
	chan %variable.name; #IMPLIED
	namelist %variable.names; #IMPLIED
	expr %expression; #IMPLIED
>
<!--VG Extension: added the fork element-->
<!ELEMENT fork EMPTY>
<!ATTLIST fork
	name %variable.name; #REQUIRED
	uri %uri; #IMPLIED
	uriexpr %expression; #IMPLIED
>
<!--VG Extension: added the join element-->
<!--VG Extension (NEW in 6.4.2): added mediaredirect type-->
<!ELEMENT join EMPTY>
<!ATTLIST join
	from %variable.name; #IMPLIED
	listen %variable.name; #IMPLIED
	name %variable.name; #REQUIRED
	signalvar %expression.object; #IMPLIED
	talk %variable.name; #IMPLIED
	timeout %duration; #IMPLIED
	tlt %boolean; "false"
	to %variable.name; #IMPLIED
	type (local | network | mediaredirect) "local"
>
<!--VG Extension: added the receive element-->
<!ELEMENT receive EMPTY>
<!ATTLIST receive
	maxtime %duration; #IMPLIED
	mode (first | last | peekfirst | peeklast) #IMPLIED
	name %variable.name; #REQUIRED
>
<!--VG Extension: added the release element-->
<!ELEMENT release EMPTY>
<!ATTLIST release
	chan %variable.name; #IMPLIED
	listen %variable.name; #IMPLIED
	name %variable.name; #REQUIRED
	talk %variable.name; #IMPLIED
>
<!--VG Extension: added the send element-->
<!ELEMENT send EMPTY>
<!ATTLIST send
	destexpr %expression; #REQUIRED
	expr %expression; #REQUIRED
	name %variable.name; #REQUIRED
>
<!--VG Extension: removed %input-->
<!--VG Extension: added dtmf-->
<!--VG Extension: added analysis, connectwhen, detectansweringmachine attributes-->
<!--VG Extension: added signalvar, type attributes-->
<!--VG Extension: bridge default is true-->
<!--VG Extension (NEW in 6.1): added consultexpr attribute-->
<!--VoiceXML 2.1: (NEW in 6.3): extended type attribute values-->
<!--VG Extension (NEW in 6.4): added method attribute-->
<!ELEMENT transfer (%audio; | %event.handler; | dtmf | filled | prompt | property)*>
<!ATTLIST transfer
	%item.attrs; 
	aai CDATA #IMPLIED
	aaiexpr %expression; #IMPLIED
	analysis %boolean; "false"
	bridge %boolean; "true"
	connecttimeout %duration; #IMPLIED
	connectwhen %connect.when; "immediate"
	consultexpr %expression; #IMPLIED
	dest %uri; #IMPLIED
	destexpr %expression; #IMPLIED
	detectansweringmachine %boolean; "false"
	maxtime %duration; #IMPLIED
	signalvar %expression.object; #IMPLIED
	transferaudio %uri; #IMPLIED
	type (local | network | supervised | unsupervised | bridge | blind | consultation) #IMPLIED
	method CDATA #IMPLIED
>
<!--============================ Control Flow ============================-->
<!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 exit EMPTY>
<!ATTLIST exit
	expr %expression; #IMPLIED
	namelist %variable.names; #IMPLIED
>
<!--VG Extension: mode default is all-->
<!ELEMENT filled (%executable.content;)*>
<!ATTLIST filled
	mode (any | all) "all"
	namelist %restrictedvariable.names; #IMPLIED
>
<!--VG Extension: removed fetchaudio attribute-->
<!--VG Extension: added fetch.attrs attributes-->
<!ELEMENT goto EMPTY>
<!ATTLIST goto
	%cache.attrs; 
	%fetch.attrs; 
	%next.attrs; 
	expritem %expression; #IMPLIED
	nextitem %restrictedvariable.name; #IMPLIED
>
<!ELEMENT param EMPTY>
<!ATTLIST param
	expr %expression; #IMPLIED
	name NMTOKEN #REQUIRED
	type CDATA #IMPLIED
	value CDATA #IMPLIED
	valuetype (data | ref) "data"
>
<!ELEMENT return EMPTY>
<!ATTLIST return
	%throw.attrs; 
	namelist %variable.names; #IMPLIED
>
<!--VG Extension: removed fetchaudio attribute-->
<!--VG Extension: added fetch.attrs attributes-->
<!ELEMENT subdialog (%audio; | %event.handler; | filled | param | prompt | property)*>
<!ATTLIST subdialog
	%cache.attrs; 
	%fetch.attrs; 
	%item.attrs; 
	%submit.attrs; 
	src %uri; #IMPLIED
	srcexpr %expression; #IMPLIED
>
<!--VG Extension: removed fetchaudio attribute-->
<!--VG Extension: added fetch.attrs attributes-->
<!ELEMENT submit EMPTY>
<!ATTLIST submit
	%cache.attrs; 
	%fetch.attrs; 
	%next.attrs; 
	%submit.attrs; 
>
<!--========================== Miscellaneous ==============================-->
<!--VoiceXML 2.1: (New in 7.0) added data-->
<!ELEMENT data EMPTY >
<!ATTLIST data
    name %restrictedvariable.name; #REQUIRED
    src %uri; #IMPLIED
    srcexpr %expression; #IMPLIED 
    fetchaudio  %uri;       #IMPLIED
    %submit.attrs;
    %cache.attrs;
>

<!--VG Extension: added cond, dest, level attributes-->
<!ELEMENT log (#PCDATA | value)*>
<!ATTLIST log
	cond %expression; "true"
	dest CDATA "metrics"
	expr %expression; #IMPLIED
	label CDATA #IMPLIED
	level %integer; "1"
>
<!ELEMENT object (%audio; | %event.handler; | filled | param | prompt | property)*>
<!ATTLIST object
	%cache.attrs; 
	%item.attrs; 
	archive %uri; #IMPLIED
	classid %uri; #IMPLIED
	codebase %uri; #IMPLIED
	codetype CDATA #IMPLIED
	data %uri; #IMPLIED
	type CDATA #IMPLIED
>
<!--VG Extension: (New in 6.3) added expr attribute (but only for TIMEOUT, com.voicegenie.SAVEUTTERANCE and FETCHAUDIO)-->
<!ELEMENT property EMPTY>
<!ATTLIST property
	name NMTOKEN #REQUIRED
	value CDATA #REQUIRED
	expr %expression; #IMPLIED
>
<!--VG Extension: (New in 6.3) added expr attribute-->
<!--VoiceXML 2.1: (New in 7.0) added srcexpr attribute-->
<!ELEMENT script (#PCDATA)>
<!ATTLIST script
	%cache.attrs; 
	src %uri; #IMPLIED
	charset CDATA #IMPLIED
	expr %expression; #IMPLIED
	srcexpr %expression; #IMPLIED
>
<!--VG Extension: added foreach element-->
<!ELEMENT foreach (%executable.content;)*>
<!ATTLIST foreach
	array %expression.array; #REQUIRED
	item %variable.name; #REQUIRED
	
VoiceXML 2.0 DTD (20031213)

Copyright 1998-2004 W3C (MIT, ERCIM, Keio), All Rights Reserved. 

Permission to use, copy, modify and distribute the VoiceXML DTD and 
its accompanying documentation for any purpose and without fee is 
hereby granted in perpetuity, provided that the above copyright 
notice and this paragraph appear in all copies.  

The copyright holders make no representation about the suitability 
of the DTD for any purpose. It is provided "as is" without expressed 
or implied warranty.
-->

<!ENTITY % audio "#PCDATA | audio | enumerate | value">
<!ENTITY % bargeintype "( speech | hotword )">
<!ENTITY % boolean "(true|false)">
<!ENTITY % content.type "CDATA">
<!ENTITY % duration "CDATA">
<!ENTITY % event.handler "catch | help | noinput | nomatch | error">
<!ENTITY % event.name "NMTOKEN">
<!ENTITY % event.names "NMTOKENS">
<!ENTITY % executable.content "%audio; | assign | clear | disconnect | 
                               exit | goto | if | log | prompt | 
	reprompt | return | script | submit | throw | var ">
<!ENTITY % expression "CDATA">
<!ENTITY % restrictedvariable.name "NMTOKEN">
<!ENTITY % variable.name "CDATA">
<!ENTITY % restrictedvariable.names "NMTOKENS">
<!ENTITY % variable.names "CDATA">
<!ENTITY % integer "CDATA">
<!ENTITY % item.attrs "name		%restrictedvariable.name; #IMPLIED 
	cond		%expression;	#IMPLIED
	expr		%expression;	#IMPLIED ">
<!ENTITY % uri "CDATA">
<!ENTITY % cache.attrs "fetchhint	(prefetch|safe)	#IMPLIED
	fetchtimeout	%duration;	#IMPLIED
	maxage		%integer;	#IMPLIED
	maxstale	%integer;	#IMPLIED">
<!ENTITY % next.attrs "next		%uri;		#IMPLIED
	expr		%expression;	#IMPLIED ">
<!ENTITY % submit.attrs "method		(get|post)	'get'
	enctype		%content.type;	'application/x-www-form-urlencoded'
	namelist	%variable.names;	#IMPLIED">
<!ENTITY % throw.attrs "event		%event.name;	#IMPLIED
	eventexpr	%expression;	#IMPLIED
	message		CDATA		#IMPLIED
	messageexpr	%expression;	#IMPLIED">
<!ENTITY % variable "block | field | var">
<!--================================= Root ================================-->
<!ELEMENT vxml (%event.handler; | form | link | menu | meta | metadata | 
                property | script | var)+>
<!ATTLIST vxml
	application %uri; #IMPLIED
	xml:base %uri; #IMPLIED
	xml:lang NMTOKEN #IMPLIED
	xmlns CDATA #FIXED 'http://www.w3.org/2001/vxml' 
	xmlns:xsi CDATA #IMPLIED
	xsi:schemaLocation CDATA #IMPLIED
	version CDATA #REQUIRED
>
<!ELEMENT meta EMPTY>
<!ATTLIST meta
	name NMTOKEN #IMPLIED
	content CDATA #REQUIRED
	http-equiv NMTOKEN #IMPLIED
>

<!ELEMENT metadata ANY>

<!--================================ Prompts ==============================-->
<!-- definitions adapted from SSML 1.0 DTD -->
<!ENTITY % structure "p | s">
<!ENTITY % sentence-elements "break | emphasis | mark | phoneme | prosody | 
                              say-as | voice | sub">
<!-- addition of enumerate and value elements as 'allowed-within-sentence' 
     audio elements -->
<!ENTITY % allowed-within-sentence " %audio; | %sentence-elements; ">

<!-- Prompt is modelled on SSML 1.0 DTD speak element:
- addition of 'bargein', 'bargeintype', 'cond', 'count' and 'timeout' attributes
- removal of xmlns, xmlns:xsi, and xsi:schemaLocation attributes
- version attribute fixed as "1.0"
-->
<!ELEMENT prompt (%allowed-within-sentence; | %structure; | lexicon 
                  | metadata | meta )*>
<!ATTLIST prompt
	bargein %boolean; #IMPLIED
	bargeintype %bargeintype; #IMPLIED
	cond %expression; #IMPLIED
	count %integer; #IMPLIED
	xml:lang NMTOKEN #IMPLIED
	timeout %duration; #IMPLIED
	xml:base %uri; #IMPLIED
	version CDATA #FIXED "1.0"
>
<!ELEMENT enumerate (%allowed-within-sentence; | %structure;)*>
<!ELEMENT reprompt EMPTY>

<!--================================= Dialogs =============================-->
<!ENTITY % input "grammar">
<!ENTITY % scope "(document | dialog)">
<!ELEMENT form (%input; | %event.handler; | filled | initial | object | link |
              property | record | script | subdialog | transfer | %variable;)*>
<!ATTLIST form
	id ID #IMPLIED
	scope %scope; "dialog"
>
<!ENTITY % accept.attrs "accept		(exact | approximate)	'exact'">
<!ELEMENT menu (%audio; | choice | %event.handler; | prompt | property)*>
<!ATTLIST menu
	id ID #IMPLIED
	scope %scope; "dialog"
	%accept.attrs; 
	dtmf %boolean; "false"
>
<!ELEMENT choice ( #PCDATA | %input; )*>
<!ATTLIST choice
	%cache.attrs; 
	accept	(exact | approximate) #IMPLIED
	dtmf CDATA #IMPLIED
	%throw.attrs; 
	fetchaudio %uri; #IMPLIED
	%next.attrs; 
>
<!--================================ Audio Output ==============================-->
<!-- definitions adapted from SSML 1.0 DTD -->
<!ELEMENT p (%allowed-within-sentence; | s)*>
<!ATTLIST p
	xml:lang NMTOKEN #IMPLIED
>
<!ELEMENT s (%allowed-within-sentence;)*>
<!ATTLIST s
	xml:lang NMTOKEN #IMPLIED
>
<!ELEMENT voice (%allowed-within-sentence; | %structure;)*>
<!ATTLIST voice
	xml:lang NMTOKEN #IMPLIED
	gender (male | female | neutral) #IMPLIED
	age %integer; #IMPLIED
	variant %integer; #IMPLIED
	name CDATA #IMPLIED
>
<!ELEMENT prosody (%allowed-within-sentence; | %structure;)*>
<!ATTLIST prosody
	pitch CDATA #IMPLIED
	contour CDATA #IMPLIED
	range CDATA #IMPLIED
	rate CDATA #IMPLIED
	duration %duration; #IMPLIED
	volume CDATA #IMPLIED
>
<!-- Changes to SSML 1.0 DTD audio element:
- src not obligatory, addition of 'expr' and caching attributes
-->
<!ELEMENT audio (%allowed-within-sentence; | %structure; | desc)*>
<!ATTLIST audio
	src %uri; #IMPLIED
	expr %expression; #IMPLIED
	%cache.attrs; 
>
<!ELEMENT desc (#PCDATA)>
<!ATTLIST desc
	xml:lang NMTOKEN #IMPLIED
>
<!ELEMENT emphasis (%allowed-within-sentence;)*>
<!ATTLIST emphasis
	level (strong | moderate | none | reduced) "moderate"
>
<!-- Changes to SSML 1.0 DTD say-as element:
- allows value element as child
-->
<!ELEMENT say-as (#PCDATA | value )*>
<!ATTLIST say-as
	interpret-as NMTOKEN #REQUIRED
	format NMTOKEN #IMPLIED
	detail NMTOKEN #IMPLIED
>
<!ELEMENT sub (#PCDATA)>
<!ATTLIST sub
	alias CDATA #REQUIRED
>
<!ELEMENT phoneme (#PCDATA)>
<!ATTLIST phoneme
	ph CDATA #REQUIRED
	alphabet CDATA #IMPLIED
>
<!ELEMENT break EMPTY>
<!ATTLIST break
	time CDATA #IMPLIED
	strength  (none | x-weak | weak  | medium | strong | x-strong) "medium"
>
<!ELEMENT mark EMPTY>
<!ATTLIST mark
	name CDATA #REQUIRED
>
<!--================================ Fields ===============================-->
<!ELEMENT field (%audio; | %event.handler; | filled | %input; | link | option |
                 prompt | property)*>
<!ATTLIST field
	%item.attrs; 
	type CDATA #IMPLIED
	slot NMTOKEN #IMPLIED
	modal %boolean; "false"
>
<!ELEMENT option (#PCDATA)>
<!ATTLIST option
	%accept.attrs; 
	dtmf CDATA #IMPLIED
	value CDATA #IMPLIED
>
<!ELEMENT var EMPTY>
<!ATTLIST var
	name %restrictedvariable.name; #REQUIRED
	expr %expression; #IMPLIED
>
<!ELEMENT initial (%audio; | %event.handler; | link | prompt | property)*>
<!ATTLIST initial
	%item.attrs; 
>
<!ELEMENT block (%executable.content;)*>
<!ATTLIST block
	%item.attrs; 
>
<!ELEMENT assign EMPTY>
<!ATTLIST assign
	name %variable.name; #REQUIRED
	expr %expression; #REQUIRED
>
<!ELEMENT clear EMPTY>
<!ATTLIST clear
	namelist %variable.names; #IMPLIED
>
<!ELEMENT value EMPTY>
<!ATTLIST value
	expr %expression; #REQUIRED
>
<!--================================== Events =============================-->
<!ENTITY % event.handler.attrs "count		%integer;	#IMPLIED
	cond		%expression;	#IMPLIED">
<!ELEMENT catch (%executable.content;)*>
<!ATTLIST catch
	event %event.names; #IMPLIED
	%event.handler.attrs; 
>
<!ELEMENT error (%executable.content;)*>
<!ATTLIST error
	%event.handler.attrs; 
>
<!ELEMENT help (%executable.content;)*>
<!ATTLIST help
	%event.handler.attrs; 
>
<!ELEMENT link (%input;)*>
<!ATTLIST link
	%cache.attrs; 
	%next.attrs; 
	fetchaudio %uri; #IMPLIED
	dtmf CDATA #IMPLIED
	%throw.attrs; 
>
<!ELEMENT noinput (%executable.content;)*>
<!ATTLIST noinput
	%event.handler.attrs; 
>
<!ELEMENT nomatch (%executable.content;)*>
<!ATTLIST nomatch
	%event.handler.attrs; 
>
<!ELEMENT throw EMPTY>
<!ATTLIST throw
	%throw.attrs; 
>
<!--============================= Grammar Input =============================-->
<!-- definitions adapted from SRGS 1.0 DTD -->
<!ENTITY % rule-expansion "#PCDATA | token | ruleref
                              | item | one-of | tag ">
<!ELEMENT ruleref EMPTY>
<!ATTLIST ruleref
	uri %uri; #IMPLIED
	type CDATA #IMPLIED
	special (NULL | VOID | GARBAGE) #IMPLIED
>
<!ELEMENT token (#PCDATA)>
<!ATTLIST token
	xml:lang NMTOKEN #IMPLIED
>
<!ELEMENT tag (#PCDATA)>
<!ELEMENT one-of (item)+>
<!ATTLIST one-of
	xml:lang NMTOKEN #IMPLIED
>
<!ELEMENT item (%rule-expansion;)*>
<!ATTLIST item
	repeat NMTOKEN #IMPLIED
	repeat-prob NMTOKEN #IMPLIED
	weight NMTOKEN #IMPLIED
	xml:lang NMTOKEN #IMPLIED
>
<!ELEMENT rule (%rule-expansion; | example)*>
<!ATTLIST rule
	id ID #REQUIRED
	scope (private | public) "private"
>
<!ELEMENT example (#PCDATA)>
<!ELEMENT lexicon EMPTY>
<!ATTLIST lexicon
	uri %uri; #REQUIRED
	type CDATA #IMPLIED
>
<!-- Changes to SRGS 1.0 DTD grammar element:
- mixed, unordered content model 
- addition of 'scope', 'src', 'type', 'weight' and caching attributes
- 'version' attribute is optional
- removal of xmlns, xmlns:xsi, and xsi:schemaLocation attributes
-->
<!ELEMENT grammar (#PCDATA | meta | metadata | lexicon | rule | tag)*>
<!ATTLIST grammar
	scope %scope; #IMPLIED
	src %uri; #IMPLIED
	type CDATA #IMPLIED
	weight CDATA #IMPLIED
	%cache.attrs; 
	tag-format %uri; #IMPLIED
	xml:base %uri; #IMPLIED
	version NMTOKEN #IMPLIED
	xml:lang NMTOKEN #IMPLIED
	root IDREF #IMPLIED
	mode (voice | dtmf) "voice"
>
<!--============================= Audio Input =============================-->
<!ELEMENT record (%audio; | %event.handler; | filled | %input; | prompt | 
                  property)*>
<!ATTLIST record
	%item.attrs; 
	type CDATA #IMPLIED
	beep %boolean; "false"
	maxtime %duration; #IMPLIED
	modal %boolean; "true"
	finalsilence %duration; #IMPLIED
	dtmfterm %boolean; "true"
>
<!--============================ Call Control ============================-->
<!ELEMENT disconnect EMPTY>
<!ELEMENT transfer (%audio; | %event.handler; | filled | %input; | prompt | 
                    property)*>
<!ATTLIST transfer
	%item.attrs; 
	dest %uri; #IMPLIED
	destexpr %expression; #IMPLIED
	bridge %boolean; "false"
	connecttimeout %duration; #IMPLIED
	maxtime %duration; #IMPLIED
	transferaudio %uri; #IMPLIED
	aai CDATA #IMPLIED
	aaiexpr %expression; #IMPLIED
>
<!--============================ Control Flow ============================-->
<!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 exit EMPTY>
<!ATTLIST exit
	expr %expression; #IMPLIED
	namelist %variable.names; #IMPLIED
>
<!ELEMENT filled (%executable.content;)*>
<!ATTLIST filled
	mode (any | all) #IMPLIED
	namelist %restrictedvariable.names; #IMPLIED
>
<!ELEMENT goto EMPTY>
<!ATTLIST goto
	%cache.attrs; 
	%next.attrs; 
	fetchaudio %uri; #IMPLIED
	expritem %expression; #IMPLIED
	nextitem %restrictedvariable.name; #IMPLIED
>
<!ELEMENT param EMPTY>
<!ATTLIST param
	name NMTOKEN #REQUIRED
	expr %expression; #IMPLIED
	value CDATA #IMPLIED
	valuetype (data | ref) "data"
	type CDATA #IMPLIED
>
<!ELEMENT return EMPTY>
<!ATTLIST return
	namelist %variable.names; #IMPLIED
	%throw.attrs; 
>
<!ELEMENT subdialog (%audio; | %event.handler; | filled | param | prompt | 
                     property)*>
<!ATTLIST subdialog
	%item.attrs; 
	src %uri; #IMPLIED
	srcexpr %expression; #IMPLIED
	%cache.attrs; 
	fetchaudio %uri; #IMPLIED
	%submit.attrs; 
>
<!ELEMENT submit EMPTY>
<!ATTLIST submit
	%cache.attrs; 
	%next.attrs; 
	fetchaudio %uri; #IMPLIED
	%submit.attrs; 
>
<!--========================== Miscellaneous ==============================-->
<!ELEMENT log (#PCDATA | value)*>
<!ATTLIST log
	label CDATA #IMPLIED
	expr %expression; #IMPLIED
>
<!ELEMENT object (%audio; | %event.handler; | filled | param | prompt | 
                  property)*>
<!ATTLIST object
	%item.attrs; 
	%cache.attrs; 
	classid %uri; #IMPLIED
	codebase %uri; #IMPLIED
	data %uri; #IMPLIED
	type CDATA #IMPLIED
	codetype CDATA #IMPLIED
	archive %uri; #IMPLIED
>
<!ELEMENT property EMPTY>
<!ATTLIST property
	name NMTOKEN #REQUIRED
	value CDATA #REQUIRED
>
<!ELEMENT script (#PCDATA)>
<!ATTLIST script
	src %uri; #IMPLIED
	charset CDATA #IMPLIED
	%cache.attrs; 
>