Formularz
Podstawowy mechanizm sterowania interakcją z użytkownikiem
(zaawansowane sposoby)
Zadanie: gromadzenie różnych typów danych
Formularze i obiekty formularzy
Dwa typy formularzy:
bezpośredni - interpreter wykonując taki formularz przetwarza pola w sekwencji od pierwszego do ostatniego (jest kilka wyjątków) - prowadzi użytkownika poprzez szereg podpowiedzi i odpowiedzi, występują tylko gramatyki dla poszczególnych pól
o przemiennej inicjatywie - bardziej elastyczny, interpreter może wypełniać kilka pól po pojedynczym wejściu użytkownika, posiada własne gramatyki
Formularz:
zawarty jest między tagami <form> i </form>
wewnątrz znajdują się elementy zwane obiektami.
Obiekty: wejściowe, sterujące
Obiekty wejściowe:
<field> - definiuje pole dla wejścia użytkownika, może zawierać
inne elementy w zagnieżdżonej strukturze
<record> - rejestruje (nagrywa) wejście audio użytkownika
<transfer> - przekazuje rozmówcę do innego miejsca
<subdialog> - przekazuje sterowanie do innego dokumentu, który
może zwrócić sterowanie do poprzedniego dokumentu za pomocą <return>
Obiekty sterujące
(nie przenoszą wartości, lecz wykonują funkcje, które sterują interpretacją formularza lub wykonaniem całego dokumentu):
<block> - definiują sekcję kodu wykonawczego (jak podpowiedzi audio lub obliczenia)
<initial> - definiuje punkt startowy dla formularza o przemiennej inicjatywie
Pola
<field>…</field>
Pola zawierają:
<prompt> - zawierają instrukcje dla użytkownika
<grammar>, <dtmf>, <option> - elementy określające akceptowalne dla pola wejścia użytkownika
<filled> - określa akcję po wypełnieniu pola (ang. filled in), gdy użytkownik dostarczył właściwą wartość
Nazwy pól i zmienne deklarowane za pomocą <var> mogą być zastosowane w wyrażeniach
Typy pól:
logiczne (boolean) - o wartości 0 ozn. fałsz (użytkownik może powiedzieć „no” lub nacisnąć 2 na klawiaturze) lub 1 ozn. prawda (użytkownik może powiedzieć „yes” lub nacisnąć 1 na klawiaturze)
cyfrowe (digits) - akceptuje łańcuch cyfr: one-zero-three
liczbowe (number) - akceptuje liczby: one hundred three
data - akceptuje datę kalendarzową
(użytkownik może wypowiedzieć datę w różnej powszechnej formie lub wprowadzić ją za pomocą klawiatury DTMF jako 4 cyfry dla roku, 2 cyfry dla miesiąca, 2 cyfry dla dnia (w tej kolejności); wartość pola data jest łańcuchem 8 cyfr lub znaku pytajnika `?', oznaczającego cyfrę, dla której użytkownik nie wprowadził wartości)
czas - akceptuje porę dnia w godzinach i minutach
(wartość pola jest łańcuchem 4 cyfr, po którym następuje piąty znak (a dla AM, p dla PM, h dla czasu w formacie 24 godzinowym, pytajnik `?', gdy wejście użytkownika nie jest jednoznaczne (dla wejścia DTMF nie ma sposobu na określenie AM/PM)
waluta - akceptuje cenę lub inną kwotę pieniężną
(łańcuch postaci CCCdddd.dd, gdzie CCC jest 3 znakowym wskaźnikiem waluty, dddd.dd jest wartością pieniężną; dla wejścia DTMF przycisk * może być zastosowany do oznaczenia kropki dziesiętnej)
telefon - akceptuje numer telefoniczny
(łańcuch cyfr, może zawierać x do reprezentowania numeru wewnętrznego; dla wejścia DTMF przycisk * może być zastosowany na oznaczenie x)
Jeżeli pole nie ma atrybutu type, musi posiadać gramatykę, aby określić akceptowalną postać wejścia użytkownika
Gramatyka określa również wartość łańcucha, który jest umieszczony jako wartość zmiennej wejściowej
Porządek interpretacji
Zwykle interpreter VXML przetwarza formularz od pierwszego obiektu
Jest kilka sposobów sterowania porządkiem interpretacji - zapewniają elastyczność dialogu
Wszystkie obiekty formularza mają dwa atrybuty, które mogą być użyte do sterowania ich wykonaniem: cond i expr.
expr umożliwia określanie wartości początkowej dla tego obiektu
Wartość może być dowolnym wyrażeniem JavaScript
Interpreter wykonuje wyłącznie obiekty formularza, których wartość jest niezdefiniowana
Oznacza to, że zastosowanie expr do nadania wartości początkowej obiektowi formularza spowoduje zignorowanie tego obiektu przez interpreter
Aby uaktywnić ten obiekt w terminie późniejszym, można usunąć tę wartość początkową za pomocą <clear>
Uwaga na znaki specjalne JavaScript (<,>,&) w wyrażeniach
cond umożliwia określanie warunku ochrony dla obiektu
Wartość może być dowolnym wyrażeniem JavaScript.
Warunek jest false, jeśli jego wartością jest 0 lub pusty łańcuch ("") oraz true dla pozostałych wartości.
Interpreter wykonuje wyłącznie obiekty formularza, których warunek ochrony ma wartość true
Oznacza to, że poprzez umieszczenie warunku ochrony w obiekcie interpreter może decydować „w locie” o wykonaniu obiektu, bazując na wartości, którą sprawdza warunek.
Przykład
Użytkownik jest proszony o wybór usługi. Jeśli wybór jest weather, użytkownik jest proszony o kod pocztowy, aby określić miejsce użytkownika.
<form>
<field name="selection">
<prompt> Please say News, Weather, or Sports. </prompt>
<grammar type="application/x-nuance-gsl">
[ news weather sports ]
</grammar>
</field>
<field name="zipcode" type="digits"
cond="selection == 'weather'">
<prompt> What's your zip code? </prompt>
</field>
</form>
Formularze o przemiennej inicjatywie
Pozwalają na dostarczanie wartości do więcej niż jednego pola podczas pojedynczego wejścia użytkownika - cecha języka naturalnego
Formularz o przemiennej inicjatywie posiada:
element <initial>, który jest zdefiniowany dla całego formularza
gramatykę, która również jest zdefiniowana dla całego formularza - tag <grammar> musi być wewnątrz formularza, lecz nie w obiekcie wejściowym
Więcej o tym w innym miejscu.