Document Type Definitions (DTD) for VoiceXML 2.0 & VoiceXML 2.1 • SRGS (Speech Recognition Grammar Syntax) • SSML (Speech Synthesis Markup Language) • W3C 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. --> <!--==== VoiceGeniie 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