XHTML+Voice Profile 1.2

16 März 2004

Diese Version:
http://www.voicexml.org/specs/multimodal/x+v/12/spec.html
Neuste Version:
http://www.voicexml.org/specs/multimodal/x+v/12/spec.html
Voherige Version:
http://www.ibm.com/software/pervasive/multimodal/x+v/11/spec.htm
Editors:
Jonny Axelsson, Opera Software <jax@opera.no>
Chris Cross, IBM <xcross@us.ibm.com>
Jim Ferrans, Motorola <James.Ferrans@motorola.com >
Gerald McCobb, IBM <mccobb@us.ibm.com>
T. V. Raman, IBM <tvraman@us.ibm.com>
Les Wilson, IBM <lesw@us.ibm.com>
Deutsche Übersetzung:
David Tibbe, <david@tibbe-online.de>

Hinweis: Dieses ist eine Übersetzung der Spezifikationen des XHTML+Voice-Profils 1.2. Das Orginal ist unter http://www.voicexml.org/specs/multimodal/x+v/12/spec.html einsehbar. Von mir vorgenommene Ergänzungen sind wie in diesem Satz kenntlich gemacht.. Textabschnitte in diesem Format müssen noch überarbeitet werden und sind nur vorläufig übersetzt.

Ich weise ausdrücklich darauf hin, dass ich mir zwar Mühe mit der korrekten Übersetzung gebe, natürlich dennoch keine vollständige Richtigkeit garantieren kann. Falls Fehler entdeckt werden, so bitte ich um eine kurze Nachricht an mich: david@tibbe-online.de


Abriss

Das XHTML+Voice Profil bringt durch das Integrieren der ausgereiften XHTML und XML-Events-Technologien mit XML Vokabeln als Teil des W3C Speech Interface Frameworks gesprochene Interaktion in den Standard-Webinhalt. Das Profil beinhaltet Spachmodule für die Sprachsyntese, für Sprachdialoge, für Anweisungen und Steuerung sowie für die Sprachgrammatik. Voice-Handler können an XHTML-Elemente angeknüpft werden und auf spezielle DOM-Ereignisse antworten, wobei sie das Event-Modell ähnlich wie herkömmliche Webentwickler verwenden. Sprachinteraktionsfetures sind durch XHTML und CSS integriert und können folglich direkt im XHTML-Inhalt verwendet werden.

Stand dieses Dokuments

Dieser Abschnitt beschreibt den Status dieses Dokumets zum Zeitpunkt seiner Veröffentlichung. Andere Dokumente können dieses Dokument abgelöst haben.

Beachten sie, dass das beschriebene Sprachprofil in dieser Spezifikation W3C working drafts, also W3C Arbeitsentwürfe, wiederverwendet, die wahrscheinlich geändert werden. Dieses Integrationsprofil wird, falls dies für die Endversionen dieser Spezifikation notwenig ist, geändert. Dieses Profil ist ein Update des XHTML+Voice 1.1 profile. XHTML+Voice 1.2 bezieht sich auf die VoiceXML 2.0 Empfehlungen.

Errata

Die Liste der bekannten Fehler in den Spezifikationen ist unter xhtml-voice12-errata.html. Bitte melden Sie Fehler in diesem Dokument an mccobb@us.ibm.com. Übersetzungsfehler bitte an: david@tibbe-online.de

Inhalt

1 Einführung
    1.1 Motivation und Anwendungen
    1.2 Design Prinzipien
    1.3 XHTML+Voice-Abwicklungsmodell
        1.3.1 Abwicklung innerhalb eines Dokuments
            1.3.1.1 Sprache und Version
            1.3.1.2 VoiceXML-Bereiche in XHTML+Voice
            1.3.1.3 VoiceXML Dialog-Aktivierung
            1.3.1.4 Zugriff aus XHTML auf Sprachdialogergebnisse
            1.3.1.5 Zugriff aus einem Sprachdialog auf XHTML
            1.3.1.6 Rückkehr aus einem VoiceXML-Formular
        1.3.2 Cancel
        1.3.3 Erklärende Synkronisation der Eingabemodi
        1.3.4 Ereignisse und Ereignisbehandlung
        1.3.5 Verbinden von Dokumenten durch Sprache
        1.3.6 Akustische Style-Sheets
2 VoiceXML 2.0 Module
    2.1 Modularisierung von VoiceXML 2.0
    2.2 Sprachdialoge
    2.3 Ausführbarer Inhalt
    2.4 Speech Grammars
    2.5 Sprach- und andere Audioausgaben
    2.6 Ereignisbehandlung
3 XHTML Modularisierung
    3.1 Document Conformance
    3.2 User Agent Conformance
    3.3 XHTML Namensraumeinbindung
    3.4 XHTML+Voice Profil
    3.5 XHTML+Voice abstrakte Module
        3.5.1 Abstrakte Module
        3.5.2 Kurzschreibweisen für Elementinhalte
        3.5.3 Kurzschreibweisen für Attribute
4 XML Events Modul
    4.1 Listener
    4.2 Ereignistypen
        4.2.1 DOMActivate
    4.3 XHTML+Voice Ereignisvererbung
5 XHTML+Voice Erweiterugsmodul
    5.1 Sync
        5.1.1 Standardgrammatiken für XHTML-Bedienelemente
    5.2 Cancel
    5.3 VoiceXML Field ID-Attribut
    5.4 VoiceXML Prompt SRC- und EXPR-Attribute
        5.4.1 Stylen externen prompt-Quellen
        5.4.2 Ungültige prompt-Quellen
        5.4.3 Eigenschaften für das Holen der prompt-Quelle

Anhang

A Wiederverwendbares VoiceXML
B Beispiele
    B.1 What You See Is What You Can Say
    B.2 Mixed-initiative Conversational Interface
    B.3 Speech-Enabled Mail Interface
    B.4 Reusable VoiceXML Subdialogs
C FIA für XHTML+Voice
D DTD
    D.1 xhtml+voice12.dtd
E Schema
    E.1 xhtml+voice12.xsd
F VoiceXML-Kontainer für das XHTML+Voice Subset
    F.1 vxml20-xvsubset.xsd
G Multimodale Autovervolltändigung
H Änderungen seit XHTML+Voice 1.1
    H.1 Veränderte Elemente
    H.2 Verdeutlichungen
    H.3 Verschiedenes
I Referenzen
    I.1 Normative Referenzen
    I.2 Informative Referenzen


1 Einführung

Dieses Dokument definiert Version 1.2 des XHTML+Voice Profils. XHTML+Voice 1.2 ist ein Mitglied der XHTML-Familie der Dokument-Typen, wie sie durch die XHTML-Modularisierung spezifiziert sind [XHTML Modularization]. XHTML ist durch ein modularisiertes Subset, eine "Teilsammlung", von VoiceXML 2.0, das XML-Events-Modul, und ein Modul, das eine kleine Anzahl von attributiven Erweiterungen zu XHTML und VoiceXML beinhaltet, ergänzt. Das zuletzt genannte Modul erleichtert das Teilen von multimodalen Eingabedaten zwischen dem VoiceXML-Dialog und XHTML-Eingabe und Text-Elementen.

Das XML-Ereignis-Modul [XML Events] bietet XML host-Sprachen die Möglichkeit, die Fähigkeit, einheitliche Ereignis-Listener, Ereignis-"Abhörer", zu integrieren und Event-Handler mit der Document Object Model (DOM) Level 2 [DOM2 Events] Ereignisschnittstelle zu verbinden. Das Ergenis ist eine Ereignis-Syntax für XHTML-basierte Sprachen die einen vollständig kompatiblen Weg des Verbindens von Verhalten mit dem Dokumentaufbau ermöglichen.

VoiceXML [VoiceXML 2.0] ist für das Erstellen von Audio-Dialogen gestaltet worden, die sich durch synthetisierte Sprache, digitalisiertem Tönen, Erkennung von gesprochenem und DTMF-Tastatureingaben, Aufnahme von gesprochenen Eingaben, Telefonie und mixed-initiative Unterhaltungen auszeichnet. In diesem Dokument wird VoiceXML 2.0 modularisiert, um es für die Einbindung in die das XHTML-Modularisieungs-Framework verwendende XHTML-Familie einzubinden. Die Module, die Sprachdialoge für das Aktualisieren von XHTML-Formularen und Formularelementen kombinieren, sind für das Hinzufügen zu XHTML ausgewählt. Diese Module sind genauso wie Integrationsfragen beschrieben. Die Modularisierung von VoiceXML 2.0 spezifziert ebenso spezielle, sprachinteraktionsbezogene DOM-Ereignistypen für die Benutzung mit dem XML-Events-Modul. In VoiceXML 2.0 verfasste Sprachdialoge können dann als Event-Handler, Ereignisabwickler, behandelt werden um XHTML-Dokumenten sprachinteraktionsspezifisches Verhalten hinzuzufügen. Die Sprachintegration unterstützt alle Module, die in der HTML-Modularisierung definiert werden und gibt XHTML-Elementen Sprachinteraktionsfunktionalität um multimodale Anwendungen zu ermöglichen. Der Dokumenttyp, der vom XHTML+Voice-Profil definiert wird, ist XHTML Host language document type-konform.

1.1 Motivation und Anwendungen

Zwei ausgereifte Technologien, XHTML 1.1 [XHTML 1.1] und VoiceXML 2.0 [VoiceXML 2.0] sind durch durch die Ausnutzung der [XHTML Modularization] zusammengeschlossen worden um gesprochene Interaktion in das grafische Web zu bringen. Die Designhebel erleichtern es gewerblichen APSs wie dem W3C DOM dialogfähige Webinhalte zu erstellen, die auf einer Vielzahl von Endbenutzergeräten eingesetzt werden können. Vielfältige Interaktionsweisen sind durch das Verwenden des DOM2-Events-Models [DOM2-Events] synkronisiert, integriert und dem Inhaltsverfasser via XML-Ereignisse [XML-Events] zur Verfügung gestellt.

Heutzutage sind Webanwendungen in XHTML mit Benutzerinteraktion mittels XHTML-Formularelementen verfasst. Das W3C arbeitet zur Zeit an XForms [XForms], der nächsten Generation von Webformularen, die die Mächtigkeit von XML in die Webanwendungsentwicklung bringen. Die Kombination von XHTML und Sprache, die in diesem Dokument beschrieben wird, kann die semantische Vielfalt von Webanwenungen, die unter Verwendung von XForms erstellt wurden, in Schwung bringen, während ein fließender Übergang für heutige Entwickler geboten wird, die sich das Einsetzen multimodaler Anwendungen durch das Hinzufügen von Sprachinteraktion zum heutigen Webinhlt wünschen. Das Integrieren der Arbeit der W3C-Sprachbrowser-Arbeitgruppe in den Haupt-XHTML-Inhalt hat den Vorteil der Sicherstellung, dass zukünftige Bereicherungen der Sprachbrowser-Komponenten wie natürliches Sprachverständnis vereingt werden. Folglich ist ein fließender Übergangsweg für Web-Entwickler, die sich das Ausliefern immer cleverer Benutzerinteraktion für ihre Webanwenungen wünschen, gegeben. Aufbauend auf XHTML Basic [XHTML Basic] und XHTML Modularisierung werden Inhaltsentwickler in der Lage sein, ihren Inhalt einer breiten Vielzahl von Endbenutzergeräten von Mobiltelefonen und kleinen PDAs bis hin zu Desktop-Browsern bereitzustellen.

1.2 Design Prinzipen

XHTML+Voice ist eine XML Anwendung [XML 1.0].

  1. XHTML ist die host-Sprache.
  2. XHTML+Voice erweitert XHTML Basic mit einem Subset aus VoiceXML 2.0, XML-Ereignissen und einem kleinen Erweiterungsmodul.
  3. XHTML+Voice macht das Verfassen für gemeinsame Typen der multimodalen Interaktion einfach.
  4. VoiceXML ist modularisiert um die Erstellung von Profilen, die auf verschiedene Anwenungsauslieferungsumgebungen zutrifft, zu erlauben.
  5. Die Teile von VoiceXML, die sich auf das VoiceXML-Dokument beziehen, dass eine alleinstehnde Sprachanwenung darstellt, werden vom XHTML+Voice Profil ausgelassen.
  6. Die VoiceXML-Modularisierung ändert nicht das VoiceXML-Ausfürhugsmodel. Besonders wird ein Sprachdialog wie vom VoiceXML-Forminterpretationsalgoritmus spezifiziert ausgeführt.
  7. Die VoiceXML-Modularisierung verändert nicht die Funktion von VoiceXML-2.0-Elementen und Attributen die Teil des Profils sind.

1.3 XHTML+Voice-Abwicklungsmodell

XHTML+Voice ist für das Erstellen von multimodalen Dialogen entworfen, die den grafischen Eingabemodus, repräsentiert duch XHTML, und der Sprachein- und Ausgabe, repräsentiert durch ein Subset von VoiceXML kombiniert. Hier ist ein simples "Hallo Welt"-Beispiel für XHTML+Voice:

<?xml version="1.0"?>
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:vxml="http://www.w3.org/2001/vxml"
xmlns:ev="http://www.w3.org/2001/xml-events"
xmlns:xv="http://www.voicexml.org/2002/xhtml+voice"
>
  <head>
    <title>XHTML+Voice Example</title>
    <!-- voice-handler -->
    <vxml:form id="sayHello">
      <vxml:block><vxml:prompt xv:src="#hello"/>
      </vxml:block>
    </vxml:form>
  </head>
  <body>
    <h1>XHTML+Voice Example</h1>
    <p id="hallo" ev:event="click" ev:handler="#sayHello">
      Hello World!
    </p>
  </body>
</html>

Der Sprachdialog, der durch "sayHello" identifiziert ist, wird aktiviert, wenn der Benutzer irgendwo auf den durch "hello" identifizierten Absatz klickt. Der Sprachdialog ist ein VoiceXML-Formular, das den Text, den es von dem selben Absatz erhält, der es aktivert, sythetisiert. Die Sprachausgabe ist "Hello World!"

1.3.1 Abwicklung innerhalb eines Dokuments

Ein Sprachdialog wird innerhalb von XHTML+Voice als ein [VoiceXML 2.0]-Formular mit einer eindeutigen ID definiert. Das VoiceXML-Formular wird durch ein XML-Events-Ereignis und einem zugeordneten Handler aktiviert, der die eindeutige ID des Formulars referenziert. Das XML-Events-Ereignis wird durch eine Benutzerinteraktion mit einem XHTML-Element generiert, allgemein von einem Formularbedienelemente oder von einem Dokumentereignis wie load oder unload. Das Aktivieren der VoiceXML-Formulare setzt alle Formular- und Feldelemente auf ihre ursprünglichen Werte. Das verdeutlicht die Sicherheitsbedinungen aller Formularelemente, die keine Ursprungswerte durch das expr-Attribut haben. Das Formular wird entsprechend dem Formularinterpretationsalgorithmus (FIA) ausgeführt, wie er von VoiceXML spezifiziert wird.

1.3.1.1 Sprache und Version

Ein VoiceXML-Formular benötigt Sprach- und VoiceXML-Versionsinformationen. VoiceXML 2.0 beinhaltet Sprach- und Versionsattribute durch sein Wurzel-<vxml>-Element. XHTML+Voice erhält die Sprache und VoiceXML-Version wie folgt von XHTML: Die Sprache wird vom xml:lang-Attribut des Wurzel-HTML-Element entnommen während die VoiceXML-Version von der Belegung des Formulars des VoiceXML-Namensraums abgeleitet werden kann. Die Sprache kann durch das xml:lang-Attribut in den VoiceXML-Grammatik und prompt-Elementen überschrieben werden.

1.3.1.2 VoiceXML-Bereiche in XHTML+Voice

