Etikettarkiv: VoiceXML

VoxML (Voice Markup Language)

Speech ApplicationsDen här sajten startade ju som en tekniksajt en gång i tiden och jag tänkte att jag skulle få upp lite av det material som fanns här då. Det är många år sedan och de flesta tekniker är idag hopplöst obsoleta men det är lite kul att ha dem på plats här i alla fall så jag börjar med att lägga upp en liten genomgång av VoxML (Voice Markup Language) av vilken den senaste versionen mig veterligen ar 1.1 som kom 1999.VoxML var ett initiativ från Motorola som ett tag konkurrerade med VoiceXML om att kunna leverera röststyrda telefonapplikationer över webben. VoiceXML vann dock kampen då allt fler företag anslöt till VoiceXML och gjorde sina röster hörda för att göra detta till en standard.

VoxML, lika väl som JSML, är dock värt att känna till när man håller på att utveckla webbapplikationer för röststyrning.

Till skillnad från HTML så som har en tvådimensionell layout så har VoxML bara en dimension i sin layout, nämligen tid.
I VoxML sker allting perspektivet tid.
I HTML visas i sidor, i VoxML är motsvarigheten dialoger som delas upp i mindre enheter kallade steps.

VoxML baseras på eXtensile Markup Language (XML) och följer XMLs syntax-regler. För mer information om VoxMLs struktur i jämförelse med XML så titta nätmare på VoxMLs DTD.

Är du sugen på att titta närmare på hur VoxML ser ut och fungerar så bärjar vår guide här.

De två viktigaste elementen i VoxML är DIALOG och STEP. De är elementen som
skapar grundstrukturen i en VoxMLapplikation.

Elementet DIALOG kan närmast jämföras med BODY-elementet i HTML, alla andra element
existerar inom DIALOG-elementet.

STEP-elementet anger de olika stegen i applikationen.
STEP är de delmoment inom DIALOG-elementet som du navigerar
igenom med de kommandon som du anger.

Vi tittar på ett exempel, exempel01.vml:

<?xml version=”1.0″?>
<DIALOG>
<STEP NAME=”init”>
  <PROMPT>Please select a soft drink.</Prompt>
  <HELP> Your choises are coke, pepsi, 7 up or root beer</HELP>
  <INPUT TYPE=”OPTIONLIST” NAME=”drink” NEXT=”#confirm”>
    <OPTION VALUE=”coke”> coke </OPTION>
    <OPTION VALUE=”pepsi”> pepsi </OPTION>
    <OPTION VALUE=”7 up”> 7 up </OPTION>
    <OPTION VALUE=”root beer”> root beer </OPTION>
  </INPUT>
</STEP>

<STEP NAME=”confirm”>
  <PROMPT> You orded <VALUE NAME=”drink”/>.</PROMPT>
</STEP>
</DIALOG>

När en VoxML-applikation anropas initieras den det STEP-element som heter ”init”, användaren
kommer då att höra innehållet i PROMPT-elementet.
Om användaren anger att han vill ha hjälp innan han gör ett val så kommer innehållet i HELP-elementet att läsas upp.
När användaren gör ett val kommer browsern att exekvera STEP-elementet
som heter ”confirm” som helt enkelt läser upp det gjorda valet och sedan avslutar
applikationen.

Det är ett par intressanta detaljer som är värda att notera när vi tittar på exemplet ovan.
Den första raden i koden består av XML-deklarationen, som måste vara första
raden i alla VoxML-dokument.

Dessutom så kan det vara på sin plats att påpeka att STEP-elementen utförs i den ordning de anropas
och alltså inte nödvändigtvis i den ordning de förekommer i koden.

De element som förekommer i exemplet ovan, DIALOG, STEP, PROMPT, HELP och INPUT, är de som förekommer
oftast i VoxML och man bör känna sig ordentligt bekant med dessa element innan man går vidare med
mindre ofta förekommande element.

ACK

Ibland kan det vara nödvändigt att dubbel-kontrollera information som användaren har givit.
Detta skulle man som utvecklare kunna lösa genom att skapa ytterligare en STEP-sekvens som läser
upp det användaren angivit och frågar om detta är korrekt.
ACK-elementet (acknowledge) erbjuder en enklare lösning på detta problem.

Ett ACK-element måste befinna sig inom ett STEP- eller CLASS-element.

SYNTAX

<ACK [CONFIRM=”value” [REPROMPT=”value”]]>
   text
</ACK>

ATTRIBUT

Attributnamn

Tillåtna värden

CONFIRM

YORN (default)

REPROMPT

Y
N (default)

EXEMPEL

<STEP NAME=”card_type”>
    <PROMPT>
    What type of credit card do you have?
    </PROMPT>
     INPUT NAME=”type” TYPE=”OPTIONLIST” NEXT=”#exp_date”>
      <OPTION VALUE=”visa”>visa</OPTION>
      <OPTION VALUE=”mc”>mastercard</OPTION>
      <OPTION VALUE=”discover”>discover</OPTION>
    </INPUT>
    <ACK CONFIRM=”YORN” REPROMPT=”Y”>
      I thought you said <VALUE NAME=”type”/>
      <BREAK/> I that correct?
    </ACK>
</STEP>

I det här exemplet används ACK-elementet för att konfirmera användarens val av kreditkort.

När den här koden tolkas av VoxMLs röst-browser kommer den att läsa texten från PROMPT-elementet med hjälp av text-till-tal teknik,
vänta på användarens respons (visa, mastercard eller discover) och sedan be användaren att konfirmera om
valet av kontokort.

Om användaren svarar ”yes” kommer browsern att fortsätta till STEP-elementet som heter ”exp”.
Om användaren svarar ”no”, kommer PROMPT-elementets text läsas igen och användaren får på nytt en möjlighet
att göra sitt val.

Browsern går tillbaks till STEP-elementet och börjar så att säga om från början.

Confirm-attributet specificerar vilken typ av ”input field” som förväntas av användaren.
YORN (yes or no) är lierad med en inbyggd taligenkänningsgrammatik som tillåter alla typer av positiv och negativ respons istället för ett enkelt yes eller no.

REPROMPT-attributet specificerar vad som skall göras om konfimationen falerar.
Om REPROMPT är satt till ”Y” kommer användaren att dirigeras till PROMPT igen.
Om det är satt till ”N” så görs inte detta.

AUDIO

AUDIO-elementet specificerar en ljudfil som skall spelas upp.

AUDIO-elementet kan användas som ett alternativ var som helst där du kan läsa text för användaren.

Ett AUDIO-element kan placeras inom ett PROMPT, EMP, PROS, HELP, ERROR, CANCEL eller ACK-element, där du kan placera text som skall läsas upp för användaren.

SYNTAX

<AUDIO SRC=”value”/>

ATTRIBUT

Attributnamn

Tillåtna värden

SRC

URL till ljudfil

EXEMPEL

<PROMPT>
      At the tone, the time will be 11:59 p m
      <AUDIO SRC=”http://localhost/sounds/beep.wav”/>
</PROMPT>

Koden ovan är ett enkelt exempel på en ljudfil inkluderad i ett PROMPT-element.

När VoxMLs Voice Browser tolkar koden kommer den att tala texten från rad två med hjälp av text-till-tal teknik och sedan spela upp WAV-filen ”beep.wav” angiven i rad tre.

BREAK

BREAK-elementet kan användas överallt där applikationen läser text eller spelar upp en ljudfil för användaren.

