Szakdolgozat
Miskolci Egyetem
MVC alapú kód-generáló Javascript/PHP környezetben
Készítette:
Burunkai Dániel 4. Évfolyam Gépész - Programtervez® Informatikus
Témavezet®:
Dr. Kovács László Konzulens:
Dr. Házy Attila
Miskolc, 2012
Miskolci Egyetem
Gépészmérnöki és Informatikai Kar Alkalmazott Matematikai Tanszék
Szám:
Szakdolgozat Feladat
Burunkai Dániel (LAHKSP) programtervez® informatikus jelölt részére. A szakdolgozat tárgyköre: Web-fejlesztés A szakdolgozat címe: MVC alapú kód-generáló Javascript/PHP környezetben A feladat részletezése: MVC modell bemutatása xForms áttekintés Javascript/Jquery/AJAX technikák elemzése PHP nyelv ismertetése Kódgeneráló algoritmus rendszerterve Implementáció, tervezés
Témavezet®(k): Dr. Kovács László, egyetemi docens Konzulens(ek): Dr. Házy Attila, egyetemi docens A feladat kiadásának ideje: 2011. szeptember 29.
................................. szakfelel®s
1.
szükséges (módosítás külön lapon) A szakdolgozat feladat módosítása nem szükséges
...................... dátum 2. A feladat kidolgozását ellen®riztem: témavezet® (dátum, aláírás): .............. .............. .............. 3. A szakdolgozat beadható: ...................... dátum
........................... témavezet®(k) konzulens (dátum, aláírás): ............. ............. ............. ........................... témavezet®(k)
4. A szakdolgozat . . . . . . . . . . . . . . . . . . . szövegoldalt . . . . . . . . . . . . . . . . . . . program protokollt (listát, felhasználói leírást) . . . . . . . . . . . . . . . . . . . elektronikus adathordozót (részletezve) ................... . . . . . . . . . . . . . . . . . . . egyéb mellékletet (részletezve) ................... tartalmaz. ...................... ........................... dátum témavezet®(k) 5. bocsátható A szakdolgozat bírálatra nem bocsátható A bíráló neve: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...................... ........................... dátum szakfelel®s 6. A szakdolgozat osztályzata a témavezet® javaslata: ................ a bíráló javaslata: ................ a szakdolgozat végleges eredménye: . . . . . . . . . . . . . . . . Miskolc, . . . . . . . . . . . . . . . . . . . . . . . .
................................. a Záróvizsga Bizottság Elnöke
Tartalomjegyzék
1. Bevezetés 1.1. xForms és PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. Téma elméleti kifejtése 2.1. Böngész® alapú kliensek története . . . . . . 2.2. DOM . . . . . . . . . . . . . . . . . . . . . . 2.2.1. Objektum modell . . . . . . . . . . . 2.3. Szoftverfejlesztési trendek . . . . . . . . . . 2.4. XForms kialakulása, jellemzése . . . . . . . . 2.4.1. XPath és az XSLT-vel való kapcsolat 2.4.2. XForms el®nyei és hátrányai . . . . . 2.4.3. XForms dokumentum megnyitása . . 2.5. MVC . . . . . . . . . . . . . . . . . . . . . . 2.5.1. MVC az XForms-ban . . . . . . . . .
6 6
. . . . . . . . . .
7 7 9 9 12 13 14 15 16 17 18
. . . . . . . . . . . . . . . . . . . .
19 19 19 20 22 23 25 25 26 28 28 32 33 36 36 38 40 40 44 46 48
4. Összefoglalás 4.0.1. English Summary . . . . . . . . . . . . . . . . . . . . . . . . . .
53 54
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
3. Fejleszt®i dokumentáció 3.1. Modell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1. Modell az XForms-ban . . . . . . . . . . . . . . . . . . 3.1.2. Modell elem leképzése és beolvasása . . . . . . . . . . . 3.2. XForms view elemek HTML-re alakítása . . . . . . . . . . . . 3.2.1. Az átalakítás motorja . . . . . . . . . . . . . . . . . . . 3.2.2. Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.3. Secret . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.4. Select1 . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.5. Textarea . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.6. Egyéb view megjelenít®k, továbbfejlesztési lehet®ségek 3.3. Mintarendszer követelmények . . . . . . . . . . . . . . . . . . 3.4. Mintarendszer fejleszt®i környezet . . . . . . . . . . . . . . . . 3.5. Rendszerterv, interfész . . . . . . . . . . . . . . . . . . . . . . 3.5.1. M¶ködési diagram . . . . . . . . . . . . . . . . . . . . 3.5.2. Példány betöltése . . . . . . . . . . . . . . . . . . . . . 3.5.3. Modell módosítása . . . . . . . . . . . . . . . . . . . . 3.5.4. Példányok kezelése . . . . . . . . . . . . . . . . . . . . 3.5.5. Controller: Export . . . . . . . . . . . . . . . . . . . . 3.5.6. Controller: Import . . . . . . . . . . . . . . . . . . . . 3.6. Tesztelés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
Irodalomjegyzék
55
Adathordozó használati útmutató
56
1. fejezet Bevezetés
A '80-as években a fejlesztés még karakteren felületen m¶ködött, a programok monolit rendszer¶ek voltak, ahol a programozók nehezen tudtak összedolgozni. Az elkészült programok használatához szintén szaktudás kellett, gyakran programozói ismereteket igényelt. A kés®bbiekben megjelent grakus felhasználói felülettel rendelkez® operációs rendszerek törtek utat afelé, hogy megreformálják az eddigi programozás szemléletet. A grakai szemléltetés tette lehet®vé a GUI vezérl®k elterjedését, melyekhez eseményt lehetett társítani, és a háttérben valós id®ben lehetett az adatokkal dolgozni. A grakus szemléltetéssel egy újfalja felhasználói felület jelent meg. Az új felhasználói környezetben a fejlesztés hatékonysága jelent®sen növelhet®, ha logikailag három részre bontjuk a kódot:van egy modell rész, ahol az aktuális adatokat tároljuk le; egy nézet rész, amit a felhasználó látt és itt kerül interakcióba a programmal; valamint a vezérl®i rész, ami az adatok küldésér®l gondoskodik. Ezt a hármasságot hívjuk angol fordításból eredend®en MVC-nek, azaz model-view-controller szerkezet.
1.1. xForms és PHP
Szakdolgozatomban az MVC szemlélet¶ programozás bemutatására az xForms struktúrát fogom használni, mely egy XML formázású leírás internetes ¶rlapok leírására. Az xForms-ba látványosan elkülönül egymástól az MVC három alkotóeleme, mindegyik kapott külön szekciót. Az xForms szabvány viszont lassúsága miatt nem terjedt el az interneten, valamint sok helyen nem is volt szükség az xForms adta bonyolult lehet®ségekre. A szakdolgozatomba xForms leírást konvertálok át a ma is használatos HTML nyelvre. Az átalakítás során PHP-t használok, mely elemzi az xForms dokumentumot, létrehozza a View részt, és gondoskodik az adatok ki és bemásolásáról. A modell rész kezelését JavaScripttel, és a hozzá tartozó függvénykönyvtárakkal (jQuery és AJAX) oldom meg - feladatuk hogy a modell részt módosítsák amikor egy adatot viszünk fel. A használt két webes programnyelvvel viszonylag jól megoldható az xForms m¶ködésének szimulációja, habár teljesen azonos nem lehet vele, mivel kínál olyan eszközöket is, melyek nem találhatóak meg a HTML nyelvben. Az XML formáció jelen van mind a HTML nyelvben, mind az xForms-ban, így a konverzió során er®sen kihasználom a DOM szerkezeti fájukat, helyes felépítést feltételezve. Ezt a szerkezeti felépítést mind a PHP és mind a JavaScript támogatja. 6
2. fejezet Téma elméleti kifejtése
2.1. Böngész® alapú kliensek története
Annak érdekében, hogy az interneten szörfölhessünk, böngész®re van szükségünk. Manapság rengeteg ilyen program áll rendelkezésünkre, így például egy sovány, de gyors böngész® a Google által fejlesztett Chrome, vagy a még mindig gyenge lábakon álló Internet Explorer a Microsoft-tól, ami kiváló arra hogy meggy®z®dhessünk arról hogy weblapunk helyesen fog e megjelenni. Az XForms szemszögéb®l a Mozilla által kiadott böngész®k a legfontosabbak, mivel ez az alapítvány támogatja leginkább az XForms megjelenítését. Böngész®je a Firefox manapság is nagy teret hódít a piacon. Nem számít milyen böngész®t használunk a mai világban, a céljuk mindegyiknek a helyes megjelenítés, melyet immáron közel két évtizede fejlesztenek. Ezen fejezetben mutatom be hogyan értünk el a mai böngész®kig az 1991-ben megjelent WorldWideWebt®l. [1] A Tim Berners-Lee által fejlesztett WorldWideWeb (1991-) a legtöbb forrás alapján a legels® böngész®nek mondható ami valaha megjelent. A böngész® alap munkálatai még az 1980-as években kezd®dtek, a Commodore64 fénykorában. Hivatalosan 1991ben mutatták be, amikor már képes volt alapvet® stílus deníciókat megjeleníteni, és az egyetlen lehet®ség volt a web böngészésére. Már ebben a böngész®ben lehet®ség volt a navigációra, úgymint a "vissza" vagy az "el®re", valamint egyben szerkeszt®ként is szolgált. A WorldWideWeb-et a kés®bbekben Nexus névre keresztelték, hogy ne legyen zavaró hogy a technológia és a böngész® neve is ugyanaz. A világ els® mutass-és-klikkelj böngész®je az irodalom szerint a Mosaic volt, de a valódi megkülönböztetést már az Erwise (1992-) elérte. Négy Finn egyetemista fejlesztette a Helsinki Egyetemen az Unix és X Windows System operációs rendszer alá. F®bb újdonsága volt az oldalon való keresési funkció, valamint akár 12 weboldalt is meg tudott jeleníteni, és többet párhuzamosan tölteni. A ViolaWWW (1992 Május) megjegyzend® funkciója közé tartozott hogy több féle bet¶típus megjelenítésére is képes volt egy oldalon, valamint képes volt a látogatott oldalt egy másik ablakba mint pl. az el®zmények közé, mely szintén egy újítás volt. Navigáció tekintetébe megjelent a "home" gomb is, valamint egy online súgó, és a könyvjelz®k! VAX számítógépek közében az els® és legnépszer¶bb böngész® a MediasWWW (1992 November) volt, mely eredetileg szintén egy X Browser volt, de kés®bb átírták. Egy karakteres böngész® a Lynx (1992-93), mely a legnépszer¶bbé n®tte ki magát a terminálok körében. Mind a 7
2.1. Böngész® alapú kliensek története
mai napig elérhet® akár Vista 64 bites verzióra is. A HTML nyelv egyre elterjedtebb lett, és újabb verziók jelentek meg, így 1994-ben a 2.0-ás. Ekkortájt népszer¶ böngész® a Mosiac 1.0 (1993) több kompatibilitási hibába is ütközött, mely csak '95-re lettek javítva a 2.x verziókba, ami már a HTML 3 szabványból is, mint pl. a táblázatok és karakter stílusok. Megemlítend® böngész®k közé tartozik az Arena , mely a W3 számára a HTML 3 tesztelésére szolgált; a Cello, az els® Windows-ra is kiadott böngész®; az IBM WebExplorer, Netscape Navigator, ami a valaha elért legnagyobb piaci részesedést (90%) érte el és verziói mind a mai napig frissen tartják az új szabányokra. Nagy áttörést jelentett a JavaScript (eredeti nevén LiseScript), melyet a NetScape és a Sun közösen fejlesztett ki, mely a 2.0-ás verziója óta elérhet®ek. Eredetileg a böngész® Java nyelvéhez szánt kiegészít®, de mára már teljesen kettévált a két programozási nyelv. A Microsoft által fejlesztett Internet Explorer 1995-t®l volt elérhet® a Windows 95 operációs rendszerekre. A böngész® 3.0-ás verziója óta van támogatva a JavaScript nyelv is, mely JScript 1.0-ként volt elnevezve. A nyelvet a kés®bbiek folyamán f®ként a NetScape és az Internet Explorer támogatta különböz® verziószámmal és elnevezéssel, majd 2005-t®l a Firefox-ban is elérhet® lett. A CSS 1.0 stílusleíró nyelv 1996 decemberében jelent meg, és az Explorer az 5-ös verziója óta támogatja. A nyelv a HTML korlátait hivatott átlépni a megjelenítés terén, hogy egy egyszer¶en kezelhet®, mégis látványos megjelenést adjon a weblapoknak. Ma is létez® böngész®, az Opera 1996-ban jelent meg el®ször MultiTong Opera néven. Teljesen különálló módon fejl®dött a Natscape-t®l és az IE-t®l. A 2-es verziójában jelent meg a HTML3 többek közt videó-támogatással és magas fokú session kezeléssel, a 3-as verziójában a JavaScript, a 4-es verzióban a HTML 4 egyéb extrákkal, úgy mint az SSL 2,3 , CSS 1,2 , XML támogatás. 1995 és '96-ban újabb böngész®k láttak napvilágok, a népszer¶bbek közt található az '95-ös Grail, egy "hackelhet®" böngész®, ami Phyton-ban írodott (HTML2 és 3 támogatás), valamint az '96-os Arachne, Amaya, és Oracle PowerBrowser . Az Arachane egy grakus böngész® volt DOS rendszerek alá, méretét tekintve egy 1.44MB oppy lemezre is ráfért, mégis nagy tudású volt: framek, táblázatok, animációk,HTML 4, FTP támogatás, POP, SMTP és egyéb protokollok. A Seamonkey (1998) a mai Mozilla régi böngész®je, a Mozilla Application Suite része a levelez®klienssel, web fejleszt®vel és IRC klienssel együtt. 1996-ban jelent meg a Konqueror nyílt forrás kódú böngész®, JavaScript, Java applets, CSS, SSL és egyéb támogatással. Jelenleg is használatos Linux rendszereken. Mai nagy böngész®k egyike az els®ként 2003-ban kiadott, Apple által fejlesztett Safari melynek csupán 3-as verziója (2007) lett használható Windows-on. A mindenki által ismert Firefox 2004-ben jelent meg el®ször, egy er®sen testre szabható böngész®: az 1.0-ás verziója az alapvet® funkciók mellett tartalmazott beépített RSS támogatást, letölt® manager-t, valamint biztonságosabb böngészési módot lett lehet®vé a VBScript és ActiveX nem támogatása révén (melyek természetesen kiegészít®kkel engedélyezhet®ek voltak). 2-es verziója 2006-ban, a 3-as pedig 2008-ban jelent meg számos tejesítmény beli javítással, melyet a Gecko Engine 1.9 hajtott. Az IE után a 2. leggyakrabban használt böngész®vé vált, míg manapság az egyszer¶ségre és gyorsaságra kifaragott Google Chrome böngész® kezd el terjedni.
8
2.2. DOM
Az id®k során nemcsak a JavaScript, CSS, VBScript, stb. terjedt el, rengeteg olyan funkció létezik melyre egy böngész® jó ha fel van készítve - még ha szabvány alakjában nem is létezik (mint pl. a HTML5). Erre különféle online tesztek is vannak, így pl. az ACID3 teszt, mely ezeket a funkciókat vizsgálja hogy képes e a böngész® kezelni.
2.2. DOM
A DOM egy procedurális kezel®felület az XML dokumentumok tartalmának kezelésére. Nem csak az XML, de a HTML és XForms dokumentumok lekérdezésére, vizsgálására, törlésére és módosítására szolgál. A DOM (Document Object Model) tulajdonsága, hogy a kezel® felület a memóriában deríti fel a teljes dokumentumot egy fa reprezentáció formájában, és a rendelkezésre álló metódusok segítségével teszi ezt a tartalmat elérhet®vé/módosíthatóvá. Ez a kép, mely a memóriában szerepel, tetszés szerint kiírható kés®bb fájl-ba is. A fában minden egy objektumnak feleltethet® meg, így a szövegrészletek, elemek, és az elemek tulajdonságai is. A fa kezelése navigációval történik, tehát a feldolgozás során megjelenik egy feldolgozói pozíció, mely megmutatja hogy épp mely elemmel dolgozunk, és merre lehet tovább folytatni a navigációt. Ez a navigáció alapvet®en a szomszédos elemeket jelenti, valamint módosítás esetén az adott elem tulajdonságát/környezetét. A DOM kezelésére szolgál a DOM API, mely lehet®vé teszi az említett m¶veleteket a fában - mind a törlést, hozzáadás, módosítást és olvasást is. Ezt az API-t jelenleg a PHP5 beépített kezel®je fogja végrehajtani, mely teljes kör¶, viszonylag kényelmes hozzáférést biztosít a fa szerkezetéhez. A feladat egy olyan programkódot írni, melyben elvégezzük a fa módosítását a rendelkezésre álló metódusok segítségével.[2] Mint DOM API szabványt a W3C szervezet által lett kidolgozva 1998-ban. Kés®bb 2004-ben készült el a DOM 2-es szabvány, mely jelenleg is a legfrissebb. A szabvány a funciókat különböz® szintekre osztja: • 1-es szint: fa struktúra, valamint az alap-tartalom parancskészlete. Ez biztosít
lehet®séges a navigációra és a módosításra is,
• 2-es szint: névtér és eseménykezelés, • 3-as szint: az utak leírására szolgáló XPath, valamint a validáció. 2.2.1. Objektum modell
Az objektum modell a logikai szerkezet alapján meghatározott fa szerkezetre épül, melyet már implementáció-függ® elemmel egészítettek ki. A fában különféle csomópontokat különböztetünk meg, melyek közt szerepel a dokumentum maga, mely a teljes fát reprezentálja. Tartalmaz továbbá egy dokumentum séma leírást, mely a fa szerkezetének a megkötéseit (integritási szabályait) írja le. Ezen kívül a szokásos szöveg, megjegyzés, CDATA, elem hivatkozás és elem jellemz® csomópont is megtalálható. A DOM számára tehát minden egy-egy csomópontnak felel meg.
9
2.2. DOM
A beolvasott fából a DOM értelmez® és feldolgozó el®állítja a csomópontokból álló fát. Ezek közt tartalmazási reláció áll fenn. Vegyünk egy alábbi, XForms nyelven írt példát:
Volume <style type="text/css"> body { font-family: sans-serif} label { display: inline-block; width: 3em; margin: 0 1em } <xf:model> <xf:instance>
2 <width>3 <depth>4 <xf:input incremental="true" ref="height"> <xf:label>Height
<xf:input incremental="true" ref="width"> <xf:label>Width
<xf:input incremental="true" ref="depth"> <xf:label>Depth
Total volume: <xf:output value="height * width * depth" />
A leíráshoz tartozó fa modellt a 2.1. ábra szemlélteti. Az ábrában a csomópontok, azaz node-ok és text node-ok téglalappal vannak jelölve, az attribútumok nevei pedig ellipszis-be, melyet szaggatott vonallal vannak jelölve mely elemhez tartoznak. Az ábra nem tartalmazza a HTML attribútumait, melyek a dokumentum névtereit nevezik meg; valamint az elemeken használt prexeket sem jelöltem. A fa ilyen kis dokumentum esetén is nagy méretet ölt, f®leg hogy valójában még a dokumentumba írt, olvashatóságot növel® tabulátorok és szóközök is 1-1 csomópontnak felelnek meg! A fában való navigációhoz alapvet®en a következ® lehet®ségek tartoznak: mozgás lefelé (a gyerek elemek felé), valamint visszafelé lépés (a szül® felé), és lehet még a testvérelemekre is navigálni, azaz amelyik egy ugyanolyan szinten helyezkednek is, közös 10
2.3. Szoftverfejlesztési trendek
2.1. ábra. Fa szerkezet szül®vel. Így tehát a body elem a dokumentum gyereke, ® maga pedig a szül®je a 3 input elemnek, a szöveg csomópontnak, valamint az output elemnek. Ezek 5-en testvérek, hisz egy szinten vannak, és a szül®jük közös: body. [11] A DOM API ezen felül rengeteg egyéb lehet®séget is kínál. Ezt f®leg az XPath kifejezés használja fel, mely egy elérési utat képes deniálni a fában (lsd. kés®bb). Egy-egy elem valamint részfa kijelölésére egy tucatnyi lehet®ségünk van, melyek közül párat a 2.2-es ábra jól szemléltet: • ancentors(): Az ®sök. Egy elemhez kapcsolódik, és azt a részfát adja vissza, mely-
b®l ered.
• parentNode: Szül®. Egy elemet ad vissza: az aktuális elem szül®jét. • previousSibling() és nextSibling(): testvérek között lépegethetünk vele - azaz a
fában egy szinten lév®, de közös szül®t®l származó elemek közti navigációra szolgál.
• childElements(): Az aktuális elem összes gyerek elemét adja vissza. • descendants(): A leszármazottak. Az aktuális elem alatt található részfát tartal-
mazza.
• attributes(): Az aktuális elem attribútumai.
Ezeken kívül található még olyan részfát vissza adó utasítások is, melyek a fa bejárása során felrajzolt struktúra alapján jelöli ki az aktuális elem megel®z® elemeit, valamint utána jöv® elemeit. Az XPath-ban ezeket tengelyeknek nevezi, így pl. "attribútum tengely", de önmagát, és a teljes részfát is egy-egy tengellyen jelöl. 11
2.3. Szoftverfejlesztési trendek
2.2. ábra. Lehetséges DOM API nyújtotta bejárási irányok [11] 2.3. Szoftverfejlesztési trendek
A programozási nyelvekkel együtt fejl®dtek a szoftverfejleszt® eszközök és folyamatok . Igen nagy utat tettek meg, amíg eljutottak az integrált fejleszt®i környezetig. [3] Az ®sid®kben a gépi kód közvetlenül került bevitelre: konzolkapcsolókkal, majd kés®bb lyukkártyák segítségével. A '80-as években a szoftverfejlesztés a karakteres alapú alkalmazásokon keresztül történtek. Program nyelvük f®leg Assembler szint¶ volt, kés®bbiekben C, Pure HTML. Nehézség volt a sz¶kös er®forrás is, ami byte szint¶ optimális kódot követelt. Tipikusan kevés fejleszt® volt, egy-egy projectet nem tudtak több fejleszt® számára is programozhatóvá tenni. Több parancssori eszközt is használtak, mely felszabdalta a fejlesztési folyamatot, így külön volt eszköz a kódszerkesztésre, fordításra, hibakeresésre, . . . A '80-as évek vége felé kezdtek megjelenni a hagyományos eszközök, mint pl. a Turbo Pascal, de csak egy részfolyamathoz lehetett használni (pl. kódolás). A '90-as évekre jelentek meg a grakus operációs rendszerek, melyre több különböz® keretrendszer volt elérhet® - így pl. Win32-n a Borland (Delphi, C Builder), és az MS (Visual Studio), míg Linux alatt a QT, Kdeveloper, és a Borland volt a népszer¶. Napjainkban az ipari méret¶ alkalmazások fejlesztése reménytelen integrált fejleszt®i eszközök (IDE) nélkül. Bonyolult és összetett platformokat, XML leírókat használunk, mely utóbbi nem is emberi szerkesztésre van optimalizálva. Napjainkra jellemz®ek a fejlett objektum orientált programozási nyelvek, az IDE-k használata kényelmes, hatékony és gyors - összefogja a gyártó tool-jait, közös keretet adva nekik. A tendencia a nyílt fejleszt®rendsze-rek el®retörését mutatja, melynek számos el®nyös tulajdonsága van, mint pl. egy jól deniált keretrendszer, könny¶ b®víthet®ség, platformfüggetlenség, programozási nyelv független-ség, valamint optimális a gyorsan változó 12
2.4. XForms kialakulása, jellemzése
igényekhez. Az er®források megnövekedésével többé már nem kell byte szint¶ optimális kód kifejlesztése, ezáltal meggyorsul a fejlesztés, valamint lehet®séget ad arra, hogy egy tervezeten több száz fejleszt® is dolgozhasson. Ahhoz hogy több programozó munkáját összehangoljuk, a cél a kód modulokra bontása: • Komponensek újrahasznosítása • Komponensek kicserélése • Programozási feladatok szétbontása • Tesztelhet®ség
Ezekre a problémákra egy lehetséges megoldás az MVC design pattern. Az MVC eredete a '70-es évek végén megjelen® Xerox grakus UI. Nagy gyelmet a webes, illetve az Objective C fejlesztések során kapott, és manapság is meghatározza bármely GUI-val rendelkez® szoftver felépítését. 2.4. XForms kialakulása, jellemzése
Egy interaktív weboldal nem létezhetne ¶rlapok nélkül. Az ¶rlap az a része az oldalnak, amin keresztül kommunikálhatunk a felhasználóval. A weben nagyon sok ¶rlappal találkozhatunk. Például amikor regisztráljuk magunkat egy oldalra, bejelentkezünk, keresünk vagy más hasonló tevékenységeket végzünk, akkor ezt mind ¶rlapokon keresztül tesszük. Fejleszt®i oldalról egy ¶rlap létrehozása egyszer¶, csupán fel kell sorolni a részeit, meghatározni, hogy dolgozza fel az adatokat, és ehhez valamilyen stílust kell deniálni. Ennek az egyszer¶ségnek viszont ára van. Egy HTML ¶rlap nem tudja eldönteni, hogy a felhasználó által bevitt információ a megfelel formában van-e megadva, és egyszer¶ számítások elvégzését sem tudja elvégezni. Erre megoldást a JavaScript nyújthat, amely képes kliens oldalon a weboldalon található mez®k értékét manipulálni, validálni. A scriptek megírása viszont id®igényes, és ha néhány hónap múlva valami miatt hozzá kell nyúlni a kódhoz, nem biztos, könnyen tudunk tájékozódni benne, ha meg nem is mi írtuk, akkor nem kis fejfájást okozhat a kód módosítása. Ráadásul a böngész®kben biztonsági okok miatt a JavaScript letiltható. HTML verziók: • 1990: HTML 1.0 • 1994: HTML 2.0 • 1996: HTML 3.0 • 1997: HTML 4.0 • 1998: A W3C a HTML jöv®jére két féle változatot képzel el:
13
2.4. XForms kialakulása, jellemzése
Áthozni a tag rendszert XML-be (XHTML) Forms-okon dolgozni, melyet kés®bb leválasztanak (XForms) • 2000: XHTML 1.0 • 2002: XHTML 2.0
A HTML ¶rlap hiányosságait gyelembe véve a W3C létrehozta az XForms szabványt, ami a webes ¶rlapok következ® generációja. Az XForms képes az adatok validálására, egyszer¶bb számítások elvégzésére, így elkerülhetjük, hogy JavaScriptet kelljen használnunk. Az XForms deklaratív, ezért könnyebb elsajátítani és használni. A kód kés®bbi módosítása is sokkal egyszer¶bb, mint a JavaScript-nél. Ráadásul elkülöníti az adatstruktúrát a megjelenítést®l, ezáltal az egyes részek újrafelhasználhatóak lesznek. Nagy el®nye a HTML ¶rlapokkal szemben, hogy használhatunk beépített adattípusokat, vagy hozhatunk létre saját típust is. Az XForms egy új nyelv a W3C-t®l, amit web- és ¶rlap programok fejlesztésére lehet használni, egyszer¶ ¶rlapok készítését®l a komplex web 2.0 alkalmazásokig. Az XForms dinamikus, rendszerfüggetlen, szkript nyelv független és teljesen szabványos. Nem egy különálló dokumentumtípus, hanem integrálni kell más nyelvekbe, mint az XHTML vagy SVG. Sokat tanult a HTML-beli ¶rlapok jó és rossz tulajdonságából. Az XForms követhet®bbé és tisztábbá teszi azt, hogy milyen adatot is küldtünk el, és hová. Könnyen újra felhasználhatóvá teszi az ¶rlapokat, amik már nem szorosan köt®dnek ahhoz az oldalhoz, amelyiken használják. A klasszikus HTML web ¶rlapok nem különítik el az ¶rlap funkcióját a megjelenítést®l. Ezzel ellentétben az XForms elkülöníti az ¶rlap kezelését, a megjelenítését és az adatait. Így rugalmas megjelenítési beállításokat tesz lehet®vé. Az XForms egyik fontos elve, hogy az ¶rlapja adatait az XForms adatait reprezentáló "instance" elemben lév® elemekben helyezi el. Ezeket az elemeket fogom adat-példányként nevezni. A többi funkció mellett az XForms modell leírja a struktúráját is az adat-példánynak. [5]
2.4.1. XPath és az XSLT-vel való kapcsolat
A Formok adatokat gy¶jtenek, így nem meglep®, hogy az XForms legfontosabb része az adatpéldány, az adat egy bels® reprezentációja, ami le van képezve az ismer®s control elemekre. Els®re talán meglep® az XForms és az XPath társasága, mivel az XPath-ot egy közös rétegként tudjuk az XSLT és az XPointer között, nem pedig a web formok alapkövének. Ahogy az XForms alakult úgy t¶nt, a formoknak nagyobb struktúrára van szükségük, mint amit egy név-érték páros adhat. Ehhez a nagy struktúrához viszont kellett egy olyan kialakítás, amivel az adatok egyes példányát el lehet érni vagy "bind"-elni lehet a form kontrollerek bizonyos részeihez - ezért alkalmazzák az XPath-ot. [6] Ha már az XForms és az XSLT is az XPath-on keresztül kapcsolódnak, érdekes lehet összehasonlítani a két technológiát. Az XSLT általában 3 fával jellemezhet®, melyek XML dokumentumok átalakításával kapunk. Az XForms feldolgozása hasonló, de kombinálja az inputot és az outputot egy fába. 14
2.4. XForms kialakulása, jellemzése
2.3. ábra. Az XSLT és XForms feldolgozásának illusztrációja [6] Feldolgozás XSLT esetében: 1. Az input forrásból (leggyakrabban dokumentumokból) a "source tree" (forrás) és a "stylesheet tree" (stílus) a memóriában van tárolva 2. Ezt a két fát feldolgozva kapunk egy harmadikat, ami a "result tree" (eredmény) 3. Amikor a feldolgozás végbement, az eredmény fa - legtöbb esetben egy új XML dokumentumba - képz®dik le. Feldolgozás XForms esetében: 1. A bemeneti adatok akár a dokumentumba van írva, akár egy XML dokumentum egy szerveren, az adatpéldány a memóriában tárolódik. 2. Egy adatpéldány feldolgozása magában foglalja a felhasználóval való interakciót és feljegyez minden változást az adatokban. 3. Elküldéskor az adatpéldány - leggyakrabban mint XML - leképz®dik, és a servernek küld®dik el 2.4.2. XForms el®nyei és hátrányai
El®nyök: • Elegáns MVC (modell-nézet-vezérl®) kialakítás. • Deklaratív programozási nyelv, amit könny¶ tanulni, és a nyelvvel készített prog-
ramokat egyszer¶ karbantartani, bel®ni.
• Kompatibilis XML szabványokkal, úgy mint CSS, XML Schema és XPath • Kiterjeszthet®ség • Nemzetközisítés: (mivel az XML-r®l van szó, használható az Unikód)
15
2.4. XForms kialakulása, jellemzése
2.4. ábra. Az XForms f® elemeinek és kapcsolódásainak szemléltetése [6] Hátrányok: • Beépített támogatás hiánya Microsoft Internet Explorernél. • Használatához le kell tölteni a böngész®be egy kiegészít®t. • JavaScript alapú megvalósításoknál (pl. FormFaces) az oldal megtekintéséhez egy
kb. 85kb-os állományt szükséges letölteni.
• CSS szükséges ahhoz, hogy az ¶rlapok elfogadható kinézet¶ek legyenek. • A CSS 3 számos tulajdonságát nem támogatja a Microsoft Internet Explorer. • Kevés m¶köd® példaalkalmazás található. • Kevés grakus ¶rlapkészítést segít® alkalmazás van a piacon. 2.4.3. XForms dokumentum megnyitása
Jelenleg egyetlen böngész® sem támogatja teljes mértékben közvetlen módon az XForms technológiát, de több lehet®ségünk is van az XForms használatára. Az egyik lehet®ség, hogy egy beépül® modult telepítünk a böngész®re, ami képes feldolgozni az XForms utasításokat. Mivel a Mozilla is részt vett az XForms kialakításában, így az általuk írt Firefox böngész®vel könnyedén megnyitható az XForms program egy beépül® letöltése után. Ennek a beépül®nek a legfrissebb változata a Firefox 3.5-ös verzióhoz lelhet® fel, így a böngész® ezen verziója szükséges. A másik megoldás egy olyan alkalmazás használata, ami szerver oldalon átalakítja az XForms-ot tartalmazó XHTML dokumentumot egy szabványos HTML oldallá. Ezek az alkalmazások mind 16
2.5. MVC
az Ajax technológián alapulnak, ami azzal jár, hogy az XForms által meghatározott m¶ködést lecserélik JavaScriptre. Ezek kicsit lassabbak, de minden JavaScriptet ismer® böngész® képes ezeket megjeleníteni. 2.5. MVC
A modell-nézet-vezérl® (magyarul MNV; angolul model-view-controller MVC) a szoftvertervezésben használatos szerkezeti minta. Összetett, sok adatot a felhasználó elé táró számítógépes alkalmazásokban gyakori fejleszt®i kívánalom az adathoz (modell) és a felhasználói felülethez (nézet) tartozó dolgok szétválasztása, hogy a felhasználói felület ne befolyásolja az adatkezelést, és az adatok átszervezhet®k legyenek a felhasználói felület változtatása nélkül. A modell-nézet-vezérl® ezt úgy éri el, hogy elkülöníti az adatok elérését és az üzleti logikát az adatok megjelenítését®l és a felhasználói interakciótól egy közbüls® összetev®, a vezérl® bevezetésével. Gyakori egy alkalmazás több rétegre való felbontása: megjelenítés (felhasználói felület), tartománylogika és adatelérés. Az MVC-ben a megjelenítés tovább bomlik nézetre és vezérl®re. Az MVC sokkal inkább meghatározza egy alkalmazás szerkezetét, mint az egy programtervezési mintára jellemz®. [7]
2.5. ábra. Az MVC modell [8] Modell: Az alkalmazás által kezelt információk tartomány-specikus ábrázolása. A tartománylogika jelentést ad a puszta adatnak (pl. kiszámolja, hogy a mai nap a felhasználó születésnapja-e, vagy az összeget, adókat és szállítási költségeket egy vásárlói kosár elemeihez). Sok alkalmazás használ állandó tároló eljárásokat (mint mondjuk egy adatbázis) adatok tárolásához. Az MVC nem említi külön az adatelérési réteget, mert ezt beleérti a modellbe. Nézet: Megjeleníti a modellt egy megfelel® alakban, mely alkalmas a felhasználói interakcióra, jellemz®en egy felhasználói felületi elem képében. Különböz® célokra különböz® nézetek létezhetnek ugyanahhoz a modellhez. Vezérl®: Az eseményeket, jellemz®en felhasználói m¶veleteket dolgozza fel és válaszol rájuk, illetve a modellben történ® változásokat is kiválthat.
Az MVC gyakran látható web-alkalmazásokban, ahol a nézet az aktuális HTML oldal, a vezérl® pedig a kód, ami összegy¶jti a dinamikus adatokat és létrehozza a HTML-ben a tartalmat. Végül a modellt a tartalom képviseli, ami általában adatbá17
2.5. MVC
zisban vagy XML állományokban van tárolva. Habár az MVC-nek sok értelmezése létezik, a vezérlés menete általánosságban a következ®képp m¶ködik: 1. A felhasználó valamilyen hatást gyakorol a felhasználói felületre (pl. megnyom egy gombot). 2. A vezérl® átveszi a bejöv® eseményt a felhasználói felülett®l, gyakran egy bejegyzett eseménykezel® vagy visszahívás útján. 3. A vezérl® kapcsolatot teremt a modellel, esetleg frissíti azt a felhasználó tevékenységének megfelel® módon (pl. a vezérl® frissíti a felhasználó kosarát). Az összetett vezérl®ket gyakran alakítják ki az utasítás mintának megfelel®en, a m¶veletek egységbezárásáért és a b®vítés egyszer¶sítéséért. 4. A nézet (közvetve) a modell alapján megfelel® felhasználói felületet hoz létre (pl. a nézet hozza létre a kosár tartalmát felsoroló képerny®t). A nézet a modellb®l nyeri az adatait. A modellnek nincs közvetlen tudomása a nézetr®l. 5. A felhasználói felület újabb eseményre vár, mely az elejér®l kezdi a kört. A modell és a nézet kettéválasztásával az MNV csökkenti a szerkezeti bonyolultságot, és megnöveli a rugalmasságot és a felhasználhatóságot. 2.5.1. MVC az XForms-ban
Az XForms szabvány a HTML ¶rlapok hiányosságait hivatott orvosolni, XHTML-t kiegészítve XForms elemekkel. F® alapelve az ¶rlap modell és a megjelenítés elkülönítése - azaz a modell és view kettéválasztása. A modell szerepét a dokumentum elején található XML típusú "fej" deníciós rész tölti be, míg a megjelenítés a "törzs"részben található. Minden egyes mez®t egy-egy XPath [xpath] kifejezés csatol a dokumentum modellhez, összekötve a modellt a megjelenítéssel. A felhasználó által beadott adatok bekerülnek a dokumentum modellbe, és a kitöltés végén egy komplett XML dokumentum áll el®. Egy XForms dokumentum ezen kereten belül különíti el az ¶rlap modellt és az ¶rlap megjelenítését. A fejrész a megjelenített ¶rlap mögött lév® adatszerkezetet írja le. Az ¶rlap modell legfontosabb része az egyed (instance), ami az ¶rlap által kitöltött XML dokumentumfát tárolja. Ez az XML lehet az XHTML dokumentumban közvetlenül tárolva, vagy küls® fájlként is tárolható, a dokumentum pedig egy URL segítségével hivatkozik rá. Az ¶rlap megjelenítését az XHTML dokumentum törzs részébe rakható ¶rlapelemek végzik. A legtöbb ¶rlap elem egyszer¶ mez®t reprezentál, egyetlen szöveg, dátum, vagy hasonló típusú adat bekérésére alkalmas. Minden ilyen elemet a modellben szerepl® XML dokumentumhoz lehet kötni, így amikor a felhasználó kitölti a mez®t, a megjelenítés mögött lév® XML egyedben megjelenik a megadott érték.
18
3. fejezet Fejleszt®i dokumentáció
Az XForms manapság nem használt, nem elterjedt adatfeldolgozó eljárás internetes ¶rlapoknál, ezért az újabb böngész®k már nem támogatják, vagy csak nagyon kevés elemet. Olyan szint¶ vezérlést képes nyújtani, mint amelyet a ma használt ¶rlapok az interneten nem - mindehhez pedig csupán XML-t használ. Régebbi XForms dokumentumaink megnyitásához régi rendszer kell, melyhez általában külön kiegészít®k is kellenek a helyes és teljes eredmény megkapása érkedében. Szakdolgozatom rövid programja megpróbálja a legfontosabb elemeket átalakítani a ma is használatos HTML nyelvre. Némelyiket könnyedén, míg másokat egyáltalán nem lehet átírni a HTML-el és JavaScript parancsokkal. A konvertálás során, éppúgy mint az XForms-ban magában, itt is szétválasztódik az MVC három összetev®je. A programom el®ször a view részt hozza létre, eztán tölti be a modell részt, s a hozzá szükséges JavaScript gyel®ket a modell módosítására. A kontroller rész külön nyomógombokkal fog aktiválódni, melyet szintén a PHP vezérel majd le, egy JavaScript esemény hatására. Dolgozatomban el®ször a modell részt fogom részletezni, hogy épül fel egy XForms modell, hogyan készült az elemzése, értelmezése. Ezt követi a view rész, melyben részletezem az XForms adta beviteli lehet®ségeket, és hogy az hogy valósítható meg a HTML nyelvben, valamint hogyan történt annak konverziója. Végül a kontroller rész, mely a modell fa feltöltésér®l, XML dokumentumba való lementésér®l, valamint betöltésér®l szól.
3.1. Modell
3.1.1. Modell az XForms-ban
A f® különbség az XForms és a HTML között az, hogy az elküldend® adatok össze vannak gy¶jtve a head részben, melynek neve model. Csupán a form kontrollerek szükségesek ezek után a body részbe. ... <xf:model> <xf:instance>
19
3.1. Modell
... ...
A modell az XForms dokumentum (leggyakrabban XHTML) fej részében szerepel. A deniálásához egy névtér szükséges, melyet a HTML fejrészben lehet megadni, példánkban az xf prexhez rendeltük azt. Mivel a model nem az XHTML számára vonatkozó teg, ezért használni kell az xf: prexet. A modell rész alapul szolgál a dokumentum beviteli elemeire, ugyanis a beviteli elemek hivatkoznak a modell különböz® elemeire egy ref attribútom megadása révén. A dokumentumba ezáltal a