Ein VoiceXML-Formular inmitten eines XHTML+Voice-Dokuments hat nicht die Session- und Dokumentabgenzungen, die von VoiceXML definiert werden. Diese Abgrenzungen hat es aus zwei Gründen nicht. Zum Ersten ist <form> das top level-VoiceXML-Element in einem XHTML+Voice-Dokument. Zum Zweiten erlaubt XHTML+Voice keine Übergänge von einem Voice-Handler zu einem anderen. VoiceXML 2.0 erlabt einem Formular entweder Dialog- oder Dokumentgeltungsbereich zu haben. Falls der Geltungsbereich eines Formulars ein Dokument, gesetzt durch das scope-Attribut, ist, ist das Formular aktiv während ein anderes Formular im Dokument abgewickelt wird. Wenn die Spracheingabe der Grammatik des Formulars mit Dokumentgültigkeitsbereich entspricht, so gibt es einen Wechsel des aktuell ausgeführten Formulars zu dem Formular mit dem Dokumentgültigkeitsbereich. XHTML+Voice erlaubt diesen Wechsel nicht. Folglich ist ein Formularbereich auf den Dialog begrenzt und das scope-Attribut wird ignoriert. Das Grammatikgeltungsbereich-Attribut wird ebenfalls aus den gleichen Gründen ignoriert. Der verbleibende innereVoiceXML-Bereich, Dialoge und Unbekanntes, werden durch XHTML+Voice verarbeitet, wie es vom VoiceXML-FIA gefordert wird.

Während XHTML+Voice nur den Standardwert der scope-Attribute unterstützt, die "Dialog" sind, falls das scope-Attribut zu dem eines Voice-Handler-Formulars passt, wird das Formular nicht ungültig und die Verarbeitung wird fortgesetzt. Das scope-Attribut im <grammer>-Element wird ebenso ignoriert und sein Standardwert erwartet. Die XHTML+Voice-Dokumentabwicklung ignoriert alle VoiceXML-2.0-Attribute die es nicht unterstützt sofern welche angetroffen werden.

Falls die XHTML+Voice-Dokumentausführung auf ein VoiceXML-2.0-Element trifft, dass noch nicht von XHTML+Voice unterstützt wird (wie z.B. <goto>), wird ein "badfetch"-Fehler geworfen. Das bedeutet, dass ein VoiceXML-2.0-Interpreter die gleichen Quellen verarbeiten kann falls alle Quell-Tags von XHTML+Voice unterstützt werden. Dennoch unterstützen alle Quellen-Attribute, die nicht von XHTML+Voice unterstützt werden müssen, ihre Standardwerte.

XHTML+Voice erlaubt einem Sprachdialog in einer externen Datei als ein Voice-Handler referenziert zu werden. Da der Sprachdialog außerhalb seines umschließenden Formularbereichs keine Gültigkeit besitzt, wird nur das Formular der externen Datei verarbeitet wenn das Formular aktiviert wird. Zum Beispiel wird das script-Element in extrenen Dateien nicht verarbeitet. Das ist so, da die grafischen Browser nur Scripte im aktuellen Dokument ausführen und das VoiceXML-<script>-Element nicht unterstützt wird. Das macht es notwendig, die externe Referenz um ein Fragmentbezeichner, ein Anker wie #foo,, der das Formular zusätzlich zu einer absoluten oder relativen URL spzifiziert, einzubinden. Dies unterscheidet sich von VoiceXML, was spezifiziert, dass, wenn das Fragment fehlt, das Formular, welches als in alphabetischer Reihenfolge der erste Dialog des Dokuments ist, ausgeführt wird [VoiceXML 2.0]. Mit dieser Einschränkung kann sich der Sprachdialog in jedem externen XML-Dokument einschließlich VoiceXML befinden. Nur das aufrufende Dokument muss ein XHTML+Voice-Dokument sein.

Da ein XHTML-Script, das in einer externen Datei platziert ist, nicht verarbeitet wird, kann das Ergebnis von VoiceXML nicht innerhalb eines externen Subdialog durch das Aufrufen einiger ECMAScripte, die im VoiceXML-Script-Tag enthalten sind, validiert werden. ECMAScript-Validierung von Subdialog-Ergebnissen können nur durch das aufrufende Dokument durchgeführt werden. Die Validierungsmethoden müssen im ECMAScript-Objekt enthalten sein, die als Parameter dem Subdiaog übergeben werden.

Die VoiceXML <field>, <subdialog>, undd <var>-Elemente besitzen keine Sichtbarkeit für den XHTML-Namensraums wie auch ECMAScript- Variablen. Außerdem gibt es keine Notwendigkeit zur Unterstützung der VoiceXML-Elemente als Konten im DOM-Objekt, das für JavaScript erhältlich ist. Dies sind verschiedene/besondere Probleme bei der Unterstützung des DOM-Objektes. Im Gegensatz zu XHTML-Formularbedienlementen haben VoiceXML-Formularelemente kein value-Attribut und folglich fehlt auch die DOM-node-Eigenschaft. Ein value-Attribut ist notwendig, da die VoiceXML-Formularelemente ihre eigenen ECMAScript-Variablen besitzen und ihre Werte nur während das sie umschließende Formular aktiv ist definiert sind. Zu jeder anderen Zeit sind ihre Werte undefiniert.

1.3.1.3 VoiceXML Dialog-Aktivierung

Wenn der Browser den Body eines XHTML+Voice-Dokuments lädt, wird das "load"-Ereignis generiert. Dieses eröffnet den Ereigniskreislauf wie er vom DOM Level 2 Elementmodell spezifiziert wird. Während der Ereigniskreislauf abläuft, vererben sich Ereignisse durch dem HTML-Baum aus. Ein XML-Events-Listener kann ein Ereignis entweder durch einen Ziel-HTML-Knoten oder ein eine Vorfahren des Knoten überwachen, falls das Ereignis ausgelöst wird. Ein XML-Events-Listener aktiviert einen Handler als Antwort auf das überwachte Ereignis. Der Handler kann ein Sprachdialog sei, beispielsweise als Antwort auf einen "Klick" oder eine HTML-Eingabe.

Ein Sprachdialog kann ebenso durch das Werfen eines DOMActivate-Ereignisses aus dem XHTML-Script aktiviert werden. Das XML Events Module bietet weitere Details und Beispiele.

1.3.1.4 Zugriff aus XHTML auf Sprachdialogergebnisse

Auf Sprachdialog-Ergebisse kann aus XHTML auf eine der folgenden Weisen zugegriffen werden:

  1. Die VoiceXML-Standardanwendungsvariablen sind für eine XHTML+Voice-Anwendung als globale JavaScript-Variablen erhältlich. Jede angeführte Variable ist ein Array aus Elementen [0..i..n], wobei jedes Element ein mögliches Ergebnis repräsentiert. Siehe auch [VoiceXML 2.0] für weitere Details:
    • application.lastresult$[i].confidence
    • application.lastresult$[i].utterance
    • application.lastresult$[i].inputmode
    • application.lastresult$[i].interpretation
  2. Das XHTML+Voice <sync>-Element wird im XHTML+Voice Erweiterungsmodul beschrieben.
1.3.1.5 Zugriff aus einem Sprachdialog auf XHTML

Der globale JavaScript-Gültigkeitsbereich eines XHTML+Voice-Dokuments ist für einen Sprachdialog zugänglich. Zum Beispiel kann auf ein XHTML-Formular-Kontroll-Element wie ein Eingabefeld von innerhalb VoiceXML durch das Verwenden der DOM-Objekt-Durchquerungsnotation, DOM-Objekt traversal natation, wie sie JavaScript zugänglich ist zugegiffen werden. Zum Beispiel würde der Wert eines Eingabefeldes mit dem Namen "herkunftsort" vom VoiceXML-Zuweisungs-Tag wie folgt gesetzt werden:

<?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ev="http://www.w3.org/2001/xml-events">
  <head>
    <form id="form_id" xmlns="www.w3.org/2001/vxml">
      <field name="herkunfts_feld">
        <filled>
          <assign name="document.main.herkunftsort.value"
                  expr="herkunfts_feld"/>
        </filled>
      </field>
    </form>
  </head>
  <body>
    <form name="main" action="cgi/city.jsp">
      <input name="herkunftsort" type="text"
                 ev:event="focus" ev:handler="#form_id"/>
    </form>
  </body>
</html>

Das Dokumentschlüsselwort in XHTML+Voice bezieht sich auf das JavaScript DOM-Objekt. Das funktioniert, da XHTML+Voice es einem Sprachdialog erlaubt, den globaln JavaScript-Gültigkeitsbereich mit dem XHTML-Kontainer zu teilen. XHTML+Voice setzt ebenso den VoiceXML-Anwenungsbereich unter den geteilten Globalbereich.

1.3.1.6 Rückkehr aus einem VoiceXML-Formular

Wenn ein Ereignis in einem Sprachdialog abgefangen wird, kann der Verfassen wahlweise den Dialog beenden und zum XHTML-Kontainer zurückkehren. XHTML+Voice verwendet zu diesem Zweck das VoiceXML <return>-Element. Falls das <return>-Element innerhalb ausführbaren des Inhalts eines top level Voice-Handlers (z.B. einer, der nicht als Subdialog aufgerufen wurde) abgewickelt wird, wird der Voice-Handler seine Abwicklung beenden und zum XHTML zurückkehren. Das folgende Beispiel zeigt wie das <return>-Element verwendet werden kann:

<?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:vxml="http://www.w3.org/2001/vxml"
      xmlns:ev="http://www.w3.org/2001/xml-events"
      xmlns:xv="http://www.voicexml.org/2002/xhtml+voice" >
   <head><title>Find City or Airport</title>

      <vxml:form id="vform">
         <vxml:subdialog name="cityorairport" src="cityorairport.vxml#cityform">
            <vxml:param name="paramPrompt" expr="'What city or airport?'"/>
            <vxml:filled>
               <vxml:assign name="document.xform.city.value"
                               expr="cityorairport.returnCityOrAirport"/>
            </vxml:filled>
            <catch event="error.badfetch">
               Error fetching subdialog!
               <return/>
            </catch>
         </vxml:subdialog>
      </vxml:form>

   </head>
   <body bgcolor="#FFFFFF">
      <h3>City or Airport</h3>
      <form name="xform" action="cgi/cityorairport.jsp">
         <p>Enter city or airport:<br/>
            <input type="text" name="city" ev:event="focus" ev:handler="#vform"/>
         </p>
      </form>
   </body>
</html>

Wenn das <return>-Element in einem top-level Sprachformular spezifiziert ist, hat sein namelist-Attribut keine Bedeutung und wird ignoriert. Dennoch kann entwender das event oder eventexpr-Attribut verwendet werden um ein VoiceXML-Ereignis an den XHTML-Kontainer zurückzugeben.

1.3.2 Cancel

Mehrere Sprachdialoge gleichzeitug abzuwickeln ist in XHTML+Voice nicht erlaubt. Ein Sprachdialog läuf in seinem eigenen Thread und das Audio-System kann, wie viele andere Geräte auch, zu einem Zeitpunkt nur von einem Thread beansprucht werden. Ebenfalls können andere Quellen, die nicht garantiert thread-safe sind, einen Voice-Handler unendlich zu blockieren. Deswegen kann nur ein Sprachdialog zu einem Zeitpunkt pro geladenes XHTML+Voice-Dokument abgewickelt werden. Falls nur ein Sprachdialog zu einem Zeitpunkt laufen kann, so muss der aktivierende Sprachdialog den aktuell abgewickelt werdenden Dialog abbrechen. Dies ist das Standardverhalten. Der laufende Dialog soll ebenso abgebrochen werden falls das aktuelle XHTML+Voice-Dokument entladen wird.

Der Dokumentverfasser kann den aktuell abgewickelten Sprachdialog mit dem <cancel>-Element abbrechen, welches durch ein XHTML-Element als Handler für ein XHTML-Events-Ereignis spezifiziert wird. Der XHTML+Voice Erweiterungsmodul Abschnitt bietet weitere Details.

Cancel ist eine Nachrcht des grafische Browsers die von dem VoiceXML FIA abgewickelt werden muss. Sie unterscheidet sich von dem cancel-Ereignis, welches von VoiceXML unterstützt wird, und das aktuelle prompt abbricht. Die cancel-Nachricht des grafischen Browsers verändert den FIA in dem Sinne, dass sie während des gesammten FIA überprüft und, falls empfangen, der FIA beendet werden muss.

1.3.3 Erklärende Synkronisation der Eingabemodi

Das XHTML+Voice <sync>-Element bietet eine erklärende Synkronisierung von XHTML-Formularbedienelementen und dem VoiceXML <field>-Element. Das <sync>-Element spezifiziert die folgenden Verhaltensweisen. Als erstes erlaubt sync Eingaben von einer Sprach- oder grafischen Modalität um das Feld in in die andere Modaität zu setzen. Zweitens wird durch das Setzen des Fokus eines <input>-Elements, das mit einem VoiceXML-Feld synkronisiert ist, der FIA dazu bewegt, das Element zu inspizieren. Das ist nützlich falls es mehrere Felder in einem VoiceXML-Formular gibt. Sync ist sowohl eine Nachricht an den VoiceXML-FIA vom grafischen Browser, wie "cancel", als auch eine Nachricht vom FIA an den grafischen Browser. Der XHTML+Voice Erweiterungsmodul-Abschnitt gibt weitere Details.

1.3.4 Ereignisse und Ereignisbehandlung

Die nomatch, noinput, help und error VoiceXML-Ereignistypen werden als XML-Events-Ereignisse an XHTML weitergegeben. Sie können an einen XML-Events-Handler gebunden werden, indem man die XML-Events-Syntax für die Angabe eines targets, observers, events und handers verwendet. Die Ereignisse werden trotzdem weitergereicht falls das Ereignis bereits inerhalb des VoiceXML-Formulars abgefangen und behandelt wurde. Die VoiceXML-Ereignistypen nomatch, noinput, help und error werden an den XHTML-Kontainer als vxmlnomatch, vxmlnoinput, vxmlhelp beziehungsweie vxmlerror weitervererbt.

In VoiceXML kann eine Kette von Ereignissen erzeugt werden wenn ein Ereignis abgefangen und ein anderes ausgelöst wird usw. Da die vollständige Kette von Ereignissen an XHTML weitergereicht wird, sollte der Anwendungsverfasser vorsichtig sein, nicht mehrere Ereignisse gleichen Typs zu verketten. Die VoiceXML-Fehlerereignis-Untertypen error.semantic, error.badfetch, error.unsupport.element, etc., werden als vxmlerror-Ereignistyp an XHTML weitergegeben. Dies entspricht den VoiceXML-Spezifikationen. Es erlaubt grafischen Anwendungen zusätzliche Fehler-Untertypen zu definieren, welche durch den grafischen Browser abgearbeitet werden können. Weitere allgemeine, anwendungsdefinierte Ereignistypen werden ebenso unterstützt. Falls ein anwendungsdefinierter Ereignistyp, wie zum Beispiel "foo.bar", innerhalb eines VoiceXML-Formulars definiert wird, dann wird er, wenn das Ereignis in dem Formular ausgelöst wird, an XHTML als XML-Events-Ereignis weitergegeben. Im untenstehenden Beispiel werden sowohl vxmlnoinput- als auch foo.bar-Ereignisse durch den grafischen Browser durch den XML-Events-Listener-Tag abgearbeitet. Beachten Sie, dass das ViceXML-Formular existiert da das foo.bar-Ereignis nicht innerhalb des Formulars abgehandelt wird.

<vxml:form id="ex1">
   <vxml:catch event="noinput">
      <vxml:throw event="foo.bar"/>
   </vxml:catch>

   <vxml:field name="f1">
      <vxml:grammar type="boolean"/>
      <vxml:prompt>Say yes or no</vxml:prompt>
   </vxml:field>