BREAK kan användas inom följande element: PROMPT, EMP, PROS, HELP, ERROR, CANCEL och ACK.

SYNTAX

<BREAK [MSECS=”value” | SIZE=”value”]/>

ATTRIBUT

Attributnamn

Tillåtna värden

MSECS

miliseconds (integer)

SIZE

NONE
SMALL
MEDIUM (default)
LARGE

EXEMPEL 1

<PROMPT>
      Welcome to Earth. <BREAK MSECS=”250″/>
      How may I help you?
</PROMPT>

Det första exemplet med BREAK-elementet med MSECS-attributet inom PROMPT-elementet.
När detta tolkas av browsern talar den texten ”Welcome to Earth”, göra pause i 250 millisekunder
och sedan säga ”may I help you?”.

Ett alternativ till att ange exakt antal millisekunder med MSECS-attributet kan man använda SIZE-attributet för att kontrollera längden
på pausen, som i exempel 2:

EXEMPEL 2

<PROMPT>
      Welcome to Earth. <BREAK SIZE=”MEDIUM”/>
      How may I help you?
</PROMPT>

Den exakta längden på ”SMALL”, ”MEDIUM” och ”LARGE” är definerade av systemet och kan därför ändras i kommande specifikationer av
VoxML
.

Använd MSECS-attributet om du vill ha full kontroll över längden på pausen.

CANCEL

CANCEL-elementet används av utvecklaren för att kunna erbjuda användaren att avbryta den aktuella PROMPT:en.

Om du som utvecklare inte definerar CANCEL-elementets beteende så kommer systemets förinställda beteende att användas.
Det förvalda beteendet för CANCEL-elementet är att stoppa den aktuella PROMPT:en och sedan fortsätta med nästa interaktiva INPUT.

CANCEL-elementet (precis som HELP) kan utföras av användaren genom ett flertal fraser.
”Cancel” och ”I would like to cancel, please” ger samma resultat.

CANCEL-elementet används inom STEP- eller CLASS-elementen.

SYNTAX

<CANCEL NEXT=”value” [NEXTMETHOD=”value”]/>
eller
<CANCEL NEXT=”value” [NEXTMETHOD=”value”]>text</CANCEL>

ATTRIBUT

Attributnamn

Tillåtna värden

NEXT

URL till nästa STEP eller DIALOG

NEXTMETHOD

GET (default)
POST

EXEMPEL

<STEP NAME=”report”>
    <CANCEL NEXT=”#traffic_menu”/>
    <PROMPT>Traffic conditions for Chicago, Illinois, Monday, May 18.
        Heavy congestion on..
    </PROMPT>
    <INPUT TYPE=”OPTIONLIST”>
      <OPTION NEXT=”#report”>repeat</OPTION>
      <OPTION NEXT=”#choose”>new city</OPTION>
    </INPUT>
</STEP>

Linje två i koden ovan visar hur man använder CANCEL-elementet för att specificera vad som skall hända
när användaren säger ”cancel”.
I det här fallet skall applikationen fortsätta med STEP-elementet som heter ”#traffic-menu” istället för att använda systemets förvaldavärde, vilket
hade stoppat PROMPT:en och sedan väntat på användarens nästa kommando.

Användaren kan dessutom stoppa en pågående PROMPT genom att ange ett korrekt OPTION.
I det här exemplet skulle användaren kunna avbryta PROMPT:en och fortsätta med ett annat val genom
att säga ”new city”.

CASE

CASE-elementet används för att styra beteendet på applikationen baserat på värdena på interna VoxML variabler.

CASE-elementet kan användas inom SWITCH-elementet, eller INPUT-elementet, om denna innehåller ett värde (DATE, DIGITS, MONEY, PHONE, TIME och YORN).

SYNTAX

<CASE VALUE=”value” NEXT=”value” [NEXTMETHOD=”value”]/>

ATTRIBUT

Attributnamn

Tillåtna värden

VALUE

literal value

NEXT

URL till nästa STEP eller DIALOG

EXEMPEL

<SWITCH FIELD=”piza”>
    <CASE VALUE=”pepperoni” NEXT=”#p_pizza”/>
    <CASE VALUE=”sausage” NEXT=”#s_pizza”/>
    <CASE VALUE=”veggie” NEXT=”#v_pizza”/>
</SWITCH>

Koden på linje två till fyra i exemplet ovan visar bruket av CASE-elementet inom SWITCH-elementet.

I det här exemplet används CASE-elementet för att dirigera browsern till olika STEP-element baserat på olika värden på variabeln ”pizza”.

Många VoxML-element användar attributen NEXT och NEXTMETHOD.
Dessa specificerar STEP-elementet att gå till nästa genom att använda standardiserade HTTP-konventioner.

Om du vill flytta till ett STEP-element inom det aktuella VoxML-dokumentet använder du ”#step_name” notationen.

Om du vill flytta till ett annat VoxML-dokument sätter du värdet på NEXT-attributet till
den URL som representerar det dokumentet och du kan också ange HTTP-metoden som skall användas för att tillgå dokumentet.

CLASS

CLASS-elementet definerar en uppsättning element som kan återanvändas inom DIALOG.

SYNTAX

<CLASS NAME=”value” [PARENT=”value”][BARGEIN=”value”][COST=”value”]>
VoxML
</CLASS>

ATTRIBUT

Attributnamn

Tillåtna värden

NAME

Namnet på klassen(identifier)

PARENT

Namnet på super-klassen(identifier)

BARGEIN

Y (default) – tillåter användaren att ”barge-in” för att stoppa prompt
N

COST

”kostnaden” för att exekvera varje STEG som tillhör klassen.
(COST-attributet är en plattforms-beroende del av VoxML. En viss browser-implementation kan välja att använda sådana delar)

EXAMPLES

<CLASS NAME=”simple”>
    <HELP> Your choices are <OPTIONS/> </HELP>
    <ERROR> I did not understand what you said.
      Valid resonses are <OPTIONS/> </ERROR>
</CLASS>

<STEP NAME=”beverage” PARENT=”simple”>
    <PROMPT>Please choose a drink.</PROMPT>
    <INPUT NAME=”drink” TYPE=”OPTIONLIST”>
      <OPTION NEXT=”#food”>coke</OPTION>
      <OPTION NEXT=”#food”>pepsi</OPTION>
    </INPUT>
</STEP>

<STEP NAME=”food” PARENT=”simple”>
    <PROMPT>Please choose a meal.</PROMPT>
    <INPUT NAME=”meal” TYPE=”OPTIONLIST”>
      <OPTION NEXT=”#deliver”>pizza</OPTION>
      <OPTION NEXT=”#deliver”>tacos</OPTION>
    </INPUT>
</STEP>

Koden på rad 1-5 illustrerar användningen av CLASS-elementet för att definera ett HELP-element och ett ERROR-element som skall användas
i flera STEP-element inom DIALOG-elementet.

Koden på rad 7-15 visar användningen av PARENT-attributet i STEP-elementetsomrefererar till CLASS-elementet och därför ärver beteendet som defineras där.

När browsern tolkar detta så kommer STEP-elementet bete sig som om HELP och ERROR-elementen var definerade exklusivt i varje STEP-element.

ARV

En klass subelement och attribut ärvs av dess subklasseroch steps, om de inte överskrids längre ner i hierarkin.
Arv är inte logiskt i vissa subelement, här följer reglerna.

