1 <!-- 
   2 VoiceXML 2.1 DTD (20060322)
   3 
   4 Copyright 1998-2006 W3C (MIT, ERCIM, Keio), All Rights Reserved. 
   5 
   6 Permission to use, copy, modify and distribute the VoiceXML DTD and 
   7 its accompanying documentation for any purpose and without fee is 
   8 hereby granted in perpetuity, provided that the above copyright 
   9 notice and this paragraph appear in all copies.  
  10 
  11 The copyright holders make no representation about the suitability 
  12 of the DTD for any purpose. It is provided "as is" without expressed 
  13 or 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 "CDATA">
  29 <!ENTITY % variable.name "CDATA">
  30 <!ENTITY % restrictedvariable.names "CDATA">
  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 #FIXED 'http://www.w3.org/2001/vxml'
  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 | meta )*>
  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 | %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  (exact | approximate) #IMPLIED
 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 p (%allowed-within-sentence; | s)*>
 130 <!ATTLIST p
 131     xml:lang NMTOKEN #IMPLIED
 132 >
 133 <!ELEMENT s (%allowed-within-sentence;)*>
 134 <!ATTLIST s
 135     xml:lang NMTOKEN #IMPLIED
 136 >
 137 <!ELEMENT voice (%allowed-within-sentence; | %structure;)*>
 138 <!ATTLIST voice
 139     xml:lang NMTOKEN #IMPLIED
 140     gender (male | female | neutral) #IMPLIED
 141     age %integer; #IMPLIED
 142     variant %integer; #IMPLIED
 143     name CDATA #IMPLIED
 144 >
 145 <!ELEMENT prosody (%allowed-within-sentence; | %structure;)*>
 146 <!ATTLIST prosody
 147     pitch CDATA #IMPLIED
 148     contour CDATA #IMPLIED
 149     range CDATA #IMPLIED
 150     rate CDATA #IMPLIED
 151     duration %duration; #IMPLIED
 152     volume CDATA #IMPLIED
 153 >
 154 <!-- Changes to SSML 1.0 DTD audio element:
 155 - src not obligatory, addition of 'expr' and caching attributes
 156 -->
 157 <!ELEMENT audio (%allowed-within-sentence; | %structure; | desc)*>
 158 <!ATTLIST audio
 159     src %uri; #IMPLIED
 160     expr %expression; #IMPLIED
 161     %cache.attrs; 
 162 >
 163 <!ELEMENT desc (#PCDATA)>
 164 <!ATTLIST desc
 165     xml:lang NMTOKEN #IMPLIED
 166 >
 167 <!ELEMENT emphasis (%allowed-within-sentence;)*>
 168 <!ATTLIST emphasis
 169     level (strong | moderate | none | reduced) "moderate"
 170 >
 171 <!-- Changes to SSML 1.0 DTD say-as element:
 172 - allows value element as child
 173 -->
 174 <!ELEMENT say-as (#PCDATA | value )*>
 175 <!ATTLIST say-as
 176     interpret-as NMTOKEN #REQUIRED
 177     format NMTOKEN #IMPLIED
 178     detail NMTOKEN #IMPLIED
 179 >
 180 <!ELEMENT sub (#PCDATA)>
 181 <!ATTLIST sub
 182     alias CDATA #REQUIRED
 183 >
 184 <!ELEMENT phoneme (#PCDATA)>
 185 <!ATTLIST phoneme
 186     ph CDATA #REQUIRED
 187     alphabet CDATA #IMPLIED
 188 >
 189 <!ELEMENT break EMPTY>
 190 <!ATTLIST break
 191     time CDATA #IMPLIED
 192     strength  (none | x-weak | weak  | medium | strong | x-strong) "medium"
 193 >
 194 <!ELEMENT mark EMPTY>
 195 <!ATTLIST mark
 196     name ID #IMPLIED
 197     nameexpr %expression; #IMPLIED
 198 >
 199 <!--================================ Fields ===============================-->
 200 <!ELEMENT field (%audio; | %event.handler; | filled | %input; | link | option |
 201                  prompt | property)*>
 202 <!ATTLIST field
 203     %item.attrs; 
 204     type CDATA #IMPLIED
 205     slot NMTOKEN #IMPLIED
 206     modal %boolean; "false"
 207 >
 208 <!ELEMENT option (#PCDATA)>
 209 <!ATTLIST option
 210     %accept.attrs; 
 211     dtmf CDATA #IMPLIED
 212     value CDATA #IMPLIED
 213 >
 214 <!ELEMENT var EMPTY>
 215 <!ATTLIST var
 216     name %restrictedvariable.name; #REQUIRED
 217     expr %expression; #IMPLIED
 218 >
 219 <!ELEMENT initial (%audio; | %event.handler; | link | prompt | property)*>
 220 <!ATTLIST initial
 221     %item.attrs; 
 222 >
 223 <!ELEMENT block (%executable.content;)*>
 224 <!ATTLIST block
 225     %item.attrs; 
 226 >
 227 <!ELEMENT assign EMPTY>
 228 <!ATTLIST assign
 229     name %variable.name; #REQUIRED
 230     expr %expression; #REQUIRED
 231 >
 232 <!ELEMENT clear EMPTY>
 233 <!ATTLIST clear
 234     namelist %variable.names; #IMPLIED
 235 >
 236 <!ELEMENT value EMPTY>
 237 <!ATTLIST value
 238     expr %expression; #REQUIRED
 239 >
 240 <!--================================== Events =============================-->
 241 <!ENTITY % event.handler.attrs "count       %integer;   #IMPLIED
 242     cond        %expression;    #IMPLIED">
 243 <!ELEMENT catch (%executable.content;)*>
 244 <!ATTLIST catch
 245     event %event.names; #IMPLIED
 246     %event.handler.attrs; 
 247 >
 248 <!ELEMENT error (%executable.content;)*>
 249 <!ATTLIST error
 250     %event.handler.attrs; 
 251 >
 252 <!ELEMENT help (%executable.content;)*>
 253 <!ATTLIST help
 254     %event.handler.attrs; 
 255 >
 256 <!ELEMENT link (%input;)*>
 257 <!ATTLIST link
 258     %cache.attrs; 
 259     %next.attrs; 
 260     fetchaudio %uri; #IMPLIED
 261     dtmf CDATA #IMPLIED
 262     %throw.attrs; 
 263 >
 264 <!ELEMENT noinput (%executable.content;)*>
 265 <!ATTLIST noinput
 266     %event.handler.attrs; 
 267 >
 268 <!ELEMENT nomatch (%executable.content;)*>
 269 <!ATTLIST nomatch
 270     %event.handler.attrs; 
 271 >
 272 <!ELEMENT throw EMPTY>
 273 <!ATTLIST throw
 274     %throw.attrs; 
 275 >
 276 <!--============================= Grammar Input =============================-->
 277 <!-- definitions adapted from SRGS 1.0 DTD -->
 278 <!ENTITY % rule-expansion "#PCDATA | token | ruleref
 279                               | item | one-of | tag ">
 280 <!ELEMENT ruleref EMPTY>
 281 <!ATTLIST ruleref
 282     uri %uri; #IMPLIED
 283     type CDATA #IMPLIED
 284     special (NULL | VOID | GARBAGE) #IMPLIED
 285 >
 286 <!ELEMENT token (#PCDATA)>
 287 <!ATTLIST token
 288     xml:lang NMTOKEN #IMPLIED
 289 >
 290 <!ELEMENT tag (#PCDATA)>
 291 <!ELEMENT one-of (item)+>
 292 <!ATTLIST one-of
 293     xml:lang NMTOKEN #IMPLIED
 294 >
 295 <!ELEMENT item (%rule-expansion;)*>
 296 <!ATTLIST item
 297     repeat NMTOKEN #IMPLIED
 298     repeat-prob NMTOKEN #IMPLIED
 299     weight NMTOKEN #IMPLIED
 300     xml:lang NMTOKEN #IMPLIED
 301 >
 302 <!ELEMENT rule (%rule-expansion; | example)*>
 303 <!ATTLIST rule
 304     id ID #REQUIRED
 305     scope (private | public) "private"
 306 >
 307 <!ELEMENT example (#PCDATA)>
 308 <!ELEMENT lexicon EMPTY>
 309 <!ATTLIST lexicon
 310     uri %uri; #REQUIRED
 311     type CDATA #IMPLIED
 312 >
 313 <!-- Changes to SRGS 1.0 DTD grammar element:
 314 - mixed, unordered content model 
 315 - addition of 'scope', 'src', 'type', 'weight' and caching attributes
 316 - 'version' attribute is optional
 317 - removal of xmlns, xmlns:xsi, and xsi:schemaLocation attributes
 318 -->
 319 <!ELEMENT grammar (#PCDATA | meta | metadata | lexicon | rule | tag)*>
 320 <!ATTLIST grammar
 321     scope %scope; #IMPLIED
 322     src %uri; #IMPLIED
 323     srcexpr %expression; #IMPLIED
 324     type CDATA #IMPLIED
 325     weight CDATA #IMPLIED
 326     %cache.attrs; 
 327     tag-format %uri; #IMPLIED
 328     xml:base %uri; #IMPLIED
 329     version NMTOKEN #IMPLIED
 330     xml:lang NMTOKEN #IMPLIED
 331     root IDREF #IMPLIED
 332     mode (voice | dtmf) "voice"
 333 >
 334 <!--============================= Audio Input =============================-->
 335 <!ELEMENT record (%audio; | %event.handler; | filled | %input; | prompt | 
 336                   property)*>
 337 <!ATTLIST record
 338     %item.attrs; 
 339     type CDATA #IMPLIED
 340     beep %boolean; "false"
 341     maxtime %duration; #IMPLIED
 342     modal %boolean; "true"
 343     finalsilence %duration; #IMPLIED
 344     dtmfterm %boolean; "true"
 345 >
 346 <!--============================ Call Control ============================-->
 347 <!ELEMENT disconnect EMPTY>
 348 <!ATTLIST disconnect
 349     namelist %variable.names; #IMPLIED
 350 >
 351 
 352 <!ELEMENT transfer (%audio; | %event.handler; | filled | %input; | prompt | 
 353                     property)*>
 354 <!ATTLIST transfer
 355     %item.attrs; 
 356     dest %uri; #IMPLIED
 357     destexpr %expression; #IMPLIED
 358     bridge %boolean; #IMPLIED
 359     type NMTOKEN #IMPLIED
 360     connecttimeout %duration; #IMPLIED
 361     maxtime %duration; #IMPLIED
 362     transferaudio %uri; #IMPLIED
 363     aai CDATA #IMPLIED
 364     aaiexpr %expression; #IMPLIED
 365 >
 366 <!--============================ Control Flow ============================-->
 367 <!ENTITY % if.attrs "cond       %expression;    #REQUIRED">
 368 <!ELEMENT if (%executable.content; | elseif | else)*>
 369 <!ATTLIST if
 370     %if.attrs; 
 371 >
 372 <!ELEMENT elseif EMPTY>
 373 <!ATTLIST elseif
 374     %if.attrs; 
 375 >
 376 <!ELEMENT else EMPTY>
 377 <!ELEMENT exit EMPTY>
 378 <!ATTLIST exit
 379     expr %expression; #IMPLIED
 380     namelist %variable.names; #IMPLIED
 381 >
 382 <!ELEMENT filled (%executable.content;)*>
 383 <!ATTLIST filled
 384     mode (any | all) #IMPLIED
 385     namelist %restrictedvariable.names; #IMPLIED
 386 >
 387 
 388 <!-- executable content + contents of prompt  -->
 389 <!ELEMENT foreach (%executable.content; | %sentence-elements; | 
 390     %structure; )*
 391 >
 392 <!ATTLIST foreach
 393     item %restrictedvariable.name; #REQUIRED
 394     array CDATA #REQUIRED
 395 >
 396 
 397 <!ELEMENT goto EMPTY>
 398 <!ATTLIST goto
 399     %cache.attrs; 
 400     %next.attrs; 
 401     fetchaudio %uri; #IMPLIED
 402     expritem %expression; #IMPLIED
 403     nextitem %restrictedvariable.name; #IMPLIED
 404 >
 405 <!ELEMENT param EMPTY>
 406 <!ATTLIST param
 407     name NMTOKEN #REQUIRED
 408     expr %expression; #IMPLIED
 409     value CDATA #IMPLIED
 410     valuetype (data | ref) "data"
 411     type CDATA #IMPLIED
 412 >
 413 <!ELEMENT return EMPTY>
 414 <!ATTLIST return
 415     namelist %variable.names; #IMPLIED
 416     %throw.attrs; 
 417 >
 418 <!ELEMENT subdialog (%audio; | %event.handler; | filled | param | prompt | 
 419                      property)*>
 420 <!ATTLIST subdialog
 421     %item.attrs; 
 422     src %uri; #IMPLIED
 423     srcexpr %expression; #IMPLIED
 424     %cache.attrs; 
 425     fetchaudio %uri; #IMPLIED
 426     %submit.attrs; 
 427 >
 428 <!ELEMENT submit EMPTY>
 429 <!ATTLIST submit
 430     %cache.attrs; 
 431     %next.attrs; 
 432     fetchaudio %uri; #IMPLIED
 433     %submit.attrs; 
 434 >
 435 <!--========================== Miscellaneous ==============================-->
 436 <!ELEMENT data EMPTY>
 437 <!ATTLIST data
 438     name %restrictedvariable.name; #IMPLIED
 439     src %uri; #IMPLIED
 440     srcexpr %expression; #IMPLIED 
 441     fetchaudio  %uri;       #IMPLIED
 442     %submit.attrs;
 443     %cache.attrs;
 444 >
 445 
 446 <!ELEMENT log (#PCDATA | value)*>
 447 <!ATTLIST log
 448     label CDATA #IMPLIED
 449     expr %expression; #IMPLIED
 450 >
 451 <!ELEMENT object (%audio; | %event.handler; | filled | param | prompt | 
 452                   property)*>
 453 <!ATTLIST object
 454     %item.attrs; 
 455     %cache.attrs; 
 456     classid %uri; #IMPLIED
 457     codebase %uri; #IMPLIED
 458     data %uri; #IMPLIED
 459     type CDATA #IMPLIED
 460     codetype CDATA #IMPLIED
 461     archive %uri; #IMPLIED
 462 >
 463 <!ELEMENT property EMPTY>
 464 <!ATTLIST property
 465     name NMTOKEN #REQUIRED
 466     value CDATA #REQUIRED
 467 >
 468 <!ELEMENT script (#PCDATA)>
 469 <!ATTLIST script
 470     src %uri; #IMPLIED
 471     srcexpr %expression; #IMPLIED
 472     charset CDATA #IMPLIED
 473     %cache.attrs; 
 474 >