</vxml:form>

<ev:listener ev:observer="ex1" ev:event="vxmlnoinput" ev:handler="#h1"/>
<ev:listener ev:observer="ex1" ev:event="foo.bar" ev:handler="#h2"/>

Zusätzlih zu den oben aufgelisteten VoiceXML-Ereignstypen unterstützt XHTML+Voice den vxmldone-Ereignistyp. Das vxmldone-Ereignis wird generiert, wenn das aktuell laufende VoceXML-Formular ohne Fehler beendet wurde. Alle von XHTML+Voice unterstützten Ereignis-Typen sind im XML Events Modul aufgeführt.

1.3.5 Verbinden von Dokumenten durch Sprache

Das verbinden von Dokumenten durch Sprache ist dem Verfasse möglich. Sei ein XHTML+Voice-Dokument mit den folgenden <link> und <a>-Elementen gegeben:

<link rel="glossary" title="Glossary" href="glossary.html"/>
<link rel="contents" title="Contents" href="contents.html"/>
<a href="chapter3.html" title="Next Page" rel="next">Next</a>
<a href="chapter1.html" title="Previous Page" rel="previous">Previous</a>
<a href="http://www.nytimes.com" title="New York Times">NY Times</a>

Die folgende Grammatik kann, wie unten gezeigt, erzeugt werden. Der Dokument-Verfasser verwendet das rel-Attribut um das Verbinden von Dokumenten für ein ausgewähltes Set von <link> und <a>-Elementen zu ermöglichen. Für jedes Element mit einem rel-Attribut werden die rel und href-Attribut-Werte zur Grammatik hinzugefügt, wobei die rel-Werte das sind, was der Benutzer sagen könnte und der href-Wert die zugehörige URI ist. Falls das rel-Attribut weggelassen wird kann das title-Attribut verwendet werden um eine Linkaktivierungsgrammatik für alle <a>-Elemente im Dokument zu erzeugen.

#JSGF V1.0 iso-8859-1;
grammar document-links;

public <document-links> = Glossary {this.$value="glossary.html"}
             | Contents {this.$value="contents.html"}
             | Next Page {this.$value="chapter3.html"}
             | Previous Page {this.$value="chapter1.html"}
             | New York Times {this.$value="http://www.nytimes.com"};

Der Grammatikgültigkeitsbereich der Grammatik ist das Dokument sodass sie immer aktiv ist. Solange XHTML+Voice das Verfassen einer Grammatik mit dokumentweitem Gültigkeitsbereich innerhalb eines Formulars nicht unterstützt, sollte der multimodale Browser Grammatiken mit dokumentweitem Gültigkeitsbereich zur Verbindung und Befehlskontrolle von Dokumenten unterstützen.

1.3.6 Akustische Style-Sheets

Durch den Zusatz des src und expr-Attributs zum VoiceXML <prompt>-Element ist XHTML+Voice in der Lage, aktusitische Style-Sheets, die entsprechende [CSS2] deklariert sind, zu unterstützen. Innheralb von XHTML kann ein Absatz mit dem auf "warnPara" gesetzten id-Atribut wie folgt durch die CSS-"warn"-Klasse gestylet werden:

<p id="warnPara" class="warn">warning</p>

Das CSS hat grafische und akustische Regeln für die Klasse "warn". Wenn das VoiceXML-<form> ein prompt mit dem src-Attribut, das auf den Absatz gesetzt wird, verarbeitet werden die akustischen Regeln für "warn" einbezogen. Der VoiceXML Prompt SRC- und EXPR-Attribute-Abschnitt bietet mehr Details und vollständige Beispiele.

2 VoiceXML 2.0-Modul

Dieser Abschnitt modularisiert zuerst VoiceXML 2.0 und spezifiziert dann die verschiedenen VoiceXML 2.0-Module, die in der Erstellung des XHTML+Voice-Profils verwendet wurden.

2.1 Modularisierung von VoiceXML 2.0

Die die Modularisierung ausmachenden Dateien des VoiceXML 2.0 SCHEMA sind als voice-xml-modules.zip erhältlich und wurden erstellunt um den Integrationsprozess von VoiceXML 2.0 und XHTML zu erleichtern. Diese Module ändern nicht die VoiceXML 2.0-Sprache wie sie von der "Voice-Browser Working Group" des W3C spezifiziert wird. Dieser Abschnitt gibt eine high-level Übersicht über jedes Modul.

Tabelle 1: VoiceXML Module
Modul Zweck Elemente XHTML+VoiceXML?
Events Ereignisse, die vom VoiceXML-Abwickler erzeugt werden catch help noinput nomatch error throw Y
Executable statements Ausdrücke, die in Voice-Handlern verwendet werden assign clear var log reprompt Y
Filled invoked Voice-Handler wenn ein Slot gefüllt wird filled Y
Flow control Flow control-Konstrukte aus VoiceXML if else elseif return Y
Forms Encapsulate Sprachdialoge form field record subdialog block initial Y
Miscellaneous Non-local transfers in VoiceXML exit goto link script submit N
Menus VoiceXML-Menüs menu choice N
Object Fremde Objekte für VoiceXML object N
Resources Angabe von Quellen (=resource) für VoiceXML param property Y
Root Alleinstehende VoiceXML-Dokumente vxml meta metadata N
Enumerate Zählt dem Benutzer verfügbare Auswahlen (=choices) oder Optionen auf enumerate Y
Option Gibt eine Option in einem Feld an option Y
Output Sprach- und Audio-Ausgaben prompt value audio desc emphasis lexicon mark voice break prosody say-as sub phoneme p s meta metadata Y
Telephony Telefoniekontrolle transfer disconnect N
User Input Pracheingabekonstrukte aus VoiceXML grammar lexicon example tag token item meta metadata one-of rule ruleref Y
Attributes Common in VoiceXML verwendete Attribute NA Y
Datatypes Common in VoiceXML verwendete Datentypen NA Y
Document Model Definiert das Inhaltsmodell für VoiceXML-Elemente NA N

2.2 Sprachdialoge

Die Module vxml-exec-1.xsd, vxml-filled-1.xsd, vxml-resource-1.xsd, vxml-flow-1.xsd, vxml-enumerate-1.xsd, vxml-option-1.xsd und vxml-form-1.xsd unterstützen das verfassen von Handlern, die Sprachdialoge implementieren.

2.3 Ausführbare Inhalt

Die Module vxml-filled-1.xsd, vxml-flow-1.xsd, vxml-exec-1.xsd und vxml-resource-1.xsd beschreiben Konstrukte zur Verwendung innerhalb von Voice-Handlern. Die Semantik dieser Konstrukte ist wie in den VoiceXML 2.0 Spezifikationen definiert.

2.4 Sprachgrammatik

Das Sprachgrammatik-Modul bietet Konstrukte für das Verfassen von Sprachgrammatiken wie es in VoiceXML 2.0 spezifiziert wird. Die Module werden vom normativen VoiceXML 2.0 SCHEME bereitgestellt und sind unverändert: grammar-core.xsd, grammar.xsd, vxml-grammar-restriction.xsd und vxml-grammar-extension.xsd. Die Einschränkungs- und Erweiterungs-Module erlauben es Elementen und Attributen, die normativ durch die Sprachgrammatik-Spezifikationen [Speech Grammars] spezifiziert werden, innerhalb des VoiceXML 2.0-Namensraums eingebunden zu werden.

2.5 Sprach- und andere Audioausgaben

Die Sprach- und Audio-Ausgabemodule definieren Konstrukte um gesprochene und nichtgesprochene Audio-Ausgaben anzubieten. Die Module werden vom normativen VoiceXML SCHEMA bereitgestellt und sind unverändert: synthesis-core.xsd, synthesis.xsd, vxml-synthesis-restriction.xsd und vxml-synthesis-extension.xsd. Wie bei dem Sprachgrammatik-Modul auch sind die Elemente und Attribute, die normativ in den SSML-Spezifikationen [SSML 1.0] definiert sind, im VoiceXML 2.0-Namensraum eingebunden.

2.6 Ereignisbehandlung

Das Modul vxml-events-1.xsd beschreibt die Ereignis-Typen, die in VoiceXML 2.0 definiert werden.

3 XHTML Moularisierung

Dieser Abschnitt ist normativ.

3.1 Document Conformance

Ein konformes XHTML+Voice-Dokument ist ein Dokument, das nur die in dieser Spezifikation als notwendig beschriebenen Fähigkeiten benötigt. Auf ein solches Dokument müssen alle folgenden Kriterien zutreffen:

  1. Es muss nach dem XML-Schema wie es in schema zu finden und in diesem Dokument bereitgestellt ist valide, gültig,.

  2. Das Wurzelelement des Dokuemnts muss html sein.

  3. Der Name des Standardnamensraums des Wurzelelements muss der XHTML-Namensraumsname sein: http://www.w3.org/1999/xhtml.

  4. Falls eine DOCTYPE-Deklaration vorhanden und ein öffentlicher Bezeichner, dem "public identifier", eingebunden ist, so muss die DOCTYPE-Deklaration die DTD durch die Verwendung seines formalen öffentlichen Bezeichners referenzieren, wie sie in diesem Dokument bereitgestellt ist. Der system-Bezichner kann passend modifiziert werden.

    <!DOCTYPE html PUBLIC "-//VoiceXML Forum//DTD XHTML+Voice 1.2//EN"
    "http://www.voicexml.org/specs/multimodal/x+v/12/dtd/xhtml+voice12.dtd">

3.2 User Agent Conformance

Der User-Agent muss mit dem "User Agent Conformance"-Abschnitt der XHTML-Spezifikationen [XHTML 1.0], Abschnitt 3.2, übereinstimmen und die in den VoiceXML-Modulen [VoiceXML 2.0] aufgezählten Übereinstimmungsanforderungen vom Integrationsprofil unterstützt werden.

Der User-Agent muss zusätzlich mit den folgenden User-Agent-Regeln übereinstimmen:

  1. Falls der User-Agent behauptet, Fähigkeiten wie sie in den VoiceXML 2.0-Spezifikationen definiert sind oder Fähigkeiten, die von dieser Spezifikation durch normative Referenzen benötigt werden, zu unterstützen, so muss er es auf eine mit den Fähigkeitendefinitionen übereinstimmendem Weg machen.

3.3 XHTML Namensraumeinbindung

Der Standard-XML-Namensraum eines XHTML+Voice-Dokuments ist XHTML. XHTML+Voice erweitert XHTML mit VoiceXML, XML Events und XHTML+Voice-Erweiterungen. Die VoiceXML-, XML Events- und XHTML+Voice-Erweiterungs-Elemente und -Attribute werden durch zusätzliche Namensraumdeklarationen eingebunden:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:vxml="http://www.w3.org/2001/vxml"
      xmlns:ev="http://www.w3.org/2001/xml-events"
      xmlns:xv="http://www.voicexml.org/2002/xhtml+voice">

Der Name der einmaligen Bezeichners für den Namensraum innerhalb des Dokuments, zum Beispiel vxml für VoiceXML-Elemente, bleibt dem Ermessen des Autors überlassen.

3.4 XHTML+Voice Profil

Die XHTML-Funktionalität im XHTML+Voice-Dokumenttyp basiert auf den XHTML Modulen wie sie in [XHTML Modularization] definiert sind. Das XHTML+Voice-Profil umfasst die XHTML Module, die in [XHTML Basic] definiert sind, wie die Grund-XHTML-Formular- und Tabellen-Module. Zu den Grund-XHTML-Modulen hinzugefügt wurden die folgenden Module:

  • Das XHTML-Scripting-Modul.
  • XML-Events wie durch das XML Events-Modul, [XML Events], definiert. XML Events mit VoiceXML-Ereignistypen und Event-Handlern erlauben es dem XHTML-Autor Sprachinteraktionen mit spezifischen Verhalten zu verbinden.
  • Einem Set von VoiceXML-Modulen um XHTML-Konstrukte sprachfähig zu machen. Das top level VoiceXML-Element um einen Voice-Handler zu definieren ist <form>.
  • Eine XHTML+Voice-Erweiterungsmodul um das Verfassen von Interaktionen zwischen grafischen und Sprach-Modulen möglich zu machen

Die Notation, terms und Dokument-Konventionen, die hier verwendet werden, sind [XHTML 1.1] entlehnt.

Das Profil beinhaltet das XHTML Grundmodul, definiert in [XHTML Basic], das XHTML-Scripting-Modul definiert in [XHTML 1.1], dem XML Events-Modul definiert in [XML Events], dem XHTML+Voice-Erweiterungsmodul definiert im XHTML+Voice Erweiterungsmodul und den folgenden VoiceXML 2.0-Modulen:

3.5 XHTML+Voice abstrake Module

Die in diesen Modulen verwendeten Namensräume sind die folgenden:

XHTML:
http://www.w3.org/1999/xhtml
VoiceXML:
http://www.w3.org/2001/vxml
XML Events:
http://www.w3.org/2001/xml-events
XHTML+Voice:
http://www.voicexml.org/2002/xhtml+voice

3.5.1 Abstrakte Module

