    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;
    >