COST
”Kostnaden” av ett steg har endast mening för en viss plattform som kör VoxML.
VoxML-browsern kommeratt summera den samanlagda kostnaden av de genomgångna STEP-elementen som användaren går igenom under sessionen.
Sedan skriver den ut en ”nota” TILL ANVÄNDAREN.

”Kostnaden” för ett STEP är detsamma som värdet tillägnat dess COST-attribut.
Om det inte finns ett COST-element så ärvs ”kostnaden” från dess ”parent” CLASS.

Om parent CLASS inte har en associerad COST så fortsätter ”arvsökandet” uppåt i hierarkin.

Om inget STEP eller någon av dess superklasser har ett COST-attribut så sätts ”kostnaden” att avsluta steget till noll.

BARGEIN

Detta attribut styr om användaren kan stoppa TTS-motorn genom att tala eller inte.
Här fungerar det precis som med COST, så om ett STEP inte definerar BARGEIN undersöks dess parent CLASS.

CANCEL

Se COST.

HELP

HELP fungerar lite annorlunda eftersom arvet av information är beroende av ORDINAL-attributet.

Detta betyder att om ett STEP-element har ett HELP med ORDINAL=”7″ så kommer det inte att ärva HELP ORDINAL=”7″från sin klass, men det kommer att ärva HELP med andra ORDINAL-värden.

ERROR

Arvet basers på både ORDINAL-värde och TYPE-värde.

DIALOG

DIALOG-elementet är naturligtvis fundamentalt för VoxML.

Om man skulle ställa upp ett VoxML-dokument som en trädstruktur så skulle DIALOG-elementet vara trädets rot.

DIALOG-elementet definerar den grundläggande enheten inom ett VoxML-dokument.
Oftast så finns det ett DIALOG-element per URL.

Varje DIALOG måste innehålla exakt ett STEP-element som heter ”init”.
Exekveringen av en VoxML-applikation startar med STEP-elementet som heter ”init”.

Ett DIALOG-element kan inte finnas inom någont annat VoxML-element.

SYNTAX

<DIALOG [BARGEIN=”value”]>VoxML</DIALOG>

ATTRIBUT

Attributnamn

Tillåtna värden

BARGEIN

Y (default)
N

EXEMPEL

<DIALOG>
    <STEP NAME=”init”>
      <PROMPT> Welcome to VoxML. </PROMPT>
    </STEP>
</DIALOG>

Koden ovan visr en enkel men dock fullständig VoxML DIALOG.

DIALOG-elementet specificeras på rad ett till fem och innehåller ett enkelt STEP-element som heter ”init”.
STEP-elementet innehåller ett PROMPT-element som kommer att läsas via text-to-speech.

Eftersom inget INPUT-element defineras inom STEP-elementet så kommer applikationen termineras genast efter att PROMPT-elementet har lästs upp.

EMP

EMP-elementet (emphasis) används för att markera ett område av text vilken nivå av emfasskall vara annorlunda än övrig text.

EMP-elementet kan användas överallt där text skall läsas för användaren och kan nästlas.

EMP-elementet kan befinna sig inom PROMPT, PROS, HELP, ERROR, CANCEL och ACK-elementen.

SYNTAX

<EMP [LEVEL=”value”]>text </EMP>

ATTRIBUT

Attributnamn

Tillåtna värden

LEVEL

NONE
REDUCED
MODERATE (default)
STRONG

EXAMPLES

<PROMPT>
    The weather today is going to be
    <EMP LEVEL=”strong”> really</EMP>
    bad. Up to 36 inches of snow will fall…….
</PROMPT>

Koden ovan är i stort sett självförklarande.

Den verkliga effekten av EMP-elementetbestäms av den text-to-speech (TTS) mjukvara som används av browsern.
Eftersom olika TTS-mjukvaror används (exempelvis i telefoner kontra desktop-datorer) i ett nätverks-system så kommer effekten att variera.

För att uppnå en specifik emfas-effekt skall du använda PROS-elementet istället för EMP-elementet.

Error

ERROR-elementet tillåter utvecklaren att definera hur en VoxML-applikation skall respondera på ett fel.

Om utvecklaren inte definerar en åtgärd så kommer default-värdet att användas.
Default-beteendet för ERROR-elementet är att säga frasen:
    ”An error has occurred”,
stanna kvar i aktuellt STEP-element, åter utföra PROMPT-elementet och invänta användarens respons.

ERROR-elementet kan användas inom STEP- eller CLASS-elementet.

Ett givet ERRROR-element används till alla typer av fel om man inte specificerar typen, eller till endast en specifik typ av fel.
Default används ERROR till alla typer av fel,
De feltyper som uppkommer är följande:

NOMATCH

Språkigenkänningen uppfattar ett talat ljud men kan inte med tillräckligt stor säkerhet identifiera ljudet som ett i dess grammatik förekommande fras.

NOSPEECH

Språkigenkänningen har ej uppfattat att någonting har uttalats inom föregiven tid.

TOOLITTLE

Uppstår när systemet samlar in data från ett INPUT-element av typen ”DIGITS” och färre digits än angivits var insamlat.

TOOMUCH

Uppstår när systemet samlar in data från ett INPUT-element av typen ”DIGITS” och fler digits än angivits var insamlat.

NOAUTH

När systemet försöker samla in användarinformation som användaren valt att ej ange.

NSF

????????????????????????

BADNEXT

När systemet misslyckas att hitta och visa en URL som är angiven i ett NEXT-attribut.

SYNTAX

<ERROR [TYPE=”value”] [ORDINAL=”value”] [REPROMPT=”value”] [NEXT=”value”[NEXTMETHOD=”value”]]>
    text
</ERROR>

ATTRIBUT

Attributnamn

Tillåtna värden

TYPE ALL (default)
NOMATCH
NOSPEECH
TOOLITTLE
TOOMUCH
NOAUTH
NSF
BADNEXT
ORDINAL heltal
REPROMPT Y
N (default)
NEXT URL till nästa STEP eller DIALOG
NEXTMETHOD GET (default)
POST

EXAMPLES

<STEP NAME=”errors”>
    <ERROR TYPE=”NOMATCH”> First error message.
      I did not understand what you said.</ERROR>
    <ERROR TYPE=”NOMATCH” ORDINAL=”2″>
      Second error message.
      I did not understand what you said.</ERROR>
    <PROMPT> This step tests error messages.

      Say ‘oops’ twice. Then say ‘done’ to
      choose another test.</PROMPT>
    <INPUT TYPE=”OPTIONLIST”>
      <OPTION NEXT=”#end”>done</OPTION>
    </INPUT>
</STEP>

Koden ovan illustrerar användandet av ERROR-elementet för att definera applikationens beteende inför ett fel.

På linje två defineras felmeddelandet som skall användas första gången ett fel av typen NOMATCH inträffar i STEP-elementet.

ORDINAL-attributet bestämmer vilket meddelande som skall användas om upprepade fel upstår inom samma STEP-element.

VoxML-browsern väljer ett felmeddelande baserat på en enkel algoritm:
Om felet har uppstått tre gånger så kommer browsern att leta efter ett ERROR-element med ett ORDINAL-attribut med värdet ”3”.
Om det inte finns ett sånt ERROR-element så letar browsern efter ett ERROR-element med ett ORDINAL med ”2” och sedan ”1”, för att till slut leta efter ett ERROR-element utan definerat ORDINAL.