Tabelle 2: Abstrakte XHTML+Voice Module
Element Kindelemente Attribute
Base Module (XHTML)
base LEER href* (URI)
Basic Forms Module (XHTML)
form Heading | Block - form Common, action* (URI), method ("get"* | "post"), enctype (ContentType)
input LEER Common, Access, checked ("checked"), maxlength (Number), name (CDATA), size (Number), src (URI), type ("text"* | "password" | "checkbox" | "radio" | "submit" | "reset" | "hidden" ), value (CDATA)
label (PCDATA | Inline - label)* Common, accesskey (Character), for (IDREF)
select option+ Common, multiple ("multiple"), name (CDATA), size (Number)
option PCDATA Common, , selected ("selected"), value (CDATA)
textarea PCDATA Common, Access, cols* (Number), name (CDATA), rows* (Number)
Basic Tables Module (XHTML)
caption (PCDATA | Inline)* Common
table caption?, tr+ Common, summary (Text), width (Length )
td (PCDATA | Flow - table)* Common, Cell, Align
th (PCDATA | Flow - table)* Common, Cell, Align
tr td+ Common, Align
Enumeration Module (VoiceXML)
enumerate (Audio | TTS)* -
Events Module (VoiceXML)
catch Exec VoiceHandler, event (NMTOKENS)
help Exec VoiceHandler
noinput Exec VoiceHandler
nomatch Exec VoiceHandler
error Exec VoiceHandler
throw LEER VoiceHandler, event (NMTOKEN), eventexpr (Script), message (CDATA), messageexpr (Script)
Executable Statements Module (VoiceXML)
assign LEER Expr
clear LEER namelist (CDATA)
var LEER Expr
log (PCDATA | value)* label (CDATA), expr (Script)
reprompt LEER -
Filled Module (VoiceXML)
filled (Exec)* mode("any" | "all"*), namelist (CDATA)
Flow Control Module (VoiceXML)
if (Exec | elseif | else)* cond (Script)
else LEER -
elseif LEER cond (Script)
return LEER namelist (CDATA), event (NMTOKEN), eventexpr (Script), message (CDATA), messageexpr (Script)
Forms Module (VoiceXML)
form (Form)* id (ID)
field (Audio | EventHandler | filled | enumerate | grammar | link | vxml:option | prompt | property)* Item, type (GrammarType), slot (NMTOKEN ), modal (Boolean), xv:id (ID)
record (Audio | EventHandler | filled | grammar | prompt | property)* Item, type (ContentType), beep (Boolean), maxtime (Duration), modal (Boolean), dtmfterm (Boolean), finalsilence (Duration)
subdialog (Audio | filled | param | prompt | property)* Item, Cache, Submit, src (URI), srcexpr (Script), fetchaudio (URI)
block Exec Item
initial (Audio | EventHandler | link | prompt | property)* Item
Hypertext Module (XHTML)
a (PCDATA | Inline - a)* Common, Access, Linking, hreflang (LanguageCode)
Image Module (XHTML)
img LEER Common, Dim, alt* (Text), longdesc (URI), src* (URI)
Link Module (XHTML)
List Module (XHTML)
dl (dd | dt)+ Common
dt (PCDATA | Inline)* Common
dd (PCDATA | Flow)* Common
ol li+ Common
ul li+ Common
li (PCDATA |Flow)* Common
Metainformation Module (XHTML)
meta LEER I18N, content* (CDATA), http-equiv (NMTOKEN), name (NMTOKEN), scheme (CDATA)
Object Module (XHTML)
object (PCDATA | Flow | param)* Common, Dim, archive (URI), classid (URI), codebase (URI), codetype (ContentType), data (URI), declare ("declare"), name (CDATA), standby (Text), tabindex (Number), type (ContentType)
param LEER id (IDREF), name* (CDATA), type (ContentType), value (CDATA), valuetype ("data"* | "ref" | "object")
Option Module (VoiceXML)
vxml:option PCDATA dtmf (CDATA), value (CDATA)
Output Module (VoiceXML) Ausgaben-Modul
prompt (Audio | TTS | lexicon | meta | metadata)* I18N, VoiceHandler, bargein (Boolean), bargeintype ("speech" | "hotword"), timeout (Duration), xml:base (URI), version ("1.0"), xv:src (URI), xv:expr (CDATA)
value LEER expr (Script)
audio (Audio | TTS | desc)* Cache, src (URI), expr (Script)
desc PCDATA xml:lang (NMTOKEN)
lexicon LEER uri (URI), type (ContentType)
emphasis SentenceContent level ("strong" | "moderate"* | "none" | "reduced")
voice (SentenceContent | Structure)* I18N, gender ("male" | "female" | "neutral"), age (Number), variant (Number), name (CDATA)
break LEER strength ("x-weak" | "weak" | "medium"* | "strong" | "x-strong" | "none"), time (Duration)
prosody (SentenceContent | Structure)* pitch (CDATA), contour (CDATA), range (CDATA), rate (CDATA), duration (Duration), volume (CDATA)
say-as (PCDATA | value)* interpret-as (NMTOKEN), format (NMTOKEN), detail (CDATA)
meta LEER name (NMTOKEN), content (CDATA), http-equiv (NMTOKEN)
metadata ANY  
phoneme PCDATA ph (CDATA), alphabet (CDATA)
p (SentenceContent | s)* I18N
s SentenceContent I18N
sub PCDATA alias (CDATA)
mark LEER name (CDATA)
Resources Module (VoiceXML)
param LEER Expr, value (CDATA), valuetype ("data"* | "ref"), type (CDATA)
property LEER name (NMTOKEN), value (CDATA)
Scripting Module (XHTML)
script PCDATA charset (CharSet), defer ("defer"), src (URI), type* (ContentType), xml:space="preserve", declare ("declare")
noscript (Heading | Block | List)+ Common
Structure Module (XHTML)
body (Heading | Block | List)* Common
html head, body I18N, version (CDATA), xmlns (URI = "http://www.w3.org/1999/xhtml")
title PCDATA I18N
Text Module (XHTML)
abbr (PCDATA | Inline)* Common
acronym (PCDATA | Inline)* Common
address (PCDATA | Inline)* Common
blockquote (PCDATA | Heading | Block | List)* Common, cite (URI)
br LEER Core
cite (PCDATA | Inline)* Common
code (PCDATA | Inline)* Common
dfn (PCDATA | Inline)* Common
div (PCDATA | Flow)* Common
em (PCDATA | Inline)* Common
h1 (PCDATA | Inline)* Common
h2 (PCDATA | Inline)* Common
h3 (PCDATA | Inline)* Common
h4 (PCDATA | Inline)* Common
h5 (PCDATA | Inline)* Common
h6 (PCDATA | Inline)* Common
kbd (PCDATA | Inline)* Common
p (PCDATA | Inline)* Common
pre (PCDATA | Inline)* Common, xml:space="preserve"
q (PCDATA | Inline)* Common, cite (URI)
samp (PCDATA | Inline)* Common
span (PCDATA | Inline)* Common
strong (PCDATA | Inline)* Common
var (PCDATA | Inline)* Common
User Input Module (VoiceXML) Benutzereingaben-Modul
grammar (PCDATA | meta | metadata | lexicon | tag | rule)* Cache, I18N, version (NMTOKEN), root (IDREF), mode ("voice"* | "dtmf"), src (URI), scope ("document" | "dialog"), type (ContentType), weight (CDATA), tag-format (URI), xml:base (URI)
example PCDATA  
lexicon LEER uri (URI), type (ContentType)
tag PCDATA  
token PCDATA I18N
item (RuleExpansion)* I18N, weight (NMTOKEN), repeat (NMTOKEN), repeat-prob (NMTOKEN)
meta LEER name (NMTOKEN), content (CDATA), http-equiv (NMTOKEN)
metadata ANY  
one-of (item)+ I18N
rule (RuleExpansion | example)* id (ID), scope ("private"* | "public")
ruleref LEER uri (URI), type (ContentType), special ("NULL" | "VOID" | "GARBAGE")
XML Events Module (XML Events)
listener LEER XEvents
XHTML+Voice Extension Module (XHTML+Voice)
sync LEER

input (NMTOKEN), field (URI), html-form-id (IDREF)

cancel LEER

id (ID), voice-handler (URI)

Elements Attributes  
vxml:field& id (ID)  
vxml:prompt& src (URI) | expr (CDATA)  

3.5.2 Kurzschreibweisen für Elementinhalte

Tabelle 3: Elemententitäten und -Inhalte
Elemententität Inhalt
Audio (VoiceXML) PCDATA | audio | value | enumerate
Block (XHTML) address | blockquote | div | p | pre
EventHandler (VoiceXML) catch | help | noinput | nomatch | error
Exec (VoiceXML) Audio | assign | clear | if | log | prompt | reprompt | return | throw | var
Flow (XHTML) Heading | List | Block | Inline
Form (VoiceXML) EventHandler | grammar | filled | initial | property | record | subdialog | Variable
Heading (XHTML) h1 | h2 | h3 | h4 | h5 | h6
Inline (XHTML) a | abbr | acronym | button | br | cite | code | dfn | em | img | input | kbd | label | object | q | samp | select | span | strong | textarea
RuleExpansion (VoiceXML) PCDATA | token | ruleref | item | one-of | tag
SentenceContent (VoiceXML) Audio | SentenceElements
SentenceElements (VoiceXML) break | emphasis | phoneme | mark | prosody | say-as | voice | sub
Structure (VoiceXML) s | p
TTS (VoiceXML) SentenceElements | Structure
Variable (VoiceXML) block | field | var

3.5.3 Kurzschreibweisen für Attribute

