Webové rozhraní pro interpret JVoiceXML



Podobné dokumenty
STŘEDNÍ ŠKOLA INFORMAČNÍCH TECHNOLOGIÍ A SOCIÁLNÍ PÉČE

}w!"#$%&'()+,-./012345<ya

ZAŘÍZENÍ PRO VZDÁLENÝ SBĚR A PŘENOS DAT FIRMWARE

Počítačová Podpora Studia. Přednáška 5 Úvod do html a některých souvisejících IT. Web jako platforma pro vývoj aplikací.

INFORMAČNÍ SYSTÉMY NA WEBU

Semináˇr Java X J2EE Semináˇr Java X p.1/23

Škola: Gymnázium, Brno, Slovanské náměstí 7 III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Název projektu: Inovace výuky na GSN

MATLABLINK - VZDÁLENÉ OVLÁDÁNÍ A MONITOROVÁNÍ TECHNOLOGICKÝCH PROCESŮ

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

Úvod do aplikací internetu a přehled možností při tvorbě webu

Web Services na SOAP

2015 GEOVAP, spol. s r. o. Všechna práva vyhrazena.

Server-side technologie pro webové aplikace

java remote method invocation Kateřina Fricková, Matouš Jandek

Internet Information Services (IIS) 6.0

Úvod do tvorby internetových aplikací

rychlý vývoj webových aplikací nezávislých na platformě Jiří Kosek

VDDMAIL by ESCAD, Corp. (Součást IWSE.NET Services by ESCAD, Corp.)

Olga Rudikova 2. ročník APIN

Programátorská příručka

Aplikace je program určený pro uživatele. Aplikaci je možné rozdělit na části:

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Elektronická podpora výuky předmětu Komprese dat

MBI - technologická realizace modelu

DUM č. 11 v sadě. 36. Inf-12 Počítačové sítě

Úvod do Web Services

Podpora skriptování v Audacity

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové aplikace

1. Webový server, instalace PHP a MySQL 13

PHP PHP je skriptovací programovací jazyk dynamických internetových stránek PHP je nezávislý na platformě

Servlety a JSP. Petr Adámek, petr.adamek@ibacz.eu

PHP framework Nette. Kapitola Úvod. 1.2 Architektura Nette

Obsah. Úvodem 9 Zpětná vazba od čtenářů 10 Zdrojové kódy ke knize 10 Errata 10

1. Úvod do Ajaxu 11. Jak Ajax funguje? 13

Obsah. Kapitola 1. Předmluva 11 O této knize 13 Konvence...13

1. DATOVÉ SCHRÁNKY OBECNÝ PŘÍSTUP K DATOVÉ SCHRÁNCE DATOVÉ ZPRÁVY... 3

DELTA - STŘEDNÍ ŠKOLA INFORMATIKY A EKONOMIE, s.r.o. Obor informační technologie AJAX ESHOP. Maturitní projekt. Třída:

Formy komunikace s knihovnami

1 Administrace systému Moduly Skupiny atributů Atributy Hodnoty atributů... 4

Karel Bittner HUMUSOFT s.r.o. HUMUSOFT s.r.o.

Programovací jazyky Přehled a vývoj

Základní pojmy spojené s webovým publikováním ~ malý slovníček pojmů~ C3231 Základy WWW publikování Radka Svobodová, Stanislav Geidl

Software pro vzdálenou laboratoř

Vstupní požadavky, doporučení a metodické pokyny

ČESKÉ VYSOKÉ UČENÍ TECHNIKÉ Fakulta elektrotechnická. Microsoft Sharepoint 2007 Workflows Průmyslové informační systémy

ZÁVĚREČNÁ STUDIJNÍ PRÁCE dokumentace

Tvorba informačních systémů

Artlingua Translation API

Úvod do aplikace SMS/MMS Manager

Obsah. Úvod 11 O autorovi 11 Koncept knihy 11 Zpětná vazba od čtenářů 12 Zdrojové kódy ke knize 12 Errata 12 ČÁST I VÝVOJ MOBILNÍ APLIKACE

(Enterprise) JavaBeans. Lekce 7

Efektivní vývoj mobilních aplikací na více platforem současně. Mgr. David Gešvindr MCT MSP MCPD MCITP

GTL GENERATOR NÁSTROJ PRO GENEROVÁNÍ OBJEKTŮ OBJEKTY PRO INFORMATICA POWERCENTER. váš partner na cestě od dat k informacím

Ing. Přemysl Brada, MSc., Ph.D. Ing. Martin Dostal. Katedra informatiky a výpočetní techniky, FAV, ZČU v Plzni

X33EJA Web Services. Martin Ptáček, KOMIX s.r.o.