Så om vi i exemplat ovan hade definerat ett ERROR-element med ett ORDINAL-attribut med ett värde på ”6” inom STEP-elementet och samma fel uppstått sex gånger i rad, skulle användaren höra det första felmeddelandet en gång, det andra felmeddelandet fyra gånger och slutligen felmeddelandet med ORDINAL ”6”.

HELP

HELP-elementet hjälper utvecklaren att definera applikationens beteende om användaren frågar efter hjälp.
Om applikationen inte definerar HELP-beteende för ett givet STEP-element så kommer systemets default-värde att användas.

HELP-elementet, i likhet med CANCEL-elementet, kan aktiveras med en rad olika fraser.
Användaren kan lika gärna säga ”help” som ”I would like help, please” för att aktivera beteendet.

Systemets default-inställning för HELP-elementet är att stoppa aktuellt PROMPT-element, spela upp frasen ”No help is available”, stanna kvar i aktuell STEP och köra den interaktiva INPUT som finns tillgänglig.

Help-elementet kan placeras inom STEP- och CLASS-elementen.

SYNTAX

<HELP
    [ORDINAL=”value”]
    [REPROMPT=”value”]
    [NEXT=”value” [NEXTMETHOD=”value”] ]>
      text
</HELP>

ATTRIBUT

Attributnamn

Tillåtna värden

ORDINAL

heltal

REPROMPT

Y
N (default)

NEXT

URL till nästa STEP eller DIALOG

NEXTMETHOD

GET (deault)
POST

EXEMPEL

<STEP NAME=”helps”>
    <HELP REPROMPT=”Y”>First help message.
      You should hear the prompt again. </HELP>
    <HELP ORDINAL=”2″> Second help message.
      You should not hear the prompt now. </HELP>
    <PROMPT> This step tests help prompts.
      Say ‘help’ twice. Then say ‘done’ to
      choose another test. </PROMPT>
    <INPUT TYPE=”OPTIONLIST”>
      <OPTION NEXT=”#end”>done</OPTION>
    </INPUT>
</STEP>

Koden ovan illustrerar hur HELP-elementet används för att definera beteendet hos applikationens respons om användaren säger ”help”.

På rad två defineras hjälpmeddelandet som används första gången användaren påkallar hjälp.
På rad fyra defineras hjälpmeddelandet som skall användas andra och alla följande gånger som användaren påkallar hjälp.

Notera att med hjälp av REPROMPT-attributet kommer PROMPT:en repeteras efter det första hjälpmeddelandet men ej efter följande hjälpmeddelanden.

ORDINAL-attributet fungerar på samma sätt som för ERROR-elementet.

INPUT

INPUT-elementet används för att ge användaren möjlighet till interaktivitet.

Utvecklaren av applikationen definerar typ av INPUT likaväl som dess värden.

INPUT-elementet kan endast placeras i STEP-elementet.

ATTRIBUT

Attributnamn

Tillåtna värden

TYPE

DATE
DIGITS
GRAMMAR
HIDDEN
MONEY
NONE
NUMBER
OPTIONLIST
PHONE
PROFILE
RECORD
TIME
YORN

INPUT-elementet Typ:
DATE

DATE används för att få information om ett datum från användaren

SYNTAX

<INPUT TYPE=”DATE”
    NAME=”value”
    [NEXT=”value” [NEXTMETHOD=”value”]]
    [TIMEOUT=”value”] />

ATTRIBUT

Attributnamn

Tillåtna värden

NAME

identifier

NEXT

URL till nästa STEP eller DIALOG

NEXTMETHOD

GET (default)
POST

TIMEOUT

millisekunder (heltal)

EXEMPEL

<STEP NAME=”init”>
    <PROMPT>What is your date of birth?</PROMPT>
      <INPUT TYPE=”DATE” NAME=”dob” NEXT=”#soc”/>
</STEP>

Koden på rad tre använder DATE INPUT för att samla användarens födelsedag, sparar den i VoxML variabeln ”dob” och går sedan till STEP-elementet med namnet ”soc”.

Datumformatet sparas i en VoxML-variabel med standardformat.
Ett fullständigt definerat datum som next Friday, July 10th,1998 sparas som:

07101998|July|10|1998|Friday|next

Ofullständiga datumangivelser sparas som:

July 14th

????????|July|4|||

Tomorrow

????????|||||tomorrow

The 15th

????????||15|||

Monday

????????||||Monday|

OPTION

OPTION-elementet används för att styra applikationens beteende vid en specifikt respons från användaren.

OPTION-elementet kan endast härbergeras inom INPUT-elementet, och då endast när typen OPTIONLIST används.

SYNTAX

<OPTION [NEXT=”value” [NEXTMETHOD=”value”] ] [VALUE=”value”] >
    text
</OPTION>

ATTRIBUT

Attributnamn

Tillåtna värden

VALUE

literal value

NEXT

URL till nästa STEP eller DIALOG

NEXTMETHOD

GET (default)
POST

EXEMPEL

<INPUT NAME=”choice” TYPE=”OPTIONLIST”>
    <OPTION NEXT=”#doit” VALUE=”1″> one </OPTION>
    <OPTION NEXT=”#doit” VALUE=”2″> two </OPTION>
</INPUT>

Koden på rad 2 och 3 illustrerar användandet av OPTION-elementet inom INPUT-elementet.

I det här exemplet kommer OPTION-alternativet på rad två att exekveras när användaren svarar med ”one” och alternativet på rad tre exekveras när användaren svarar ”two”.

Om användaren svarade ”one” blir resultatet att värdet av variabeln ”choice” blir ”1” på grund av hur vi använde VALUE-attributet.

Eftersom NEXT-attributet är detsamma för båda OPTION-elementen i vår OPTIONLIST, kommer browsern att fortsätta till STEP-elementet ”doit” vare sig ”one” eller ”two” används.

<INPUT TYPE=”OPTIONLIST”>
    <OPTION NEXT=”http://localhost/vml/weather.asp”>
      weather </OPTION>
    <OPTION NEXT=”http://localhost/vml/news.asp”>
      news </OPTION>
    <OPTION NEXT=”http://localhost/vml/traffic.asp”>
      traffic </OPTION>
</INPUT>

Koden ovan visar på hur man använder OPTION-elementet för att göra ett val av tre möjliga och varje NEXT-attribut har kompletta HTTP URL:er och i motsatts till det tidigare exemplet unika NEXT-attribut.

OPTIONS

OPTIONS-elementet beskriver typen av interaktivt gensvar inom ett givet STEP-element.

Vanligast används OPTIONS-elementet i HELP-element för att erbjuda användaren en lista på korrekta valmöjligheter.

OPTIONS-elementet kan användas överalltdärtext läsaes uppför användaren.

OPTIONS-elementet kan placeras i PROMPT-, EMP-, PROS-, HELP-, ERROR- och ACK-elementen.

SYNTAX

<OPTIONS/>

ATTRIUT

OPTIONS-elementet innehåller inga attribut

EXEMPEL

<CLASS NAME=”helpful”>
<HELP> Your choices are: <OPTIONS/> </HELP>
</CLASS>

Exemplet ovan illustrerar hur OPTIONS-elementet används för att skapa en CLASS, ”helpful”.

Det STEP-element som som direkt eller indirekt anger ”helpful” som PARENT responderar på ”help” genom att säga meddelandet och då expanderar OPTIONS-elementet till en beskrivning av vilka alternativ som användaren kan säga i denna DIALOG.

OR

OR-elementet används för att definera alternativa igenkänningsresultat i ett OPTION-element.