Tabelle 4: Attributentitätenund -Inhalte
Attributentitäten Inhalt
Access (XHTML) accesskey (Character), tabindex (Number)
Align (XHTML) align ("left" | "center" | "right"), valign ("top" | "middle" | "bottom")
Cache (VoiceXML) fetchhint ("prefetch" | "safe"), fetchtimeout (Duration, maxage (Number), maxstale (Number)
Cell (XHTML) abbr (Text), axis (CDATA), colspan (Number), headers (IDREFS), rowspan (Number), scope ("row" | "col")
Common (XHTML) Core, Events, XEvents
Core (XHTML) class (NMTOKENS), id (ID), title (CDATA )
Dim (XHTML) height (Length ), width (Length)
Events (XHTML) MouseEvents , KeyEvents
Expr (VoiceXML) name (VarName), expr (Script )
I18N (XML) xml:lang (NMTOKEN)
Item (VoiceXML) name (VarName), cond (Script), expr (Script)
KeyEvents (XHTML) onkeypress (Script), onkeydown (Script), onkeyup (Script)
Linking (XHTML) charset (CharSet), href (URI), hreflang (LanguageCode), rel (LinkTypes), rev (LinkTypes), type (ContentType)
MouseEvents (XHTML) onclick (Script), ondblclick (Script), onmousedown (Script), onmouseover (Script), onmousemove (Script), onmouseout (Script)
Style (XHTML) style (CDATA )
VoiceHandler (VoiceXML) count (Number), cond (Script)
XEvents (XML Events) event, observer (IDREF), handler (URI), target (IDREF), phase ("capture" | "default"*), propagate ("stop" | "continue"*), defaultAction("cancel" | "perform"*), id

Attributtypen

Tabelle 5: Attrbuttypen
Attribute Type Description
Boolean "true" | "false"
Duration Eine positive Gleitkommazahl ("real") gefolgt von entweder "s" (Sekunden) oder "ms" (Millisekunden)
GrammarType CDATA
VarName NMTOKEN oder NMTOKEN mit angehangenem "$"

4 XML Events Modul

4.1 Listener

XHTML+Voice erweitert XHTML mit dem XML Events <listener>-Element und seinen Attributen. Die <listener>-Attribute sind XHTML primär hinzugefügt worden um Voice-Handler zu aktivieren. Das <listener>-Element und seine Attribute gehören zum XML Events-Namensraum:

xmlns:ev="http://www.w3.org/2001/xml-events"

4.2 Ereignistypen

Für eine gegebene XML-Sprache erweitert mit XML Events muss ein Set von Ereignistypen unabhängig vom [XML Events]-Modul spezifiziert werden. Die XML Events-Ereignistypen, die vom XHTML+Voice-Profil unterstützt werden, beinhalten alle Ereignistypen, die für die [HTML 4.01] wesentlichen Ereignisse definiert sind. Die Aktivierung von VoiceXML-Handlern wird spezifiziert durch das Einbinden einer dieser Ereignistypen in einem XHTML-Element und einer ID-Referenz auf das VoiceXML-Formular als ein XML-Events-Event-Handler.

Das XHTML+Voice-Profil unterstützt die folgenden VoiceXML 2.0 Ereignistypen: nomatch, noinput, error und help. Diese Ereignistypen werden vom XHTML-Kontainer als folgenden XHTML+Voice-Ereignistypen asgelöst: vxmlnomatch, vxmlnoinput, vxmlerror beziehungsweise and vxmlhelp. Die VoiceXML exit- und cancel-Ereignistypen werden innerhalb des VoiceXML-Formulars unterstützt, nicht jedoch an den grafischen Browser weitergegeben. Ereignistypen, die vom Autor innerhalb von VoiceXML definiert werden, auch als anwendungsdefinierte Ereignistypen bezeichnet, werden ebenfalls an den grafischen Browser weitergegeben. Trotzdem unterstützt das VoiceXML <form>-Element das Hinzufügen von XML Events-Attributen nicht.

Ein weiterer XHTML+Voice-Ereignistyp, "vxmldone", wird unterstützt. Das vxmldone-Ereignis wird generiert, wenn der Voice-Handler fertig ist.

Das XHTML+Voice-Profil erweitert das XHTML <script>-Element durch XML Events. Das <script>-Element selbst generiert kein Ereignis, sodass das observer-Attribut notwendig ist um das Überwachen eines XML Events-Ereignis in einem anderen Knoten des XHTML-Baum zu spezifizieren. Das <script>-Element kann jedes wesentliche HTML 4.01-Ereignis oder VoiceXML-Ereignis überwachen. Hier ist ein Beispiel, wie ein <script>-Element einen Handler für das "vxmldone"-Ereignis sein kann. Der Wert des XHTML-Imput "drink" wird aktualisiert, wenn der Voice-Handler "fid" endet:

<?xml version="1.0"?>
<html xmlns="www.w3.org/1999/xhtml"
      xmlns:ev="http://www.w3.org/2001/xml-events"
      xmlns:vxml="http://www.w3.org/2001/vxml"
      xmlns:xv="http://www.voicexml.org/2002/xhtml+voice" >
  <head><title>Script Event Handler</title>

    <script type="text/javascript"
      ev:event="vxmldone" ev:observer="fid" declare="declare">
      document.xform.drink.value = application.lastresult$[0].utterance;
    </script>
    <vxml:form id="fid">
      <vxml:field name="f1">
        <vxml:grammar src="drink.gram"/>
        <vxml:prompt>Coffee, tea, or milk?</vxml:prompt>
      </vxml:field>
    </vxml:form>

  <body>
    <form id="xform" action="cgi/submit">
      <input type="text" id="drink" ev:event="focus" ev:handler="#fid"/>
    </form>
  </body>
</html>

Beachten Sie, dass das "declare"-Attribut notwendig ist um zu verhindern, dass der <script>-Inhalt bereits zum Ladezeitpunkt des Dokuments ausgeführt wird.

Die folgende Tabelle zeigt die XHTML+Voice-Ereignistypen und die XHTML oder VoiceXML-Elemente, die sie unterstützen. Falls das <listener>-event-Attribut zu einem XHTML-Element hinzugefügt ist, so muss es einen Ereignistypen spezifizieren, der von dem Element in der rechten Spalte unterstützt wird. Da die HTML 4.01-Ereignistypen in XML Events Ereignistypen übersetzt wurden, wurde das "on"-Prefix dieser Ereignisse entfernt.

Tabelle 6: XHTML+VoiceXML Ereignistypen
Elemente Ereignistyp
XHTML body load, unload
Die meisten XHTML-Elemenet click, dblclick, mousedown, mouseup, mouseover, mouseout, keypress, keydown, keyup
Die XHTML-Elemente: a, label, input, select, textarea, button focus, blur
XHTML-Formular (form) submit, reset
Die XHTML-Elemente: input, textarea select
Die XHTML-Elemente: input, select, textarea change
VoiceXML-Formular (form) vxmlnomatch, vxmlnoinput, vxmlerror, vxmlhelp, vxmldone, "user defined"

4.2.1 DOMActivate

Ein Voice-Handler kann durch das Auslösen eines DOMActivate Ereignisses innerhalb eines XHTML <script>-Elements aktiviert werden. Hier ist ein Beispiel das zeigt, wie ein Voice-Handler durch ein Script-Event-Handler, Script-Ereignisabwickler, als Antwort auf ein in einem <paragraph>-Element überwachtes "click"-Ereignis aktiviert werden kann.

<?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:vxml="http://www.w3.org/2001/vxml"
      xmlns:ev="http://www.w3.org/2001/xml-events"
      xmlns:xv="http://www.voicexml.org/2002/xhtml+voice" >
   <head><title>Find City or Airport</title>

      <script ev:event="click"
                 ev:observer="prompt" declare="declare">
         var e = document.createEvent("UIEvents");
         e.initEvent("DOMActivate","true","true");
         document.getElementById("vform").dispatchEvent(e);
      </script>

      <script ev:event="vxmlhelp"
                 ev:observer="vform" declare="declare">
         alert('Say a U. S. city or airport name');
      </script>

      <xv:sync xv:name="city" xv:field="cityorairport"/>

      <vxml:form id="vform">
         <vxml:field name="cityorairport" xv:id="cityorairport">
            <vxml:prompt xv:src="#prompt"/>
            <vxml:grammar src="grams/cityorairport.gram"/>
            <catch event="noinput nomatch">
               For example, say Chicago O'Hare.
            </catch>
         </vxml:field>
      </vxml:form>

   </head>
   <body bgcolor="#FFFFFF">
      <h3>City or Airport</h3>
      <form name="xform" action="cgi/cityorairport.jsp">
         <p id="prompt">Enter city or airport:</br>
            <input type="text" name="city"/>
         </p>
      </form>
   </body>
</html>

Immer wenn ein Voice-Handler durch ein DOMActivate-Ereignis aktiviert wird, können die vom Voice-Handler generierten VoiceXML-Ereignisse im VoiceXML-<form>-Element selbst überwacht werden. Im obenstehenden Beispiel überwacht ein <script>-Element das "vxmlhelp"-Ereignis im VoiceXML-Fomular.

Ein Voice-Handler kann ebenso durch das erzeugen und auslösen eines DOMActivate-Elements für das XHTML+Voice <cancel>-Element in ähnlicher Weise abgebrochen werden. Beachten Sie, dass das Ergebnis des Auslösens eines DOMActivate Ereignisses bevor das "load"-Ereignis eintritt undefiniert ist.

4.3 XHTML+Voice Ereignisvererbung

XML Events in einem XHTML+Voice-Dokument breiten sich innerhalb des XHTML-Baums aus. Das folgende Diagramm zeigt die Abfang- und Aufstiegs-Phase eines XML Events-Ereignisses wie es vom HTML-Wurzel-Tag zum Zieleingabefeld und vom Zieleingabefeld zurück zur HTML-Wurzel wandert. Der gezeigte Fluss der Ereignisse kann als Reaktion auf das Klicken eines Benutzers auf ein Texteingabefeld gezeigt werden.

Fluss von XML Events in XHTML+Voice
Ereignisfluss in X+V

Für ein XML Events-Ereignis, das von einem VoiceXML-Formular ausgelöst wird, ist das Ziel des Ereignisses das XHTML-Element, das das VoiceXML-Formular aktiviert hat. Das erlaubt einem Listener ein VoiceXML-Ereignis, wie vxmldone, im XHTML-Formular oder body-Element zu überwachen wobei das Ziel ein im Formular enthaltenes input-Element ist. Hier ist ein Beispiel das zeigt, wie das vxmldone-Ereignis im XHTML-body-Element überwacht werden kann.

<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE html PUBLIC "-//VoiceXML Forum//DTD XHTML+Voice 1.2//EN"
"http://www.vxmlforum.org/specs/multimodal/x+v/12/dtd/xhtml+voice12.dtd">
<html xmlns="http://www.w3.or/1999/xhtml"
      xmlns:ev="http://www.w3.org/2001/xml-events"
      xmlns:vxml="http://www.w3.org/2001/vxml">
<head><title>Flight Information</title>
<script>
  var sel = "";
</script>

<script id="selectFlight" ev:event="vxmldone"
           ev:observer="bodyelm" declare="declare">
   alert("You selected "+sel);
</script>

<vxml:form id="flightform">
   <vxml:field name="flightno">
    <vxml:prompt>Say a flight number.</vxml:prompt>
    <vxml:grammar> <![CDATA[
        #JSGF V1.0;
        grammar flight_number;
        public <flight> = American 1246 {$="American flight 1246"}
                        | Delta 590 {$="Delta flight 590"}
                        | United 480 {$="United flight 480"};
        ]]></vxml:grammar>
    <vxml:catch event="help nomatch noinput">
       Say United 480, for example.
    </vxml:catch>
  </vxml:field>
  <vxml:filled>
     <vxml:assign name="sel" expr="flightno"/>
  </vxml:filled>
</vxml:form>

</head>
<body id="bodyelm">
  <table>
    <thead>
    <td>flight no</td><td>Depart city</td><td>Arrive City</td>
    <td>Depart Time</td><td>Arrive Time</td>
    </thead>
    <tr>
      <td><a href="" ev:event="focus" ev:handler="#flightform">
      American 1246</a></td><td>Miami</td><td>New York</td>
      <td>10:50 AM</td><td>3:20 PM</td>
    </tr>
  </table>
</body>
</html>

5 XHTML+Voice Erweiterungsmodul

Das XHTML+Voice Erweiterungsmodul, das XHTML Extension Module, erweitert XHTML+Voice 1.0 mit dem <sync>-Element und dem id-Attribut des VoiceXML-field-Elements. Das Element und Attribute in diesem Modul gehören zu ihrem bekannten Namensraum:

xmlns:xv="http://www.voicexml.org/2002/xhtml+voice"

5.1 Sync

Das XHTML+Voice <sync>-Element fügt Unterstützung für die Synkronisation von eingegebenen Daten per Sprache oder grafischen Eingaben hinzu. Es synkronisiert die value-Eigenschaft eines XHTML-Eingabebedienelements mit einem VoiceXML-Feld wie folgt:

  1. Sprachdialogergebnisse werden sowohl im VoiceXML-field als auch im XHTML <input>-Element zurückgegeben.
  2. Tastaturdaten, die in einem <input>-Element eingegeben werden, aktualisieren sowohl das VoiceXML-field als auch das XHTML-<input>-Element.
  3. Für ein aktives VoiceXML-Formular mit mehreren Feldern wird, wenn der Benutzer einem Eingabefeld den Fokus gibt, der FIA veranlasst, das referenzierte VoiceXML-field als nächtes Element aufzusuchen.

Sync aktiviert keinen Voice-Handler. Falls das <sync>-Element ein XHTML-Eingabeelement referenziert hat aber aktuell kein VoiceXML-Formular aktiv ist, so passiert nichts. Falls ein Ereignis und ein Event-Handler ebenfalls spezifiziert sind, dann wird, wenn der Benutzer auf ein Eingabebedienelement klickt, das VoiceXML-Formular aktiviert und die guard conditions der VoiceXML-Formular-Elemente werden gelöscht. Das XHTML-Eingabebedienelement wird nicht gelöscht falls bereits Daten vorhanden sind.

Nur Änderungen, die während das VoiceXML-Formular aktiv ist gemacht werden, werden synkronisiert. Ein existierender XHTML-Eingabewert aktualisiert nicht das synkronisierte VoiceXML-<field> wenn das VoiceXML-Formular aktiviert wird.

Die Attribute des <sync>-Elements sind:

Tabelle 7: <sync>-Attribute
input Der Name eines XHTML-Eingabebedienelements.
field Ein URI, der eine field-ID innerhalb eines VoiceXML-Formulars referenziert
html-form-id Eine Referenz auf die ID des das Eingabefeld umschließende XHTML-Formular.

Der Typ des input-Attributs ist NMTOKEN. Der Typ des field-Attribut ist URI. Der URI muss einen Fragmentbezeichner beinhalten, der eine VoiceXML-<field>-ID referenziert. Falls das <field>-Element eine externe Datei ist, dann wird der Fragmentbezeichner an den URI angehängt.

Nur das html-form-id-Attribut ist optional. Falls das Attribut aus dem <sync>-Element weggelassen wird, so wird angenommen, dass das XHTML-Eingabefeld von dem ersten XHTML-Formular im Dokument eingeschlossen wird (in der Dokumentreihenfolge). Der Typ des html-form-id-Attributs ist IDREF.

Die Beispiele What You See Is What You Can Say und Mixed-initiative Conversational Interface verwenden beide das <sync>-Element um XHTML-Eingaben und VoiceXML-Felder zu synkronisieren.

5.1.1 Standardgrammatiken für XHTML-Bedienelemente

Ein VoiceXML-field wird gefüllt wenn der Ausdruck des Benutzers einem Wort oder einer Phrase im Grammatikfeld entspricht. Die Grammatik, in Zusammenhang mit der [Semantic Interpretation], semantischen Interpretation,, bestimmt, wie das VoiceXML-field gefüllt wird und verwendet werden kann, um festzulegen, wie der Feldinhalt eines beliebiges XHTML-Bedienelement oder eine Gruppe von Bedienelementen durch die Verwendung von <sync> aktualisiert werden kann. Die Standardisierung der Grammatik macht einen straight-forward-Algorithmus für das Aktualisieren eines HTML-Eingabebedienelements basierend auf dem Inhalt eines VoiceXML-<field> möglich.

Die folgenden Standardgramatiken werden mit dem <sync>-Element zur Synkronisation von HTML-Bedienelementen mit den folgenden Eigenschaftstypen verwendet: radio button und radio group, checkbox und checkbox group, hidden, password, file, text, textarea, select-one, select-multiple, submit, reset, und button.

Hier ist ein Beispiel einer Grammatik für eine einfache Auswahlliste (z.B. <select>) und eine radio group (z.B. mehere HTML-inputs des Typs "radio" mit dem gleichen Namen).

<![CDATA[
  #JSGF V1.0;
  grammar crust;
  public <crust> = thin | medium | thick | chicago [style] | cheese;
]]>

Hier ist ein Beispiel einer Grammatik für eine Auswahlliste mit Mehrfachauswahl (z.B. <select multiple="multiple">) und einer checkbox group (z.B. mehrere HTML-Eingabefelder des Typs "checkbox" mit dem gleichen Namen). Jedes ausgewählte Element wird auf ein Array gepusht. Das ausgefüllte VoiceXML-field ist ein Array, das die ausgewählten Elemenete enthält.

<![CDATA[
  #JSGF V1.0;
  grammar meat_toppings;
  <meats> = bacon | chicken | ham | meatball | sausage | pepperoni;
  public <toppings> = <NULL> { $= new Array; }
                  ( <meats> [and] { $.push($meats) } )+;
]]>

Hier ist ein Beispiel für eine Grammatik für einen einzelnen radio button, einen Button (Button beinhaltet die Submit- und Reset-Buttons) oder eine Checkbox. Für ein radio-Button oder eine checkbox wird das "checked"-Attribut entsprechend dem semantischen Interpretations-Tag, enthalten in dem gefüllten VoiceXML-field, umgestellt. Bei den button-Eingabefeldern veranlasst die semantische Interpretation des Wertes "true", dass der Button geklickt wird.

<![CDATA[
  #JSGF V1.0;
  grammar pizza_extra;
  public <yesno> = no {$=false} | nope {$=false} | next {$=false} |
                                 yes {$=true} | o k {$=true};
]]>

Die Grammatik für die text, textarea, password, hidden und file-Eingabefelder benötigt keine semantische Interpretation. Der Inhalt des gefüllten VoiceXML-fields wird auf das value-Attribut dieser Eingabefelder gesetzt. Hier ist ein Beispiel:

<![CDATA[
  #JSGF V1.0;
  grammar one_twenty;
  public <onetotwenty> = 1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20;
]]>

Der Beutzer sollte immer die Option haben, "none" oder "next" zu sagen um das Aktualisieren des HTML-Bedienelement zu unterbinden. Dies wird durch das Hinzufügen einer Grammatik zu dem VoiceXML-field welches außerhalb der Standardgrammatik für dieses field ist, unterstützt. Hier ist ein Beispiel einer Grammatik, die zu einer Grammatik für Auswahllisten mit Mehrfachauswahl hinzugefügt wird um dem Benutzer das Sagen von "none" und "skip" zu ermöglichen:

<grammar>
  <![CDATA[
    #JSGF V1.0;
    grammar meat_toppings;
    <meats> = bacon | chicken | ham | meatball | sausage | pepperoni;
    public <toppings> = <NULL> { $= new Array; }
                  ( <meats> [and] { $.push($meats) } )+;
  ]]>
</grammar>
<grammar>
  <![CDATA[
    #JSGF V1.0;
    grammar no_sel;
    public <no_sel> = none | next | skip;
  ]]>
</grammar>

Beachten Sie, dass die obenstehenden Beispielegrammatiken JSGF sind, Grammatiken aber in jedem Standardformat einschließlich den SRGS-Elementen, das von VoiceXML 2.0 untestützt wird, sein können.

5.2 Cancel

Das XHTML+Voice <cancel>-Element erlaubt es einem Dokumentenverfasser einen laufenden Sprachdialog abzubrechen. Es ist ein alleinstehendes Element ohne Inhalt das als XML Events-Event-Handler referenziert werden kann.

Die Attribute des <cancel>-Elements sind:

Tabelle 8: <cancel>-Attribute
id Eindeutiger Dokumentbezeichner.
voice-handler Ein URI,der eine VoiceXML-Forular-ID referenziert.

Das id-Attribut ist notwendig. Der Typ des id-Atrributs ist ID.

Das voice-handler-Attribut ist optional. Der Typ des voice-handler-Attributs ist URI. Der URI muss ein Fragmentbezeichner beinhalten, der ein VoiceXML <form>-ID referenziert. Falls das <form>-Element in einer externen Datei ist, so muss der Fragmentbezeichner an den URI angehängt werden. Falls das voice-handler-Attribut weggelassen wird, so wird der aktuell laufende Sprachdialog abgebrochen. Falls voice-handler angegeben wird, dann wird nur der spezifizierte Voice-Handler abgebrochen.

<head><title>Cancel Example</title>
...
<xv:cancel id="cid1" xv:voice-handler="#fid1"/>
<xv:cancel id="cid2"/>
</head>
<body>
...
<input type="reset" ev:event="click" ev:handler="#cid1"/>
<button ev:event="click" ev:handler="#cid2">Cancel Voice</button>

Das obenstehende Beispiel zeigt wie <cancel> entweder den angegebenen oder den aktuell laufenden Sprachdialog abbricht. Der reset-Button in diesem Beispiel bricht den Sprachdialog ab, der durch "fid1" identifiziert wird. Der "Cancel Voice"-Button bricht den aktuell laufenden Dialog ab da das handler-Attribut im <cancel>-Element, das aktiviert wird, wenn der Button gedrückt wird, weggelasse wurde.

5.3 VoiceXML Field ID-Attribut

XHTML+Voice fügt ein optionales id-Attribut zum VoiceXML <field>-Element hinzu. Das id-Attribut wird vom field-Attribut des XHTML+Voice <sync>-Elements verwendet um eindeutig ein VoiceXML <field>-Element zu spezifizieren.

5.4 VoiceXML Prompt SRC- und EXPR-Attribute

XHTML+Voice erweitert das VoiceXML <prompt>-Element mit zwei Attributen. Das src-Attribut erlaubt die Spezifizierung einer Textquelle für eine Sprachausgabe irgendwo im Dokument oder in einem externen Dokument. Zusätzlich kann die Textquelle entsprechend den aktustischen Styling-Regeln wie sie in [CSS2] definiert sind. Ein Style-Sheet kann zum Beispiel die folgenden Styling-Regeln für das XHTML <p>-Element haben:

P.romeo { voice-family: male; volume: loud; pause-before: 20ms; }
P.juliet { voice-family: female; volume: soft; }

Ein Voice-Handler kann zwei prompts von verschiedene Textquellen im Dokument abspielen, wie folgt:

<vxml:form id="sayHello">
  <vxml:block><prompt xv:src="#hello_romeo"/>
              <prompt xv:src="#hello_juliet"/>
  </vxml:block>
</vxml:form>
<body ev:event="load" ev:handler="#sayHello">
<p id="hello_romeo" class="juliet">
    Romeo, Romeo, where art thou?
</p>
<p id="hello_juliet" class="romeo">
    I am here.
</p>
</body>

Der erste prompt spielt eine sanfte Frauenstimme. Der zweite prompt spielt eine laute Männerstimme nach einer Pause von 20ms.

Das expr-Attribut erlaubt es der Textquelle dynamisch festgelegt zu werden. Der Wert des expr-Attributs ist ein Ausdruck, der einen URI mit einem Fragmentbezeichner auswertet. Sowohl die von src referenzierte URI als auch die von expr aufgelöste URI beinhaltet ein Fragmentbezeichner, der das id-Attribut eines XML Elements referenziert, das Text für das prompt enthält. Der Typ des src-Attributs ist URI und der Typ des expr-Attributs CDATA. Exakt eines von src oder expr kann spezifiziert werden; falls beide spezifiziert sind wird ein error.badfetch-Ereignis ausgelöst.

Ein Voice-Handler kann einen prompt von einer Textquelle, die dynamisch vom expr-Attribut-Ausdruck angegeben ist, wie folgt spielen:

<vxml:form id="sayHello">
  <xvml:var name="count" expr="0"/>
  <vxml:block name="block_1">
     <vxml:prompt xv:expr="count == 0 ? '#hello_romeo' : '#hello_juliet'"/>
     <vxml:assign name="count" expr="count+1"/>
     <vxml:assign name="block_1" expr="undefined"/>
  </vxml:block>
</vxml:form>
<body ev:event="load" ev:handler="#sayHello">
<p id="hello_romeo" class="juliet">
    Romeo, Romeo, where art thou?
</p>
<p id="hello_juliet" class="romeo">
    I am here.
</p>
</body>

5.4.1 Stylen externer prompt-Quellen

Falls die prompt-Quelle eine externe Datei ist werden die Regeln für das Styling der Quelle nur auf auf das empfangene XML-Element und seine Kindelemente angewendet. Das Style-Attribut sollte zum Beispiel beachtet werden während Styling-Regelng, die von seinem Elternelement im externen Dokument geerbt werden, ignoriert werden können. Es ist ebenso in der Verantwortung des Autors, das Style-Sheet zu referenzieren, das dafür verwendet wird, die externe Quelle im Orginaldokument zu stylen. Style-Sheet-Referenzen im externen Dokument können ignoriert werden.

5.4.2 Ungültige prompt-Quellen

Falls die prompt-Quelle nicht abgespielt werden kann (z.B. weil 'src' oder 'expr' auf eine ungültige URI zeigt) wird der Inhalt des <prompt>-Elements stattdessen gespielt. Falls die prompt-Quelle nicht abgespielt werden kann und der Inhalt des <prompt>-Elements leer ist, wird das prompt nicht gespielt und kein error-Ereignis ausgelöst. Dieses Verhalten folgt den Spezifikationen von VoiceXML 2.0 <audio>-Elements.

5.4.3 Eigenschaften für das Holen der prompt-Quelle

Die VoiceXML 2.0-Attribute, die das Holen des Inhalts verbunden mit einem URI bestimmen, werden ebenso für das Holen des <prompt>-Textes verwednet. Während XHTML+Voice das fetching-Attribut nicht zum <prompt>-Element hinzufügt, wird das Holen des src URI oder einer vom ausgewerteten expr aufgelösten URI durch die VoiceXML 2.0 "documentfetchhint," "fetchtimeout," "documentmaxage," und "documentmaxstale"-Eigenschaften bestimmt. Section 6.1 der VoiceXML 2.0-Spezifikationen bietet weitere Informationen.



Anhang

A Wiederverwendbares VoiceXML

Ein VoiceXML-Formular, hier definiert als ein Event-Handler, ist praktischer wenn es in einem gelinkten Dokument abgetrennt vom XHTML als wiederverwendbare Komponente platziert werden kann. Eine wiederverwendbare Komponente erlaubt eine einfachere Beibehaltung und bietet ein Standardverhalten, dass als ein Anwendungsbaustein verwendet werden kann. VoiceXML beinhaltet ein Subdialog-Konstrukt und seine Aufrufskonventionen ist nahe an dem, was für eine wiederverwendbare Komponente notwendig ist. Das Problem ist, dass der Aufrufende sowohl die Parameter des Subdialogs wissen muss als auch die Felder, die im dem Aufrufenden zurückgegebenen ECMAScript-Objekt enthalten sind.

Es ist nicht Aufgabe dieses Profils zu versuchen, das Problem des Erstellens authentischer wiederverwendbarer Komponenten innerhalb von VoiceXML zu lösen; das ist die Aufgabe der W3C Voice Working Group. Konventionen bezüglich des Verfassens können trotzdem vorgeschlagen werden, die in den meisten Fällen funktionstüchtig sind. Ein VoiceXML-Handler kann in einer seperaten Datei platziert werden und von innerhalb des XHTML+VoiceXML-Profil-Dokuments verbunden werden falls:

Der Anhang beinhaltet ein Beispiel, wie ein Subdialog durch das Befolgen der obestehenden Konventionen bezüglich des Verfassens wiederverwendet werden kann.

B Beispiele

B.1 What You See Is What You Can Say

<?xml version="1.0"?>
<html  xmlns="http://www.w3.org/1999/xhtml"
       xmlns:vxml="http://www.w3.org/2001/vxml"
       xmlns:ev="http://www.w3.org/2001/xml-events"
       xmlns:xv="http://www.voicexml.org/2002/xhtml+voice"
>
  <head>
    <title>What You See Is What You Can Say</title>

      <!-- first declare the voice handler. -->
      <vxml:form id="voice_city_hotel">
          <vxml:field xv:id="field_city" name="field_city">
            <vxml:grammar src="city.jsgf" type="application/x-jsgf"/>
            <vxml:prompt xv:src="#city_label"/>
            <vxml:catch event="help nomatch noinput">
              For example, say Chicago.
            </vxml:catch>
          </vxml:field>

          <vxml:field xv:id="field_hotel" name="field_hotel">
            <vxml:grammar src="hotel.jsgf" type="application/x-jsgf"/>
            <vxml:prompt xv:src="#hotel_label"/>
            <vxml:catch event="help nomatch noinput">
              For example, say Hilton.
            </vxml:catch>
            <vxml:filled>
              <vxml:prompt>
                     You selected <vxml:value expr="field_hotel"/>.
                </vxml:prompt>
            </vxml:filled>
          </vxml:field>
      </vxml:form>
      <! -- done voice handler -->

      <!-- declare inputs synchronized with VoiceXML fields -->
      <xv:sync xv:input="city" xv:field="#field_city"/>
      <xv:sync xv:input="hotel" xv:field="#field_hotel"/>
      <xv:cancel id="voice_cancel"/>
  </head>
  <body ev:event="load" ev:handler="#voice_city_hotel">
    <h1>What You See Is What You Can Say</h1>

    <p>This example is a simple application that permits
      the user to enter input using either keyboard or
      stylus, or speak the same information.
    </p>
    <h2>Hotel Picker</h2>
    <p> This voice-enabled application lets you pick a hotel. </p>

    <form id="hotel_query" method="post" action="cgi/hotel.pl">
      <label id="city_label">Please enter city

      <input name="city" type="text"/>
      </label>

      <label id="hotel_label">Please enter hotel

      <input name="hotel" type="text"/>
      </label>

      <input type="submit" value="Submit"/>
      <input type="reset" value="Reset"
                 ev:event="click" xv:handler="#voice_cancel"/>
    </form>
  </body>
</html>

B.2 Mixed-initiative Conversational Interface

<?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:vxml="http://www.w3.org/2001/vxml"
      xmlns:ev="http://www.w3.org/2001/xml-events"
      xmlns:xv="http://www.voicexml.org/2002/xhtml+voice"
>
  <head>
    <title>Mixed Initiative Conversational Interface</title>

      <!-- VXML form supporting a mixed-initiative grammar -->
      <vxml:form id="voice_city_hotel">
        <vxml:grammar src="city_hotel.jsgf" type="application/x-jsgf"/>

        <!-- Mixed initiative form begins with initial prompt -->
        <vxml:initial name="start">
            <vxml:prompt xv:src="#please_choose"/>
          <vxml:help>
            Please say the name of a city and a hotel to make
            a reservation.
          </vxml:help>
          <!-- If user is silent, reprompt once, then try
               directed prompts. -->
          <vxml:noinput count="1"><vxml:reprompt/>
          </vxml:noinput>
          <vxml:noinput count="2">
             <vxml:reprompt/>
             <vxml:assign name="start" expr="true"/>
          </vxml:noinput>
        </vxml:initial>

        <vxml:field xv:id="field_city" name="field_city">
          <vxml:grammar src="city.jsgf" type="application/x-jsgf"/>
          <vxml:prompt>Please choose a city.</vxml:prompt>
          <vxml:catch event="help nomatch noinput">
            For example, say Chicago.
          </vxml:catch>
        </vxml:field>

        <vxml:field xv:id="field_hotel" name="field_hotel">
          <vxml:grammar src="hotel.jsgf" type="application/x-jsgf"/>
          <vxml:prompt>Select your hotel.</vxml:prompt>
          <vxml:catch event="help nomatch noinput">
            For example say Hilton.
          </vxml:catch>
          <vxml:filled>
              <vxml:prompt>
                You selected <vxml:value expr="field_hotel"/>.
                </vxml:prompt>
          </vxml:filled>
        </vxml:field>
      </vxml:form>
      <!-- done voice handlers -->

      <!-- declare inputs synchronized with VoiceXML fields -->
      <xv:sync xv:input="city" xv:field="#field_city"/>
      <xv:sync xv:input="hotel" xv:field="#field_hotel"/>
      <xv:cancel id="voice_cancel" xv:voice-handler="#voice_city_hotel"/>
  </head>
  <body>
    <h1>Mixed-Initiative Conversational Interface</h1>

    <p>In this example, we demonstrate a mixed-initiative dialog.  By
       activating a grammar capable of recognizing both cities and
       hotel names, for the entire application, the user can specify
       both hotel and city in a single utterance.  Alternatively,
       the user can fill one field at a time.
    </p>

    <h2>Hotel Picker</h2>
    <p>This voice-enabled application lets you pick a
       city and a hotel.
    </p>
    <form id="visual_city_hotel" method="post" action="cgi/hotel.pl"
                ev:event="focus" ev:handler="#voice_city_hotel" >
      <p id="please_choose">
      Please choose a city and hotel where you wish to stay.
      </p>

      <!-- input name attrib required except for type "text" -->
      <input name="city" type="text"/>
      <input name="hotel" type="text"/>

      <input type="submit" value="Submit" />
      <input type="reset" value="Reset"
                 ev:event="click" ev:handler="#voice_cancel"/>
    </form>
  </body>
</html>

B.3 Speech-Enabled Mail Interface

Dieser E-Mail-Nachricht aus dem Archiv der W3C-Sprachbrowser-Arbeitsgruppe wurde Sprache hinzugefügt um ein einfaches Durchsuchen der E-Mail auf hand-held-Geräten zu ermöglichen.

<?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:vxml="http://www.w3.org/2001/vxml"
      xmlns:ev="http://www.w3.org/2001/xml-events"
      xmlns:xv="http://www.voicexml.org/2002/xhtml+voice"
>
  <head>
    <title>w3c-voice-wg@w3.org from October 2001: preliminary
           draft for Multimodal Activity
    </title>
    <meta name="Author" content="Dave Raggett (dsr@w3.org)" />
    <meta name="Subject"
      content="preliminary draft for W3C multimodal activity" />
    <link rel="Stylesheet"
      href="http://www.w3.org/StyleSheets/Mail/member-message"/>

    <script language="javascript">
    // define array holding command words -> activate-id map.
    var commands = new Array();
    commands.push("__next_message");
    commands.push("__prev_message");
    commands.push("__sort_by_date");
    commands.push("__sort_by_thread");
    commands.push("__sort_by_subject");
    commands.push("__sort_by_author");
    commands.push("__more_from_this_list");
    commands.push("__other_w3c_lists");
    commands.push("__respond_to_this_message");
    commands.push("__mail_new_topic");
    commands.push("__reply_to");

    //activate takes a command word, looks it up in the commands
    // map, and activates the link.
    function activate (command) {
            var length = commands.length;
            for (var i=0;i<length;i=i++) {
                if (command == commands[i]) {
                    document.getElementById(commands[i]).click();
                    break;
                }
            }
        }
    }
    </script>

    <script ev:observer="command-and-control" ev:event="vxmldone"
            declare="declare">
        activate(application.lastresult$[0].interpretation);
    </script>

    <vxml:form id="command-and-control">
        <!-- your word is my command. -->
        <vxml:field name="word">
            <vxml:grammar jsgf="mail.jsgf"/>
            <vxml:catch event="help nomatch">
            This mail reader is speech-enabled. You can
            perform available actions via speech input.
          </vxml:catch>
      </vxml:field>
    </vxml:form>
    </head>

    <body ev:event="load" ev:handler="#command-and-control">
    <h1>preliminary draft for W3C multimodal activity</h1>

    <strong>From:</strong> Dave Raggett (
<a id="__reply_to"
href="mailto:dsr@w3.org?Subject=Re:%20preliminary%20draft%20for\
%20W3C%20multimodal%20activity&amp;In-Reply-To=&lt;Pine.WNT.4.10.10\
110301232270.-1031403-100000@hazel&gt;&amp;References=&lt;Pine.WNT.\
4.10.10110301232270.-1031403-100000@hazel&gt;">
      <em>dsr@w3.org</em>
</a>)<br />
    <strong>Date:</strong> Tue, Oct 30 2001

    <p><!-- next="start" --></p>
    <ul class="noindent">
      <li><strong>Next message:</strong>
          <a id="__next_message" href="0093.html">
 mxd@cisco.com: "Re: [dialog] &lt;record&gt;'s dest attribute"
          </a>
      </li>
    </ul>
    <ul>
      <li><strong>Previous message:</strong>
          <a id="__previous_message" href="0091.html">
 Harish Varanasi: "RE: [ dialog ] &lt;record&gt;'s dest attribute"
          </a>
        <!-- nextthread="start" -->
        <!-- reply="end" -->
      </li>
      <li><strong>Messages sorted by:</strong>
          <a id="__sort_by_date" href="index.html#92">
              [ date ]</a>
          <a id="__sort_by_thread" href="thread.html#92">
              [ thread ]</a>
          <a id="__sort_by_subject" href="subject.html#92">
              [ subject ]</a>
          <a id="__sort_by_author" href="author.html#92">
                  [ author ]</a>
      </li>
      <li><strong>Other mail archives:</strong>
        <a id="__more_from_this_list"  href="../">
            [ this mailing list ]</a>
        <a id="__other_w3c_lists"  href="../../">
            [ other W3C mailing lists ]</a>
      </li>

      <li><strong>Mail actions:</strong>
 <a id="__respond_to_this_message"
    href="mailto:w3c-voice-wg@w3.org?Subject=Re:%20preliminary\
%20draft%20for%20W3C%20multimodal%20activity&amp;In-Reply-To=\
&lt;Pine.WNT.4.10.10110301232270.-1031403-100000@hazel&gt;&amp;\
References=&lt;Pine.WNT.4.10.10110301232270.-1031403-100000@hazel&gt;">
          [ respond to this message ]</a>
 <a id="__mail_new_topic" href="mailto:w3c-voice-wg@w3.org">
     [ mail a new topic ]</a></li>
    </ul>

    <hr noshade="noshade" />
    <p><!-- body="start" --></p>
    <pre>
    Message body was here.
    </pre>
    <p><!-- body="end" --></p>

    <hr noshade="noshade" />
    <ul><!-- next="start" -->
     </ul>
    <!-- trailer="footer" -->
  </body>
