Webová služba pre zobrazenie chemických vzorcov
Úvod
V súvislosti s prezentáciou chemických vzorcov minerálov na webových stránkach vznikla potreba riešiť ich správne zobrazenie. Týkalo sa to najmä problémov s indexovaním znakov kvantifikátorov vo vzorcoch. V rámci informačných systémov bývajú vzorce umiestnené v databázovej tabuľke ako textové konštanty zapísané v štandardnom ASCII tvare. Podobný problém sa vyskytuje aj v celom rade iných úloh a situácií, ktoré vedú k zobrazeniu vzorca na webovej stránke. Štruktúra anorganických chemických vzorcov je z hľadiska zobrazenia pomerne jednoduchá, pretože stačí kvantifikátory počtu atómov alebo mocenstvo iónov zobrazovať vo forme dolných, prípadne horných indexov. Na riešenie je v súčasnosti možné využiť niekoľko rôznych postupov, jednoduchších aj náročnejších. Výber vhodného riešenia záleží na rozsahu a komplexnosti stránky alebo webovej aplikácie. Ako najvhodnejšie riešenie sa napokon javí využitie webovej služby, ktorú sme vytvorili práve pre tento účel.
Alternatívne riešenie formou obrázku a jeho nevýhody
Predstavuje doteraz jednu z najrozšírenejších foriem prezentácie vzorcov. Vzorec je napísaný vo vhodnom textovom editore s podporou písania rovníc (MS Word, TeX, Open Office) a potom je prevedený do formátu obrázku (gif, jpg, png). Takýto obrázok je potom zaradený do stránky štandardným spôsobom (pomocou elementu <img alt=""/>). V prípade viacerých obrázkov je vhodné umiestniť ich do samostatného adresára. Ak majú byť vzorce umiestnené v databázovej tabuľke, je možné v nej umiestniť buď samotné obrázky (binárny tvar), alebo prípadne ešte lepšie URL adresy jednotlivých obrázkov. Nevýhodou je prácnosť vytvárania grafickej podoby jednotlivých vzorcov a spravovanie prístupu k súborom, ktoré ich reprezentujú.
Alternatívne riešenie pomocou MathML (CML) a jeho nevýhody
Pre zápis vzorca je možné použiť aj značkovací jazyk MathML (Mathematical Markup Language). MathML je jazyk určený na zápis matematických vzorcov a vzťahov založený na XML, ktorý vznikol v r. 1998 a je primárne určený na zápis vzorcov na webových stránkach (Bos, 2008). Nakoľko však dodávatelia prehliadačov nevenujú dostatočnú pozornosť podpore jeho implementácie, zostáva jeho používanie aj v súčasnosti veľmi problematické. MathML podporuje prehliadač Amaya (dvorný prehliadač w3c) a nové verzie Mozilly (Firefoxu) v XHTML dokumentoch. V zatiaľ najrozšírenejšom prehliadači MS Internet Explorer aj v Opere ale jeho podpora absentuje (pre IE je potrebný plugin MathPlayer), preto týmto smerom asi cesta nevedie. V podobnej situácii je aj značkovací jazyk CML (Chemical Markup Language), ktorý umožňuje zachytenie štruktúry chemických molekúl. Je tiež založený na používaní XML a na jeho interpretáciu je potrebný špecializovaný prehliadač. CML je integrálnou súčasťou viacerých vývojových prostredí (OpenBabel, JMOL, JChemPaint and XDrawChem, všetky na http://www.sourceforge.net/).
Webová služba - riešenie prevodu chemického vzorca v serverovom skripte
Pre veľkú väčšinu anorganických chemických vzorcov minerálov je možné vystačiť s dolným a horným indexom, ktoré majú adekvátnu podporu tak v jazyku HTML, ako aj na úrovni kaskádových štýlov. Úloha preto spočíva v algoritmickom riešení prevodu štandardného zápisu, uloženého napr. v databázovej tabuľke v ASCII tvare, do tvaru doplneného elementami <sup> a <sub>, ktoré zabezpečujú správne zobrazenie indexov. Proces prevodu je zabezpečený samostatnou funkciou (podprogram v jazyku PHP), ktorej vstupom je chemický vzorec a výstupom je vzorec v doplnenom HTML tvare. Algoritmus funkcie prechádza po znakoch celou štruktúrou vzorca. Analyzuje jeho aktuálny znak, ako aj predchádzajúci a dva nasledujúce. V procese rozboru situácie vyhodnocuje definíciu dolného alebo horného indexu zaraďovaním elementov <sup> alebo <sub> okolo aktuálneho znaku. Takto upravenému vzorcu “rozumie” (a teda správne ho interpretuje) každý prehliadač. Aj preto sa nám javí tento spôsob zobrazovania ako najvhodnejší pre riešenie webovou službou.
Funkcionalita navrhnutého algoritmu prevodníku bola overená veľkým množstvom chemických vzorcov evidovaných v mineralogickej expozícii Pavilónu zbierok (pozri http://www.ispavilon.tuke.sk/).
Stručný popis webovej služby
Vzhľadom na jednoduchú možnosť použitia vytvoreného algoritmu v rôznych aplikáciách sme sa rozhodli vytvoriť webovú službu (WS – Web Service), ktorá poskytuje uvedenú funkcionalitu. Čo to je webová služba? Za celý rad rôznych definícií (a z rôznych pohľadov či prístupov) uvedieme len dve: Webová služba ako súhrn novo nastupujúcich noriem, ktoré popisujú aplikačnú architektúru orientovanú na služby a založenú na komponentoch je vybudovaná na princípe architektúry orientovanej na služby SOA (Service-Oriented Architecture) (Champion et al., 2002). Webová služba je softvérový systém identifikovaný URI, ktorého verejné interfejsy a väzby sú definované a popísané pomocou XML a jeho definícia môže byť objavená (nájdená) inými softvérovými systémami. Tieto systémy môžu potom spolupracovať s WS spôsobom predpísaným v jej definícii pomocou XML správ prenášaných internetovými protokolmi (Samtani, 2002).
Obr. 1: Princíp činnosti webovej služby
Webová služba predstavuje jednu z najdôležitejších možností realizácie služby v architektúre SOA (Services Oriented Architecture). Funkcionalita WS je založená na štandardnom popise svojho rozhrania vo forme WSDL (Web Services Description Language), ktoré umožňuje klientovi službu využívať. Zásadne je tento popis umiestnený na inom serveri ako samotná služba a predstavuje tak akúsi spojnicu (väzbu) medzi poskytovateľom (server) a konzumentom (klient) služby. SOA sa však nerovná (iba) WS, lebo síce každá WS vyhovuje požiadavkám SOA , ale nie každá služba v rámci SOA musí byť nutne službou webovou (Exforsys, 2008). V súčasnosti k základným štandardom WS (XML, SOAP, WSDL, HTTP) pribudli ďalšie rozširujúce normy (napr. WS-ReliableMessaging, WS-Addressing, WS-Notification, WS-Security, WS-Policy, WS- Choreography), ktoré doplňujú využitie WS a ďalej rozširujú syntax WSDL.
Obr. 2: Ukážka testovacej stránky webovej službyObr. 2: Ukážka testovacej stránky webovej služby
Všetky významnejšie aktuálne vývojové prostredia podporujú tvorbu aj využívanie webových služieb. Tak je tomu aj v prípade prostredia PHP vo verzii 5, ktoré má vyspelú podporu SOAP (Simple Object Access Protocol) vo forme rozšírenia, umožňujúceho jednoduché vytvorenie klienta aj servera služby na báze WSDL (štandardný spôsob) a na strane klienta podporuje aj prácu v non-WSDL móde.
Funkcionalitu navrhnutej a realizovanej webovej služby zabezpečuje jej serverová časť. Interfejs na webovú službu zabezpečuje WSDL súbor, ktorý špecifikuje názvy jednotlivých funkcií služby ako aj vstupné a výstupné parametre týchto funkcií a ich typy. Volanie webovej služby jej konzumentom (klientom) umožňuje znalosť WSDL súboru, teda jeho URL. Principiálnu schému vzťahu zložiek webovej služby ilustruje obr. 1. Webová služba (teda jej serverová časť) prevodu chemického vzorca je tvorená dvoma funkciami getChemForm($vzorec) a getChemFormStr($vzorec), každá s jedným vstupným parametrom ($vzorec) a jedným výstupným parametrom – vzorec v HTML formáte. Funkcia getChemForm($vzorec) vracia výstupnú hodnotu v štandardnom XML formáte, funkcia getChemFormStr($vzorec) vracia výstupnú hodnotu vo forme reťazca. Základom oboch funkcií je prevodná funkcia z predchádzajúceho odseku. Volanie webovej služby na strane klienta vyžaduje vytvorenie inštancie služby (komunikácia so serverovou časťou) a následne volanie príslušnej funkcie v tvare:
$urlwsdl='http://lipko.tuke.sk/~horovcak/php_ws/wsdl/chemform.wsdl';
$Sluzba = new SoapClient ($urlwsdl);
$result = html_entity_decode($Sluzba->getChemForm($vzorec));
kde $vzorec obsahuje vstupný reťazec vzorca v ASCII tvare a $urlwsdl je adresa WSDL súboru služby. Pre server umiestnenia WSDL súboru webovej služby nie je nevyhnutná verzia PHP 5.
Na zistenie názvov jednotlivých funkcií služby a ich parametrov je možné využiť štandardnú PHP funkciu __getFunctions() v tvare:
var_dump($Sluzba->__getFunctions());
ktorá vráti nasledujúce hodnoty:
array(2) { [0]=> string(35) "string getChemForm(string $Formula)" [1]=> string(38) "string getChemFormStr(string $Formula)" }
Na účely ukážky fungovania vytvorenej webovej služby bola zostavená jednoduchá testovacia stránka (obr. 2), ktorá umožňuje zadanie vlastného chemického vzorca do vstupného poľa alebo výber niektorého z demonštračných vzorcov. Tlačidlom „Previesť“ je vyvolaná webová služba a vykonaný prevod vzorca do HTML formátu, ktorý sa vzápätí zobrazí nižšie, v rámčeku „Výsledok“.
Záver
Zostavená webová služba je určená na prevod chemického vzorca zo štandardného ASCII tvaru do HTML formátu, ktorý zobrazuje počet atómov alebo mocenstvo iónov vo forme dolných alebo horných indexov. Pre účely ukážky funkčnosti a testovania vytvorenej webovej služby bola zostavená testovacia stránka, ktorá umožňuje výber z niekoľkých pripravených vzorcov alebo priame zadanie vzorca do vstupného poľa formulára. Výstup prevodu je vzápätí zobrazený nižšie, v rámčeku „Výsledok“.
Adresa stránky je http://www.ispavilon.tuke.sk/chemformtest.php.
Podmienkou jednoduchého volania (konzumácie) služby na web stránke je, aby jej server mal podporou PHP vo verzii PHP 5 s aktivovaným rozšírením pre SOAP (v prostredí MS Windows php_soap.dll). Služba musí byť volaná pomocou vhodného serverového skriptu. Samozrejme môže byť súčasťou inej služby, resp. stavebnicovým komponentom inej webovej aplikácie. Využitie služby je možné vo všetkých odboroch, kde potrebujeme prezentovať na webovej stránke vzorec, predovšetkým v prípadoch, ak tento vzorec pochádza z nejakého externého zdroja (napr. databázová tabuľka, xml alebo textový súbor).
Vytvorená služba je prípadným záujemcom voľne k dispozícii.
Príspevok bol riešený v rámci projektov VEGA 1/4194 /07 (L), VEGA 1/0194/08 (S) a VEGA 1/0365/08 (T).
BOS, Bert. 2008. W3C Math Home [online]. [cit. 26.3.2008]. Dostupné na World Wide Web: <http://www.w3.org/Math>.
Design Science. 2008. MathPlayer. <Display MathML in your Browser> [online]. [cit. 26.3.2008]. Dostupné na World Wide Web: <http://www.dessci.com/en/products/mathplayer/>
EXFORSYS. 2008. SOA Service Oriented Architecture [online]. Exforsys.com, c2008 [cit. 26.3.2008]. Dostupné na World Wide Web: <http://www.exforsys.com/tutorials/soa.html>
CHAMPION, Michael, FERRIS, Chris, NEWCOMER, Eric, ORCHARD, David. 2002. Web Services Architecture : W3C Working Draft 14 [online]. November 2002 [cit. 7.2.2008] Dostupné na World Wide Web: <http://www.w3.org/TR/2002/WD-ws-arch-20021114/>
MURRAY-RUST, Peter. 1997. Chemical Markup Language [online]. [cit. 26.3.2008]. Dostupné na World Wide Web: <http://www.xml.com/pub/a/w3j/s3.rustintro.html>
MURRAY-RUST, Peter. 2002. CML (Chemical Markup Language) Update [online]. [cit. 26.3.2008]. Dostupné na World Wide Web: <http://www.ccl.net/chemistry/resources/messages/2002/05/17.002-dir/index.html>
SAMTANI, Gunjan. 2002. Top five Web service myths. Builder – Architect - WServices [online]. Aug. 2002 [cit. 7.2.2008]. Dostupné na World Wide Web: <http://builder.com.com/article.jhtml;jsessionid=4VPOR43OSAE21TQQACQSFFA?id=u00320020820GXS01.htm&page=2>
SMUTNÝ, Pavel. 2006. The Implementation Of Advanced Technologies In Intranet And Internet Web Portals. In Proceedings of 7th International Carpathian Control Conference. Czech Republic : Rožnov p. Radhoštěm. May 29-31, 2006, s. 529-532. ISBN 80-248-1066-2.