OR-elementet tolkas som ett logiskt ”or” och används för att associera flera igenkänningsresultat med ett enkelt NEXT-attribut.

OR-elementet kan endast användas i OPTION-elementet.

SYNTAX

<OR/>

ATTRIBUT

OR-elementet innehåller inga attribut

EXEMPEL

<INPUT TYPE=”OPTIONLIST”>
<OPTION NEXT=”#coke_chosen”>
coke <OR/> coca-cola
</OPTION>
<OPTION NEXT=”#pepsi_chosen”> pepsi </OPTION>
</INPUT>

Koden illustrerar hur användandet av OR-elementet i ett OPTION-element.

Som du kan se på rad tre i koden ovan så kan användaren svara antingen ”coke” eller ”coca-cola” och få samma resultat, browsern kommer att fortsätta till STEP-elementet med namnet ”coke_chosen”.

PROMPT

PROMPT-elementet används för att definera vilket innehåll iett STEP-element som skall presenteras för användaren.

Innehållet kan vara text- eller audio-innehåll.
Text läses upp med ”text-to-speech”-teknik.Uppläsningen kan kontrolleras med hjälp av BREAK-element för pauser i uppläsningen, EMP-elementet för för att läggain emfas i uppläsningen och PROS-elementet för olika dimensioner av metrik.

AUDIO-elementet specificerar ljud-filer, ljud-effekter och samplat ljud som spelats in från användaren som skall spelas upp.

PROMPT-elementet kan användas i STEP- och CLASS-elementen.

SYNTAX

<PROMPT> text </PROMPT>

ATTRIBUT

PROMPT-elementet innehåller inga attribut

EXEMPEL

<STEP NAME=”init”>
    <PROMPT> How old are you? </PROMPT>
    <INPUT TYPE=”NUMBER” NAME=”age” NEXT=”#weight”/>
</STEP>

I det här exemplet kommer texten ”How old are you?” att läsas upp med ”text-to-speech”-teknik.
Sedan väntar applikationen på användarens svar.

PROS

PROS-elementet (eng. prosody, sv. metrik) kontrollerar metriken med vilken innehållet presenteras för användaren via PROMPT-, HELP-, ERROR-, CANCEL- och ACK-elementen. Metrik påverkar vissa kvaliteter i ”text-to-speech”-presentationen, som talets tempo, höjd, räckvidd och volym. Den exakta effekten avgörs av kapaciteten hos den TTS-motor som används.

PROS-elementet kan användas inom PROMPT-, EMP-, PROS-, HELP-, ERROR-, CANCEL- och ACK-elementen.

SYNTAX

<PROS [RATE=”värde”] [VOL=”value”] [PITCH=”value”] [RANGE=”value”]>
    text
</PROS>

ATTRIBUT

Attributnamn

Tillåtna värden

RATE

Talets vidd i ord per minut (heltal)
135 är normalt (300 är mycket snabbt)

VOL

Volym (heltal)
1.0 är maximalt, 0.0 är tyst

PITCH

Hz (heltal)
En kvinnoröst är normalt från 140-280 Hz.
Mansröster mellan 70-140 Hz.

RANGE

Hz (heltal)
Kvinnoröst från 80 Hz upp.
Mansröst 40-80 Hz.

EXEMPEL

<PROMPT> Let me tell you a secret:
    <PROS VOL=”0.5″> I ate the apple. </PROS>
<PROMPT>

I exemplet talas ”I ate the apple” med halva den normala volymen.

Att sätta metrikvärdena

Det finns fyra sätt att specificera värdena i PROS-attributet.

  • Som ett absolut värde. Ex: RATE=”100″ för att tala något långsammare än vanligt tal.
  • Som relativt värde. Ex: RATE=”-50″ ger 50 ord mindre i minuten än det aktuella värdet, RATE=”+.25″ dubblerar det aktuella värdet om det är satt till .25 förnärvarande.
  • Som en relativ procentuell förändring av värdet. Ex: RATE=”+50%” ökar värdet med 50% från aktuellt värde. VOL=”+100%” dubblar alltså den nuvarande volymen.
  • Som en återgång till default-värde. RATE=”RESET” återställer hastigheten till default-värdet hos den implementation av VoxML-browser du använder.

RENAME

RENAME-elementet används om du använder en egen grammatik.

I VoxML lagras resultatet av varje igenkänning i separata ”slots” och
genom default-värdet ser INPUT GRAMMAR till att varje slot hamnar i en
VoxML-variabel med samma namn.

Detta innebär också att du inte kan använda samma grammatik för att samla flera
bitar av information, detta avhjälper du med hjälp av RENAME-elementet.

RENAME specificerar en ”mappning” mellan igenkänningsnamnet och variabelnamnet.

Om du tycker att det här var svårt att begripa så var lugn, exemplet nedan gör det betydligt klarare.

RENAME-elementet kan endast användas i INPUT-elementet, och då endast när typen INPUT GRAMMAR används.

SYNTAX

<RENAME RECNAME=”value” VARNAME=”value”/>

ATTRIBUT

Attributnamn

Tillåtna värden

VARNAME

identifiering (identifier)

RECNAME

identifiering (identifier)

EXEMPEL

<INPUT TYPE=”GRAMMAR”
SRC=”http://www.casselbrant.com/docs/voxml/mygram.grm
NEXT=”http://www.casselbrant.com/docs/voxml/vox.htm”>
    <RENAME VARNAME=”sym” RECNAME=”symbol”>
    <RENAME VARNAME=”detail” RECNAME=”quotetype”>
</INPUT>

I exemplet ovan så används RENAME-elementet för att hålla isär variabelnamn från en egen grammatik med dem som förväntas från en annan applikation.

Då två källor kan tänkas var utvecklade på olika håll används RENAME-elementet för att kunna koppla grammatiken med applikationen.

RESPONSE

RESPONS-elementet används i lägen då man vill ha fullständiga uppgifter från användaren.

RESPONS används för att kontrollera vilka slots från igenkänningen som är fyllda.
Detta ger utvecklaren en möjlighet att med NEXT-attributet dirigera användaen till olika URL:er beroende på vilken respons användaren har gett.

RESPONS-elementet kan endast användas inom INPUT-elementet och då endast när typen GRAMMAR används.

SYNTAX

<RESPONSE FIELDS=”value” [NEXT=”value” [NEXTMETHOD=”value”]]/>

eller

<RESPONSE FIELDS=”value” [NEXT=”value” [NEXTMETHOD=”value”]]>
    SWITCH-element
</RESPONSE>

ATTRIBUT

Attributnamn

Tillåtna värden

FIELDS

Kommaseparerad lista på slots

NEXT

URL till nästa STEP

NEXTMETHOD

GET (default)
POST

EXEMPEL

<INPUT TYPE=”GRAMMAR” SRC=”gram://.Banking/action/amt/fromacct/toacct” NEXT=”#notenoughfields”>
    <RESPONSE FIELDS=”action, amt, fromacct, toacct” NEXT=”#doit”/>
    <RESPONSE FIELDS=”action, amt, fromacct” NEXT=”#asktoacct”/>
    <RESPONSE FIELDS=”action, amt, toacct” NEXT=”#askfromacct”/>
    <RESPONSE FIELDS=”action, amt” NEXT=”#askaccts”/>
    <RESPONSE FIELDS=”action” NEXT=”#askamtaccts”/>
</INPUT>