</html>

B.4 Reusable VoiceXML Subdialogs

Eine Fluganfrage wird mit zwei wiederverwendbaren VoiceXML-Subdialogen abgewickelt. Ein Subdialog fragt die Abflugsstadt oder -Flughafen, der andere den Abflugstag ab.

<?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:vxml="http://www.w3.org/2001/vxml"
      xmlns:ev="http://www.w3.org/2001/xml-events"
      xmlns:xv="http://www.voicexml.org/2002/xhtml+voice" >
  <head>
    <title>Flight Query</title>

    <script src="cityorairport.es">
      var objCityOrAirport = new CityOrAirport();
    </script>

    <script src="dateinfo.es">
      <var objDateInfo = new DateInfo();
    </script>

    <vxml:form id="voice_city_from">
      <vxml:subdialog name="cityorairport"
                     src="cityorairport.vxml#cityorairportform">
        <vxml:param name="paramSubdialogObj" expr="objCityOrAirport"/>
        <vxml:param name="paramPromptQuestion"
              expr="'What city or airport are you departing from?'"/>
        <vxml:filled>
          <vxml:prompt>
          You are departing from
                        <value expr="cityorairport.returnCityOrAirport"/>.
          </vxml:prompt>
            <vxml:assign name="document.from"
                             expr="cityorairport.returnCityOrAirport"/>
        </vxml:filled>
      </vxml:subdialog>
    </vxml:form>

    <vxml:form id="voice_date_from">
      <vxml:subdialog name="dateinfo" src="dateinfo.vxml#dateform">
        <vxml:param name="paramSubdialogObj" expr="objDateInfo"/>
        <vxml:param name="paramPromptQuestion"
              expr="'What day, month, and year are you leaving?'"/>
        <vxml:filled>
          <vxml:prompt>
            You are departing on
                    <value expr="dateinfo.returnDateInfo"/>.
          </vxml:prompt>
               <vxml:assign name="document.fromDate"
                           expr="dateinfo.returnDateInfo"/>
          </vxml:filled>
        </vxml:subdialog>
    </vxml:form>

    <xv:cancel id="voice_cancel"/>

  </head>
  <body>
    <h1>Multimodal Flight Query</h1>

    <form method="post" action="/servlet/flightServlet">
      <table border="0">
        <tr>
          <td width="15%">
          <label for="from">Leaving From:</label>
          </td>
          <td colspan="2">
            <input type="text" id="from" size="20"
                   ev:event="click"
                   ev:handler="#voice_city_from" />
           </td>
        </tr>
        <tr>
          <td width="15%">
            <label for="fromDate">Travel Date:</label>
          </td>
          <td width="35%">
            <input type="text" id="fromDate" size="20"
                   ev:event="click"
                   ev:handler="voice_date_from"/>
          </td>
          <td width="50%">
            <div class="c1"><label>Time of Day:</label>
            <br />

              <table width="100%" border="0"
                               summary="leave am or pm">
                <tr>
                  <td align="left">
                    <input type="checkbox" id="departam"
                           value="checkbox"/>
                    <label for="departam">am</label> </td>
                  <td align="left">
                    <input type="checkbox" id="departpm"
                           value="checkbox"/>
                    <label for="departpm">pm</label></td>
                </tr>
              </table>
            </div>
          </td>
        </tr>
      </table>
      <br />
      <table align="center">
        <tr>
          <td width="80%">
            <input type="submit" value="Submit"/>
          </td>
          <td>
            <input type="reset" value="Reset"
                   ev:event="click" ev:handler="#voice_cancel"/>
          </td>
        </tr>
      </table>
    </form>
  </body>
