1<!--
2VoiceXML 2.1 DTD (20031228)
3
4Copyright 1998-2003 W3C (MIT, ERCIM, Keio), All Rights Reserved.
5
6Permission to use, copy, modify and distribute the VoiceXML DTD and
7its accompanying documentation for any purpose and without fee is
8hereby granted in perpetuity, provided that the above copyright
9notice and this paragraph appear in all copies.
10
11The copyright holders make no representation about the suitability
12of the DTD for any purpose. It is provided "as is" without expressed
13or implied warranty.
14-->
15
16<!ENTITY % audio "#PCDATA | audio | enumerate | value">
17<!ENTITY % bargeintype "( speech | hotword )">
18<!ENTITY % boolean "(true|false)">
19<!ENTITY % content.type "CDATA">
20<!ENTITY % duration "CDATA">
21<!ENTITY % event.handler "catch | help | noinput | nomatch | error">
22<!ENTITY % event.name "NMTOKEN">
23<!ENTITY % event.names "NMTOKENS">
24<!ENTITY % executable.content "%audio; | assign | clear | data | disconnect |
25    exit | foreach |goto | if | log | prompt |
26	reprompt | return | script | submit | throw | var ">
27<!ENTITY % expression "CDATA">
28<!ENTITY % restrictedvariable.name "NMTOKEN">
29<!ENTITY % variable.name "CDATA">
30<!ENTITY % restrictedvariable.names "NMTOKENS">
31<!ENTITY % variable.names "CDATA">
32<!ENTITY % integer "CDATA">
33<!ENTITY % item.attrs "name		%restrictedvariable.name; #IMPLIED
34	cond		%expression;	#IMPLIED
35	expr		%expression;	#IMPLIED ">
36<!ENTITY % uri "CDATA">
37<!ENTITY % cache.attrs "fetchhint	(prefetch|safe)	#IMPLIED
38	fetchtimeout	%duration;	#IMPLIED
39	maxage		%integer;	#IMPLIED
40	maxstale	%integer;	#IMPLIED">
41<!ENTITY % next.attrs "next		%uri;		#IMPLIED
42	expr		%expression;	#IMPLIED ">
43<!ENTITY % submit.attrs "method		(get|post)	'get'
44	enctype		%content.type;	'application/x-www-form-urlencoded'
45	namelist	%variable.names;	#IMPLIED">
46<!ENTITY % throw.attrs "event		%event.name;	#IMPLIED
47	eventexpr	%expression;	#IMPLIED
48	message		CDATA		#IMPLIED
49	messageexpr	%expression;	#IMPLIED">
50<!ENTITY % variable "block | data | field | var">
51<!--================================= Root ================================-->
52<!ELEMENT vxml (%event.handler; | data | form | link | menu | meta | metadata |
53                property | script | var)+>
54<!ATTLIST vxml
55	application %uri; #IMPLIED
56	xml:base %uri; #IMPLIED
57	xml:lang NMTOKEN #IMPLIED
58	xmlns CDATA #REQUIRED
59	xmlns:xsi CDATA #IMPLIED
60	xsi:schemaLocation CDATA #IMPLIED
61	version CDATA #REQUIRED
62>
63<!ELEMENT meta EMPTY>
64<!ATTLIST meta
65	name NMTOKEN #IMPLIED
66	content CDATA #REQUIRED
67	http-equiv NMTOKEN #IMPLIED
68>
69
70<!ELEMENT metadata ANY>
71
72<!--================================ Prompts ==============================-->
73<!-- definitions adapted from SSML 1.0 DTD -->
74<!ENTITY % structure "p | s">
75<!ENTITY % sentence-elements "break | emphasis | mark | phoneme | prosody |
76                              say-as | voice | sub">
77<!-- addition of enumerate and value elements as 'allowed-within-sentence'
78     audio elements -->
79<!ENTITY % allowed-within-sentence " %audio; | %sentence-elements; ">
80
81<!-- Prompt is modelled on SSML 1.0 DTD speak element:
82- addition of 'bargein', 'bargeintype', 'cond', 'count' and 'timeout' attributes
83- removal of xmlns, xmlns:xsi, and xsi:schemaLocation attributes
84- version attribute fixed as "1.0"
85-->
86<!ELEMENT prompt (%allowed-within-sentence; | foreach | %structure; | lexicon
87                  | metadata )*>
88<!ATTLIST prompt
89	bargein %boolean; #IMPLIED
90	bargeintype %bargeintype; #IMPLIED
91	cond %expression; #IMPLIED
92	count %integer; #IMPLIED
93	xml:lang NMTOKEN #IMPLIED
94	timeout %duration; #IMPLIED
95	xml:base %uri; #IMPLIED
96	version CDATA #FIXED "1.0"
97>
98<!ELEMENT enumerate (%allowed-within-sentence; | %structure;)*>
99<!ELEMENT reprompt EMPTY>
100
101<!--================================= Dialogs =============================-->
102<!ENTITY % input "grammar">
103<!ENTITY % scope "(document | dialog)">
104<!ELEMENT form (%input; | %event.handler; | filled | initial | object | link |
105              property | record | script | subdialog | transfer | %variable;)*>
106<!ATTLIST form
107	id ID #IMPLIED
108	scope %scope; "dialog"
109>
110<!ENTITY % accept.attrs "accept		(exact | approximate)	'exact'">
111<!ELEMENT menu (%audio; | choice | data | %event.handler; | prompt | property)*>
112<!ATTLIST menu
113	id ID #IMPLIED
114	scope %scope; "dialog"
115	%accept.attrs;
116	dtmf %boolean; "false"
117>
118<!ELEMENT choice ( #PCDATA | %input; )*>
119<!ATTLIST choice
120	%cache.attrs;
121	%accept.attrs;
122	dtmf CDATA #IMPLIED
123	%throw.attrs;
124	fetchaudio %uri; #IMPLIED
125	%next.attrs;
126>
127<!--================================ Audio Output ==============================-->
128<!-- definitions adapted from SSML 1.0 DTD -->
129<!ELEMENT paragraph (%allowed-within-sentence; | sentence | s)*>
130<!ATTLIST paragraph
131	xml:lang NMTOKEN #IMPLIED
132>
133<!ELEMENT sentence (%allowed-within-sentence;)*>
134<!ATTLIST sentence
135	xml:lang NMTOKEN #IMPLIED
136>
137<!ELEMENT p (%allowed-within-sentence; | sentence | s)*>
138<!ATTLIST p
139	xml:lang NMTOKEN #IMPLIED
140>
141<!ELEMENT s (%allowed-within-sentence;)*>
142<!ATTLIST s
143	xml:lang NMTOKEN #IMPLIED
144>
145<!ELEMENT voice (%allowed-within-sentence; | %structure;)*>
146<!ATTLIST voice
147	xml:lang NMTOKEN #IMPLIED
148	gender (male | female | neutral) #IMPLIED
149	age %integer; #IMPLIED
150	variant %integer; #IMPLIED
151	name CDATA #IMPLIED
152>
153<!ELEMENT prosody (%allowed-within-sentence; | %structure;)*>
154<!ATTLIST prosody
155	pitch CDATA #IMPLIED
156	contour CDATA #IMPLIED
157	range CDATA #IMPLIED
158	rate CDATA #IMPLIED
159	duration %duration; #IMPLIED
160	volume CDATA #IMPLIED
161>
162<!-- Changes to SSML 1.0 DTD audio element:
163- src not obligatory, addition of 'expr' and caching attributes
164-->
165<!ELEMENT audio (%allowed-within-sentence; | %structure; | desc)*>
166<!ATTLIST audio
167	src %uri; #IMPLIED
168	expr %expression; #IMPLIED
169	%cache.attrs;
170>
171<!ELEMENT desc (#PCDATA)>
172<!ELEMENT emphasis (%allowed-within-sentence;)*>
173<!ATTLIST emphasis
174	level (strong | moderate | none | reduced) "moderate"
175>
176<!-- Changes to SSML 1.0 DTD say-as element:
177- allows value element as child
178-->
179<!ELEMENT say-as (#PCDATA | value )*>
180<!ATTLIST say-as
181	interpret-as NMTOKEN #REQUIRED
182	format NMTOKEN #IMPLIED
183	detail NMTOKEN #IMPLIED
184>
185<!ELEMENT sub (#PCDATA)>
186<!ATTLIST sub
187	alias CDATA #REQUIRED
188>
189<!ELEMENT phoneme (#PCDATA)>
190<!ATTLIST phoneme
191	ph CDATA #REQUIRED
192	alphabet CDATA #IMPLIED
193>
194<!ELEMENT break EMPTY>
195<!ATTLIST break
196	time CDATA "medium"
197>
198<!ELEMENT mark EMPTY>
199<!ATTLIST mark
200	name ID #IMPLIED
201	nameexpr %expression; #IMPLIED
202>
203<!--================================ Fields ===============================-->
204<!ELEMENT field (%audio; | %event.handler; | filled | %input; | link | option |
205                 prompt | property)*>
206<!ATTLIST field
207	%item.attrs;
208	type CDATA #IMPLIED
209	slot NMTOKEN #IMPLIED
210	modal %boolean; "false"
211>
212<!ELEMENT option (#PCDATA)>
213<!ATTLIST option
214	%accept.attrs;
215	dtmf CDATA #IMPLIED
216	value CDATA #IMPLIED
217>
218<!ELEMENT var EMPTY>
219<!ATTLIST var
220	name %restrictedvariable.name; #REQUIRED
221	expr %expression; #IMPLIED
222>
223<!ELEMENT initial (%audio; | %event.handler; | link | prompt | property)*>
224<!ATTLIST initial
225	%item.attrs;
226>
227<!ELEMENT block (%executable.content;)*>
228<!ATTLIST block
229	%item.attrs;
230>
231<!ELEMENT assign EMPTY>
232<!ATTLIST assign
233	name %variable.name; #REQUIRED
234	expr %expression; #REQUIRED
235>
236<!ELEMENT clear EMPTY>
237<!ATTLIST clear
238	namelist %variable.names; #IMPLIED
239>
240<!ELEMENT value EMPTY>
241<!ATTLIST value
242	expr %expression; #REQUIRED
243>
244<!--================================== Events =============================-->
245<!ENTITY % event.handler.attrs "count		%integer;	#IMPLIED
246	cond		%expression;	#IMPLIED">
247<!ELEMENT catch (%executable.content;)*>
248<!ATTLIST catch
249	event %event.names; #IMPLIED
250	%event.handler.attrs;
251>
252<!ELEMENT error (%executable.content;)*>
253<!ATTLIST error
254	%event.handler.attrs;
255>
256<!ELEMENT help (%executable.content;)*>
257<!ATTLIST help
258	%event.handler.attrs;
259>
260<!ELEMENT link (%input;)*>
261<!ATTLIST link
262	%cache.attrs;
263	%next.attrs;
264	fetchaudio %uri; #IMPLIED
265	dtmf CDATA #IMPLIED
266	%throw.attrs;
267>
268<!ELEMENT noinput (%executable.content;)*>
269<!ATTLIST noinput
270	%event.handler.attrs;
271>
272<!ELEMENT nomatch (%executable.content;)*>
273<!ATTLIST nomatch
274	%event.handler.attrs;
275>
276<!ELEMENT throw EMPTY>
277<!ATTLIST throw
278	%throw.attrs;
279>
280<!--============================= Grammar Input =============================-->
281<!-- definitions adapted from SRGS 1.0 DTD -->
282<!ENTITY % rule-expansion "#PCDATA | token | ruleref
283                              | item | one-of | tag ">
284<!ELEMENT ruleref EMPTY>
285<!ATTLIST ruleref
286	uri %uri; #IMPLIED
287	type CDATA #IMPLIED
288	special (NULL | VOID | GARBAGE) #IMPLIED
289	xml:lang NMTOKEN #IMPLIED
290>
291<!ELEMENT token (#PCDATA)>
292<!ATTLIST token
293	xml:lang NMTOKEN #IMPLIED
294>
295<!ELEMENT tag (#PCDATA)>
296<!ELEMENT one-of (item)+>
297<!ATTLIST one-of
298	xml:lang NMTOKEN #IMPLIED
299>
300<!ELEMENT item (%rule-expansion;)*>
301<!ATTLIST item
302	repeat NMTOKEN #IMPLIED
303	repeat-prob NMTOKEN #IMPLIED
304	weight NMTOKEN #IMPLIED
305	xml:lang NMTOKEN #IMPLIED
306>
307<!ELEMENT rule (%rule-expansion; | example)*>
308<!ATTLIST rule
309	id ID #REQUIRED
310	scope (private | public) "private"
311>
312<!ELEMENT example (#PCDATA)>
313<!ELEMENT lexicon EMPTY>
314<!ATTLIST lexicon
315	uri %uri; #REQUIRED
316	type CDATA #IMPLIED
317>
318<!-- Changes to SRGS 1.0 DTD grammar element:
319- mixed, unordered content model
320- addition of 'scope', 'src', 'type', 'weight' and caching attributes
321- 'version' attribute is optional
322- removal of xmlns, xmlns:xsi, and xsi:schemaLocation attributes
323-->
324<!ELEMENT grammar (#PCDATA | meta | metadata | lexicon | rule)*>
325<!ATTLIST grammar
326	scope %scope; #IMPLIED
327	src %uri; #IMPLIED
328	srcexpr %expression; #IMPLIED
329	type CDATA #IMPLIED
330	weight CDATA #IMPLIED
331	%cache.attrs;
332	tag-format %uri; #IMPLIED
333	xml:base %uri; #IMPLIED
334	version NMTOKEN #IMPLIED
335	xml:lang NMTOKEN #IMPLIED
336	root IDREF #IMPLIED
337	mode (voice | dtmf) "voice"
338>
339<!--============================= Audio Input =============================-->
340<!ELEMENT record (%audio; | %event.handler; | filled | %input; | prompt |
341                  property)*>
342<!ATTLIST record
343	%item.attrs;
344	type CDATA #IMPLIED
345	beep %boolean; "false"
346	maxtime %duration; #IMPLIED
347	modal %boolean; "true"
348	finalsilence %duration; #IMPLIED
349	dtmfterm %boolean; "true"
350>
351<!--============================ Call Control ============================-->
352<!ELEMENT disconnect EMPTY>
353<!ATTLIST disconnect
354	namelist %variable.names; #IMPLIED
355>
356
357<!ELEMENT transfer (%audio; | %event.handler; | filled | %input; | prompt |
358                    property)*>
359<!ATTLIST transfer
360	%item.attrs;
361	dest %uri; #IMPLIED
362	destexpr %expression; #IMPLIED
363	bridge %boolean; "false"
364	type NMTOKEN #IMPLIED
365	connecttimeout %duration; #IMPLIED
366	maxtime %duration; #IMPLIED
367	transferaudio %uri; #IMPLIED
368	aai CDATA #IMPLIED
369	aaiexpr %expression; #IMPLIED
370>
371<!--============================ Control Flow ============================-->
372<!ENTITY % if.attrs "cond		%expression;	#REQUIRED">
373<!ELEMENT if (%executable.content; | elseif | else)*>
374<!ATTLIST if
375	%if.attrs;
376>
377<!ELEMENT elseif EMPTY>
378<!ATTLIST elseif
379	%if.attrs;
380>
381<!ELEMENT else EMPTY>
382<!ELEMENT exit EMPTY>
383<!ATTLIST exit
384	expr %expression; #IMPLIED
385	namelist %variable.names; #IMPLIED
386>
387<!ELEMENT filled (%executable.content;)*>
388<!ATTLIST filled
389	mode (any | all) #IMPLIED
390	namelist %restrictedvariable.names; #IMPLIED
391>
392
393<!-- executable content + contents of prompt  -->
394<!ELEMENT foreach (%executable.content; | %sentence-elements; |
395    %structure; | metadata)*
396>
397<!ATTLIST foreach
398    item %restrictedvariable.name; #REQUIRED
399    array CDATA #REQUIRED
400>
401
402<!ELEMENT goto EMPTY>
403<!ATTLIST goto
404	%cache.attrs;
405	%next.attrs;
406	fetchaudio %uri; #IMPLIED
407	expritem %expression; #IMPLIED
408	nextitem %restrictedvariable.name; #IMPLIED
409>
410<!ELEMENT param EMPTY>
411<!ATTLIST param
412	name NMTOKEN #REQUIRED
413	expr %expression; #IMPLIED
414	value CDATA #IMPLIED
415	valuetype (data | ref) "data"
416	type CDATA #IMPLIED
417>
418<!ELEMENT return EMPTY>
419<!ATTLIST return
420	namelist %variable.names; #IMPLIED
421	%throw.attrs;
422>
423<!ELEMENT subdialog (%audio; | %event.handler; | filled | param | prompt |
424                     property)*>
425<!ATTLIST subdialog
426	%item.attrs;
427	src %uri; #IMPLIED
428	srcexpr %expression; #IMPLIED
429	%cache.attrs;
430	fetchaudio %uri; #IMPLIED
431	%submit.attrs;
432>
433<!ELEMENT submit EMPTY>
434<!ATTLIST submit
435	%cache.attrs;
436	%next.attrs;
437	fetchaudio %uri; #IMPLIED
438	%submit.attrs;
439>
440<!--========================== Miscellaneous ==============================-->
441<!ELEMENT data EMPTY >
442<!ATTLIST data
443    name %restrictedvariable.name; #IMPLIED
444    src %uri; #IMPLIED
445    srcexpr %expression; #IMPLIED
446    fetchaudio  %uri;       #IMPLIED
447    %submit.attrs;
448    %cache.attrs;
449>
450
451<!ELEMENT log (#PCDATA | value)*>
452<!ATTLIST log
453	label CDATA #IMPLIED
454	expr %expression; #IMPLIED
455>
456<!ELEMENT object (%audio; | %event.handler; | filled | param | prompt |
457                  property)*>
458<!ATTLIST object
459	%item.attrs;
460	%cache.attrs;
461	classid %uri; #IMPLIED
462	codebase %uri; #IMPLIED
463	data %uri; #IMPLIED
464	type CDATA #IMPLIED
465	codetype CDATA #IMPLIED
466	archive %uri; #IMPLIED
467>
468<!ELEMENT property EMPTY>
469<!ATTLIST property
470	name NMTOKEN #REQUIRED
471	value CDATA #REQUIRED
472>
473<!ELEMENT script (#PCDATA)>
474<!ATTLIST script
475	src %uri; #IMPLIED
476	srcexpr %expression; #IMPLIED
477	charset CDATA #IMPLIED
478	%cache.attrs;
479>
480