Exemplet ovan visar hur man kan använda RESPONSE-elementet för att hantera en situation där användaren specificerat mindre än alla variabler möjliga i ordlistan (grammar).

Exemplet visar också hur man kan arrangera insamlandet av information genom att använda RESPONS-elementet tillsammans med NEXT-attributet för att bara gå vidare till den information som användaren ännu ej lämnat.

STEP

Varje VoxML-DIALOG måste innehålla ett STEP-element som heter ”init”. Exekveringen av en VoxML-applikation startar med STEP=”init”.
För att avsluta en DIALOG så låter du bli att infoga ett NEXT-attribut i det sista STEP-elementet, eller om du vill skriva tydlig kod så använder du
en ”dummy”, nämligen ett ”#end” STEP.

SYNTAX

<STEP NAME=”value” [PARENT=”value”][BARGEIN=”value”][COST=”value”]>
    VoxML
</STEP>

ATTRIBUT

Attributnamn

Tillåtna värden

NAME

identifierare (identifier)

PARENT

identifierare (identifier)

BARGEIN

Y (default)
N

COST

heltal *(se nedan)

* COST är ett implementationsberoende uppgift om kostnaden för att påbörja eller avsluta aktuellt STEP-element.

EXEMPEL

<STEP NAME=”askpython” PARENT=”tvrating”>
    <PROMPT> Please rate Monty PythonŽs Flying Circus on a scale of 1 to 10. </PROMPT>
    <INPUT NAME=”python” TYPE=”NUMBER” NEXT=”#drwho” />
</STEP>

Exemplet visar ett enkelt STEP-element som samlar in användarens åsikt om en TV-show.

I exemplet kan man tänka sig att man kan använda PARENT-attributet för att dela en uppsättning HELP- och ERROR-element med andra STEP-element som vill ha användarens åsikt om olika TV-shower.

Exempelvis kan man här lägga in vanliga felmeddelanden och/eller en förklaring för användaren hur värderingen 1 till 10 vägs.

SWITCH

SWITCH-elementet används för att definera applikationens beteende beroende på värdet i ett specifikt slot.

SWITCH-elementet används enbart i kombination med CASE-elementet.

SWITCH-elementet kan enbart användast i INPUT-elementet och då endast när typen GRAMMAR används.

SYNTAX

<SWITCH FIELD=”value”>
    VoxML
</SWITCH>

ATTRIBUT

Attributnamn

Tillåtna värden

FIELD

identifierare (identifier)

EXEMPEL

<INPUT TYPE=”GRAMMAR” SRC=”grm://.Banking/action/amount/fromacct/toacct”>
    <SWITC FIELD=”action”>
      <CASE VALUE=”transfer” NEXT=”#transfer” />
      <CASE VALUE=”balance” NEXT=”#balance” />
      <CASE VALUE=”activity”>
        <SWITCH FIELD=”fromacct”>
          <CASE VALUE=”checking” NEXT=”#chxact” />
          <CASE VALUE=”savings” NEXT=”#savact” />
        </SWITCH>
      </CASE>
    </SWITCH>
</INPUT>

Exemplet ovan visar hur man kan använda SWITCH-elementet för att bestämma nästa steg att exekvera på grundval av användarens val i en bank-applikation.

VALUE

VALUE-elementet används för att presentera värdet hos VoxML-variabler via ”text-to-speech”-teknik.

VALUE-elementet kan användas överallt där text skall läsas för användaren.

VALUE-elementet kan du använda i ett PROMPT-, EMP-, PROS-, HELP-, ERROR-, CANCEL- och ACK-element.

SYNTAX

<VALUE NAME=”value” />

ATTRIBUT

Attributnamn

Tillåtna värden

NAME

identifierare (identifier)

EXEMPEL

<STEP NAME=”thanks”>
    <PROMPT> Thanks for your responses.
      I’ll record that <VALUE NAME=”first”/> is your favorite and that

      <VALUE NAME=”second”/> is your second choice. </PROMPT>
    <INPUT TYPE=”NONE” NEXT=”/recordresults.asp” />
</STEP>

Exemplet ovan visar hur VALUE-elementet läser upp de val som användaren har gjort tidigare i applikationen.

JSML – JSpeech Markup Language

Speech ApplicationsDen här sajten startade ju som en tekniksajt en gång i tiden och jag tänkte att jag skulle få upp lite av det material som fanns här då. Det är många år sedan och de flesta tekniker är idag hopplöst obsoleta men det är lite kul att ha dem på plats här i alla fall så jag börjar med att lägga upp en liten genomgång av JSML vilken jag inte tror har uppdaterats sedan 1997 och de flesta länkarna är för evigt döda (en gång på internet betyder inte alls alltid på internet). Någon gång kanske jag får nytta av den här gamla kunskapen i alla fall. Håll tillgodo.

JSML – JSpeech Markup Language (tidigare Java Speech Markup Language) är SUNs bidrag till Markup Language för röstapplikationer på internet. JSML utvecklas inte längre och dagens version är version 0.5 och kom redan 28 augusti 1997.
Såväl VoxML som VoiceXML bygger i grunden på JSML och arvet efter JSML kommer att leva kvar länge ännu i och med VoiceXMLs framgångar på området.
Ta gärna och titta igenom specifikationerna för VoiceXML här och se hur pass mycket av JSML som faktiskt ser ut att kunna leva vidare i den här typen av mobila applikationer.
Läs SUNs specifikationer av JSML här:
http://java.sun.com/products/java-media/speech/
forDevelopers/JSML/

Länkar för dig som vill läsa mer om Java och Java Speech applikationer:
Java Speech API
Java Speech Features
XML Cover Pages
FreeTTS 1.1 Speech Syntesier

Ett exempel text markup med JSML kan se ut som nedan:

<SENT>Computers <EMP>can</EMP> speak.</SENT>

Fördig som arbetat med HTML, SGML eller XML är denna typ av markeringsspråk ingen nyhet. indikerar början på en mening och avslutar densamma. På samma sätt markerar och elementen en sektion som skall tilldelas emfas.
JSML definerar åtta element.

Attribut

Attribut används för att förse element med extra information om detsamma. Varje JSML-element har en uppsättning med definerade attributnamn och, i vissa fall, är attributvärdet låst till vissa strängar.
Exempelvis kan EMP-elementet markera ord med ett nivåattribut med värdet strong:

Listen to my <EMP LEVEL=”strong”>voice.</EMP>

Du kan använda vissa JSML-element inom andra JSML-element, så kallad nesting.

<PARA> text med <EMP> mer text </EMP> </PARA>

Kom ihåg att inga element får överlappa varandra, exemplet nedan visar hur det INTE får se ut:

<PARA> text med <EMP> mer text </PARA> </EMP>

Tomma Element

Ett tomt element har endast en tag och innehåller därmed ingen text. I exemplet nedan resulterar koden till att det uppstår en pause där det tomma elementet för pause uppträder:

I know a, <BREAK SIZE=”large”/>secret.

Eftersom elementet inte markera någon text behöver det ingen slut-tag. Elementet visar att det slutar med ”/>”.

Notation

Alla JSML-element skall skrivas med versaler. Alla JSML-attributvärden är känsliga för om du använder versaler eller gemener, så värdena ”Värde” och ”värde” är INTE samma sak.

Dokumentstruktur

JSML ärett språk som bygger på XML (eXtensible Markup Language) och på grund av detta har JSML en syntax som är standardiserad och som inte är bunden till JSAPI (Java Speech API). Detta innebär att:

JSML är läs- och redigeringsbart av både människa och dator.

XML-editorer kan användas för att förenkla skapandet av JSML-applikationer.

JSML är enkelt för en synthesizer att tolka.

även om det inte är nödvändigt att kunna XML för att förstå eller använda JSML så är följande av intresse:
Om ett JSML-dokument startar med

<?XML version=”1.0″ encoding=”UCS-2″?>

<JSML>

och slutar med

</JSML>

så är JSML-dokumentet ett giltigt XML-dokument. Detta innebär att en tal-synthesizer kan använda en generell XML-tolk för att tolka JSML-text.
Om syntesizern tillhandahåller en DTD (Document Type Definition) för JSML reduceras syntesizerns arbete markant.
Dessa öppnings- och slutelement är valfria att använda i JSML (men använd dem då de ger ett större användningsområde och ger giltig XML-kod).

Kommentarer

Kommentarer i JSML-kod skrivs inom <!– och –&gt tecknen och kan innehålla all text förutom teckensekvensen –.
Kommentarer kan placeras mitt i text som skall presenteras (kommentarerna kommer inte att presenteras):

This is <!– Ett exempel på en kommentar –> fun.

Kommentarer kan placeras inom element.

<BREAK>

Ett tomt element som markerar en pause i talet. SIZE=”medium” är standardattributet om inte SIZE eller MSECS är angivet.

Attribut

MSECS Anger hur många millisekunder pausen skall vara

SIZE Anger längden på pausen med de relativa värdena: none, small, medium eller large

MARK Valfritt attribut som frågar efter en underättelse (notification) när synthesizern kommer fram till elementets text. Attributets värde är den text som skall göras tillgänglig när underättelsen (the notification) uppträder.

BREAK-elementet är ett tomt element som anger korta pauseer i den text som skall talas och som används för att markera fraseringar i det som talas till användaren.
För att indikera vilken typ av pause som är önskvärt så kan du använda attributet SIZE eller attributet MSECS, dock inte båda samtidigt. SIZE-attributet indikerar en pause som är relevant för språkets karrakteristika medans MSECS-attributet indikerar en pause i absolut angiven tid.
I de flesta språk skapas pauser genom förändringar i hur språket talas i hastighet, förändringar i timing med mera. Dessa faktorer är starkt beroende på innehållet i det talade. Till exempel är en pause på 300 millisekunder mer markant i något som talas snabbt än i något som talas långsamt.
Av dessa skäl så bör du, om möjligt, använda attributet SIZE istället för attributet MSECS.

Exempel

<BREAK/>

<BREAK SIZE=”small” MARK=”145″/>

<BREAK MSECS=”300″/>

<EMP>

Elementet EMP anger hur stark emfas som skall läggas på den markerade texten eller på det följande ordet (om EMP används som ett tomt element).

Attribut

LEVEL attributet krävs och anger styrkan i emfasen. Värden: strong, moerate, none och reduced.
LEVEL=”moderate” är default-värdet.

MARK Valfritt attribut som frågar efter en underättelse (notification) när synthesizern kommer fram till elementets text. Attributets värde är den text som skall göras tillgänglig när underättelsen (the notification) uppträder.

Elementet EMP specificerar en del av text som skall talas med emfas.
Attributet LEVEL anger hur stark emfasen skall vara. Värden för LEVEL-attributet är strong (för stark emfas), moderate (för lite emfas), none (för ingen emfas) och reduced (för reducerad emfas).

Exempel:

Listen to <EMP>me.</EMP>

Listen to <EMP LEVEL=”moderate”>me.</EMP>

EMP-elementet kan också användas som ett tomt element som då specificerar att den omedelbart följande texten skall ges emfas.
Följande exempel ger samma resultat som de ovan:

Listen to <EMP/>me.

Listen to <EMP LEVEL=”moderate” MARK=”hands”/>me.

<ENGINE>

Elementet tillhandahåller information från attributet DATA genom attributet ENGID till den identifierade synthesizern.

Attribut

ENGID Identifierarefören röst-synthesizer.

DATA Information som skall anges till den identifierade synthesizern.

MARK Valfritt attribut som frågar efter en <<<notification>>> när synthesizern kommer fram till elementets text. Attributets värdeärdentext som skall göras tillgänglig när underättelsen uppträder.

Elementet ENGINE ger möjlighet att låta applikationen använda en specificerad och identifierad synthesizers modellspecifika möjligheter. Elementet tillhandahåller information, värdet av DATA-attributet, till den röst-synthesizer som är identifierad genom ENGID-attributet. Informationen består oftast av makinspecifika kommandon.
En identifierad röst-synthesizer skall ersätta elementets text med värdet i DATA-attributet, icke identifierade synthesizers skall ignorera värdet i DATA-attributet och presentera texten i elementet.

Exempel

I am <ENGINE ENGID=”KyberMedia Voice” DATA=”Mr Casselbrant”> someone else</ENGINE>

En KyberMedia röst-synthesizer kommer att säga ”I am Mr Casselbrant” och alla andra synthesizers kommer att säga ”I am someone else”. Ett JSML-dokument kan innehålla ENGINE-element för valfritt antal synthesizers och elementen kan nästlas.

Mindre än-tecken och och-tecken (&) angivna i DATA-attributet måste anges med kod för att inte misstas för JSML.
Mindreän tecknet kan anges med något av följande kodexempel (utan citationstecknen):
”<”, ”&#60” eller ”&#x003C”.
Och-tecknet (&) kan anges med följande kod:
”&”, ”&#38” eller ”&#x0026”.
Du kan också placera tecknen i en CDATA-sektion.
CDATA har följande syntax:
<![CDATA[ text som skall vara escaped ]]>
Texten får inte innehålla teckensekvensen ]]>.
Synthesizers hanterar CDATA-sektioner genom att skala bort <![CDATA[ och ]]> markeringarna och genom att ej tolka CDATA-sektionens innehåll som JSML.

Exempel

<ENGINE ENGID=”Croaker 1.0″ DATA=”<ribbit=1>” MARK=”frog start”> no frog sound </ENGINE>

<JSML>

Elementet JSML används för att ange ett JSML-dokuments början och slut och motsvarar <HTML>-elementet i HTML.

Syntax

<JSML>
dokument innehåll
</JSML>

<MARKER>

Tomt element som efterfrågar en underättelse när synthesizern når fram till markeraren. Attributet MARK måste anges.

Attribut

MARK Har ett värde i form av text som är tillgängligt när en marker-händelse inträffar.

Exempel

Answer <MARKER MARK=”yes_no_prompt”> yes or no.</MARKER>

<PARA>

Elementet PARA markerar text som ett stycke.

Attribut

MARK Valfritt attribut som frågar efter en underättelse när synthesizern kommer fram till elementets text. Attributets värdeärdentext som skall göras tillgänglig när underättelsen uppträder.

Syntax

<PARA>This is a paragraph.</PARA><PARA> This is a longer paragraph</PARA>

PARA-element kan inte nästlas med varandra.

I JSML kan man även använda en blankrad för att separera stycken istället för att använda PARA-elementet.
Följande tre exempel resulterar i samma tal:

I am the great JSML guru, yes I am.
And now you are learning to.

Och nu med PARA-elementet:

<PARA>I am the great JSML guru, yes I am.</PARA>
<PARA>And now you are learning to.</PARA>

<PARA>I am the great JSML guru, yes I am.
And now you are learning to.</PARA>