</html>

C FIA für XHTML+Voice

Ein XHTML+Voice Voice-Handler wird entsprechend dem VoiceXML 2.0 Formularinterpretationsalgorithmus (FIA) abgewickelt. Da viele der VoiceXML-Elemente, wie auch Formulare mit Dokumentgrammatikbereich, nicht unterstützt werden, vereinfacht XHTML+Voice den FIA. Unten steht der FIA Pseudo-Code, der aus dem Anhang C von [VoiceXML 2.0] entnommen ist. Kommentare sind über den Abschnitten, die nicht unterstützt werden und weggestrichen sind. Zum Beispiel ist der Kommentar "No script tag" über dem gestrichenen Abschnitt platziert, der das VoiceXML 2.0 <script>-Element abwickelt.

Zu jeder Zeit während des Laufens des FIA kann eine cancel-Nachricht des grafischen Browsers abgewickelt werden müssen. Dies wird den FIA beenden. Die andere externe Nachricht ist sync für die erklärende Synkronisation der grafischen und Spracheingaben. Sync modifiziert die Auswahlphase des FIA wie folgt. Die guard condition des Feldes, das mit dem sync verbunden ist, wird gelöscht und das Feld ausgewählt. Falls das sync während des Laufs des FIA von XHTML eingegebene Daten mitträgt, so wird sync das Feld mit den Daten aktualisieren und seine guard condition setzen. Als letztes wird sync die in den Feldern gesammelten Ausdrücke an den grafischen Browser zurückgeben. Der Feldinhalt wird zurückgegeben nach der Phase des FIA-Ablaufs. Das erlaubt es dem Feldinhalt duch das <filled>-Abwickeln aktualisiert zu werden bevor die XHTML-Eingaben durch sync gesetzt werden.

//
// Initialisierungsphase
//

fürjedes ( <var>, <script> und Formularelement, in Dokumentfolgeform )
{
   falls ( das Element ist ein a <var> )
     Deklariere die Variable,
     initialisiere ihren Wert
       falls vorhanden aus dem "expr"-Attribut,
       sonst als undefiniert.

   // Kein Script-Tag
sonst falls ( das Element ist ein <script> ) Kein Strict-Tag Werte den Inhalt des Scripts, falls es direkt eingebunden ist oder anstsonen aus dem durch das "src"-Attribut angegebenen Ort.
sonst falls ( das Element ist ein Formularelemenet ) Erstelle eine Variable aus dem "name"-Attribut falls vorhanden oder generiere anderenfalls einen internen Namen. Weise dieser Variablen falls vorhanden den Wert des "expr"-Attributs zu oder ansonsten undefiniert. fürjedes ( Eingabelemenet und <initial>-Element ) { Erstelle einen prompt-Zähler und setze ihn auf 1. } } // Keine dokumentweit gültigen Grammatiken
falls ( Benutzer betritt das Formular durch das Ansprechen seiner Grammatik während er sich in einem anderen Formular befindet) { Gehe in die Hauptschleife unten, starte aber in der Abwicklungsphase, nicht in der Auswahlphase: Wir habe bereits einen Auswahlprozess. }
// // Hauptschleife: Wähle das nächste Formularelement und führe es aus. // solange ( wahr ) { // // Auswahlphase: Wähle ein zu besuchendes Formularelement. // // Kein goto
falls ( Der letzte Hauptschleifenschritt endete mit einem <goto nextitem> ) Wähle das nächste Formularelement.
Falls ein sync-Ereignis existiert wird das mit dem sync verbundene Formularelement, nach dem Löschen seiner guard condition, ausgewählt sonst falls ( es existiert ein Formularelement mit einer unbefriedigten guard condition ) Wähle das erste dieser Formularelemente in Dokumentreihenfolge. sonst
Mache <exit>
springe zurück -- Das Formular ist vollständig und spezifizier keine Übergänge. // // Sammelphase: Führt das ausgewählte Formularelement aus. // // Reihe prompts für das Formularelement auf. wenn_nicht ( der letzte Schleifenschritt endete mit einem catch, dass kein <reprompt> hatte, // kann aktive Dialoge nicht wechsel
und der aktive Dialog wurde nicht geändert
) { Wähle die zugehörigen prompts für ein Eingabelement oder <initial>. Reihe die ausgewählten prompts auf um sie vor der nächsten Sammeloperation zu spielen. Inkrementiere den prompt-Zähler des Eingabelements oder <initial>. } // Aktiviere Grammatiken für das Formularelement. falls ( das Formularelement ist modal ) Setze das aktive Grammatikset auf die Formularelementgrammatik, sofern vorhanden. (Beachte, dass einige Formularelemente, zum Beispiel <block>, keine Grammatiken haben können). sonst Setze das aktive Grammatikset auf die Formularelementgrammatik und Grammatiken mit dem gültigkitsbereich des Formulars,
dem aktuellen Dokument und der dem Anwendungs-Wurzeldokumet.
// Führe das Formularelement aus. falls ( ein <field> wurde ausgewählt ) Sammel eine Eingabe oder ein Ereignis vom Benutzer. sonst falls ( ein <record> wurde ausgewählt ) Sammle eine Eingabe (mit einem name/value-Paar für die aufgenommenen Bytes) oder Ereignis vom Benutzer. // kein <object>
sonst falls ( ein <object> wurde ausgewählt ) Führe das object aus, setze die Formularelementvariable des <object>s auf den zurückgegebenen ECMAScript-Wert.
sonst falls ( ein <subdialog> wurde ausgewählt ) Führe den Subdialog aus, setze die Formularelementvariable des <subdialog>s auf den zurückgegebenen ECMAScript-Wert. // kein <transfer>
sonst falls ( ein <transfer> wurde ausgewählt ) Vollziehe den Transfer und (falls wait true ist) setze die Formularelementvariable des <transfer>s auf den zurückgegebenen Ergebnisstatus-Indikator.
sonst falls ( ein <initial> wurde ausgewählt ) Sammle eine Eingabe oder ein Ereignis vom Benutzer. sonst falls ( ein <block> wurde ausgewählt ) { Setze die Formularelementvariable des blocks auf einen bestimmten Wert. Führe den ausführbaren Kontext des blocks aus. } // Falls cancel aus der Sammelphase erhalten wurde, prüfe // ob cancel zu einem externen sync-Ereignis anliegt, andernfalls // beende den FIA. // Falls das sync-Ereignis aufgrund des Verlassens der // synkronisierten HTML-Eingabe empfangen wurde setze die guard condition // und aktualisisre das Feld mit der Benutzereingabe. // Falls sync-Ereignis empfanken wurde, überpricnge die Ausführngsphase. // // Auführungsphase: Führe die resultiere Benutzereingabe oder -Ereignis aus. // Weise die Benutzereingabe und andere Informationen über die letzte Erkennung application.lastresult$. zu. // Muss eine Benutzereingabe haben // kein Link mit Ausnahme der vom Browser unterstützten für Befehle und Kontrolle
falls ( die Eingabe passt zu einer zum <link> gehörenden Grammatik ) Falls der Link ein "next" oder "expr"-Attribut spezifiziert, gehe zu dem Ausdrück über. Sonst falls der Link ein "event" oder "eventexpr"-Attribut spezifiziert, generiere das Ereignis.
// kein choice
sonst falls ( die Eingabe passt zu einer zu einem <choice> gehörenden Grammatik ) Falls der Choice ein "next" oder "expr"-Attribut spezifiziert, gehe zu dem Ausdrück über. Sonst falls der Link ein "event" oder "eventexpr"-Attribut spezifiziert, generiere das Ereignis.
// keine Grammatik außerhalb des aktuellen <form> ausgenommen Befehle und Kontrolle falls ( die Eingabe passt zu einer Grammatik außerhalb des aktuellen <form> ) { Gehe zu dem Befehl- und Kontroll-Handler für die Eingabe. }
sonst falls ( die Eingabe zu einer Grammatik außerhalb des aktuellen <form> oder <menu> ) { Gehe zu dem <form> oder <menu>, trage die Eingabe zum neuen FIA. }
// Führe eine zu einer Grammatik dieses Formulars gesprohene Eingabe aus. // Kopiere als erstes die Ergebnisegenschaftswert der Eingabe in die entsprechenden // Formularelementvariablen. Leere alle "just_filled"-Flags. falls ( die Grammatik hat field-weite Gültigkeit ) { // Diese Grammatik muss von einem Eingabeformular umgeben sein. Das Eingabeelement // wurde mit einer ECMAScript-Variablen verbunden (als die Formularelementvariable bezeichnet) // und slot name, Eingabename,. falls ( das Ergebnis ist keine Struktur ) Kopiere das Ergebis in die Formularelementvariable. sonst_falls ( eine top-level Eigenschaft im Ergebnis passt zum slot name oder der slot name ist ein Punkt-getrennter Pfad, der zu einer Untereigenschaft passt. ) Kopiere den Wert dieser Eigenschaft in die Formularelementvariable. sonst Kopiere das vollständige Ergebnis in die Formularelementvariable. Setze das "just_filled"-Flag dieses Eingabeelements. } sonst { fürjedee ( Eigenschaft der Benutzereingabe ) { falls ( die Eigenschaft passt zu dem slot name eines Eingabeelements ) { Kopiere den Wert dieser Eigenschaft in das Formularelementvariable des Formularelements. Setze das "just_filled"-Flag des Eingaebelements. } } } // Setze alle <initial> Formularelementvariablen falls ein Eingabefelder gefüllt ist. falls ( ein Eingabeelementvariable ist auf das Ergebnis einer Benutzereingabe gesetzt ) Setze alle <initial> Formularelementvariablen auf true. // Das Folgende führt jede durch die Benutzereingabe ausgelöste <filled>-Aktionen aus. für_jede ( <filled>-Aktion in Dokumentreihenfolge ) { // Bestimme die Eingabeelementvariablen im zugehörigen <filled>. N = das "namelist"-Attribut von <filled>. falls ( N "" ist ) { falls ( das <filled> ist ein Kind eines Eingabeeleents ) N = der Eingabeelementname des Eingabeelements. sonst falls ( das <filled> ist ein Kind des Formulars ) N = die Formularelementvariablennamen aller Eingabeelemente im Formular. } // Ist das <filled> ausgelöst worden? falls ( eine Eingabeelementvariable im Set N "just_filled" ist UND ( der <filled>-Modus ist "all" UND alle Variablen in N sind gefüllt ODER der<filled>-Modul ist "any" UND irgendwelche Variablen in N sind gefüllt) ) Führe die <filled>-Aktion aus. Falls ein Ereignis während der Ausführung eines <filledgt; ausgelöst wird startet die Event-Handler-Auswahl im Bereich des <filled>, das ein Eingabeelement oder das Formular selbst sein kann. } // Falls keine Eingabeelemente gefüllt sind mache einfach so weiter. Für alle mit XHTML-Eingabebedienelemente synkronisierten Felder aktualisiere die Engabebedienelemente mit dem Inhalt des Felds. // Fahre fort }

D DTD

Dieser Abschnitt definiert die DTD, die zum Definieren des XHTML+Voice 1.2 Integrationsprofil verwendet werden.

D.1 xhtml+voice12.dtd

Die individuellen Module, die die DTD für das XHTML+Voice 1.2 Profil entsprechend dem top-level river file ausmachen, sind unter xhtml-voice12-DTD.zip zusammengepackt und erhältlich. Obwohl die Verwendung der DTD anstelle des SCHEMA die Platzierung der Elemente und Attribute, spezifiziert durch [Speech Grammars] und [SSML 1.0], innerhalb ihrer einzelnen Namensräume benötigt, stellt diese DTD formlos diese Elemente in den VoiceXML 2.0 Namensraum.

E Schema

Dieser Abschnitt istnormative.

Dieser Abschnitt definiert das formale XML Schema, das verwendet wird, um das XHTML+Voice 1.2 Profil zu definieren. Dieser Abschnitt ist normative.

E.1 xhtml+voice12.xsd

Die individuellen Module, die das SCHEMA für das XHTML+Voice 1.2 Profil entsprechend dem top-level river file ausmachen, sind unter xhtml-voice12-SCHEMA.zip zusammengepackt und erhältlich.

F VoiceXML-Kontainer für das XHTML+Voice Subset

Dieser Abschnitt definiert die DTD, die verwendet wird, um ein VoiceXML-Kontainer formal für das XHTML+Voice Subset von VoiceXML 2.0 zu definieren. Der Kontainer speichert VoiceXML-Formulare die als externe Voice-Handler von XHTML+Voice 1.2-Anwendungen ausgeführt werden können. Der Kontainer ist ein mögliches Profil von VoiceXML 2.0 das als ein Ergebnis der VoiceXML 2.0 Moularisierung bezeichnet werden kann. Der Kontainer umfast alle VoiceXML 2.0-Module, die von XHTML+Voice 1.2, den XHTML+Voice 1.2 Attribut-Erweiterungen von VoiceXML 2.0 und dem VoiceXML 2.0-Stammmodul unterstützt werden. Das Stammmodul fügt das top-level <vxml>-Element und die <meta> und <metadata>-Elemente für die Spezifizierung von Meta-Informationen hinzu.

F.1 vxml20-xvsubset.xsd

Die individuellen Module, die das SCHEMA für den VoiceXML 2.0-Kontainer für das XHTML+Voice Subset entsprechend dem top-level river file ausmachen, sind unter vxml20-xvsubset-SCHEMA.zip zusammengepackt und erhältlich.

G Multimodale Autovervollständigung

Multimodale Autovervollständigung assistiert einer auf einem PDA oder Mobiltelefon laufenden XHTML+Voice-Anwenung, die das Einreichen von Formulareingabedaten benötigt. Durch das Erweitern der Autovervollständigungsfähigkeiten eines grafischen Browsers mit Sprachinteraktion kann der Benutzer einfach Name, Adresse und andere persönliche Informationen den Formulareingabefeldern hinzufügen.