Platební systém XPAY [

Úvod. Petr Aubrecht (CA) Martin Ptáček (Wincor Nixdorf) Je 10 typů lidí: ti, kteří znají binární kód, a ti, kteří ne.

1. Webové služby. K čemu slouží? 2. RPC Web Service. 3. SOA Web Service. 4. RESTful Web services

CZ.1.07/1.5.00/

1 Webový server, instalace PHP a MySQL 13

Současný svět Projekt č. CZ.2.17/3.1.00/32038, podpořený Evropským sociálním fondem v rámci Operačního programu Praha adaptabilita

Reliance 3 design OBSAH

WAP. Jirka Kosek. IZI228 tvorba webových stránek a aplikací. Poslední modifikace: $Date: 2004/09/30 09:02:59 $ Copyright Jiří Kosek

Dispatcher PDA Dokumentace

OBSAH. 1. Úvod Požadavky na SW vybavení... 3

Úvodem 9. Zpětná vazba od čtenářů 10 Zdrojové kódy ke knize 10 Errata 10. Než začneme 11

SRSW4IT Inventarizační SW. Prezentace aplikace. Vedoucí DP: ing. Lukáš Macura Autor: Bc. Petr Mrůzek

Webové rozhraní pro datové úložiště. Obhajoba bakalářské práce Radek Šipka, jaro 2009

MODERNÍ WEB SNADNO A RYCHLE

RMI - Distribuované objekty v Javě

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové aplikace

1 Uživatelská dokumentace

1 Strukturované programování

Svolávací systém Uživatelský manuál

UNIVERZITA PARDUBICE DOPRAVNÍ FAKULTA JANA PERNERA

Nápověda k aplikaci EA Script Engine

Softwarové komponenty a Internet

KAPITOLA 2 - ZÁKLADNÍ POJMY INFORMAČNÍCH A KOMUNIKAČNÍCH TECHNOLOGIÍ

Bakalářská práce, FEL ČVUT Praha. Michal Turek. červenec 2007

Osnova. GIOP a IIOP IDL IOR POA. IDL Klient Server. 2 Historie. 3 Princip a základní pojmy. 4 Implementace. 5 Aplikace CORBA

Technologie Java Enterprise Edition. Přemek Brada, KIV ZČU

Modul msender message Sender. Nápověda

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans.

ADMINISTRACE POČÍTAČOVÝCH SÍTÍ. OPC Server

Úvod Seznámení s předmětem Co je.net Vlastnosti.NET Konec. Programování v C# Úvodní slovo 1 / 25

Úvodem Seznámení s HTML Rozhraní Canvas... 47

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ /14

Prezentace CRMplus. Téma: CRMplus jako nástroj pro kontrolu a vyhodnocení rozpracovanosti dílů na zakázkách

Web. Získání informace z internetu Grafické zobrazení dat a jejich struktura Rozšíření funkcí pomocí serveru Rozšíření funkcí pomocí prohlížeče

STŘEDOŠKOLSKÁ ODBORNÁ ČINNOST. Obor SOČ: 18. Informatika. Školní sdílení PC obrazovek. School sharing PC screens

MIDAM Verze 1.1. Hlavní okno :

MRBT. Stacionární průmyslový robot EPSON C3 aplikace pro prezentaci

APS Web Panel. Rozšiřující webový modul pro APS Administrator. Webové rozhraní pro vybrané funkce programového balíku APS Administrator

Cisco IOS TCL skriptování využití SMTP knihovny

WORKWATCH ON-LINE EVIDENCE PRÁCE A ZAKÁZEK

RESTful API TAMZ 1. Cvičení 11

Matematika v programovacích

3.4 Základní služby Internetu

Transkript:

MASARYKOVA UNIVERZITA FAKULTA INFORMATIKY Webové rozhraní pro interpret JVoiceXML BAKALÁŘSKÁ PRÁCE Marek Pivoda Brno 2012

Prohlášení Prohlašuji, že tato práce je mým původním autorským dílem, které jsem vypracoval samostatně. Všechny zdroje, prameny a literaturu, které jsem při vypracování používal nebo z nich čerpal, v práci řádně cituji s uvedením úplného odkazu na příslušný zdroj. Vedoucí práce: Mgr. Luděk Bártek, Ph.D. ii

Poděkování Za námět práce, cenné rady při její realizaci, bych rád poděkoval vedoucímu této bakalářské práce Mgr. Luďku Bartkovi, Ph.D. iii

Shrnutí Jádrem této práce je volně dostupný VoiceXML interpret JVoiceXML, který je napsán v jazyce Java. Výstupem této práce je návrh a implementace rozšiřujícího modulu interpreta pro komunikaci přes webové rozhraní textovou formou. Takto vytvořený modul s pomocí protokolu HTTP komunikuje s rozhraním. iv

Klíčová slova VoiceXML, interpret, JVoiceXML, Java, servlet, JavaScript, Json v

Obsah 1 Úvod... 1 2 Jazyk VoiceXML... 2 2.1 Historie... 2 2.2 Architektura... 2 2.3 VoiceXML interprety... 3 3 JVoiceXML... 4 3.1 Architektura... 4 3.2 Pomocné technologie... 5 3.2.1 Java... 5 3.2.2 Apache Ant... 5 3.2.3 Apache Log4j... 5 3.2.4 Servlet kontejner... 6 4 Analýza problému... 7 5 Návrh řešení... 9 5.1 Textová implementace JVoiceXML... 9 5.1.1 Třída TextServer... 9 5.1.2 Rozhraní TextListener... 9 5.1.3 Rozhraní Session... 10 5.2 Návrh modulu... 10 5.3 Návrh webového rozhraní... 11 5.4 Komunikace... 11 6 Implementace... 13 6.1 Vývojové prostředí... 13 6.2 Textový modul... 13 6.2.1 Funkcionalita... 13 6.2.2 Třída ModuleChat... 14 6.2.3 Třída TextClient... 16 6.3 Webové rozhraní... 17 6.3.1 Funkcionalita... 17 6.3.2 Odesílání dat... 17 6.3.3 Načítání výstupů... 18 7 Závěr... 19 vi

1 Úvod V posledních letech je stále populárnější používání hlasových služeb k obsluze zařízení. Již zcela běžné se stalo hlasové ovládání u mobilních zařízení. VoiceXML [1] je jeden z několika jazyků, který nabízí rozsáhlé možnosti pro interakci mezi člověkem a počítačem. Využívá k tomu uspořádané VoiceXML dokumenty, které tvoří dialogové aplikace, které umožňují řízenou komunikaci s počítačem. Pro spuštění dialogových aplikací je potřeba interprety VoiceXML. Jeden z volně dostupných je JVoiceXML [2], kterému je věnována tato práce. Interpret je napsán v jazyce Java [3], který umožňuje interpret škálovat a tak pohodlně rozšiřovat o nové moduly. V této práci se zaměříme na komunikaci v textové formě přes webové rozhraní. Jelikož potřebný modul interpretu chybí, je cílem práce takový modul navrhnout a sestrojit. Komunikačním protokolem bude HTTP protokol [4], který nabízí přirozený způsob komunikace pro webové rozhraní. Řešení vyžaduje, aby výsledný modul byl dostupný přes internet a současně úzce komunikoval se samotným interpretem. Webové rozhraní bude sloužit jako vstupní bod pro uživatele ke komunikaci s interpretem. 1

2 Jazyk VoiceXML VoiceXML (Voice extensible Markup Language) je značkovací jazyk pro návrh dialogů, který vychází ze syntaxe XML (extensible Markup Language) [5]. Tento jazyk slouží pro návrh hlasových dialogů, které umožňují rozpoznávání lidské řeči a následně i vytvoření syntetizované řeči jako jeden z možných výstupů. VoiceXML také navíc dokáže přijímat DTMF (Dual-tone multi-frequency signaling) [6] vstupy z telefonních zařízení. Hlavním cílem jazyka je umožnit komunikaci mezi člověkem a počítačem lidskou řečí a zpřístupnit webový obsah do dialogových systémů. V současné době má jeho vývoj pod kontrolou konsorcium W3C [7] jako projekt Voice Browser [8]. 2.1 Historie Vývoj jazyka VoiceXML začal již v roce 1995, kdy společnost AT&T vytvořila projekt s názvem Phone Markup Language (PML). V této době se však existovala i řada dalších projektů zabývajících se vývojem jazyka na návrh dialogů, například společnost IBM vyvíjela SpeechML [9], Motorola VoxML [10] a HP TalkML [11]. Proto byl v roce 1998 sjednocen vývoj jazyka pod jeden projekt VoiceXML Forum [12], který měl za úkol vytvořit jednotný standard. První verze VoiceXML 1.0 vyšla v roce 2000 a stala se základem pro nový mezinárodní standard W3C, jejímž výsledkem je VoiceXML verze 2.0. 2.2 Architektura Dialogové aplikace umožňují přístup k informacím dvěma způsoby. První možností je klasický přístup přes protokol HTTP (HyperText Transfer Protocol) a webovou stránku. Druhou variantou je připojení pomocí telefonního zařízení, které naváže telefonní spojení s VoiceXML serverem. Součásti VoiceXML Serveru je VoiceXML interpret (VoiceXML browser) s nástroji na rozpoznávání řeči a syntézu řeči (text-to-speech). Další součásti modelu je dokumentový server, který je většinou nezávislý na zbytku systému a přístup k jeho obsahu se proto provádí pomocí HTTP požadavků. Dokumentový server spravuje servisní logiku a podle probíhající komunikace může generovat dynamické webové stránky. Jako dokumentový server může být použit HTTP server. Celá architektura sytému je znázorněna na obrázku 2.1 [13]. VoiceXML nabízí několik málo základních principů, které umožňují zjednodušit samotný vývoj: Minimalizuje komunikaci mezi klientem a serverem Režie serveru je oddělena od uživatelského kódu Programátor nemusí řešit nízko-úrovňové programování a podporu platformy Přenositelnost napříč všemi platformami Poskytuje silné nástroje s jednoduchým použitím 2

Obrázek 2.1: Schéma architektury VoiceXML 2.3 VoiceXML interprety Pro zpracování VoiceXML dokumentu je zapotřebí VoiceXML interpret, který dokáže zprostředkovat komunikaci mezi člověkem a počítačem. Tento interpret bývá ve většině případů připojen k veřejné telefonní síti. Pomocí modulu pro rozpoznávání řeči je pak následně umožněno zpracování a vyhodnocení audio vstupu. Uživateli je kromě hlasové komunikace umožněno využít klávesnici na telefonu metodou DTMF. Na trhu existuje několik VoiceXML interpretů, mezi nimiž jsou cenové rozdíly podle distribuční licence. Liší se však často i podporou operačního systému, nebo programovacím jazykem, ve kterém je interpret napsaný. Komerční interprety poskytují komplexnější řešení a rozsáhlejší podporu standardu VoiceXML 2.0. Interprety s otevřenou licencí nemusí mít vždy úplnou podporu standardu, za to však nabízí možnost si libovolně nedostatky sám naprogramovat. Příkladem komerčního řešení je např. Voxeo ProphecyI [14], k volně dostupným interpretům patří např. Open VXI VoiceXML Interpreter [15] napsaný v C/C++, nebo JVoiceXML napsaný v Javě. V této práci se budeme zabývat interpretem JVoiceXML. 3

3 JVoiceXML JVoiceXML je volný VoiceXML interpret napsaný v jazyce Java, jenž podporuje standardy VoiceXML 2.0 a jeho rozšíření VoiceXML 2.1. Je navržen pro vytváření hlasových dialogů, včetně syntézy řeči, digitalizace zvuku, rozpoznávání řeči a jeho nahrávání. Mimo jiné zvládá práci s telefony pomocí DTMF vstupů a tvorbu VoiceXML dokumentů. Využívá GNU library general public licenci [16], která poskytuje možnost bezplatného použití JVoiceXML knihovny v komerčních projektech. Všechny zdroje jsou volně dostupné na serveru SourceForge.net. 3.1 Architektura JVoiceXML je napsán v objektově orientovaném jazyce Java, díky němuž je JVoiceXML na platformě nezávislý. Pro zajištění chodu JVoiceXML je zapotřebí dokumentového serveru. Jako dokumentový server je běžně využíván web server, pro ukládání VoiceXML dokumentů je však možné použit i servlet [17] kontejnery. Dokumenty bývají přístupné přes HTTP nebo jiné typy protokolů. JVoiceXML běží jako samostatný server. Funguje jako hlavní komponenta, která obsahuje interpret, získává data z dokumentového serveru a vytváří sezení s klientskými aplikacemi. Při instalaci je možné vybrat z několika platforem lišících se podporou vstupu a výstupu. Pro rozpoznávání řeči a její syntézu slouží platforma JSAPI (Java Speech API) [18], pro ovládání telefonních hovorů pak platforma JTAPI (Java Telephony API) [19], a pro komunikaci textovou formou platforma textová. Poslední komponentu architektury tvoří klientská aplikace, která k JVoiceXML přistupuje pomocí JNDI (Java Naming and Directory Interface) [20] a RMI (Remote Method Invocation) [21], a díky čemuž dokáže aplikace vzdáleně volat Java třídy interpreta a jeho metody. Viz obrázek 2.1 [22]. Obrázek 2.1: Základní architektura JVoiceXML 4

3.2 Pomocné technologie Největší výhodou JVoiceXML je otevřená licence LGPL, pod kterou je program distribuován, což je dáno především použitím volně dostupných softwarů a technologií. Kromě programovacího jazyku Java jsou využívány např. programy Ant, Log4j a servlet kontejner. 3.2.1 Java JVoiceXML je naprogramovaný v objektově orientovaném jazyce Java. To umožňuje jednoduché dělení celého programu na moduly, a tím i snadné rozšíření o případné další moduly. Modul je tvořen jednou a více třídami, které využívají základní metody z jádra JVoiceXML. Pokud se uživatel rozhodne pro vývoj, potřebuje Java EE 6 SDK (Software Development Kit) verze 6. 3.2.2 Apache Ant Apache Ant je pomocný nástroj pro vývojáře v jazyce Java používaný zejména ve větších projektech s více než jedním programátorem. Ant bývá používán k automatizaci některých činností, jako jsou např. kompilace programu, testování a vytvoření balíku pro distribuci, apod. Skripty jsou napsány ve formátu XML. Za vývojem stojí organizace Apache Software Foundation [23]. Doporučená verze k JVoiceXML je alespoň 1.7.0. Většina Java IDE (Integrated Development Environment) již má podporu pro Ant. 3.2.3 Apache Log4j Apache Log4j je pokročilý logovací nástroj pro jazyk Java. V současnosti je vyvíjen organizací Apache Software Foundation [24] pod otevřenou licencí Apache License 2.0. Log4j nabízí rozsáhlou podporu pro zaznamenávání běhu programu s pomocí několika úrovní zpráv. Viz tabulka 3.1. V JVoiceXML je použita verze 1.2.15. 5

Úroveň Popis OFF Nejvyšší možná úroveň, vypíná logování. FATAL Závažné chyby, které způsobí předčasné ukončení programu. Očekává se, že budou zobrazeny na konzole. ERROR Jiné běhové chyby nebo neočekávané výjimky. Očekává se, že budou ihned zobrazeny na konzole. WARN Použití nechváleného API, jiné nežádoucí nebo neočekávané běhové situace, které nemusí být nutně špatné. Očekává se, že budou ihned zobrazeny na konzole. INFO Zajímavé běhové události (start/konec). Očekává se, že budou ihned zobrazeny na konzole, proto pouze stručná zpráva. DEBUG Detailní informace o chodu systému. Očekává se, že budou zapisovány pouze do logů. TRACE Bližší informace. Očekává se, že budou zapsány pouze do logů, od verze 1.2.12. Tabulka 3.1: Seznam úrovní logů 3.2.4 Servlet kontejner K plnému nasazení JVoiceXML je potřeba servlet kontejneru, který může sloužit jako dokumentový server. Servlet kontejner podporuje Java API javax.servlet. V současnosti existuje celá řada volně dostupný servletů. Asi nejvíce rozšířený a také pro JVoiceXML doporučený je Apache Tomcat [25] vyvíjený organizací Apache Software Foundation. Mezi další volně dostupné servlety patří GlassFish [26], JBoss Application Server [27], Jetty [28] aj. Jelikož mezi servlety nejsou výraznější rozdíly, je výběr servletu k JVoiceXML čistě na vývojáři. V této práci jsme zvolili servlet Jetty. 6

4 Analýza problému Výsledek této práce má JVoiceXML rozšířit o možnost komunikovat s uživatelem přes jednoduché webové rozhraní. Z důvodu zobrazení vstupů uživatele a výstupů interpreta v textové formě byla použita textová platforma JVoiceXML. Vstupní a výstupní webové rozhraní by mělo uživateli nabídnout několik základních funkci k obsluze, a také zpracovávat vstupní a výstupní textové řetězce do odpovídajícího formátu tak, aby vznikl pomyslný vzhled chatu mezi uživatelem a počítačem. Každá zpráva by měla být označena jménem odesílatele. Uživatelské požadavky jsou poté přes webové rozhraní posílány na jednoduchý server. Využití webového rozhraní je znázorněno na obrázku 4.1. Obrázek 4.1: Diagram užití I/O rozhraní Vstupní/výstupní webové rozhraní nabízí uživateli dvě varianty zvolení dokumentu. První varianta uživateli umožňuje vybrat dokument přes protokol HTTP. Druhou variantou je načtení dokumentu z lokálního úložiště interpreta. Rozhraní musí vytvořit seznam dostupných dokumentů. Uživatel dále může spustit interpretaci daného dokumentu a také jí následně ukončit. Během interpretace dokumentu rozhraní zobrazuje chronologicky vstupy a výstupy. Uživatel má možnost vkládat vstupy a odesílat je. Na straně druhé je jednoduchý chat modul umístěn mezi webové rozhraní a interpret a zastupuje funkci jednoduchého serveru a rozšiřujícího modulu pro JVoiceXML. Chat modul zajišťuje spojení mezi rozhraním a textovou platformou JVoiceXML a jako server musí přijímat a rozpoznávat 7

HTTP požadavky od webového rozhraní a následně na ně adekvátně reagovat. Současně však musí obsluhovat připojení k interpretu, vytvořit, udržet a zrušit sezení s interpretem, odesílat uživatelské vstupy interpretu a opačným směrem posílat odpovědi interpreta. Hlavní požadavky na modul jsou zachyceny na obrázku 4.2. Celé řešení pracuje na principech klient-server. Obrázek 4.2: Diagram užití modul chat 8

5 Návrh řešení V této kapitole se podrobněji zaměříme na problematiku textové implementace JVoiceXML a návrhu jeho webového rozhraní z pohledu použitých technologií. Celý návrh je následně doplněn diagramem tříd. 5.1 Textová implementace JVoiceXML Textová implementace JVoiceXML je ukrytá v API org.jvoicexml.implementation.text. Třináct tříd v ní obsažených poskytuje dostatečný prostor pro vývojáře. V této práci nás zajímají hlavně třídy z podbalíku org.jvoicexml.implementation.text, který obsahuje čtyři třídy a jedno rozhraní. 5.1.1 Třída TextServer Třída TextServer slouží jako rozhraní pro připojení k interpretu JVoiceXML textovou formou. Třída funguje jako socket server implementující rozhraní Runnable. K serveru se následně připojují textoví klienti, v našem případě chat modul. Připojený textový klient je pak schopen číst výstupy od interpreta a odesílat zpět odpovědi. Textový klient je definován rozhraním TextListener. Třída TextServer je schopna registrovat a následně obsluhovat až 28 textových klientů. Díky třídě Thread, kterou TextServer rozšiřuje, dokáže server zpracovávat požadavky paralelně. Po spuštění si server ukládá své posluchače pomocí metody addtextlistener(textlistener). Pro odeslání uživatelského vstupu na interpret slouží metoda sendinput(string). Činnost serveru se ukončí metodou stopserver(). 5.1.2 Rozhraní TextListener Předepsané rozhraní TextListener nabízí celkem pět veřejných metod, které musí každý textový klient libovolně implementovat. Těchto pět základních metod zajišťují jednotné ovládání s TextServerem, viz tabulka 5.1. Mezi nejdůležitější metody patří outputssml(org.jvoicexml.xml.ssml.ssmldocument) a outputtext(string), které mají obsluhovat příjem výstupů od interpreta. Metoda outputssml pracuje se souborem typu SSML (Speech Synthesis Markup Language) [29], často používaný pro tvorbu audio knih. Vhodnější metoda pro tuto práci je outputtext, která využívá pouze textové řetězce. Další zbylé metody se týkají navázání spojení se serverem. 9

návratový typ void connected(inetsocketaddress) metoda void void void void outputssml(org.jvoicexml.xml.ssml.ssmldocument) outputtext(string) started() disconnected() Tabulka 5.1: Seznam metod rozhrani TextListener 5.1.3 Rozhraní Session Rozhraní Session je umístěné v balíku org.jvoicexml. Definuje sedm základních funkcí pro vytvoření sezení mezi interpretem a klientem. Vzdálený klient spouští komunikaci a sezení s interpretem pomocí metody call(uri), během níž se načte kořenový dokument a začne jeho interpretace. Další důležitou funkcí je hangup(), která slouží k ukončení sezení, a metoda waitsessionend(), která čeká na konec sezení. Tyto tři nejdůležitější metody jsou použity ve třídě TextClient. 5.2 Návrh modulu Výsledný modul musí umět simulovat server pro komunikaci s webovým rozhraním a současně navázat spojení s TextServerem, proto je nezbytná implementace rozhraní TextListener. Z těchto důvodu byly vytvořeny dvě třídy, každá třída funkcionálně jednoznačná. Třída ModuleChat představuje servlet, umístěn v kontejneru Jetty. Rozšiřuje třídu HttpServlet, obsluhuje HTTP požadavky a jejich odpovědi metodou dopost. Současně uchovává všechny zprávy celé komunikace a postupně je vypisuje. Třída TextClient zastupuje textového klienta, která má na starost připojení k TextServeru. Implementuje třídu TextListener. Nejdůležitější metody jsou outputssml a outputtext pro získávání výstupu od interpreta, dále pak metoda sendinput pro posílání uživatelského vstupu interpretu. Metoda execute spouští interpretaci daného dokumentu. O samotné připojení k TextServeru se starají metody started a disconnected. Na obrázku 5.2 je znázorněn diagram tříd. 10

Obrázek 5.2: Diagram tříd 5.3 Návrh webového rozhraní Druhou částí aplikace je webové rozhraní sloužící jako vstupní uživatelské rozhraní, pomocí něhož bude uživatel přistupovat k obsluze JVoiceXML. Uživatelské rozhraní je spustitelné v libovolném webovém prohlížeči. K sestrojení uživatelského rozhraní byly použity běžné webové technologie jako HTML (Hyper Text Markup Language) [30], CSS (Cascading Style Sheets) [31] a AJAX (Asynchronous Javascript And Xml) [32]. Layout celého rozhraní tvoří vstupní a výstupní prvky. Největší část tvoří výstupní textové pole umístěné v horní polovině rozhraní. Do pole se vypisují komunikace mezi interpretem a uživatelem. Výstupní pole má fixní rozměry a v případě většího obsahu se vytvoří vertikální rolovací lišta. Ve spodní polovině rozhraní jsou umístěny vstupní prvky, vstupní textové pole pro zadávání uživatelských vstupů a ovládací tlačítka, např. pro odesílání. 5.4 Komunikace V této podkapitole jsou popsány některé vztahy při komunikaci modulu. Detailnější popis zahrnující danou implementaci je v 5. Kapitole. Uživatelské rozhraní reprezentuje HTML stránka, proto veškerá komunikace s modulem je zastoupena protokolem HTTP, který poskytuje pro HTML nativní nástroj. Přímo pro odesílání dat z rozhraní je využita metoda POST, a to zejména pro potřebu posílání většího množství dat, než by bylo vhodné pro metodu GET. Současně je potřeba posílat různé HTTP požadavky, které musí být následně na straně serveru identifikovány a dále zpracovány, požadavek na spuštění interpretace, požadavek na ukončení interpretace, zasílání uživatelských odpovědí a požadavky na získávání dat od interpreta. 11

Na straně serveru je vytvořeno spojení s interpretem. Při startu serveru třída ModuleChat vytváří novou instanci třídy TextClient. Následně pří obdržení spouštěcího HTTP požadavku třída ModuleChat volá metodu call(uri) třídy TextClient, a tím spouští interpretaci daného VoiceXML dokumentu. Třída TextClient komunikuje s třídou TextServer pomocí předem definovaného rozhraní TextListener. Třída TextClient vytváří instanci třídy TextServer na daném portu a je pak následně přidána jako její posluchač. TextClient posílá výstupy interpretu pomocí metody sendinput(string). Odpovědi interpreta jsou metodami outputtext() a outputssml() posílány třídě ModuleChat. Komunikace mezi třídou TextServer a interpretem je součásti textové implementace JVoiceXML a proto v této práci není dále rozebírána. Obrázek 5.3: Schéma komunikace 12

6 Implementace Tato kapitola je věnována implementaci výsledného řešení, jehož součásti je textový modul a vstupní rozhraní. Detailněji jsou zde popsány struktury tříd a důležitých metod. První polovina kapitoly je věnována řešení textového modulu, který rozšiřuje interpret. V druhé části kapitoly je pak nastíněno chování webového rozhraní, sloužící jako vstupní rozhraní pro textový modul. 6.1 Vývojové prostředí Textový modul byl vyvíjen jako rozšiřující modul k interpretu JVoiceXML, který umožní komunikovat textovou formou přes webové rozhraní. Jako testovací verze interpreta byla použita poslední dostupná verze 0.7.4.GA, jež je k dispozici ke stažení na serveru sourceforge.net. K napsání textového modulu byl použit jazyk Java vycházející z požadavku interpreta, který je také napsán ve stejném programovacím jazyce. Jako vývojové prostředí k Javě bylo použito NetBeans [33]. Dále byl použit program ANT, který byl součásti NetBeans, k vytváření WAR souborů. Celé řešení pak bylo testováno na servlet kontejnerech Jetty a Apache Tomcat. 6.2 Textový modul Textový modul slouží jako server spouštěn na servlet kontejneru, který obsluhuje HTTP požadavky od webového rozhraní a současně navazuje spojení s interpretem, přijímá výstupní data od interpreta a posílá vstupní data. Textový modul se skládá z 2 tříd ModuleChat a TextClient. Třída ModuleChat rozšiřuje třídu HttpServlet z balíku javax.servlet.http a slouží jako server. Druhá třída TextClient zastupuje posluchače k třídě TextServer, která je součásti textové platformy interpreta. TextClient implementuje rozhraní TextListener. 6.2.1 Funkcionalita Textový modul je spuštěn na Java servletu, od webového rozhraní přijímá především POST požadavky, které jsou rozlišeny na 4 typy. Pro výměnu dat je zvolen datový formát JSON (JavaScript Object Notation), který je platformě nezávislý a oproti XML může být úspornější [34]. Každý typ požadavku je odlišený klíčem type. Pro hodnotu klíče type byla vybrána číselná hodnota, např. type : 0. První požadavek je typu FILE, jeho úkolem je zjistit a vypsat obsah složky file, která slouží jako úložiště pro vxml dokumenty. Další požadavek je START, slouží k zahájení interpretace, součásti požadavku je adresa na kořenový vxml dokument dialogové aplikace. Tato URL se pak stává parametrem funkce execute, která je součásti vytvořené instance třídy TextClient. Metoda execute vytvoří spojení s TextServerem a získá výstup od interpreta. Třetí požadavek je typu UPDATE. Po obdržení požadavku modul porovná počet všech uložených zpráv s počtem již odeslaných zpráv na rozhraní. V případě, že počty zpráv nesedí, modul 13

odešle neodeslané zprávy na rozhraní. Požadavek UPDATE je automaticky posílán v intervalu několika sekund. Čtvrtý požadavek je typu SEND, pomocí něhož rozhraní posílá uživatelské vstupy interpretu. Modul obdrží výstup v textové podobě, který metodou sendinput odesílá interpretovi. Následně pak výstup upraví do odpovídajícího tvaru, přidá jméno odesílatele (User) a uloží do seznamu listofmessages. Poslední požadavek STOP signalizuje ukončení interpretace od uživatele. Modul zruší sezení s interpretem a vymaže všechny uložené zprávy. Tabulka 6.1 znázorňuje číselné rozložení požadavků. Podrobnější popis reakcí na HTTP požadavky u metody dopost. Typ požadavku Číselná hodnota function FILE 0 START 1 UPDATE 2 SEND 3 STOP 4 Tabulka 6.1: Přehled typů požadavků 6.2.2 Třída ModuleChat Třída ModuleChat je hlavní třídou celého modulu, slouží jako spojovací uzel mezi webovým rozhraním a třídou TextClient. Pomocí třídy HttpServlet, kterou rozšiřuje, plní funkci servletu. Třída je inicializována při startu kontejneru Jetty metodou init(). Po startu je třída připravena přijímat HTTP požadavky od rozhraní, především pak požadavky odeslané metodou POST. O třídění a zpracování POST požadavků se stará metoda dopost(), která je součásti třídy HTTPServlet. V doručených požadavcích jsou data distribuované ve formátu JSON, pro jejich zpracování potřebuje třída externí knihovnu třetí strany. Existuje několik Java knihoven pro zpracování JSON, v této práci jsme použili volně dostupnou knihovnu JSON.simple [35]. Mezi další Java knihovny patří GSON [36], JsonLib [37] a FlexJson [38], aj. Dále má třída tři důležité parametry numofmessages, listofmessages a textclient. Parametr NumOfMesages reprezentuje číselnou hodnotu typu int, která uchovává počet zpráv vypsaných na webovém rozhraní. Druhý důležitý parametr je textclient jenž uchovává odkaz na instanci třídy TextClient. Třetí parametr listofmessages zastupuje seznam všech doručených zpráv od uživatele a interpreta. Zprávy jsou uložené jako typ String. Typ seznamu byl zvolen jako ArrayList a to pro své výhody, možnost přístupu k libovolnému prvku seznamu v konstantním čase O(1) a dynamické zvyšování kapacity seznamu. Každá zpráva v seznamu je uložena ve tvaru <span class='user'>user</span>zpráva nebo <span class='system'>system</span>zpráva, podle toho kdo jí poslal. 14

Metoda dopost Metoda dopost řídí celý běh textového modulu a proto je nejdůležitější metodou. Metoda přijímá HTTP požadavky odeslané metodou POST, podle jejichž typu se pak určuje chování modulu. Metoda je rozdělena na pět větví podle typu požadavků, větvení se provádí pomocí příkazu SWITCH. Třídění požadavků se provádí podle jeho typu, který je reprezentován číselným indexem. Typ HTTP odpovědí vytvořených metodou je nastaven na application/json;charset=utf-8. Pro vytvoření odpovědi ve formátu JSON byla použita třída JSONObject z balíku org.json.simple.jsonobject, následně pak byly vytvořeny dvojice klíč : hodnota. Takto hotový objekt byl pak převeden na řetězec pomocí metody tojsonstring(), která zajistila zachování validity formátu. V případě požadavku typu FILE, byl vytvořen JSONObject s názvy všech vxml souborů vypsaných do seznamu pod klíč file. Požadavek typu START vrací jako odpověď vybraný vxml dokument, který slouží jako root dokument dialogové aplikaci. Odpověď pro požadavek typu UPDATE obsahuje dva klíče, text a num. Pod klíč num je uchován počet celkem odeslaných zpráv na rozhraní. Klíč text reprezentuje nové zprávy pro rozhraní. V případě existence nových zpráv je vytvořen z nich seznam, v opačném případě je hodnota false. Větev pro požadavek typu SEND rozlišuje požadavky na běžné uživatelské vstupy a na název spouštěcího vxml dokumentu. Pokud příchozí zpráva obsahuje název vstupního vxml dokumentu, V případě vxml souboru je jeho adresa uložena metodou seturi. Jako odpověď pro všechny požadavky vrací počet uložených zpráv. Poslední větev zpracovává požadavek typu STOP, ten vrací jako odpověď řetězec finished interpreting. Tabulka 6.1 obsahuje ukázky odpovědí pro některé typy požadavků. 15

Typ požadavku FILE START UPDATE (nová zpráva) UPDATE (žádná zpráva) Odpověď { "file":[ "input.vxml", "kopie.vxml" ] } { "url":"http://localhost:8080/modulechat/file/input.vxml" } { "text":[ "<span class='user'>user<\/span>hello world!" ], "num":1 } { "text":false, "num":1 } Tabulka 6.1: Přehled HTTP odpovědí 6.2.3 Třída TextClient Textová platforma interpreta je implementována pomocí třídy TextServer, která vytváří prostředníka mezi interpretem a klientem, posluchačem. Aby bylo možné navázat bezproblémové spojení s interpretem, resp. s TextServerem, musela být vytvořena třída TextClient. Pro dodržení kompatibility s interpretem musí každý klient implementovat rozhraní TextListener z knihovny JVoiceXML z podbalíku org.jvoicexml.implementation.text a rozšiřuje třídu Thread. Po startu modulu je vytvořena instance třídy, odkaz na ní je uložen do parametru třídou ModuleChat, spouští se pro vytvoření nového sezeni s interpretem. Při tvorbě sezení je uložen objekt typu TextServer z balíku org.jvoicexml.client.text do parametru textserver. Samotné sezení s interpretem je uložené do parametru session typu Session z balíku org.jvoicexml. Parametr connected typu boolean udává, jestli je klient připojen k interpretu. Metoda outputtext Hlavní metoda pro příjem výstupů od interpreta, jako parametr metody je textový řetězec typu String. Metoda k výstupu přidává řetězec <span class='system'>system</span>. Následně je takto vytvořený řetězec vložen na konec seznamu listofmessages ve třídě ModuleChat. Metodu outputtext využívá i metoda outputssml. 16

Metoda execute Metoda execute spouští interpretaci vxml dokumentu. Jako první nastaví vlastnosti pro připojení pomocí RMI (Remote Method Invocation), následně pomocí metody lookup( JVoiceXml ) z balíku java.rmi.naming získá klient vzdálené rozhraní typu Remote z balíku java.rmi.remote, které musí následně přetypovat na JVoiceXml. Nakonec metoda vytvoří instanci TextServeru a samotné sezení mezi ním. Struktura metody execute vychází z uživatelské příručky JVoiceXML. 6.3 Webové rozhraní Webové rozhraní má za úkol umožnit uživateli připojení k interpretu a obsluhu interpretace dokumentu. Rozhraní se připojuje k textovému modulu pomocí HTTP protokolu, pomocí něhož odesílá požadavky metodou POST. Pro přenos dat byl vybrán formát JSON a to zejména pro kombinaci s AJAXem. Rozhraní funguje jako HTML stránka, která obsahuje ovládací prvky, na které jsou navázány události řízené pomocí JavaScriptu. Webové rozhraní je uloženo na lokální adrese http://localhost:8080/modulechat/. Kromě html stránky je součásti rozhraní CSS soubor style.css, který má na starost formátování prvků na stránce. A soubor chat.js ve formátu JavaScript, který obsahuje pro větší přehlednost hlavní funkce rozhraní. 6.3.1 Funkcionalita Navržené webové rozhraní poskytuje možnost uživateli se připojit k interpretovi a vytvořit vzájemnou komunikaci pomoci vkládání textových vstupů. Rozhraní je vytvořeno pomocí webových technologií, jako jsou HTML, CSS, JavaScript s použitím frameworku jquery [5.3]. Uživatel přistupuje k rozhraní pomocí webového prohlížeče, komunikace s interpretem je prováděna pomoci protokolu HTTP. Výstupy všech komunikujících stran jsou vypsány v horní části stránky. Vkládání vstupů od uživatele je prováděno pomocí formuláře, který je tvořen textovým polem. Uživatel má k dispozici čtyři tlačítka Send, Select file, Start a Stop. Zahájení činnosti rozhraní je přes tlačítko Select file, to vyvolá vypsání na výstup všech možných vstupních vxml dokumentů a uživatel je vyzván, aby zadal název jednoho z dokumentů. Samotné zahájení interpretace vybraného dokumentu se provádí pomocí tlačítka Start. Poté je již rozhraní připravené přijímat a odesílat vstupy. Ukončení interpretace se uskuteční tlačítkem Stop, kdy je odesílání vstupů a jejich vypisování zablokováno. Interpretace se pak znovu spouští přes výběr nového dokumentu, tlačítko Select file. Odesílání vstupu z textového pole je přes tlačítko Send nebo klávesu ENTER, bez nutnosti znovu načtení stránky. Volání funkcí je omezeno pravdivostní hodnotou instanse, která funguje jako přepínač, její hodnotu může změnit jen funkce selectfile a StopChat. 6.3.2 Odesílání dat Pro zadávání textových vstupu slouží textové pole ve spodní části stránky. Samotné odesílání je aktivováno tlačítkem Send nebo klávesou Enter. Textové vstup je omezen na rozsah 100 znaků. Na samotné psaní vstupu jsou vázány jquery funkce keydown a keyup. Funkce Keydown kontroluje počet zadaných znaky, v případě překročení limitu se text automaticky ořízne. Funkce keyup odchytává zmáčknutí klávesnice Enter, jejiž keycode je 13, způsobí zavolání funkce sendchat. 17