ex03: XML datu apstrāde

Sk. sagatavi uz FTP servera "students" - "pasn/JavaUnXml/luweb05/upload-sample"

Dots XML datu formāts, lai attēlotu tabulu USER no 1.praktiskā darba. Izveidot XML Schema failu users.xsd, kurš validē XML datus, lai noskaidrotu, vai to var importēt datubāzes tabulā USER. Izveidot servletus XML formāta datu importam/eksportam no datubāzes kā arī servera puses transformācijas, lai attēlotu no šiem datiem veidotu vektorgrafikas diagrammu un ļautu tos pārlūkot ar WAP atbalstošu mobilo tālruni.

Prasību apraksts

  • Varat pieņemt, ka USER tabulas struktūra datubāzē ir sekojoša:
    mysql> describe USER;
    +---------------+--------------+------+-----+---------+-------+
    | Field         | Type         | Null | Key | Default | Extra |
    +---------------+--------------+------+-----+---------+-------+
    | USER_ID       | int(11)      |      | PRI | 0       |       |
    | administrator | tinyint(1)   |      |     | 0       |       |
    | firstName     | varchar(255) | YES  |     | NULL    |       |
    | lastName      | varchar(255) | YES  |     | NULL    |       |
    | email         | varchar(255) | YES  |     | NULL    |       |
    | userName      | varchar(255) | YES  |     | NULL    |       |
    | password      | varchar(255) | YES  |     | NULL    |       |
    | registered    | datetime     | YES  |     | NULL    |       |
    +---------------+--------------+------+-----+---------+-------+
    
  • XML datu formāts ir šāds:
    <users xmlns:dict="http://www.lumii.lv/luweb05fall/dictionary">
    <user userId="..." isAdmin="...">
    <firstname>...</firstname>
    <lastname>...</lastname>
    <email>...</email>
    <userName>...</userName>
    <password>...</password>
    <registered>...</registered>
    </user>
    <user userId="...">
    ...
    </user>
    </users>
    
  • Validācijai ir jāpārbauda, vai visi userId atribūti ir veseli pozitīvi skaitļi, un vai tie neatkārtojas. Atribūts 'isAdmin' pieņem vērtības 0 vai 1; noklusētā vērtība ir 0 (t.i., ja atribūts nav norādīts, tad tiek pieņemts, ka isAdmin='0' - lietotājs nav administrators). Visi citi lauki tiek aizpildīti ar tādiem pašiem garuma ierobežojumiem, kā aprakstīts 1.praktiskajā darbā. Tiem visiem ir tips "xsd:string", izņemot registered lauciņu, kurš ir "xsd:dateTime". XML Schema turklāt pārbauda, vai visi "userName" ir unikāli, t.i. nedrīkst būt divu vienādu lietotājvārdu. XML Schemai ir pareizi jādeklarē un jāpārbauda namespace jeb vārdapgabals, kurš visiem elementiem un atribūtiem ir tas pats: "http://www.lumii.lv/luweb05fall/dictionary".
  • Uzprogrammēt servletu http://localhost/ex03/servlet/import_users, kurš pārbauda, vai tas atbilst XML Schemai users.xsd un vai nu izdod kļūdas paziņojumu (teiksim, rindiņu un kļūdas aprakstu no Xerces), vai arī pievieno datubāzes tabulai USER visus lietotājus, kas minēti XML failā. Ja ir kāda atkārtošanās kļūda (tāds USER_ID vai userName jau eksistē), arī tad izdod kļūdas paziņojumu un šajā gadījumā neimportē nevienu ierakstu. (Ja kādi ieraksti no XML faila jau bija pievienoti līdz atkārtošanās kļūdas pamanīšanai, tad Jūsu uzdevums ir tos izdzēst. Vai arī pārbaudīt atkārtošanās kļūdas iespējamību pirms sākt datu importu datubāzē.
  • Uzprogrammēt servletu http://localhost/ex03/servlet/export_users, kuru izsaucot, Web klientam tiek piedāvāts noglabāt failu users.xml (vēlams, lai faila nosaukums būtu users.xml un MIME tips - text/xml, t.i. lai datu eksports no datubāzes no lietotāja viedokļa neatšķirtos no statiska faila users.xml lejupielādes. Ja vēlaties, varat šo failu atvērt ar novēlošanos (teiksim, izmantojot Redirect līdzīgi kā savācot instalācijas failu no SourceForge). Failā users.xml doti visi datubāzes tabulā esošie lietotāji to USER_ID (t.i. userId atribūtu) pieaugšanas secībā; faila kodējums ir UTF-8, tam nav norādīts piesaistītais XML Schema fails, bet ir deklarēta elementu namespace.
  • Uzprogrammēt XSLT transformāciju user_diagram.xsl, kura no faila users.xml izveido SVG vektorgrafikas bildīti - stabiņu diagrammu, kurā redzams, cik lietotāji reģistrējušies katru mēnesi. Transformācijai jāvar padot parametrus - $width (1 mēnesim atbilstošā stabiņa platums pikseļos), $scale (1 reģistrētam lietotājam atbilstošā stabiņa garuma pieaugums), $showgrid (vai attēlot vektorgrafikas zīmējumā režģi vai koordinātu asis, kā arī tekstu, kas ļautu vieglāk nolasīt diagrammu - atrast mēnesim atbilstošo stabiņu un redzēt, cik lietotājiem tas atbilst. Visiem šiem parametriem XSLT transformācijā norādīt arī saprātīgas noklusētās vērtības.
  • Uzprogrammēt XSLT transformāciju user_wap.xsl, kura ļauj lietotāju datus (izņemot paroles) redzēt WAP pārlūkā. Abas XSLT transformācijas testēt ar Ant komandām "offline". Servlets un web.xml konfigurācija, kuri ļauj realizēt attiecīgos XSLT pārveidojumus servera pusē tiks Jums piedāvāti.

Darbību secība

Izveidot failu augšupielādes servletu

Šajā pamācībā ir doti padomi, lai izveidotu failu augšupielādi ar Jakarta Commons bibliotēku (sk. http://jakarta.apache.org/commons/fileupload/). Ja Jums ir vēlēšanās, varat izmēģināt arī ar Spring'a karkasu savietojamo ideju - failu augšupielādes interceptoru (sk. http://wiki.opensymphony.com/display/WW1/File+Upload+Interceptor).

  1. Testēšana un vērtēšana

    Šajā darbā nebūs automātisko testu. Tai vietā tiks veiktas šādas manuālas darbības:

    • Jūsu aplikāciju pārkompilēs, lai iegūtu WAR failu; to uzkopēs uz pasniedzēju Tomcat servera; serveri pārstartēs, lai Web aplikācija instalētos. Ieliks MySQL datubāzē "dictionary" testa datus. (MySQL lietotājvārds "root", parole "root".)
    • Izsauks URL adresi http://localhost:8080/ex03/servlet/import_users un augšupielādēs kādu user.xml failu. Ir iespējami vairāki gadījumi - fatāla kļūda (neatbilstība XML sintakses pamatprincipiem jeb "not well-formed document"), nefatāla kļūda (neatbilstība user.xml faila gramatiskajai struktūrai, atkārtotas primārās atslēgas vai lietotājvārdi), kolīzija ar kādu atslēgu vai lietotājvārdu, kas jau eksistē datubāzē. Visos šajos gadījumos importa servletam ir jāizdod sakarīgi kļūdu paziņojumi, t.sk. rindiņas numurs XML failā, kur tika pamanīta kļūda.
    • Testēs eksporta servletu - http://localhost:8080/ex03/servlet/export_users. Tam jāatgriež pareizs XML faila saturs un "text/xml" MIME tips.
    • Ar testa failu "user.xml" pārbaudīs arī XSLT transformācijas user_diagram.xsl un user_wap.xsl. Šiem failiem ir jāatbilst piedāvātajiem SVG un WML failu paraugiem un jāsatur pareizi dati.

    Lapa mainīta 2005-12-13 08:14:11