Autovervollständigung vervollständigt automatisch die Formulareingabefelder für den Benutzer mit dem Inhalt der Benutzereinstellungen des Browsers; der Name jedes Benutzereinstellungseintrags passt zu einem Formularfeld. Die folgende Tabelle zeigt die Einträge für eine Benutzereinstellung:

Tabelle 9: Beispielbenutzereinstellungen
Eintrag Beispielwert
Vollständiger Name Earl Sandwich
E-Mailadresse sandwich@example.net
Telefonnummer 921-555-2329
Adresszeile 1 22 Dandelion Way
Adresszeile 2  
Stadt Saturn
Bundesland FL
Postleitzahl 33872
Land United States

Ein grafischer Browser benutzt den Inhalt des XHTML label-Elements oder die Feldnamen wie sie im ECLM (Electronic Commerce Modeling Language) Standard, der in [RFC3106] definiert ist, beschrieben werden oder einigen anedren Heuristiken um einen zum Formularfeld passenden Benutzereinstellungseintrag zu finden. Wenn der grafische Browser einmal einen zum Formulareingabefeld passenden Einstellungseintrag gefunden hat, fügt multimodale Autovervollständigung eine den Einstellungseintrag repräsentierende Grammatik dem VoiceXML-Formular hinzu. Diese Grammatik verwendet das VoiceXML-Feld, das mit der gefundenen HTML-Eingabe synkronisiert ist. Die Eingabe ist mit dem VoiceXML-Feld via dem XHTML+Voice <sync>-Element synkronisiert.

Das folgende Beispiel hat HTML-Eingabefelder für Namen, Adresse, Wohnort und Telefonnummer. Der grafische Browser gleicht diese Eingaben mit den zugehörigen Einträgen, die in den Benutzereinstellungen gespeichert sind, ab.

<?xml version="1.0" encoding="iso-8859-1" ?>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ev="http://www.w3.org/2001/xml-events"
      xmlns:vxml="http://www.w3.org/2001/vxml"
      xmlns:xv="http://www.voicexml.org/2002/xhtml+voice"
      xml:lang="en_US" >

  <head><title>Multimodal Delivery System</title>

    <vxml:form id="delivery_form">
      <vxml:block>
        Please enter your name, address and phone number.
      </vxml:block>

      <vxml:field name="voice_name" xv:id="voice_name">
        <vxml:grammar src="names.jsgf"/>
        <vxml:prompt>
          Please enter your name.
        </vxml:prompt>
        <vxml:catch event="help nomatch noinput">
          Please enter your name.
        </vxml:catch>
      </vxml:field>

      <vxml:field name="voice_address" xv:id="voice_address">
        <vxml:grammar src="addresses.jsgf"/>
        <vxml:prompt>
          Please enter your street address.
        </vxml:prompt>
        <vxml:catch event="help nomatch noinput">
          Plese enter your street address.
        </vxml:catch>
      </vxml:field>

      <vxml:field name="voice_city" xv:id="voice_city">
        <vxml:grammar src="cities.jsgf"/>
        <vxml:prompt>
          Please enter your city.
        </vxml:prompt>
        <vxml:catch event="help nomatch noinput">
          Please enter your city.
        </vxml:catch>
      </vxml:field>

      <vxml:field name="voice_phoneno" xv:id="voice_phoneno" type="digits">
        <vxml:grammar src="phonenos.jsgf"/>
        <vxml:prompt>
          Please enter your phone number
        </vxml:prompt>
        <vxml:catch event="help nomatch noinput">
          Please enter your phone number.
        </vxml:catch>
      </vxml:field>

      <vxml:field name="confirm_delivery"
            xv:id="confirm_delivery" type="boolean">
        <vxml:prompt>
          Is the delivery information correct?
        </vxml:prompt>
        <vxml:filled>
          <vxml:if cond="confirm_delivery == true">
            Thank you.
            <vxml:return/>
          </vxml:if>
        </vxml:filled>
      </vxml:field>
    </vxml:form>

    <xv:sync xv:input="full_name" xv:field="#voice_name"/>
    <xv:sync xv:input="address" xv:field="#voice_address"/>
    <xv:sync xv:input="city" xv:field="#voice_city"/>
    <xv:sync xv:input="phoneno" xv:field="#voice_phoneno"/>
    <xv:sync xv:input="submitButton" xv:field="#confirm_delivery"/>

  </head>
  <body ev:event="load" ev:handler="#delivery_form">
    <form action="">

      <table border="0" width="70%" cellpadding="0" cellspacing="10">
        <tr><td><label for="#full_name"><b>Name:</b></label> <br/>
          <input type="text" name="full_name" id="full_name"/></td></tr>
        <tr><td><label for="#address"><b>Street Address:</b></label><br/>
          <input type="text" name="address" id="address"/></td></tr>
        <tr><td><label for="#city"><b>City:</b></label><br/>
          <select name="city" id="city">
            <option value="daytona">Daytona</option>
            <option value="boynton">Boynton Beach</option>
            <option value="fort lauderdale">Fort Lauderdale</option>
            <option value="saturn">Saturn</option>
            <option value="miami">Miami</option>
            <option value="orlando">Orlando</option>
            <option value="westpalm">West Palm Beach</option>
          </select>
        </td></tr>
        <tr><td><label for="#telephone"><b>Phone:</b></label><br/>
          <input type="text" name="phoneno" id="telephone"/></td></tr>
        <tr><td></td></tr>
        <tr><td>
          <input type="submit" name="submitButton" value="Submit Delivery"/></td>
        </tr>
      </table>
    </form>
  </body>
</html>

Multimodale Autovervollständigung fügt die folgenden acht Grammatiken dem aktiven VoiceXML-Formular hinzu. In diesem Beispiel sind alle Grammatiken im JSGF 1.0-Format.

#JSGF V1.0;
        grammar my_full_name;
        public <my_full_name> = [my] name {$="Earl Sandwich"};

#JSGF V1.0;
        grammar my_email_address;
        public <my_email_address> = [my] e-mail [address] {$="sandwich@example.net"};

#JSGF V1.0;
        grammar my_phone_number;
        public <my_phone_number> = [my] phone [number] {$="921-555-2329"};

#JSGF V1.0;
        grammar my_address_line_1;
        public <my_address_line_1> = [my] address [line 1] {$="22 Dandelion Way"};

#JSGF V1.0;
        grammar my_city;
        public <my_city> = [my] city {$="Saturn"};

#JSGF V1.0;
        grammar my_state_province;
        public <my_state_province> = [my] (state | province) {$="FL"};

#JSGF V1.0;
        grammar my_zip_postal;
        public <my_zip_postal> = [my] (zip | postal) [code] {$="33872"};

#JSGF V1.0;
        grammar my_country;
        public <my_country> = [my] country {$="United States"};

Jede Grammatik wird der Grammatik für das VoiceXML-Feld hinzugefügt, das via dem <sync>-Element mit der HTML-Eingabe, die mit dem Benutzereinstellungswert übereinstimmt, synkronisiert ist. Semantische Interpretation wird verwendet um das Feld auf den Benutzereinstellungswert zu setzen falls der Eintragsname erkannt wird. Das Prefix "my_" wird in de obenstehenden Grammatik verwendet um einer Kollision mit der Grammatik in der Anwendung vorzubeugen.

H Änderungen seit XHTML+Voice 1.1

Das Folgende ist eine Zusammenfassung der Änderungen zwischen XHTML+Voice 1.2 und XHTML+Voice 1.1 [XHTML+Voice 1.1].

H.1 Veänderte Elemente

H.2 Verdeutlichungen

  • Das <sync>-Element synkronisiert nicht ein VoiceXML <field>-Element mit einer JavaScript-Variabel(Sync).

  • Ein existierender XHTML <input>-Wert aktualisiert nicht sein synkronisiertes VoceXML <field> wenn das VoiceXML-Formular aktiviert wird (Sync).

  • Für ein von einem VoiceXML-Formular ausgelöstes XML Events-Ereignis ist das Ziel des Ereignises das XHTML-Element, das das VoiceXML-Formular aktiviert hat (XHTML+Voice Ereignisvererbung).

  • JavaScript kann einen Voice-Handler durch das Auslösen eines DOMActivate-Ereignisses an das id-Attribut des Voice-Handlers aktivieren. Das Ziel eines von dem VoiceML-Formular generierten VoiceXML-Ereignisses ist das VoiceXML-Formular-Element(DOMActivate).

  • Ein Set von Standardgrammatiken wird vom <sync>-Element für die Synkronisation der verschiedenen XHTML-Bedienelemente verwendet (Standardgrammatiken für XHTML-Bedienelemente).

  • Das VoiceXML 2.0 <enumerate>-Element und das <option>-Element gehören in ihre eigenen Module (Modularisierung von VoiceXML 2.0).

  • Das VoiceXML 2.0 <metadata>-Element soll im XHTML+Voice Profile entweder als ein SSML oder SRGS-Element (z.B. unterhalb der <prompt> beziehungsweise <grammar>-Elemente) eingebunden werden (Modularisierung von VoiceXML 2.0).

  • XHTML+Voice-Abwicklung ignoriert alle VoiceXML 2.0-Attribute die es nicht unterstützt falls sie angetroffen werden (VoiceXML-Bereiche in XHTML+Voice).

  • Das VoiceXML <return>-Element kann verwendet werden um einen laufenden Sprachdialog zu beenden und zum XHTML-Kontainer zurückzukehren (Rückkehr aus einem VoiceXML-Formular).

  • Falls die prompt-Quelle eine externe Datei ist, so werden die Regeln für das Stylen der Quelle nur auf das empfangene XML-Element und seine Kinder angewandt (Stylen externer prompt-Quellen).

  • Falls die prompt-Quelle nicht abgespielt werden kann wird der Inhalt des <prompt>-Elements stattdessen gespielt. Falls die prompt-Quelle nicht gespielt werden kann und der Inhalt leer ist wird der prompt nicht gespielt und kein Fehler ausgelöst (Ungültige prompt-Quellen).

  • Die VoiceXML 2.0-Eigenschaften "documentfetchhint", "fetchtimeout", "documentmaxage" und "documentmaxstale" die das Holen des durch eine URI assoziierten Inhalts bestimmen, werden auch für das Holen des prompt-Textes verwendet (Prompt Resource Fetching Properties).

  • XHTML+Voice stellt den VoiceXML-Anwendungsbereich unter den geteilten globalen Bereich (Zugriff auf XHTML aus einem Sprachdialog).

  • Sync gibt die in den Feldern des grafischen Browsers gesammelten Ausdrücke nach der Phase des FIA-Laufs zurück. Das erlaubt es den Feldinhalten durch die <filled>-Abwicklung aktualisiert zu werden bevor die XHTML-Eingabe durch sync gesetzt wird (FIA für XHTML+Voice).

H.3 Verschiedenes

I Referenzen

I.1 Normative Referenzen

XHTML Basic
XHTML Basic , 19 December 2000, Mark Baker, Masayasu Ishikawa, Shinichi Matsui, Peter Stark, Ted Wugofski, Toshihiko Yamakami
CSS2
Cascading Style Sheets, level 2 (CSS2) Specification, Bert Bos, Håkon Wium Lie, Chris Lilley, Ian Jacobs, 1998. W3C Recommendation available at: http://www.w3.org/TR/REC-CSS2/.
DOM2 Events
Document Object Model (DOM) Level 2 Events Specification, Tom Pixley, 2000. W3C Recommendation available at: http://www.w3.org/TR/DOM-Level-2-Events/.
HTML 4.01
HTML 4.01 Specification, Dave Raggett, Arnaud le Hors, Ian Jacobs, 1999. W3C Recommendation available at: http://www.w3.org/TR/html4/.
RFC 2396
RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax., Tim Berners-Lee, et. al., 1998. Available at: http://www.ietf.org/rfc/rfc2396.txt.
Semantic Interpretation
Semantic Interpretation for Speech Recognition, Luc Van Tichelen. W3C Working Draft, April, 2003 available at: http://www.w3.org/TR/semantic-interpretation/.
Speech Grammars
Speech Recognition Grammar Specification Version 1.0, Andrew Hunt and Scott McGlashan. W3C Recommendation, March, 2004 available at: http://www.w3.org/TR/speech-grammar/.
SSML 1.0
Speech Synthesis Markup Language Specification, Mark Walker, Dan Burnett, and Andrew Hunt. W3C Candidate Working Draft, December, 2003 available at: http://www.w3.org/TR/speech-synthesis/.
VoiceXML 2.0
Voice Extensible Markup Language (VoiceXML), Scott McGlashan et al, W3C Recommendation, March, 2004 available at: http://www.w3.org/tr/voicexml20/.
XHTML 1.0
XHTML 1.0: The Extensible HyperText Markup Language - A Reformulation of HTML 4 in XML 1.0, Steven Pemberton, et. al, 2000. W3C Recommendation available at: http://www.w3.org/TR/xhtml1/.
XHTML 1.1
XHTML 1.1 - Module-based XHTML Murray Altheim, Shane McCarron available at: http://www.w3.org/TR/xhtml11/.
XHTML+Voice 1.0
XHTML+Voice Profile 1.0, Jonny Axelsson, et. al., December 21, 2001. Available at: http://www.w3.org/TR/xhtml+voice.
XHTML+Voice 1.1
XHTML+Voice Profile 1.1,Jonny Axelsson, et. al., January 28, 2003. Available at: http://www-3.ibm.com/software/pervasive/multimodal/x+v/11/spec.htm.
XHTML Modularization
Modularization of XHTML Murray Altheim, Frank Boumphrey, et. al., available at: http://www.w3.org/TR/xhtml-modularization/.
XML 1.0
Extensible Markup Language (XML) 1.0 (Second Edition), Tim Bray, Jean Paoli, C. M. Sperberg-McQueen, Eve Maler, 2000. W3C Recommendation: available at: http://www.w3.org/TR/REC-xml.
XML Events
XML Events - An events syntax for XML, Steven Pemberton, T. V. Raman and Shane P McCarron, October 14, 2003. W3C Recommendation available at: http://www.w3.org/TR/xml-events/.
XML Names
Namespaces in XML, Tim Bray, Dave Hollander, Andrew Layman, 1999. W3C Recommendation available at: http://www.w3.org/TR/REC-xml-names/.
XSchema-1
XML Schema Part 1: Structures, Henry S. Thompson, David Beech, Murray Maloney, Noah Mendelsohn, 2001. W3C Recommendation available at: http://www.w3.org/TR/xmlschema-1/.
XSchema-2
XML Schema Part 2: Datatypes, Paul V. Biron, Ashok Malhotra, 2001. W3C Recommendation available at: http://www.w3.org/TR/xmlschema-2/.

I.2 Informative Referenzen

ECMA 262
ECMA-262: ECMAScript Language Specification, European Computer Manufacturers' Association (ECMA), 1999. Available at ftp://ftp.ecma.ch/ecma-st/Ecma-262.pdf.
RFC 2141
RFC 2141: URN Syntax, R. Moats, 1997. Available at: http://www.ietf.org/rfc/rfc2141.txt.
XForms
XForms 1.0 , Micah Dubinko, Josef Dietl, Roland Merrick,Dave Raggett, T. V. Raman, Linda Bucsay Welsh 2001. W3C Candidate Recommendation available at: http://www.w3.org/TR/xforms/.
XSchema-0
XML Schema Part 0: Primer, David C. Fallside, 2001. W3C Recommendation available at: http://www.w3.org/TR/xmlschema-0/.
XSLT
XSL Transformations (XSLT) Version 1.0, James Clark, 1999. W3C Recommendation available at: http://www.w3.org/TR/xslt.