<PROS>

Elementet PROS anger information om den markerade textens metrik. Minst ett av attributen RATE, PITCH, RANGE och VOL måste anges.

Attribut

RATE anger antal ord i minuten.

VOL anger volymen i en skala från 0.0 till 1.0, där 0.0 är tyst och 1.0 är maximal ljudvolym.

PITCH anger hastighetn i Hertz. Numeriskt värde.

RANGE anger nivån på pitch i Hertz. Numeriskt värde.

MARK valfritt attribut som frågar efter en underättelse när synthesizern kommer fram till elementets text. Attributets värdeärdentext som skall göras tillgänglig när underättelsen uppträder.

Elementet PROS ger prosodisk/metrisk kontroll i JSML. Prosodi/metrik är en samling egenskaper i språk som inkluderar dess intonation och frasering med mera.
Om man behärskar prosodin/metriken så kan man uppnå en ökad förståelse av det som talas och få ett naturligare tal.
De numeriska värden som du kan ge attributen i PROS-elementet är flyttal i formen 12, 8.3 eller -0.22.

Attributet RATE kan tilldelas värden enligt följande lista:

n Antalet ord i minuten

+n Ökar antalet ord i minuten med det angivna värder

-n Minskar antalet ord i minuten med det angivna värdet

-n% Minskar antalet ord i minuten procentuellt med det angivna värdet

reset återställer till default-värdet

Exempel

<PROS RATE=”150″>talas med 150 ord i minuten</PROS>

Attributet VOL kan tilldelas värden enligt följande lista:

n Anger volymstyrka (endast 0.0 till 1.0)

+n Ökar volymstyrkan med angivet värde

-n Minskar volymstyrkan med angivet värde

+n% Ökar volymstyrkan med angivet värde i procent

-n% Minskar volymstyrkan med angivet värde i procent

reset återställer till default-värdet

Attributen PITCH och RANGE kan tilldelas värden enligt följande lista:

n Anger nivå i Hertz

+n Ökar nivån med angivet värde

-n Minskar nivån med angivet värde

+n% Ökar nivån med det angivna värdet i procent

-n% Minskar nivån med det angivna värdet i procent

reset återställer till default-värdet

<SAYAS>

Elementet SAYAS talar om hur ett ord eller kort fras skall uttalas.
Ett utav attrubuten SUB, CLASS eller PHON måste anges.

Attribut

SUB Anger ett värde i form av en text som skall talas som ett substitut för texten som är angiven i elementet.

CLASS Indikerar hur texten skall uttalas. Värden som kan anges: date, digits, literal, number och time.

PHON För att ange ett IPA (International Phonetic Alphabet) värde eller JAVA- representationen av \uXXXX, Unicode IPA tecken som skall talas istället för text.

MARK Valfritt attribut som frågar efter en underättelse när synthesizern kommer fram till elementets text. Attributets värdeärdentext som skall göras tillgänglig när underättelsen uppträder.

Det är svårt för en syntesizer att veta hur den skall uttala förkortningar, akronymer, namn, lokal jargong och homografer. Om en JSML-applikation innehåller sådan information som löser en sådan svårighet kan man ge den informationen till synthesizer genom att använda SAYAS-elementet.

SUB (Substitute)
SUB-attributet definierar text som skall talas istället för, som i exemplet nedan:

<SAYAS SUB=”I triple E”>IEEE</SAYAS>

CLASS
När CLASS-attributet värde är date skall texten som ärmarkerad uttalas som ett datum, till exempel:

<SAYAS CLASS=”date”>Jan. 1952</SAYAS>
<!– uttalas som: January nineteen fifty-two –>

Ibland kan det vara nödvändigt att använda attributet SUB istället för CLASS=”date” för att få rätt uttal. Ett exempel är datumnotationen 4/3/97 dubbeltydig i:

<SAYAS CLASS=”date”>4/3/97</SAYAS>

Det kan sägas ”April third nineteen ninety-seven” eller ”March fourth nineteen ninety-seven”. Om det är ett dubbeltydigt uttryck så använder du SUB-attributet för att förtydliga:

<SAYAS SUB=”March fourth nineteen ninety-seven”>4/3/97</SAYAS>

När attributet CLASS har värdet literal bokstaveras bokstäver, siffror och andra tecken.

Exempel

<SAYAS CLASS=”literal”>JSML</SAYAS>
<!– bokstaveras J S M L –>

<SAYAS CLASS=”literal”>12</SAYAS>
<!– bokstaveras till one two –>

<SAYAS CLASS=”literal”>100%</SAYAS>
<!– bokstaveras till one zero zero percent sign –>

När CLASS-attributet har värdet number uttalas den markerade texten som ett tal, till exempel:

<SAYAS CLASS=”number”>12</SAYAS>
<!– uttalas som twelve –>

PHON (Phonetic Pronunciation)
PHON-attributet använder tecknen från IPAs (International Phonetic Alphabet) undergrupp av Unicode för att definiera en ljudsekvens.
För mer information om Unicodes IPA stöd kan du läsa The Unicode Standard 2.0 (The Unicode Consortium Addison-Wesley Developers Press, 1996).
Tänk på att det kan uppsttå problem om du försöker få synthesizern att uttala på ett annat språk än sitt ursprungliga.

<SAYAS PHON=”\u0066\u006F\u028A\u006E\u025B\u0074\u026A
\u006B\u0073″> phonetics </SAYAS>

Du kan inte nästla element i SAYAS-elementet.

Tillåtet

<PROS RATE=”30%”><SAYAS SUB=”sun dot com”>sun.com </SAYAS></PROS>

Inte tillåtet:

<SAYAS SUB=”sun dot com”><PROS RATE=”30%”>sun.com</PROS></SAYAS>

<SENT>

Elementet SENT markerar text som en mening.

Attribut

MARK Valfritt attribut som frågar efter en underättelse när synthesizern kommer fram till elementets text. Attributets värdeärdentext som skall göras tillgänglig när underättelsen uppträder.

Syntax

<SENT>Dog eat dog.</SENT>

SENT-element kan inte nästlas med varandra.

Det var det hela. Jag kommer antagligen att lägga upp liknande för VoxML också däremot får vi se om jag orkar att vid tillfälle ta idu med WML/WAP och VoiceXML som jag hade på originalsajten men som försvann när webbhotellet krashade (De är inte kvar i branchen längre och det finns väl orsak till det kan man tro). Det vore dock kul att ge sig på talstyrt internetsurfande igen. Det finns nog ett antal applikationer där detta är ett reellt verktyg så kanske om tiden tillåter.

Mobila tekniker

:: Anledningen till att jag en gång i tiden skapade en hemsida var att dela med mig av och framför allt samla information om olika mobila språk.

Som du kanske redan har märkt så finns det i dag endast JSML representerat på den här sajten i dag.

På www.casselbrant.com fanns det tidigare genomgångar och information även för VoiceXML, VoxML, WML med flera språk.
Jag jobbar på att dessa snart skall komma upp även här men då all data försvann från webbhotellet jag hade och jag själv inte hade någon back-up (back-up ingick i tjänsten från webbhotellet, sa de i alla fall) så är det ett stort jobb att återställa det hela.
Särskilt som jag hade tänkt att passa på att uppdatera all information också

Jag tycker att det är lite svårt att komma igång med wap.

Östen Mäkitalo, teknisk chef på Telia Mobile till tidningen Teleaffärer.