<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.itcollege.ee/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ljogiste</id>
	<title>ICO wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.itcollege.ee/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ljogiste"/>
	<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php/Special:Contributions/Ljogiste"/>
	<updated>2026-05-07T13:32:16Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=V%C3%A4hemtuntud_firmware&amp;diff=11125</id>
		<title>Vähemtuntud firmware</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=V%C3%A4hemtuntud_firmware&amp;diff=11125"/>
		<updated>2010-05-30T20:54:46Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: /* OpenWRT */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Sissejuhatus=&lt;br /&gt;
Kuna paljudele ei piisa tootjafirmapoolt pakutavast firmwarest, siis on sellest loodud mitmeid eri variante.&lt;br /&gt;
Üldkasutatavate ning tuntumate firmwarede (Tomato ja DD-WRT) kõrval on ka neid, mis keskenduvad spetsiifilisematele valdkondadele ning mida kasutatakse vähem. &lt;br /&gt;
&lt;br /&gt;
Testitavaks seadmeks on Linksys WRT54GL ning uurimisobjektiks sellele ruuterile sobiv firmware.&lt;br /&gt;
&lt;br /&gt;
=Freifunk (&amp;quot;open radio&amp;quot;)=&lt;br /&gt;
Märksõnaks: jagamine&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ Freifunk]: OpenWRT baasil tehtud firmware, mis peaks aitama luua [http://en.wikipedia.org/wiki/Mesh_networking &amp;quot;mesh&amp;quot;] kommmuuni interneti jagamiseks, sest &amp;quot;internetile ligipääs on moodsa ühiskonna nurgakivi. Igaüks kes ei saa internetti ühenduda, on halvas olukorras ning ei saa olla tänapäeva ühiskonna täisväärtuslik liige.&amp;quot; Freifunk on võrreldav avatud digitaalse ruumiga nagu pargid ja tänavad.&lt;br /&gt;
Friefunk firmwarega on kerge luua uusi traadita mesh võrke. Sihtgrupiks on noored ning levinud on Saksamaal. &amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutab teiste ruuteritega paremaks ühendumiseks spetsiaalseid protokolle. Kasutaja interfeis lubab põhjalikku signaali tugevuse kontrolli.&lt;br /&gt;
Firmwared on ressursi suhtes vähenõudlikud ja jooksevad seadmetel, mille jõudlus on väike. Töötavad hästi ka piiratud energiaressurssidega keskkondades ning madala voolutarbega seadmete peal. &lt;br /&gt;
Freifunk toetab ad-hoc WLAN kommunikatsiooni ning layer 2 ja 3 routingut OLSR protokolliga ja BATMAN routing protokolli. &lt;br /&gt;
&lt;br /&gt;
Freifungile luuakse erinevaid pluginaid, näiteks Apple Bonjouri abil saavad kasutajad jagada enda muusikat lokaalsetes wifi võrkudes. Freifunk mesh võrkudes on rohkem mooduseid jagamiseks ja suhtlemiseks, kuna teenuseid ehitatakse avatud standarditele ning open-source tarkvarana.&lt;br /&gt;
Saksaakeelset materjali palju, ingliskeelset vähem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritades OpenWRT-lt upgrade teha, asi ebaõnnestus ning ruuter andis otsad. &lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Lingid:&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
http://ff-firmware.sourceforge.net/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/Freifunk&amp;lt;br /&amp;gt;&lt;br /&gt;
http://freifunk-texas.net/&lt;br /&gt;
http://socghop.appspot.com/gsoc/org/home/google/gsoc2009/ffopenwrt&lt;br /&gt;
&lt;br /&gt;
=HyperWRT=&lt;br /&gt;
Märksõna(de)ks: lihtsus ja kiirus&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ HyperWRT]:&lt;br /&gt;
Esimene HyperWRT projekt (Avenger 2.0) sai alguse aastal 2004 Timothy Jansi poolt. Lisavõimalusi vähe, kiire ning lihtne kasutada. Baseerub Linksysi originaal firmware peal.&lt;br /&gt;
Seda valmistatud erinevatele Broadcom baasil olevatele ruuteritele (Buffalo, Linksys jt.). HyperWRT projekti eesmärgiks oli Linksysi firmwarele võimaluste lisamine (nt power boost), kuid seda nii, et jääks originaal firmwarega võimalikult sarnaseks. Tomatot loetakse HyperWRT järeltulijaks, kuna  &lt;br /&gt;
Hyperwrt edasiarendused.:&lt;br /&gt;
* Hyperwrt+Tofu. Lisatud asjad: signaalitugevuse kontroll, firewall scriptid, Telneti ja SSH daemon, staatiline CHCP lease, kliendi-, WET ja WDS moded, UPnp leht UPnp kaardistuste vaatamiseks ja kustutamiseks, 14 wifi kanalit, programeeritav SES nupp, SSHD.Arendus lõppes 2006a. Autoriks Jonathan Zarate, kes on ka Tomato loojaks.&lt;br /&gt;
*Hyperwrt+Thribor. Lisaks Tofu võimalustele veel pordi suunamine, lisafiltrid P2p bokeerimiseks, P2P spetisiiviline QoSA, printimisserver USB printerite jaoks. Arendus on nüüdseks samuti lõppenud. &lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritasin üleminekut Linksysi originaal firmware pealt, näitas et uuendamine toimus edukalt, kuid erinevusi silma ei paistnud. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid:&#039;&#039;&#039; &lt;br /&gt;
http://en.wikipedia.org/wiki/HyperWRT&lt;br /&gt;
http://wapedia.mobi/en/HyperWRT&lt;br /&gt;
&lt;br /&gt;
=TinyPEAP=&lt;br /&gt;
Märksõnaks turvalisus &amp;lt;br /&amp;gt;&lt;br /&gt;
Tavakasutajale mõeldud firmware, tegemaks oma ühendust turvalisemaks. &lt;br /&gt;
&lt;br /&gt;
Ühendab endas neli komponenti:&lt;br /&gt;
* AP, mis toetab pordipõhist 802.1X protokolli, mis EAP (Extensible authentication protocol) kasutamise tõttu lubab mitmeid eri autentimise protokolle. TinyPEAP kasutab PEAP protokolli, kuna see on turvaline ning kasutajasõbralik Windowsi ja MacOS-i kasutajate suthes.&lt;br /&gt;
*RADIUS server teostab kliendi autentimist. Kui klient proovib ühenduda, siis kõik autentimispaketid lähevad läbi AP RADIUS serverisse. Kui klient läbib autentimise, siis server saadab vastava teate AP-le. Tänu integreeritud RADIUS serverile, puudub vajadus lisaserveri jaoks &lt;br /&gt;
*Databaas kontollimaks autentimise andmete õigsust. Sageli kasutatakse Microsoft Active Directory serverit või SQL databaasi. Iga databaasi andmeväli omab informatsiooni kasutaja kohta, nagu kasutajanimi, parool hashitud kujul, hetke staatus, timeoudi informatsioon ja muud asjad, mida autentimiseks vaja on.&lt;br /&gt;
*PKI(Public key infrastructure). Autentimisel kasutatakse asümmeetrilisi võtmeid. Võti on vajalik kontrollimaks, et kliendi andmed lähevad õigesse AP-sse, mitte võõrasse. Võtmeid saab jagada läbi PKI või self-signed sertifikaatide kaudu&lt;br /&gt;
&lt;br /&gt;
Autentimine on kahe oaline:&lt;br /&gt;
Esimene osa on krüpteeritud TLS kanali loomine TinyPEAP serveriga. Autentimata klient üritab esmaslt ühenduda APg-ga, mille peale AP alustab 802.1X sessiooni ning küsib kliendi identiteeti. Klient vastab identiteediga ning AP saadab selle vastuse edasi TinyPEAP-ile. Kui see on lubatud kasutaja, tinyPEAP üritab luua TLS sessiooni, saates kliendile allkirjastatud sertifikaadi. Klient valideerib sertifikaadi ning luuakse TLS kanal.&lt;br /&gt;
Kui klient ei suuda valideerida setifikaadi autentsust, võib ta valida sessiooni lõpetamise. &lt;br /&gt;
Peale serveri valideerimist, algab teine osa TLS kanali sees. Kui TinyPEAP suudab valideerida kliendi andmed, tõmbab ta TLS kanali maha ja saadab uue paari võtmeid AP-sse. Samad võtmed tuletatakse kliendi pool, elimineerides vajadust saata võtmeid üle traadita LAN-i. Järgmiseks saadab AP broadcast võtme, mida kasutatakse edasiseks ülekandeks kasutades sessiooni võtmeid, mis tuletati TLS võtmest. WPA modes kasutatakse uute võtmetes tekemiseks TKIP meetodit. Võtmete uuesti loomine on see, mis hoiab krüptimise kaitstuna. &lt;br /&gt;
&lt;br /&gt;
Kui tinyPEAP-il puudub aktiivne TLS kanal, on mälu kasutus alla 1MB, aktiivsena natuke alla 3 MB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:tinypeap.jpg|200px|thumb|left|packages]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritasin üleminekut Linksys originaal firmware pealt, tegi umbes kolmveerand ära ja siis näitas et Failed ning jooksis kokku. Ruuterile restart tehes ärkas asi ellu ning Linksysi originaal firmware töötas ilusti edasi. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid: &lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
http://kennethhunt.com/archives/001379.html&amp;lt;br /&amp;gt;&lt;br /&gt;
openlinksys.info/downloads.php?cat_id=5&amp;amp;download_id=29&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=OpenWRT=&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/OpenWRT/RC5/ OpenWRT]&lt;br /&gt;
Märksõnaks:vabadus &amp;lt;br /&amp;gt;&lt;br /&gt;
Firmware edasijõudnud kasutajale, eeldab Linuxi kasutamise kogemust. Kasutajate seas poplulaarne. Ühe staatilise firmware asemel pakub openWRT kirjutatavat failisüsteemi package managmendiga. Vabastab tootja poolt paika pandud aplikatsioonidest/seadistustest ning lubab kõik ära seadistada enda vajaduste järgi. Arendajatele pakub OpenWRT võimaluse ehitada aplikatsioone, ilma et oleks vajadus ehitada framework aplikatsiooni ümber.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Lisavõimalused Linksys originaal firmwarega võrreldes:&lt;br /&gt;
*välise liikluse pordi edastamine arvutitele LAN-is mis on NAT-i taga&lt;br /&gt;
*UPnP dünaamiliselt konfigureeritud pordi edastamiseks&lt;br /&gt;
*static DHCP leases&lt;br /&gt;
*põhajlik ruuteri ja tulemüüri konfigureerimine&lt;br /&gt;
*QoS VoIP-i, online mängimise ja meedia striimimise jaoks&lt;br /&gt;
*seadme konfigureerimine wireless repeatresiks, access pointiks, wireless bridgeks või eelnevate kombinatsiooniks&lt;br /&gt;
*mesh võrgundus&lt;br /&gt;
*dünaamiliste DNS serverite kasutamine, sälitiamaks fikseeritud domeeni nime ISP-ga, mis ei paku staatilisi IP aadresse&lt;br /&gt;
*käsurea ligipääs SSH või Telneti kaudu&lt;br /&gt;
*USB portidega seadmete puhul printeri jagamine, SAMBA kaudu failide jagamine, USB audio jne&lt;br /&gt;
*reaalajas võrgu montoorimine&lt;br /&gt;
*liandatav AJAX-ipõhine veebi interfeiss (tänu LuCI projektile)&lt;br /&gt;
*regulaarne bugide parandus ning uuendised, isegi nendele sadmetele, mida enam ei toetata nende tootjate poolt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Versioon: White Russian RC5&lt;br /&gt;
Üleminek Linksysi originaal firmwarelt toimis ilusti. &amp;lt;br /&amp;gt;&lt;br /&gt;
Esialgu parool ning kasutajanimi puudusid, kuid suvalisele lingile vajutades määras kasutajanimeks root ning nõudis parooli loomist. Panin hästi lihtsa parooli, hoiatas, et parool on nõrk kuid ümbervahetamist ei nõudnud. Kasutajamugavuse poolest olid põhiasjad lihtsad ning kergesti arusaadavad. Kanaliks valis 6da. &amp;lt;br /&amp;gt;&lt;br /&gt;
Üritasin teha upgrade HyperWRT firmware peale, kuid asi ebaõnnestus. Ilma ühtegi hoiatust näitamata muutus aadress 192.168.1.1 kättesaamatuks. Peale ruuterile mitmete resettide tegemist tuli avaleht paar korda küll ette veel, kuid seda umbes viieks sekundiks ning kadus seejärel jäädavalt. Ühenduse saatuseks oli limited. Proovisin mitmeid elustamise viise (alates 30/30/30 resettidest ning TFTP-ga firmware vahetus), kuid ruuter on tumm ning temaga ühenduse saamine täiesti võimatu. Tundub, et ka peale ruuteri restartimist ei saadeta ühtgi paketti ning ka failsafest pole kasu.  Kisub sinnapoole, et tuleb proovida JTAG kaabli varianti, millega saab garantiile headaega öelda.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid:&#039;&#039;&#039;&lt;br /&gt;
http://openwrt.org/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/OpenWrt&lt;br /&gt;
&lt;br /&gt;
[[File:openwrt_packages.jpg|200px|thumb|left|packages]]&lt;br /&gt;
[[File:openWRT_wire.jpg|200px|thumb|left|packages]]&lt;br /&gt;
[[File:openWwrt_firewall.jpg|200px|thumb|left|packages]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Koostaja==&lt;br /&gt;
Liisa Jõgiste&amp;lt;br/&amp;gt;&lt;br /&gt;
2010&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Vabavaraline püsivara]]&lt;br /&gt;
[[Category:Traadita side alused]]&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=V%C3%A4hemtuntud_firmware&amp;diff=11124</id>
		<title>Vähemtuntud firmware</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=V%C3%A4hemtuntud_firmware&amp;diff=11124"/>
		<updated>2010-05-30T20:53:39Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: /* Freifunk (&amp;quot;open radio&amp;quot;) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Sissejuhatus=&lt;br /&gt;
Kuna paljudele ei piisa tootjafirmapoolt pakutavast firmwarest, siis on sellest loodud mitmeid eri variante.&lt;br /&gt;
Üldkasutatavate ning tuntumate firmwarede (Tomato ja DD-WRT) kõrval on ka neid, mis keskenduvad spetsiifilisematele valdkondadele ning mida kasutatakse vähem. &lt;br /&gt;
&lt;br /&gt;
Testitavaks seadmeks on Linksys WRT54GL ning uurimisobjektiks sellele ruuterile sobiv firmware.&lt;br /&gt;
&lt;br /&gt;
=Freifunk (&amp;quot;open radio&amp;quot;)=&lt;br /&gt;
Märksõnaks: jagamine&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ Freifunk]: OpenWRT baasil tehtud firmware, mis peaks aitama luua [http://en.wikipedia.org/wiki/Mesh_networking &amp;quot;mesh&amp;quot;] kommmuuni interneti jagamiseks, sest &amp;quot;internetile ligipääs on moodsa ühiskonna nurgakivi. Igaüks kes ei saa internetti ühenduda, on halvas olukorras ning ei saa olla tänapäeva ühiskonna täisväärtuslik liige.&amp;quot; Freifunk on võrreldav avatud digitaalse ruumiga nagu pargid ja tänavad.&lt;br /&gt;
Friefunk firmwarega on kerge luua uusi traadita mesh võrke. Sihtgrupiks on noored ning levinud on Saksamaal. &amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutab teiste ruuteritega paremaks ühendumiseks spetsiaalseid protokolle. Kasutaja interfeis lubab põhjalikku signaali tugevuse kontrolli.&lt;br /&gt;
Firmwared on ressursi suhtes vähenõudlikud ja jooksevad seadmetel, mille jõudlus on väike. Töötavad hästi ka piiratud energiaressurssidega keskkondades ning madala voolutarbega seadmete peal. &lt;br /&gt;
Freifunk toetab ad-hoc WLAN kommunikatsiooni ning layer 2 ja 3 routingut OLSR protokolliga ja BATMAN routing protokolli. &lt;br /&gt;
&lt;br /&gt;
Freifungile luuakse erinevaid pluginaid, näiteks Apple Bonjouri abil saavad kasutajad jagada enda muusikat lokaalsetes wifi võrkudes. Freifunk mesh võrkudes on rohkem mooduseid jagamiseks ja suhtlemiseks, kuna teenuseid ehitatakse avatud standarditele ning open-source tarkvarana.&lt;br /&gt;
Saksaakeelset materjali palju, ingliskeelset vähem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritades OpenWRT-lt upgrade teha, asi ebaõnnestus ning ruuter andis otsad. &lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Lingid:&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
http://ff-firmware.sourceforge.net/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/Freifunk&amp;lt;br /&amp;gt;&lt;br /&gt;
http://freifunk-texas.net/&lt;br /&gt;
http://socghop.appspot.com/gsoc/org/home/google/gsoc2009/ffopenwrt&lt;br /&gt;
&lt;br /&gt;
=HyperWRT=&lt;br /&gt;
Märksõna(de)ks: lihtsus ja kiirus&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ HyperWRT]:&lt;br /&gt;
Esimene HyperWRT projekt (Avenger 2.0) sai alguse aastal 2004 Timothy Jansi poolt. Lisavõimalusi vähe, kiire ning lihtne kasutada. Baseerub Linksysi originaal firmware peal.&lt;br /&gt;
Seda valmistatud erinevatele Broadcom baasil olevatele ruuteritele (Buffalo, Linksys jt.). HyperWRT projekti eesmärgiks oli Linksysi firmwarele võimaluste lisamine (nt power boost), kuid seda nii, et jääks originaal firmwarega võimalikult sarnaseks. Tomatot loetakse HyperWRT järeltulijaks, kuna  &lt;br /&gt;
Hyperwrt edasiarendused.:&lt;br /&gt;
* Hyperwrt+Tofu. Lisatud asjad: signaalitugevuse kontroll, firewall scriptid, Telneti ja SSH daemon, staatiline CHCP lease, kliendi-, WET ja WDS moded, UPnp leht UPnp kaardistuste vaatamiseks ja kustutamiseks, 14 wifi kanalit, programeeritav SES nupp, SSHD.Arendus lõppes 2006a. Autoriks Jonathan Zarate, kes on ka Tomato loojaks.&lt;br /&gt;
*Hyperwrt+Thribor. Lisaks Tofu võimalustele veel pordi suunamine, lisafiltrid P2p bokeerimiseks, P2P spetisiiviline QoSA, printimisserver USB printerite jaoks. Arendus on nüüdseks samuti lõppenud. &lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritasin üleminekut Linksysi originaal firmware pealt, näitas et uuendamine toimus edukalt, kuid erinevusi silma ei paistnud. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid:&#039;&#039;&#039; &lt;br /&gt;
http://en.wikipedia.org/wiki/HyperWRT&lt;br /&gt;
http://wapedia.mobi/en/HyperWRT&lt;br /&gt;
&lt;br /&gt;
=TinyPEAP=&lt;br /&gt;
Märksõnaks turvalisus &amp;lt;br /&amp;gt;&lt;br /&gt;
Tavakasutajale mõeldud firmware, tegemaks oma ühendust turvalisemaks. &lt;br /&gt;
&lt;br /&gt;
Ühendab endas neli komponenti:&lt;br /&gt;
* AP, mis toetab pordipõhist 802.1X protokolli, mis EAP (Extensible authentication protocol) kasutamise tõttu lubab mitmeid eri autentimise protokolle. TinyPEAP kasutab PEAP protokolli, kuna see on turvaline ning kasutajasõbralik Windowsi ja MacOS-i kasutajate suthes.&lt;br /&gt;
*RADIUS server teostab kliendi autentimist. Kui klient proovib ühenduda, siis kõik autentimispaketid lähevad läbi AP RADIUS serverisse. Kui klient läbib autentimise, siis server saadab vastava teate AP-le. Tänu integreeritud RADIUS serverile, puudub vajadus lisaserveri jaoks &lt;br /&gt;
*Databaas kontollimaks autentimise andmete õigsust. Sageli kasutatakse Microsoft Active Directory serverit või SQL databaasi. Iga databaasi andmeväli omab informatsiooni kasutaja kohta, nagu kasutajanimi, parool hashitud kujul, hetke staatus, timeoudi informatsioon ja muud asjad, mida autentimiseks vaja on.&lt;br /&gt;
*PKI(Public key infrastructure). Autentimisel kasutatakse asümmeetrilisi võtmeid. Võti on vajalik kontrollimaks, et kliendi andmed lähevad õigesse AP-sse, mitte võõrasse. Võtmeid saab jagada läbi PKI või self-signed sertifikaatide kaudu&lt;br /&gt;
&lt;br /&gt;
Autentimine on kahe oaline:&lt;br /&gt;
Esimene osa on krüpteeritud TLS kanali loomine TinyPEAP serveriga. Autentimata klient üritab esmaslt ühenduda APg-ga, mille peale AP alustab 802.1X sessiooni ning küsib kliendi identiteeti. Klient vastab identiteediga ning AP saadab selle vastuse edasi TinyPEAP-ile. Kui see on lubatud kasutaja, tinyPEAP üritab luua TLS sessiooni, saates kliendile allkirjastatud sertifikaadi. Klient valideerib sertifikaadi ning luuakse TLS kanal.&lt;br /&gt;
Kui klient ei suuda valideerida setifikaadi autentsust, võib ta valida sessiooni lõpetamise. &lt;br /&gt;
Peale serveri valideerimist, algab teine osa TLS kanali sees. Kui TinyPEAP suudab valideerida kliendi andmed, tõmbab ta TLS kanali maha ja saadab uue paari võtmeid AP-sse. Samad võtmed tuletatakse kliendi pool, elimineerides vajadust saata võtmeid üle traadita LAN-i. Järgmiseks saadab AP broadcast võtme, mida kasutatakse edasiseks ülekandeks kasutades sessiooni võtmeid, mis tuletati TLS võtmest. WPA modes kasutatakse uute võtmetes tekemiseks TKIP meetodit. Võtmete uuesti loomine on see, mis hoiab krüptimise kaitstuna. &lt;br /&gt;
&lt;br /&gt;
Kui tinyPEAP-il puudub aktiivne TLS kanal, on mälu kasutus alla 1MB, aktiivsena natuke alla 3 MB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:tinypeap.jpg|200px|thumb|left|packages]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritasin üleminekut Linksys originaal firmware pealt, tegi umbes kolmveerand ära ja siis näitas et Failed ning jooksis kokku. Ruuterile restart tehes ärkas asi ellu ning Linksysi originaal firmware töötas ilusti edasi. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid: &lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
http://kennethhunt.com/archives/001379.html&amp;lt;br /&amp;gt;&lt;br /&gt;
openlinksys.info/downloads.php?cat_id=5&amp;amp;download_id=29&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=OpenWRT=&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/OpenWRT/RC5/ OpenWRT]&lt;br /&gt;
Märksõnaks:vabadus &amp;lt;br /&amp;gt;&lt;br /&gt;
Firmware edasijõudnud kasutajale, eeldab Linuxi kasutamise kogemust. Kasutajate seas poplulaarne. Ühe staatilise firmware asemel pakub openWRT kirjutatavat failisüsteemi package managmendiga. Vabastab tootja poolt paika pandud aplikatsioonidest/seadistustest ning lubab kõik ära seadistada enda vajaduste järgi. Arendajatele pakub OpenWRT võimaluse ehitada aplikatsioone, ilma et oleks vajadus ehitada framework aplikatsiooni ümber.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Lisavõimalused erinevalt tehase firmwarest:&lt;br /&gt;
*välise liikluse pordi edastamine arvutitele LAN-is mis on NAT-i taga&lt;br /&gt;
*UPnP dünaamiliselt konfigureeritud pordi edastamiseks&lt;br /&gt;
*static DHCP leases&lt;br /&gt;
*põhajlik ruuteri ja tulemüüri konfigureerimine&lt;br /&gt;
*QoS VoIP-i, online mängimise ja meedia striimimise jaoks&lt;br /&gt;
*seadme konfigureerimine wireless repeatresiks, access pointiks, wireless bridgeks või eelnevate kombinatsiooniks&lt;br /&gt;
*mesh võrgundus&lt;br /&gt;
*dünaamiliste DNS serverite kasutamine, sälitiamaks fikseeritud domeeni nime ISP-ga, mis ei paku staatilisi IP aadresse&lt;br /&gt;
*käsurea ligipääs SSH või Telneti kaudu&lt;br /&gt;
*USB portidega seadmete puhul printeri jagamine, SAMBA kaudu failide jagamine, USB audio jne&lt;br /&gt;
*reaalajas võrgu montoorimine&lt;br /&gt;
*liandatav AJAX-ipõhine veebi interfeiss (tänu LuCI projektile)&lt;br /&gt;
*regulaarne bugide parandus ning uuendised, isegi nendele sadmetele, mida enam ei toetata nende tootjate poolt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Versioon: White Russian RC5&lt;br /&gt;
Üleminek Linksysi originaal firmwarelt toimis ilusti. &amp;lt;br /&amp;gt;&lt;br /&gt;
Esialgu parool ning kasutajanimi puudusid, kuid suvalisele lingile vajutades määras kasutajanimeks root ning nõudis parooli loomist. Panin hästi lihtsa parooli, hoiatas, et parool on nõrk kuid ümbervahetamist ei nõudnud. Kasutajamugavuse poolest olid põhiasjad lihtsad ning kergesti arusaadavad. Kanaliks valis 6da. &amp;lt;br /&amp;gt;&lt;br /&gt;
Üritasin teha upgrade HyperWRT firmware peale, kuid asi ebaõnnestus. Ilma ühtegi hoiatust näitamata muutus aadress 192.168.1.1 kättesaamatuks. Peale ruuterile mitmete resettide tegemist tuli avaleht paar korda küll ette veel, kuid seda umbes viieks sekundiks ning kadus seejärel jäädavalt. Ühenduse saatuseks oli limited. Proovisin mitmeid elustamise viise (alates 30/30/30 resettidest ning TFTP-ga firmware vahetus), kuid ruuter on tumm ning temaga ühenduse saamine täiesti võimatu. Tundub, et ka peale ruuteri restartimist ei saadeta ühtgi paketti ning ka failsafest pole kasu.  Kisub sinnapoole, et tuleb proovida JTAG kaabli varianti, millega saab garantiile headaega öelda.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid:&#039;&#039;&#039;&lt;br /&gt;
http://openwrt.org/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/OpenWrt&lt;br /&gt;
&lt;br /&gt;
[[File:openwrt_packages.jpg|200px|thumb|left|packages]]&lt;br /&gt;
[[File:openWRT_wire.jpg|200px|thumb|left|packages]]&lt;br /&gt;
[[File:openWwrt_firewall.jpg|200px|thumb|left|packages]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Koostaja==&lt;br /&gt;
Liisa Jõgiste&amp;lt;br/&amp;gt;&lt;br /&gt;
2010&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Vabavaraline püsivara]]&lt;br /&gt;
[[Category:Traadita side alused]]&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=V%C3%A4hemtuntud_firmware&amp;diff=11123</id>
		<title>Vähemtuntud firmware</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=V%C3%A4hemtuntud_firmware&amp;diff=11123"/>
		<updated>2010-05-30T20:52:31Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: /* Sissejuhatus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Sissejuhatus=&lt;br /&gt;
Kuna paljudele ei piisa tootjafirmapoolt pakutavast firmwarest, siis on sellest loodud mitmeid eri variante.&lt;br /&gt;
Üldkasutatavate ning tuntumate firmwarede (Tomato ja DD-WRT) kõrval on ka neid, mis keskenduvad spetsiifilisematele valdkondadele ning mida kasutatakse vähem. &lt;br /&gt;
&lt;br /&gt;
Testitavaks seadmeks on Linksys WRT54GL ning uurimisobjektiks sellele ruuterile sobiv firmware.&lt;br /&gt;
&lt;br /&gt;
=Freifunk (&amp;quot;open radio&amp;quot;)=&lt;br /&gt;
Märksõnaks: jagamine&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ Freifunk]: OpenWRT baasil tehtud firmware, mis peaks aitama luua [http://en.wikipedia.org/wiki/Mesh_networking &amp;quot;mesh&amp;quot;] kommmuuni interneti jagamiseks, sest &amp;quot;internetile ligipääs on moodsa ühiskonna nurgakivi. Igaüks kes ei saa internetti ühenduda, on halvas olukorras ning ei saa olla tänapäeva ühiskonna täisväärtuslik liige.&amp;quot; Frwifunk on võrreldav avatud digitaalse ruumiga nagu pargid ja tänavad.&lt;br /&gt;
Friefunk firmwarega on kerge luua uusi traadita mesh võrke. Sihtgrupiks on noored ning levinud on Saksamaal. &amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutab teiste ruuteritega paremaks ühendumiseks spetsiaalseid protokolle. Kasutaja interfeis lubab põhjalikku signaali tugevuse kontrolli.&lt;br /&gt;
Firmwared on ressursi suhtes vähenõudlikud ja jooksevad seadmetel, mille jõudlus on väike. Töötavad hästi ka piiratud energiaressurssidega keskkondades ning madala voolutarbega seadmete peal. &lt;br /&gt;
Freifunk toetab ad-hoc WLAN kommunikatsiooni ning layer 2 ja 3 routingut OLSR protokolliga ja BATMAN routing protokolli. &lt;br /&gt;
&lt;br /&gt;
Freifungile luuakse erinevaid pluginaid, näiteks Apple Bonjouri abil saavad kasutajad jagada enda muusikat lokaalsetes wifi võrkudes. Freifunk mesh võrkudes on rohkem mooduseid jagamiseks ja suhtlemiseks, kuna teenuseid ehitatakse avatud standarditele ning open-source tarkvarana.&lt;br /&gt;
Saksaakeelset materjali palju, ingliskeelset vähem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritades OpenWRT-lt upgrade teha, asi ebaõnnestus ning ruuter andis otsad. &lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Lingid:&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
http://ff-firmware.sourceforge.net/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/Freifunk&amp;lt;br /&amp;gt;&lt;br /&gt;
http://freifunk-texas.net/&lt;br /&gt;
http://socghop.appspot.com/gsoc/org/home/google/gsoc2009/ffopenwrt&lt;br /&gt;
 &lt;br /&gt;
=HyperWRT=&lt;br /&gt;
Märksõna(de)ks: lihtsus ja kiirus&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ HyperWRT]:&lt;br /&gt;
Esimene HyperWRT projekt (Avenger 2.0) sai alguse aastal 2004 Timothy Jansi poolt. Lisavõimalusi vähe, kiire ning lihtne kasutada. Baseerub Linksysi originaal firmware peal.&lt;br /&gt;
Seda valmistatud erinevatele Broadcom baasil olevatele ruuteritele (Buffalo, Linksys jt.). HyperWRT projekti eesmärgiks oli Linksysi firmwarele võimaluste lisamine (nt power boost), kuid seda nii, et jääks originaal firmwarega võimalikult sarnaseks. Tomatot loetakse HyperWRT järeltulijaks, kuna  &lt;br /&gt;
Hyperwrt edasiarendused.:&lt;br /&gt;
* Hyperwrt+Tofu. Lisatud asjad: signaalitugevuse kontroll, firewall scriptid, Telneti ja SSH daemon, staatiline CHCP lease, kliendi-, WET ja WDS moded, UPnp leht UPnp kaardistuste vaatamiseks ja kustutamiseks, 14 wifi kanalit, programeeritav SES nupp, SSHD.Arendus lõppes 2006a. Autoriks Jonathan Zarate, kes on ka Tomato loojaks.&lt;br /&gt;
*Hyperwrt+Thribor. Lisaks Tofu võimalustele veel pordi suunamine, lisafiltrid P2p bokeerimiseks, P2P spetisiiviline QoSA, printimisserver USB printerite jaoks. Arendus on nüüdseks samuti lõppenud. &lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritasin üleminekut Linksysi originaal firmware pealt, näitas et uuendamine toimus edukalt, kuid erinevusi silma ei paistnud. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid:&#039;&#039;&#039; &lt;br /&gt;
http://en.wikipedia.org/wiki/HyperWRT&lt;br /&gt;
http://wapedia.mobi/en/HyperWRT&lt;br /&gt;
&lt;br /&gt;
=TinyPEAP=&lt;br /&gt;
Märksõnaks turvalisus &amp;lt;br /&amp;gt;&lt;br /&gt;
Tavakasutajale mõeldud firmware, tegemaks oma ühendust turvalisemaks. &lt;br /&gt;
&lt;br /&gt;
Ühendab endas neli komponenti:&lt;br /&gt;
* AP, mis toetab pordipõhist 802.1X protokolli, mis EAP (Extensible authentication protocol) kasutamise tõttu lubab mitmeid eri autentimise protokolle. TinyPEAP kasutab PEAP protokolli, kuna see on turvaline ning kasutajasõbralik Windowsi ja MacOS-i kasutajate suthes.&lt;br /&gt;
*RADIUS server teostab kliendi autentimist. Kui klient proovib ühenduda, siis kõik autentimispaketid lähevad läbi AP RADIUS serverisse. Kui klient läbib autentimise, siis server saadab vastava teate AP-le. Tänu integreeritud RADIUS serverile, puudub vajadus lisaserveri jaoks &lt;br /&gt;
*Databaas kontollimaks autentimise andmete õigsust. Sageli kasutatakse Microsoft Active Directory serverit või SQL databaasi. Iga databaasi andmeväli omab informatsiooni kasutaja kohta, nagu kasutajanimi, parool hashitud kujul, hetke staatus, timeoudi informatsioon ja muud asjad, mida autentimiseks vaja on.&lt;br /&gt;
*PKI(Public key infrastructure). Autentimisel kasutatakse asümmeetrilisi võtmeid. Võti on vajalik kontrollimaks, et kliendi andmed lähevad õigesse AP-sse, mitte võõrasse. Võtmeid saab jagada läbi PKI või self-signed sertifikaatide kaudu&lt;br /&gt;
&lt;br /&gt;
Autentimine on kahe oaline:&lt;br /&gt;
Esimene osa on krüpteeritud TLS kanali loomine TinyPEAP serveriga. Autentimata klient üritab esmaslt ühenduda APg-ga, mille peale AP alustab 802.1X sessiooni ning küsib kliendi identiteeti. Klient vastab identiteediga ning AP saadab selle vastuse edasi TinyPEAP-ile. Kui see on lubatud kasutaja, tinyPEAP üritab luua TLS sessiooni, saates kliendile allkirjastatud sertifikaadi. Klient valideerib sertifikaadi ning luuakse TLS kanal.&lt;br /&gt;
Kui klient ei suuda valideerida setifikaadi autentsust, võib ta valida sessiooni lõpetamise. &lt;br /&gt;
Peale serveri valideerimist, algab teine osa TLS kanali sees. Kui TinyPEAP suudab valideerida kliendi andmed, tõmbab ta TLS kanali maha ja saadab uue paari võtmeid AP-sse. Samad võtmed tuletatakse kliendi pool, elimineerides vajadust saata võtmeid üle traadita LAN-i. Järgmiseks saadab AP broadcast võtme, mida kasutatakse edasiseks ülekandeks kasutades sessiooni võtmeid, mis tuletati TLS võtmest. WPA modes kasutatakse uute võtmetes tekemiseks TKIP meetodit. Võtmete uuesti loomine on see, mis hoiab krüptimise kaitstuna. &lt;br /&gt;
&lt;br /&gt;
Kui tinyPEAP-il puudub aktiivne TLS kanal, on mälu kasutus alla 1MB, aktiivsena natuke alla 3 MB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:tinypeap.jpg|200px|thumb|left|packages]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritasin üleminekut Linksys originaal firmware pealt, tegi umbes kolmveerand ära ja siis näitas et Failed ning jooksis kokku. Ruuterile restart tehes ärkas asi ellu ning Linksysi originaal firmware töötas ilusti edasi. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid: &lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
http://kennethhunt.com/archives/001379.html&amp;lt;br /&amp;gt;&lt;br /&gt;
openlinksys.info/downloads.php?cat_id=5&amp;amp;download_id=29&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=OpenWRT=&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/OpenWRT/RC5/ OpenWRT]&lt;br /&gt;
Märksõnaks:vabadus &amp;lt;br /&amp;gt;&lt;br /&gt;
Firmware edasijõudnud kasutajale, eeldab Linuxi kasutamise kogemust. Kasutajate seas poplulaarne. Ühe staatilise firmware asemel pakub openWRT kirjutatavat failisüsteemi package managmendiga. Vabastab tootja poolt paika pandud aplikatsioonidest/seadistustest ning lubab kõik ära seadistada enda vajaduste järgi. Arendajatele pakub OpenWRT võimaluse ehitada aplikatsioone, ilma et oleks vajadus ehitada framework aplikatsiooni ümber.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Lisavõimalused erinevalt tehase firmwarest:&lt;br /&gt;
*välise liikluse pordi edastamine arvutitele LAN-is mis on NAT-i taga&lt;br /&gt;
*UPnP dünaamiliselt konfigureeritud pordi edastamiseks&lt;br /&gt;
*static DHCP leases&lt;br /&gt;
*põhajlik ruuteri ja tulemüüri konfigureerimine&lt;br /&gt;
*QoS VoIP-i, online mängimise ja meedia striimimise jaoks&lt;br /&gt;
*seadme konfigureerimine wireless repeatresiks, access pointiks, wireless bridgeks või eelnevate kombinatsiooniks&lt;br /&gt;
*mesh võrgundus&lt;br /&gt;
*dünaamiliste DNS serverite kasutamine, sälitiamaks fikseeritud domeeni nime ISP-ga, mis ei paku staatilisi IP aadresse&lt;br /&gt;
*käsurea ligipääs SSH või Telneti kaudu&lt;br /&gt;
*USB portidega seadmete puhul printeri jagamine, SAMBA kaudu failide jagamine, USB audio jne&lt;br /&gt;
*reaalajas võrgu montoorimine&lt;br /&gt;
*liandatav AJAX-ipõhine veebi interfeiss (tänu LuCI projektile)&lt;br /&gt;
*regulaarne bugide parandus ning uuendised, isegi nendele sadmetele, mida enam ei toetata nende tootjate poolt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Versioon: White Russian RC5&lt;br /&gt;
Üleminek Linksysi originaal firmwarelt toimis ilusti. &amp;lt;br /&amp;gt;&lt;br /&gt;
Esialgu parool ning kasutajanimi puudusid, kuid suvalisele lingile vajutades määras kasutajanimeks root ning nõudis parooli loomist. Panin hästi lihtsa parooli, hoiatas, et parool on nõrk kuid ümbervahetamist ei nõudnud. Kasutajamugavuse poolest olid põhiasjad lihtsad ning kergesti arusaadavad. Kanaliks valis 6da. &amp;lt;br /&amp;gt;&lt;br /&gt;
Üritasin teha upgrade HyperWRT firmware peale, kuid asi ebaõnnestus. Ilma ühtegi hoiatust näitamata muutus aadress 192.168.1.1 kättesaamatuks. Peale ruuterile mitmete resettide tegemist tuli avaleht paar korda küll ette veel, kuid seda umbes viieks sekundiks ning kadus seejärel jäädavalt. Ühenduse saatuseks oli limited. Proovisin mitmeid elustamise viise (alates 30/30/30 resettidest ning TFTP-ga firmware vahetus), kuid ruuter on tumm ning temaga ühenduse saamine täiesti võimatu. Tundub, et ka peale ruuteri restartimist ei saadeta ühtgi paketti ning ka failsafest pole kasu.  Kisub sinnapoole, et tuleb proovida JTAG kaabli varianti, millega saab garantiile headaega öelda.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid:&#039;&#039;&#039;&lt;br /&gt;
http://openwrt.org/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/OpenWrt&lt;br /&gt;
&lt;br /&gt;
[[File:openwrt_packages.jpg|200px|thumb|left|packages]]&lt;br /&gt;
[[File:openWRT_wire.jpg|200px|thumb|left|packages]]&lt;br /&gt;
[[File:openWwrt_firewall.jpg|200px|thumb|left|packages]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Koostaja==&lt;br /&gt;
Liisa Jõgiste&amp;lt;br/&amp;gt;&lt;br /&gt;
2010&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Vabavaraline püsivara]]&lt;br /&gt;
[[Category:Traadita side alused]]&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=V%C3%A4hemtuntud_firmware&amp;diff=11122</id>
		<title>Vähemtuntud firmware</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=V%C3%A4hemtuntud_firmware&amp;diff=11122"/>
		<updated>2010-05-30T20:51:43Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: /* OpenWRT */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Sissejuhatus=&lt;br /&gt;
Kuna paljudele ei piisa tootjafirmapoolt pakutavast firmwarest, siis on sellest loodud mitmeid eri variante.&lt;br /&gt;
Üldkasutatavate ning tuntumate firmwarede (Tomato ja DD-Wert) kõrval on ka neid, mis keskenduvad spetsiifilisematele valdkondadele ning mida kasutatakse vähem. &lt;br /&gt;
&lt;br /&gt;
Testitavaks seadmeks on Linksys WRT54GL ning uurimisobjektiks sellele ruuterile sobiv firmware. &lt;br /&gt;
&lt;br /&gt;
=Freifunk (&amp;quot;open radio&amp;quot;)=&lt;br /&gt;
Märksõnaks: jagamine&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ Freifunk]: OpenWRT baasil tehtud firmware, mis peaks aitama luua [http://en.wikipedia.org/wiki/Mesh_networking &amp;quot;mesh&amp;quot;] kommmuuni interneti jagamiseks, sest &amp;quot;internetile ligipääs on moodsa ühiskonna nurgakivi. Igaüks kes ei saa internetti ühenduda, on halvas olukorras ning ei saa olla tänapäeva ühiskonna täisväärtuslik liige.&amp;quot; Frwifunk on võrreldav avatud digitaalse ruumiga nagu pargid ja tänavad.&lt;br /&gt;
Friefunk firmwarega on kerge luua uusi traadita mesh võrke. Sihtgrupiks on noored ning levinud on Saksamaal. &amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutab teiste ruuteritega paremaks ühendumiseks spetsiaalseid protokolle. Kasutaja interfeis lubab põhjalikku signaali tugevuse kontrolli.&lt;br /&gt;
Firmwared on ressursi suhtes vähenõudlikud ja jooksevad seadmetel, mille jõudlus on väike. Töötavad hästi ka piiratud energiaressurssidega keskkondades ning madala voolutarbega seadmete peal. &lt;br /&gt;
Freifunk toetab ad-hoc WLAN kommunikatsiooni ning layer 2 ja 3 routingut OLSR protokolliga ja BATMAN routing protokolli. &lt;br /&gt;
&lt;br /&gt;
Freifungile luuakse erinevaid pluginaid, näiteks Apple Bonjouri abil saavad kasutajad jagada enda muusikat lokaalsetes wifi võrkudes. Freifunk mesh võrkudes on rohkem mooduseid jagamiseks ja suhtlemiseks, kuna teenuseid ehitatakse avatud standarditele ning open-source tarkvarana.&lt;br /&gt;
Saksaakeelset materjali palju, ingliskeelset vähem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritades OpenWRT-lt upgrade teha, asi ebaõnnestus ning ruuter andis otsad. &lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Lingid:&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
http://ff-firmware.sourceforge.net/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/Freifunk&amp;lt;br /&amp;gt;&lt;br /&gt;
http://freifunk-texas.net/&lt;br /&gt;
http://socghop.appspot.com/gsoc/org/home/google/gsoc2009/ffopenwrt&lt;br /&gt;
 &lt;br /&gt;
=HyperWRT=&lt;br /&gt;
Märksõna(de)ks: lihtsus ja kiirus&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ HyperWRT]:&lt;br /&gt;
Esimene HyperWRT projekt (Avenger 2.0) sai alguse aastal 2004 Timothy Jansi poolt. Lisavõimalusi vähe, kiire ning lihtne kasutada. Baseerub Linksysi originaal firmware peal.&lt;br /&gt;
Seda valmistatud erinevatele Broadcom baasil olevatele ruuteritele (Buffalo, Linksys jt.). HyperWRT projekti eesmärgiks oli Linksysi firmwarele võimaluste lisamine (nt power boost), kuid seda nii, et jääks originaal firmwarega võimalikult sarnaseks. Tomatot loetakse HyperWRT järeltulijaks, kuna  &lt;br /&gt;
Hyperwrt edasiarendused.:&lt;br /&gt;
* Hyperwrt+Tofu. Lisatud asjad: signaalitugevuse kontroll, firewall scriptid, Telneti ja SSH daemon, staatiline CHCP lease, kliendi-, WET ja WDS moded, UPnp leht UPnp kaardistuste vaatamiseks ja kustutamiseks, 14 wifi kanalit, programeeritav SES nupp, SSHD.Arendus lõppes 2006a. Autoriks Jonathan Zarate, kes on ka Tomato loojaks.&lt;br /&gt;
*Hyperwrt+Thribor. Lisaks Tofu võimalustele veel pordi suunamine, lisafiltrid P2p bokeerimiseks, P2P spetisiiviline QoSA, printimisserver USB printerite jaoks. Arendus on nüüdseks samuti lõppenud. &lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritasin üleminekut Linksysi originaal firmware pealt, näitas et uuendamine toimus edukalt, kuid erinevusi silma ei paistnud. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid:&#039;&#039;&#039; &lt;br /&gt;
http://en.wikipedia.org/wiki/HyperWRT&lt;br /&gt;
http://wapedia.mobi/en/HyperWRT&lt;br /&gt;
&lt;br /&gt;
=TinyPEAP=&lt;br /&gt;
Märksõnaks turvalisus &amp;lt;br /&amp;gt;&lt;br /&gt;
Tavakasutajale mõeldud firmware, tegemaks oma ühendust turvalisemaks. &lt;br /&gt;
&lt;br /&gt;
Ühendab endas neli komponenti:&lt;br /&gt;
* AP, mis toetab pordipõhist 802.1X protokolli, mis EAP (Extensible authentication protocol) kasutamise tõttu lubab mitmeid eri autentimise protokolle. TinyPEAP kasutab PEAP protokolli, kuna see on turvaline ning kasutajasõbralik Windowsi ja MacOS-i kasutajate suthes.&lt;br /&gt;
*RADIUS server teostab kliendi autentimist. Kui klient proovib ühenduda, siis kõik autentimispaketid lähevad läbi AP RADIUS serverisse. Kui klient läbib autentimise, siis server saadab vastava teate AP-le. Tänu integreeritud RADIUS serverile, puudub vajadus lisaserveri jaoks &lt;br /&gt;
*Databaas kontollimaks autentimise andmete õigsust. Sageli kasutatakse Microsoft Active Directory serverit või SQL databaasi. Iga databaasi andmeväli omab informatsiooni kasutaja kohta, nagu kasutajanimi, parool hashitud kujul, hetke staatus, timeoudi informatsioon ja muud asjad, mida autentimiseks vaja on.&lt;br /&gt;
*PKI(Public key infrastructure). Autentimisel kasutatakse asümmeetrilisi võtmeid. Võti on vajalik kontrollimaks, et kliendi andmed lähevad õigesse AP-sse, mitte võõrasse. Võtmeid saab jagada läbi PKI või self-signed sertifikaatide kaudu&lt;br /&gt;
&lt;br /&gt;
Autentimine on kahe oaline:&lt;br /&gt;
Esimene osa on krüpteeritud TLS kanali loomine TinyPEAP serveriga. Autentimata klient üritab esmaslt ühenduda APg-ga, mille peale AP alustab 802.1X sessiooni ning küsib kliendi identiteeti. Klient vastab identiteediga ning AP saadab selle vastuse edasi TinyPEAP-ile. Kui see on lubatud kasutaja, tinyPEAP üritab luua TLS sessiooni, saates kliendile allkirjastatud sertifikaadi. Klient valideerib sertifikaadi ning luuakse TLS kanal.&lt;br /&gt;
Kui klient ei suuda valideerida setifikaadi autentsust, võib ta valida sessiooni lõpetamise. &lt;br /&gt;
Peale serveri valideerimist, algab teine osa TLS kanali sees. Kui TinyPEAP suudab valideerida kliendi andmed, tõmbab ta TLS kanali maha ja saadab uue paari võtmeid AP-sse. Samad võtmed tuletatakse kliendi pool, elimineerides vajadust saata võtmeid üle traadita LAN-i. Järgmiseks saadab AP broadcast võtme, mida kasutatakse edasiseks ülekandeks kasutades sessiooni võtmeid, mis tuletati TLS võtmest. WPA modes kasutatakse uute võtmetes tekemiseks TKIP meetodit. Võtmete uuesti loomine on see, mis hoiab krüptimise kaitstuna. &lt;br /&gt;
&lt;br /&gt;
Kui tinyPEAP-il puudub aktiivne TLS kanal, on mälu kasutus alla 1MB, aktiivsena natuke alla 3 MB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:tinypeap.jpg|200px|thumb|left|packages]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritasin üleminekut Linksys originaal firmware pealt, tegi umbes kolmveerand ära ja siis näitas et Failed ning jooksis kokku. Ruuterile restart tehes ärkas asi ellu ning Linksysi originaal firmware töötas ilusti edasi. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid: &lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
http://kennethhunt.com/archives/001379.html&amp;lt;br /&amp;gt;&lt;br /&gt;
openlinksys.info/downloads.php?cat_id=5&amp;amp;download_id=29&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=OpenWRT=&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/OpenWRT/RC5/ OpenWRT]&lt;br /&gt;
Märksõnaks:vabadus &amp;lt;br /&amp;gt;&lt;br /&gt;
Firmware edasijõudnud kasutajale, eeldab Linuxi kasutamise kogemust. Kasutajate seas poplulaarne. Ühe staatilise firmware asemel pakub openWRT kirjutatavat failisüsteemi package managmendiga. Vabastab tootja poolt paika pandud aplikatsioonidest/seadistustest ning lubab kõik ära seadistada enda vajaduste järgi. Arendajatele pakub OpenWRT võimaluse ehitada aplikatsioone, ilma et oleks vajadus ehitada framework aplikatsiooni ümber.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Lisavõimalused erinevalt tehase firmwarest:&lt;br /&gt;
*välise liikluse pordi edastamine arvutitele LAN-is mis on NAT-i taga&lt;br /&gt;
*UPnP dünaamiliselt konfigureeritud pordi edastamiseks&lt;br /&gt;
*static DHCP leases&lt;br /&gt;
*põhajlik ruuteri ja tulemüüri konfigureerimine&lt;br /&gt;
*QoS VoIP-i, online mängimise ja meedia striimimise jaoks&lt;br /&gt;
*seadme konfigureerimine wireless repeatresiks, access pointiks, wireless bridgeks või eelnevate kombinatsiooniks&lt;br /&gt;
*mesh võrgundus&lt;br /&gt;
*dünaamiliste DNS serverite kasutamine, sälitiamaks fikseeritud domeeni nime ISP-ga, mis ei paku staatilisi IP aadresse&lt;br /&gt;
*käsurea ligipääs SSH või Telneti kaudu&lt;br /&gt;
*USB portidega seadmete puhul printeri jagamine, SAMBA kaudu failide jagamine, USB audio jne&lt;br /&gt;
*reaalajas võrgu montoorimine&lt;br /&gt;
*liandatav AJAX-ipõhine veebi interfeiss (tänu LuCI projektile)&lt;br /&gt;
*regulaarne bugide parandus ning uuendised, isegi nendele sadmetele, mida enam ei toetata nende tootjate poolt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Versioon: White Russian RC5&lt;br /&gt;
Üleminek Linksysi originaal firmwarelt toimis ilusti. &amp;lt;br /&amp;gt;&lt;br /&gt;
Esialgu parool ning kasutajanimi puudusid, kuid suvalisele lingile vajutades määras kasutajanimeks root ning nõudis parooli loomist. Panin hästi lihtsa parooli, hoiatas, et parool on nõrk kuid ümbervahetamist ei nõudnud. Kasutajamugavuse poolest olid põhiasjad lihtsad ning kergesti arusaadavad. Kanaliks valis 6da. &amp;lt;br /&amp;gt;&lt;br /&gt;
Üritasin teha upgrade HyperWRT firmware peale, kuid asi ebaõnnestus. Ilma ühtegi hoiatust näitamata muutus aadress 192.168.1.1 kättesaamatuks. Peale ruuterile mitmete resettide tegemist tuli avaleht paar korda küll ette veel, kuid seda umbes viieks sekundiks ning kadus seejärel jäädavalt. Ühenduse saatuseks oli limited. Proovisin mitmeid elustamise viise (alates 30/30/30 resettidest ning TFTP-ga firmware vahetus), kuid ruuter on tumm ning temaga ühenduse saamine täiesti võimatu. Tundub, et ka peale ruuteri restartimist ei saadeta ühtgi paketti ning ka failsafest pole kasu.  Kisub sinnapoole, et tuleb proovida JTAG kaabli varianti, millega saab garantiile headaega öelda.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid:&#039;&#039;&#039;&lt;br /&gt;
http://openwrt.org/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/OpenWrt&lt;br /&gt;
&lt;br /&gt;
[[File:openwrt_packages.jpg|200px|thumb|left|packages]]&lt;br /&gt;
[[File:openWRT_wire.jpg|200px|thumb|left|packages]]&lt;br /&gt;
[[File:openWwrt_firewall.jpg|200px|thumb|left|packages]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Koostaja==&lt;br /&gt;
Liisa Jõgiste&amp;lt;br/&amp;gt;&lt;br /&gt;
2010&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Vabavaraline püsivara]]&lt;br /&gt;
[[Category:Traadita side alused]]&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=V%C3%A4hemtuntud_firmware&amp;diff=10903</id>
		<title>Vähemtuntud firmware</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=V%C3%A4hemtuntud_firmware&amp;diff=10903"/>
		<updated>2010-05-28T13:00:58Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Sissejuhatus=&lt;br /&gt;
Kuna paljudele ei piisa tootjafirmapoolt pakutavast firmwarest, siis on sellest loodud mitmeid eri variante.&lt;br /&gt;
Üldkasutatavate ning tuntumate firmwarede (Tomato ja DD-Wert) kõrval on ka neid, mis keskenduvad spetsiifilisematele valdkondadele ning mida kasutatakse vähem. &lt;br /&gt;
&lt;br /&gt;
Testitavaks seadmeks on Linksys WRT54GL ning uurimisobjektiks sellele ruuterile sobiv firmware. &lt;br /&gt;
&lt;br /&gt;
=Freifunk (&amp;quot;open radio&amp;quot;)=&lt;br /&gt;
Märksõnaks: jagamine&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ Freifunk]: OpenWRT baasil tehtud firmware, mis peaks aitama luua [http://en.wikipedia.org/wiki/Mesh_networking &amp;quot;mesh&amp;quot;] kommmuuni interneti jagamiseks, sest &amp;quot;internetile ligipääs on moodsa ühiskonna nurgakivi. Igaüks kes ei saa internetti ühenduda, on halvas olukorras ning ei saa olla tänapäeva ühiskonna täisväärtuslik liige.&amp;quot; Frwifunk on võrreldav avatud digitaalse ruumiga nagu pargid ja tänavad.&lt;br /&gt;
Friefunk firmwarega on kerge luua uusi traadita mesh võrke. Sihtgrupiks on noored ning levinud on Saksamaal. &amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutab teiste ruuteritega paremaks ühendumiseks spetsiaalseid protokolle. Kasutaja interfeis lubab põhjalikku signaali tugevuse kontrolli.&lt;br /&gt;
Firmwared on ressursi suhtes vähenõudlikud ja jooksevad seadmetel, mille jõudlus on väike. Töötavad hästi ka piiratud energiaressurssidega keskkondades ning madala voolutarbega seadmete peal. &lt;br /&gt;
Freifunk toetab ad-hoc WLAN kommunikatsiooni ning layer 2 ja 3 routingut OLSR protokolliga ja BATMAN routing protokolli. &lt;br /&gt;
&lt;br /&gt;
Freifungile luuakse erinevaid pluginaid, näiteks Apple Bonjouri abil saavad kasutajad jagada enda muusikat lokaalsetes wifi võrkudes. Freifunk mesh võrkudes on rohkem mooduseid jagamiseks ja suhtlemiseks, kuna teenuseid ehitatakse avatud standarditele ning open-source tarkvarana.&lt;br /&gt;
Saksaakeelset materjali palju, ingliskeelset vähem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritades OpenWRT-lt upgrade teha, asi ebaõnnestus ning ruuter andis otsad. &lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Lingid:&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
http://ff-firmware.sourceforge.net/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/Freifunk&amp;lt;br /&amp;gt;&lt;br /&gt;
http://freifunk-texas.net/&lt;br /&gt;
http://socghop.appspot.com/gsoc/org/home/google/gsoc2009/ffopenwrt&lt;br /&gt;
 &lt;br /&gt;
=HyperWRT=&lt;br /&gt;
Märksõna(de)ks: lihtsus ja kiirus&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ HyperWRT]:&lt;br /&gt;
Esimene HyperWRT projekt (Avenger 2.0) sai alguse aastal 2004 Timothy Jansi poolt. Lisavõimalusi vähe, kiire ning lihtne kasutada. Baseerub Linksysi originaal firmware peal.&lt;br /&gt;
Seda valmistatud erinevatele Broadcom baasil olevatele ruuteritele (Buffalo, Linksys jt.). HyperWRT projekti eesmärgiks oli Linksysi firmwarele võimaluste lisamine (nt power boost), kuid seda nii, et jääks originaal firmwarega võimalikult sarnaseks. Tomatot loetakse HyperWRT järeltulijaks, kuna  &lt;br /&gt;
Hyperwrt edasiarendused.:&lt;br /&gt;
* Hyperwrt+Tofu. Lisatud asjad: signaalitugevuse kontroll, firewall scriptid, Telneti ja SSH daemon, staatiline CHCP lease, kliendi-, WET ja WDS moded, UPnp leht UPnp kaardistuste vaatamiseks ja kustutamiseks, 14 wifi kanalit, programeeritav SES nupp, SSHD.Arendus lõppes 2006a. Autoriks Jonathan Zarate, kes on ka Tomato loojaks.&lt;br /&gt;
*Hyperwrt+Thribor. Lisaks Tofu võimalustele veel pordi suunamine, lisafiltrid P2p bokeerimiseks, P2P spetisiiviline QoSA, printimisserver USB printerite jaoks. Arendus on nüüdseks samuti lõppenud. &lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritasin üleminekut Linksysi originaal firmware pealt, näitas et uuendamine toimus edukalt, kuid erinevusi silma ei paistnud. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid:&#039;&#039;&#039; &lt;br /&gt;
http://en.wikipedia.org/wiki/HyperWRT&lt;br /&gt;
http://wapedia.mobi/en/HyperWRT&lt;br /&gt;
&lt;br /&gt;
=TinyPEAP=&lt;br /&gt;
Märksõnaks turvalisus &amp;lt;br /&amp;gt;&lt;br /&gt;
Tavakasutajale mõeldud firmware, tegemaks oma ühendust turvalisemaks. &lt;br /&gt;
&lt;br /&gt;
Ühendab endas neli komponenti:&lt;br /&gt;
* AP, mis toetab pordipõhist 802.1X protokolli, mis EAP (Extensible authentication protocol) kasutamise tõttu lubab mitmeid eri autentimise protokolle. TinyPEAP kasutab PEAP protokolli, kuna see on turvaline ning kasutajasõbralik Windowsi ja MacOS-i kasutajate suthes.&lt;br /&gt;
*RADIUS server teostab kliendi autentimist. Kui klient proovib ühenduda, siis kõik autentimispaketid lähevad läbi AP RADIUS serverisse. Kui klient läbib autentimise, siis server saadab vastava teate AP-le. Tänu integreeritud RADIUS serverile, puudub vajadus lisaserveri jaoks &lt;br /&gt;
*Databaas kontollimaks autentimise andmete õigsust. Sageli kasutatakse Microsoft Active Directory serverit või SQL databaasi. Iga databaasi andmeväli omab informatsiooni kasutaja kohta, nagu kasutajanimi, parool hashitud kujul, hetke staatus, timeoudi informatsioon ja muud asjad, mida autentimiseks vaja on.&lt;br /&gt;
*PKI(Public key infrastructure). Autentimisel kasutatakse asümmeetrilisi võtmeid. Võti on vajalik kontrollimaks, et kliendi andmed lähevad õigesse AP-sse, mitte võõrasse. Võtmeid saab jagada läbi PKI või self-signed sertifikaatide kaudu&lt;br /&gt;
&lt;br /&gt;
Autentimine on kahe oaline:&lt;br /&gt;
Esimene osa on krüpteeritud TLS kanali loomine TinyPEAP serveriga. Autentimata klient üritab esmaslt ühenduda APg-ga, mille peale AP alustab 802.1X sessiooni ning küsib kliendi identiteeti. Klient vastab identiteediga ning AP saadab selle vastuse edasi TinyPEAP-ile. Kui see on lubatud kasutaja, tinyPEAP üritab luua TLS sessiooni, saates kliendile allkirjastatud sertifikaadi. Klient valideerib sertifikaadi ning luuakse TLS kanal.&lt;br /&gt;
Kui klient ei suuda valideerida setifikaadi autentsust, võib ta valida sessiooni lõpetamise. &lt;br /&gt;
Peale serveri valideerimist, algab teine osa TLS kanali sees. Kui TinyPEAP suudab valideerida kliendi andmed, tõmbab ta TLS kanali maha ja saadab uue paari võtmeid AP-sse. Samad võtmed tuletatakse kliendi pool, elimineerides vajadust saata võtmeid üle traadita LAN-i. Järgmiseks saadab AP broadcast võtme, mida kasutatakse edasiseks ülekandeks kasutades sessiooni võtmeid, mis tuletati TLS võtmest. WPA modes kasutatakse uute võtmetes tekemiseks TKIP meetodit. Võtmete uuesti loomine on see, mis hoiab krüptimise kaitstuna. &lt;br /&gt;
&lt;br /&gt;
Kui tinyPEAP-il puudub aktiivne TLS kanal, on mälu kasutus alla 1MB, aktiivsena natuke alla 3 MB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:tinypeap.jpg|200px|thumb|left|packages]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritasin üleminekut Linksys originaal firmware pealt, tegi umbes kolmveerand ära ja siis näitas et Failed ning jooksis kokku. Ruuterile restart tehes ärkas asi ellu ning Linksysi originaal firmware töötas ilusti edasi. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid: &lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
http://kennethhunt.com/archives/001379.html&amp;lt;br /&amp;gt;&lt;br /&gt;
openlinksys.info/downloads.php?cat_id=5&amp;amp;download_id=29&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=OpenWRT=&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/OpenWRT/RC5/ OpenWRT]&lt;br /&gt;
Märksõnaks:vabadus &amp;lt;br /&amp;gt;&lt;br /&gt;
Firmware edasijõudnud kasutajale, eeldab Linuxi kasutamise kogemust. Kasutajate seas poplulaarne. Ühe staatilise firmware asemel pakub openWRT kirjutatavat failisüsteemi package managmendiga. Vabastab tootja poolt paika pandud aplikatsioonidest/seadistustest ning lubab kõik ära seadistada enda vajaduste järgi. Arendajatele pakub OpenWRT võimaluse ehitada aplikatsioone, ilma et oleks vajadus ehitada framework aplikatsiooni ümber.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Lisavõimalused erinevalt tehase firmwarest:&lt;br /&gt;
*välise liikluse pordi edastamine arvutitele LAN-is mis on NAT-i taga&lt;br /&gt;
*UPnP dünaamiliselt konfigureeritud pordi edastamiseks&lt;br /&gt;
*static DHCP leases&lt;br /&gt;
*põhajlik ruuteri ja tulemüüri konfigureerimine&lt;br /&gt;
*QoS VoIP-i, online mängimise ja meedia striimimise jaoks&lt;br /&gt;
*seadme konfigureerimine wireless repeatresiks, access pointiks, wireless bridgeks või eelnevate kombinatsiooniks&lt;br /&gt;
*mesh võrgundus&lt;br /&gt;
*dünaamiliste DNS serverite kasutamine, sälitiamaks fikseeritud domeeni nime ISP-ga, mis ei paku staatilisi IP aadresse&lt;br /&gt;
*käsurea ligipääs SSH või Telneti kaudu&lt;br /&gt;
*USB portidega seadmete puhul printeri jagamine, SAMBA kaudu failide jagamine, USB audio jne&lt;br /&gt;
*reaalajas võrgu montoorimine&lt;br /&gt;
*liandatav AJAX-ipõhine veebi interfeiss (tänu LuCI projektile)&lt;br /&gt;
*regulaarne bugide parandus ning uuendised, isegi nendele sadmetele, mida enam ei toetata nende tootjate poolt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Versioon: White Russian RC5&lt;br /&gt;
Üleminek Linksysi originaal firmwarelt toimis ilusti. &amp;lt;br /&amp;gt;&lt;br /&gt;
Esialgu parool ning kasutajanimi puudusid, kuid suvalisele lingile vajutades, määras kasutajanimeks root ning nõudis parooli loomist. Panin hästi lihtsa parooli, hoiatas, et parool on nõrk kuid ümbervahetamist ei nõudnud. Kasutajamugavuse poolest olid põhiasjad lihtsad ning kergesti arusaadavad. Kanaliks valis 6da. &amp;lt;br /&amp;gt;&lt;br /&gt;
Üritasin teha upgrade HyperWRT firmware peale, kuid asi ebaõnnestus. Ilma ühtegi hoiatust näitamata muutus aadress 192.168.1.1 kättesaamatuks. Peale ruuterile mitmete resettide tegemist tuli avaleht paar korda küll ette veel, kuid seda umbes viieks sekundiks ning kadus seejärel jäädavalt. Ühenduse saatuseks oli limited ning väidetavalt ainus [ http://www.freewebs.com/wrt54grevival/wrt54grevial.htm.html &amp;quot;elustamise&amp;quot;] viis, mis jätab garantii kehtima, ei toiminud. (pingides jäi 192.168.1.1 kättesaamatuks).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid:&#039;&#039;&#039;&lt;br /&gt;
http://openwrt.org/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/OpenWrt&lt;br /&gt;
&lt;br /&gt;
[[File:openwrt_packages.jpg|200px|thumb|left|packages]]&lt;br /&gt;
[[File:openWRT_wire.jpg|200px|thumb|left|packages]]&lt;br /&gt;
[[File:openWwrt_firewall.jpg|200px|thumb|left|packages]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Koostaja==&lt;br /&gt;
Liisa Jõgiste&amp;lt;br/&amp;gt;&lt;br /&gt;
2010&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Vabavaraline püsivara]]&lt;br /&gt;
[[Category:Traadita side alused]]&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=V%C3%A4hemtuntud_firmware&amp;diff=10902</id>
		<title>Vähemtuntud firmware</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=V%C3%A4hemtuntud_firmware&amp;diff=10902"/>
		<updated>2010-05-28T12:57:16Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: Created page with &amp;#039;=Sissejuhatus= Kuna paljudele ei piisa tootjafirmapoolt pakutavast firmwarest, siis on sellest loodud mitmeid eri variante. Üldkasutatavate ning tuntumate firmwarede (Tomato ja …&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Sissejuhatus=&lt;br /&gt;
Kuna paljudele ei piisa tootjafirmapoolt pakutavast firmwarest, siis on sellest loodud mitmeid eri variante.&lt;br /&gt;
Üldkasutatavate ning tuntumate firmwarede (Tomato ja DD-Wert) kõrval on ka neid, mis keskenduvad spetsiifilisematele valdkondadele ning mida kasutatakse vähem. &lt;br /&gt;
&lt;br /&gt;
Testitavaks seadmeks on Linksys WRT54GL ning uurimisobjektiks sellele ruuterile sobiv firmware. &lt;br /&gt;
&lt;br /&gt;
=Freifunk (&amp;quot;open radio&amp;quot;)=&lt;br /&gt;
Märksõnaks: jagamine&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ Freifunk]: OpenWRT baasil tehtud firmware, mis peaks aitama luua [http://en.wikipedia.org/wiki/Mesh_networking &amp;quot;mesh&amp;quot;] kommmuuni interneti jagamiseks, sest &amp;quot;internetile ligipääs on moodsa ühiskonna nurgakivi. Igaüks kes ei saa internetti ühenduda, on halvas olukorras ning ei saa olla tänapäeva ühiskonna täisväärtuslik liige.&amp;quot; Frwifunk on võrreldav avatud digitaalse ruumiga nagu pargid ja tänavad.&lt;br /&gt;
Friefunk firmwarega on kerge luua uusi traadita mesh võrke. Sihtgrupiks on noored ning levinud on Saksamaal. &amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutab teiste ruuteritega paremaks ühendumiseks spetsiaalseid protokolle. Kasutaja interfeis lubab põhjalikku signaali tugevuse kontrolli.&lt;br /&gt;
Firmwared on ressursi suhtes vähenõudlikud ja jooksevad seadmetel, mille jõudlus on väike. Töötavad hästi ka piiratud energiaressurssidega keskkondades ning madala voolutarbega seadmete peal. &lt;br /&gt;
Freifunk toetab ad-hoc WLAN kommunikatsiooni ning layer 2 ja 3 routingut OLSR protokolliga ja BATMAN routing protokolli. &lt;br /&gt;
&lt;br /&gt;
Freifungile luuakse erinevaid pluginaid, näiteks Apple Bonjouri abil saavad kasutajad jagada enda muusikat lokaalsetes wifi võrkudes. Freifunk mesh võrkudes on rohkem mooduseid jagamiseks ja suhtlemiseks, kuna teenuseid ehitatakse avatud standarditele ning open-source tarkvarana.&lt;br /&gt;
Saksaakeelset materjali palju, ingliskeelset vähem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritades OpenWRT-lt upgrade teha, asi ebaõnnestus ning ruuter andis otsad. &lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Lingid:&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
http://ff-firmware.sourceforge.net/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/Freifunk&amp;lt;br /&amp;gt;&lt;br /&gt;
http://freifunk-texas.net/&lt;br /&gt;
http://socghop.appspot.com/gsoc/org/home/google/gsoc2009/ffopenwrt&lt;br /&gt;
 &lt;br /&gt;
=HyperWRT=&lt;br /&gt;
Märksõna(de)ks: lihtsus ja kiirus&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ HyperWRT]:&lt;br /&gt;
Esimene HyperWRT projekt (Avenger 2.0) sai alguse aastal 2004 Timothy Jansi poolt. Lisavõimalusi vähe, kiire ning lihtne kasutada. Baseerub Linksysi originaal firmware peal.&lt;br /&gt;
Seda valmistatud erinevatele Broadcom baasil olevatele ruuteritele (Buffalo, Linksys jt.). HyperWRT projekti eesmärgiks oli Linksysi firmwarele võimaluste lisamine (nt power boost), kuid seda nii, et jääks originaal firmwarega võimalikult sarnaseks. Tomatot loetakse HyperWRT järeltulijaks, kuna  &lt;br /&gt;
Hyperwrt edasiarendused.:&lt;br /&gt;
* Hyperwrt+Tofu. Lisatud asjad: signaalitugevuse kontroll, firewall scriptid, Telneti ja SSH daemon, staatiline CHCP lease, kliendi-, WET ja WDS moded, UPnp leht UPnp kaardistuste vaatamiseks ja kustutamiseks, 14 wifi kanalit, programeeritav SES nupp, SSHD.Arendus lõppes 2006a. Autoriks Jonathan Zarate, kes on ka Tomato loojaks.&lt;br /&gt;
*Hyperwrt+Thribor. Lisaks Tofu võimalustele veel pordi suunamine, lisafiltrid P2p bokeerimiseks, P2P spetisiiviline QoSA, printimisserver USB printerite jaoks. Arendus on nüüdseks samuti lõppenud. &lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritasin üleminekut Linksysi originaal firmware pealt, näitas et uuendamine toimus edukalt, kuid erinevusi silma ei paistnud. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid:&#039;&#039;&#039; &lt;br /&gt;
http://en.wikipedia.org/wiki/HyperWRT&lt;br /&gt;
http://wapedia.mobi/en/HyperWRT&lt;br /&gt;
&lt;br /&gt;
=TinyPEAP=&lt;br /&gt;
Märksõnaks turvalisus &amp;lt;br /&amp;gt;&lt;br /&gt;
Tavakasutajale mõeldud firmware, tegemaks oma ühendust turvalisemaks. &lt;br /&gt;
&lt;br /&gt;
Ühendab endas neli komponenti:&lt;br /&gt;
* AP, mis toetab pordipõhist 802.1X protokolli, mis EAP (Extensible authentication protocol) kasutamise tõttu lubab mitmeid eri autentimise protokolle. TinyPEAP kasutab PEAP protokolli, kuna see on turvaline ning kasutajasõbralik Windowsi ja MacOS-i kasutajate suthes.&lt;br /&gt;
*RADIUS server teostab kliendi autentimist. Kui klient proovib ühenduda, siis kõik autentimispaketid lähevad läbi AP RADIUS serverisse. Kui klient läbib autentimise, siis server saadab vastava teate AP-le. Tänu integreeritud RADIUS serverile, puudub vajadus lisaserveri jaoks &lt;br /&gt;
*Databaas kontollimaks autentimise andmete õigsust. Sageli kasutatakse Microsoft Active Directory serverit või SQL databaasi. Iga databaasi andmeväli omab informatsiooni kasutaja kohta, nagu kasutajanimi, parool hashitud kujul, hetke staatus, timeoudi informatsioon ja muud asjad, mida autentimiseks vaja on.&lt;br /&gt;
*PKI(Public key infrastructure). Autentimisel kasutatakse asümmeetrilisi võtmeid. Võti on vajalik kontrollimaks, et kliendi andmed lähevad õigesse AP-sse, mitte võõrasse. Võtmeid saab jagada läbi PKI või self-signed sertifikaatide kaudu&lt;br /&gt;
&lt;br /&gt;
Autentimine on kahe oaline:&lt;br /&gt;
Esimene osa on krüpteeritud TLS kanali loomine TinyPEAP serveriga. Autentimata klient üritab esmaslt ühenduda APg-ga, mille peale AP alustab 802.1X sessiooni ning küsib kliendi identiteeti. Klient vastab identiteediga ning AP saadab selle vastuse edasi TinyPEAP-ile. Kui see on lubatud kasutaja, tinyPEAP üritab luua TLS sessiooni, saates kliendile allkirjastatud sertifikaadi. Klient valideerib sertifikaadi ning luuakse TLS kanal.&lt;br /&gt;
Kui klient ei suuda valideerida setifikaadi autentsust, võib ta valida sessiooni lõpetamise. &lt;br /&gt;
Peale serveri valideerimist, algab teine osa TLS kanali sees. Kui TinyPEAP suudab valideerida kliendi andmed, tõmbab ta TLS kanali maha ja saadab uue paari võtmeid AP-sse. Samad võtmed tuletatakse kliendi pool, elimineerides vajadust saata võtmeid üle traadita LAN-i. Järgmiseks saadab AP broadcast võtme, mida kasutatakse edasiseks ülekandeks kasutades sessiooni võtmeid, mis tuletati TLS võtmest. WPA modes kasutatakse uute võtmetes tekemiseks TKIP meetodit. Võtmete uuesti loomine on see, mis hoiab krüptimise kaitstuna. &lt;br /&gt;
&lt;br /&gt;
Kui tinyPEAP-il puudub aktiivne TLS kanal, on mälu kasutus alla 1MB, aktiivsena natuke alla 3 MB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:tinypeap.jpg|200px|thumb|left|packages]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritasin üleminekut Linksys originaal firmware pealt, tegi umbes kolmveerand ära ja siis näitas et Failed ning jooksis kokku. Ruuterile restart tehes ärkas asi ellu ning Linksysi originaal firmware töötas ilusti edasi. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid: &lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
http://kennethhunt.com/archives/001379.html&amp;lt;br /&amp;gt;&lt;br /&gt;
openlinksys.info/downloads.php?cat_id=5&amp;amp;download_id=29&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=OpenWRT=&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/OpenWRT/RC5/ OpenWRT]&lt;br /&gt;
Märksõnaks:vabadus &amp;lt;br /&amp;gt;&lt;br /&gt;
Firmware edasijõudnud kasutajale, eeldab Linuxi kasutamise kogemust. Kasutajate seas poplulaarne. Ühe staatilise firmware asemel pakub openWRT kirjutatavat failisüsteemi package managmendiga. Vabastab tootja poolt paika pandud aplikatsioonidest/seadistustest ning lubab kõik ära seadistada enda vajaduste järgi. Arendajatele pakub OpenWRT võimaluse ehitada aplikatsioone, ilma et oleks vajadus ehitada framework aplikatsiooni ümber.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Lisavõimalused erinevalt tehase firmwarest:&lt;br /&gt;
*välise liikluse pordi edastamine arvutitele LAN-is mis on NAT-i taga&lt;br /&gt;
*UPnP dünaamiliselt konfigureeritud pordi edastamiseks&lt;br /&gt;
*static DHCP leases&lt;br /&gt;
*põhajlik ruuteri ja tulemüüri konfigureerimine&lt;br /&gt;
*QoS VoIP-i, online mängimise ja meedia striimimise jaoks&lt;br /&gt;
*seadme konfigureerimine wireless repeatresiks, access pointiks, wireless bridgeks või eelnevate kombinatsiooniks&lt;br /&gt;
*mesh võrgundus&lt;br /&gt;
*dünaamiliste DNS serverite kasutamine, sälitiamaks fikseeritud domeeni nime ISP-ga, mis ei paku staatilisi IP aadresse&lt;br /&gt;
*käsurea ligipääs SSH või Telneti kaudu&lt;br /&gt;
*USB portidega seadmete puhul printeri jagamine, SAMBA kaudu failide jagamine, USB audio jne&lt;br /&gt;
*reaalajas võrgu montoorimine&lt;br /&gt;
*liandatav AJAX-ipõhine veebi interfeiss (tänu LuCI projektile)&lt;br /&gt;
*regulaarne bugide parandus ning uuendised, isegi nendele sadmetele, mida enam ei toetata nende tootjate poolt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Versioon: White Russian RC5&lt;br /&gt;
Üleminek Linksysi originaal firmwarelt toimis ilusti. &amp;lt;br /&amp;gt;&lt;br /&gt;
Esialgu parool ning kasutajanimi puudusid, kuid suvalisele lingile vajutades, määras kasutajanimeks root ning nõudis parooli loomist. Panin hästi lihtsa parooli, hoiatas, et parool on nõrk kuid ümbervahetamist ei nõudnud. Kasutajamugavuse poolest olid põhiasjad lihtsad ning kergesti arusaadavad. Kanaliks valis 6da. &amp;lt;br /&amp;gt;&lt;br /&gt;
Üritasin teha upgrade HyperWRT firmware peale, kuid asi ebaõnnestus. Ilma ühtegi hoiatust näitamata muutus aadress 192.168.1.1 kättesaamatuks. Peale ruuterile mitmete resettide tegemist tuli avaleht paar korda küll ette veel, kuid seda umbes viieks sekundiks ning kadus seejärel jäädavalt. Ühenduse saatuseks oli limited ning väidetavalt ainus [ http://www.freewebs.com/wrt54grevival/wrt54grevial.htm.html &amp;quot;elustamise&amp;quot;] viis, mis jätab garantii kehtima, ei toiminud. (pingides jäi 192.168.1.1 kättesaamatuks).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid:&#039;&#039;&#039;&lt;br /&gt;
http://openwrt.org/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/OpenWrt&lt;br /&gt;
&lt;br /&gt;
[[File:openwrt_packages.jpg|200px|thumb|left|packages]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:openWRT_wire.jpg|200px|thumb|left|packages]]&lt;br /&gt;
[[File:openWwrt_firewall.jpg|200px|thumb|left|packages]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Vabavaraline püsivara]]&lt;br /&gt;
[[Category:Traadita side alused]]&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Category:Vabavaraline_p%C3%BCsivara/v%C3%A4hemtuntud_firmware&amp;diff=10901</id>
		<title>Category:Vabavaraline püsivara/vähemtuntud firmware</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Category:Vabavaraline_p%C3%BCsivara/v%C3%A4hemtuntud_firmware&amp;diff=10901"/>
		<updated>2010-05-28T12:47:04Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: /* OpenWRT */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Sissejuhatus=&lt;br /&gt;
Kuna paljudele ei piisa tootjafirmapoolt pakutavast firmwarest, siis on sellest loodud mitmeid eri variante.&lt;br /&gt;
Üldkasutatavate ning tuntumate firmwarede (Tomato ja DD-Wert) kõrval on ka neid, mis keskenduvad spetsiifilisematele valdkondadele ning mida kasutatakse vähem. &lt;br /&gt;
&lt;br /&gt;
Testitavaks seadmeks on Linksys WRT54GL ning uurimisobjektiks sellele ruuterile sobiv firmware. &lt;br /&gt;
&lt;br /&gt;
=Freifunk (&amp;quot;open radio&amp;quot;)=&lt;br /&gt;
Märksõnaks: jagamine&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ Freifunk]: OpenWRT baasil tehtud firmware, mis peaks aitama luua [http://en.wikipedia.org/wiki/Mesh_networking &amp;quot;mesh&amp;quot;] kommmuuni interneti jagamiseks, sest &amp;quot;internetile ligipääs on moodsa ühiskonna nurgakivi. Igaüks kes ei saa internetti ühenduda, on halvas olukorras ning ei saa olla tänapäeva ühiskonna täisväärtuslik liige.&amp;quot; Frwifunk on võrreldav avatud digitaalse ruumiga nagu pargid ja tänavad.&lt;br /&gt;
Friefunk firmwarega on kerge luua uusi traadita mesh võrke. Sihtgrupiks on noored ning levinud on Saksamaal. &amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutab teiste ruuteritega paremaks ühendumiseks spetsiaalseid protokolle. Kasutaja interfeis lubab põhjalikku signaali tugevuse kontrolli.&lt;br /&gt;
Firmwared on ressursi suhtes vähenõudlikud ja jooksevad seadmetel, mille jõudlus on väike. Töötavad hästi ka piiratud energiaressurssidega keskkondades ning madala voolutarbega seadmete peal. &lt;br /&gt;
Freifunk toetab ad-hoc WLAN kommunikatsiooni ning layer 2 ja 3 routingut OLSR protokolliga ja BATMAN routing protokolli. &lt;br /&gt;
&lt;br /&gt;
Freifungile luuakse erinevaid pluginaid, näiteks Apple Bonjouri abil saavad kasutajad jagada enda muusikat lokaalsetes wifi võrkudes. Freifunk mesh võrkudes on rohkem mooduseid jagamiseks ja suhtlemiseks, kuna teenuseid ehitatakse avatud standarditele ning open-source tarkvarana.&lt;br /&gt;
Saksaakeelset materjali palju, ingliskeelset vähem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritades OpenWRT-lt upgrade teha, asi ebaõnnestus ning ruuter andis otsad. &lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Lingid:&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
http://ff-firmware.sourceforge.net/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/Freifunk&amp;lt;br /&amp;gt;&lt;br /&gt;
http://freifunk-texas.net/&lt;br /&gt;
http://socghop.appspot.com/gsoc/org/home/google/gsoc2009/ffopenwrt&lt;br /&gt;
 &lt;br /&gt;
=HyperWRT=&lt;br /&gt;
Märksõna(de)ks: lihtsus ja kiirus&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ HyperWRT]:&lt;br /&gt;
Esimene HyperWRT projekt (Avenger 2.0) sai alguse aastal 2004 Timothy Jansi poolt. Lisavõimalusi vähe, kiire ning lihtne kasutada. Baseerub Linksysi originaal firmware peal.&lt;br /&gt;
Seda valmistatud erinevatele Broadcom baasil olevatele ruuteritele (Buffalo, Linksys jt.). HyperWRT projekti eesmärgiks oli Linksysi firmwarele võimaluste lisamine (nt power boost), kuid seda nii, et jääks originaal firmwarega võimalikult sarnaseks. Tomatot loetakse HyperWRT järeltulijaks, kuna  &lt;br /&gt;
Hyperwrt edasiarendused.:&lt;br /&gt;
* Hyperwrt+Tofu. Lisatud asjad: signaalitugevuse kontroll, firewall scriptid, Telneti ja SSH daemon, staatiline CHCP lease, kliendi-, WET ja WDS moded, UPnp leht UPnp kaardistuste vaatamiseks ja kustutamiseks, 14 wifi kanalit, programeeritav SES nupp, SSHD.Arendus lõppes 2006a. Autoriks Jonathan Zarate, kes on ka Tomato loojaks.&lt;br /&gt;
*Hyperwrt+Thribor. Lisaks Tofu võimalustele veel pordi suunamine, lisafiltrid P2p bokeerimiseks, P2P spetisiiviline QoSA, printimisserver USB printerite jaoks. Arendus on nüüdseks samuti lõppenud. &lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritasin üleminekut Linksysi originaal firmware pealt, näitas et uuendamine toimus edukalt, kuid erinevusi silma ei paistnud. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid:&#039;&#039;&#039; &lt;br /&gt;
http://en.wikipedia.org/wiki/HyperWRT&lt;br /&gt;
http://wapedia.mobi/en/HyperWRT&lt;br /&gt;
&lt;br /&gt;
=TinyPEAP=&lt;br /&gt;
Märksõnaks turvalisus &amp;lt;br /&amp;gt;&lt;br /&gt;
Tavakasutajale mõeldud firmware, tegemaks oma ühendust turvalisemaks. &lt;br /&gt;
&lt;br /&gt;
Ühendab endas neli komponenti:&lt;br /&gt;
* AP, mis toetab pordipõhist 802.1X protokolli, mis EAP (Extensible authentication protocol) kasutamise tõttu lubab mitmeid eri autentimise protokolle. TinyPEAP kasutab PEAP protokolli, kuna see on turvaline ning kasutajasõbralik Windowsi ja MacOS-i kasutajate suthes.&lt;br /&gt;
*RADIUS server teostab kliendi autentimist. Kui klient proovib ühenduda, siis kõik autentimispaketid lähevad läbi AP RADIUS serverisse. Kui klient läbib autentimise, siis server saadab vastava teate AP-le. Tänu integreeritud RADIUS serverile, puudub vajadus lisaserveri jaoks &lt;br /&gt;
*Databaas kontollimaks autentimise andmete õigsust. Sageli kasutatakse Microsoft Active Directory serverit või SQL databaasi. Iga databaasi andmeväli omab informatsiooni kasutaja kohta, nagu kasutajanimi, parool hashitud kujul, hetke staatus, timeoudi informatsioon ja muud asjad, mida autentimiseks vaja on.&lt;br /&gt;
*PKI(Public key infrastructure). Autentimisel kasutatakse asümmeetrilisi võtmeid. Võti on vajalik kontrollimaks, et kliendi andmed lähevad õigesse AP-sse, mitte võõrasse. Võtmeid saab jagada läbi PKI või self-signed sertifikaatide kaudu&lt;br /&gt;
&lt;br /&gt;
Autentimine on kahe oaline:&lt;br /&gt;
Esimene osa on krüpteeritud TLS kanali loomine TinyPEAP serveriga. Autentimata klient üritab esmaslt ühenduda APg-ga, mille peale AP alustab 802.1X sessiooni ning küsib kliendi identiteeti. Klient vastab identiteediga ning AP saadab selle vastuse edasi TinyPEAP-ile. Kui see on lubatud kasutaja, tinyPEAP üritab luua TLS sessiooni, saates kliendile allkirjastatud sertifikaadi. Klient valideerib sertifikaadi ning luuakse TLS kanal.&lt;br /&gt;
Kui klient ei suuda valideerida setifikaadi autentsust, võib ta valida sessiooni lõpetamise. &lt;br /&gt;
Peale serveri valideerimist, algab teine osa TLS kanali sees. Kui TinyPEAP suudab valideerida kliendi andmed, tõmbab ta TLS kanali maha ja saadab uue paari võtmeid AP-sse. Samad võtmed tuletatakse kliendi pool, elimineerides vajadust saata võtmeid üle traadita LAN-i. Järgmiseks saadab AP broadcast võtme, mida kasutatakse edasiseks ülekandeks kasutades sessiooni võtmeid, mis tuletati TLS võtmest. WPA modes kasutatakse uute võtmetes tekemiseks TKIP meetodit. Võtmete uuesti loomine on see, mis hoiab krüptimise kaitstuna. &lt;br /&gt;
&lt;br /&gt;
Kui tinyPEAP-il puudub aktiivne TLS kanal, on mälu kasutus alla 1MB, aktiivsena natuke alla 3 MB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:tinypeap.jpg|200px|thumb|left|packages]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritasin üleminekut Linksys originaal firmware pealt, tegi umbes kolmveerand ära ja siis näitas et Failed ning jooksis kokku. Ruuterile restart tehes ärkas asi ellu ning Linksysi originaal firmware töötas ilusti edasi. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid: &lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
http://kennethhunt.com/archives/001379.html&amp;lt;br /&amp;gt;&lt;br /&gt;
openlinksys.info/downloads.php?cat_id=5&amp;amp;download_id=29&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=OpenWRT=&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/OpenWRT/RC5/ OpenWRT]&lt;br /&gt;
Märksõnaks:vabadus &amp;lt;br /&amp;gt;&lt;br /&gt;
Firmware edasijõudnud kasutajale, eeldab Linuxi kasutamise kogemust. Kasutajate seas poplulaarne. Ühe staatilise firmware asemel pakub openWRT kirjutatavat failisüsteemi package managmendiga. Vabastab tootja poolt paika pandud aplikatsioonidest/seadistustest ning lubab kõik ära seadistada enda vajaduste järgi. Arendajatele pakub OpenWRT võimaluse ehitada aplikatsioone, ilma et oleks vajadus ehitada framework aplikatsiooni ümber.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Lisavõimalused erinevalt tehase firmwarest:&lt;br /&gt;
*välise liikluse pordi edastamine arvutitele LAN-is mis on NAT-i taga&lt;br /&gt;
*UPnP dünaamiliselt konfigureeritud pordi edastamiseks&lt;br /&gt;
*static DHCP leases&lt;br /&gt;
*põhajlik ruuteri ja tulemüüri konfigureerimine&lt;br /&gt;
*QoS VoIP-i, online mängimise ja meedia striimimise jaoks&lt;br /&gt;
*seadme konfigureerimine wireless repeatresiks, access pointiks, wireless bridgeks või eelnevate kombinatsiooniks&lt;br /&gt;
*mesh võrgundus&lt;br /&gt;
*dünaamiliste DNS serverite kasutamine, sälitiamaks fikseeritud domeeni nime ISP-ga, mis ei paku staatilisi IP aadresse&lt;br /&gt;
*käsurea ligipääs SSH või Telneti kaudu&lt;br /&gt;
*USB portidega seadmete puhul printeri jagamine, SAMBA kaudu failide jagamine, USB audio jne&lt;br /&gt;
*reaalajas võrgu montoorimine&lt;br /&gt;
*liandatav AJAX-ipõhine veebi interfeiss (tänu LuCI projektile)&lt;br /&gt;
*regulaarne bugide parandus ning uuendised, isegi nendele sadmetele, mida enam ei toetata nende tootjate poolt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Versioon: White Russian RC5&lt;br /&gt;
Üleminek Linksysi originaal firmwarelt toimis ilusti. &amp;lt;br /&amp;gt;&lt;br /&gt;
Esialgu parool ning kasutajanimi puudusid, kuid suvalisele lingile vajutades, määras kasutajanimeks root ning nõudis parooli loomist. Panin hästi lihtsa parooli, hoiatas, et parool on nõrk kuid ümbervahetamist ei nõudnud. Kasutajamugavuse poolest olid põhiasjad lihtsad ning kergesti arusaadavad. Kanaliks valis 6da. &amp;lt;br /&amp;gt;&lt;br /&gt;
Üritasin teha upgrade HyperWRT firmware peale, kuid asi ebaõnnestus. Ilma ühtegi hoiatust näitamata muutus aadress 192.168.1.1 kättesaamatuks. Peale ruuterile mitmete resettide tegemist tuli avaleht paar korda küll ette veel, kuid seda umbes viieks sekundiks ning kadus seejärel jäädavalt. Ühenduse saatuseks oli limited ning väidetavalt ainus [ http://www.freewebs.com/wrt54grevival/wrt54grevial.htm.html &amp;quot;elustamise&amp;quot;] viis, mis jätab garantii kehtima, ei toiminud. (pingides jäi 192.168.1.1 kättesaamatuks).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid:&#039;&#039;&#039;&lt;br /&gt;
http://openwrt.org/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/OpenWrt&lt;br /&gt;
&lt;br /&gt;
[[File:openwrt_packages.jpg|200px|thumb|left|packages]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:openWRT_wire.jpg|200px|thumb|left|packages]]&lt;br /&gt;
[[File:openWwrt_firewall.jpg|200px|thumb|left|packages]]&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Category:Vabavaraline_p%C3%BCsivara/v%C3%A4hemtuntud_firmware&amp;diff=10900</id>
		<title>Category:Vabavaraline püsivara/vähemtuntud firmware</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Category:Vabavaraline_p%C3%BCsivara/v%C3%A4hemtuntud_firmware&amp;diff=10900"/>
		<updated>2010-05-28T12:46:21Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: /* TinyPEAP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Sissejuhatus=&lt;br /&gt;
Kuna paljudele ei piisa tootjafirmapoolt pakutavast firmwarest, siis on sellest loodud mitmeid eri variante.&lt;br /&gt;
Üldkasutatavate ning tuntumate firmwarede (Tomato ja DD-Wert) kõrval on ka neid, mis keskenduvad spetsiifilisematele valdkondadele ning mida kasutatakse vähem. &lt;br /&gt;
&lt;br /&gt;
Testitavaks seadmeks on Linksys WRT54GL ning uurimisobjektiks sellele ruuterile sobiv firmware. &lt;br /&gt;
&lt;br /&gt;
=Freifunk (&amp;quot;open radio&amp;quot;)=&lt;br /&gt;
Märksõnaks: jagamine&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ Freifunk]: OpenWRT baasil tehtud firmware, mis peaks aitama luua [http://en.wikipedia.org/wiki/Mesh_networking &amp;quot;mesh&amp;quot;] kommmuuni interneti jagamiseks, sest &amp;quot;internetile ligipääs on moodsa ühiskonna nurgakivi. Igaüks kes ei saa internetti ühenduda, on halvas olukorras ning ei saa olla tänapäeva ühiskonna täisväärtuslik liige.&amp;quot; Frwifunk on võrreldav avatud digitaalse ruumiga nagu pargid ja tänavad.&lt;br /&gt;
Friefunk firmwarega on kerge luua uusi traadita mesh võrke. Sihtgrupiks on noored ning levinud on Saksamaal. &amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutab teiste ruuteritega paremaks ühendumiseks spetsiaalseid protokolle. Kasutaja interfeis lubab põhjalikku signaali tugevuse kontrolli.&lt;br /&gt;
Firmwared on ressursi suhtes vähenõudlikud ja jooksevad seadmetel, mille jõudlus on väike. Töötavad hästi ka piiratud energiaressurssidega keskkondades ning madala voolutarbega seadmete peal. &lt;br /&gt;
Freifunk toetab ad-hoc WLAN kommunikatsiooni ning layer 2 ja 3 routingut OLSR protokolliga ja BATMAN routing protokolli. &lt;br /&gt;
&lt;br /&gt;
Freifungile luuakse erinevaid pluginaid, näiteks Apple Bonjouri abil saavad kasutajad jagada enda muusikat lokaalsetes wifi võrkudes. Freifunk mesh võrkudes on rohkem mooduseid jagamiseks ja suhtlemiseks, kuna teenuseid ehitatakse avatud standarditele ning open-source tarkvarana.&lt;br /&gt;
Saksaakeelset materjali palju, ingliskeelset vähem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritades OpenWRT-lt upgrade teha, asi ebaõnnestus ning ruuter andis otsad. &lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Lingid:&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
http://ff-firmware.sourceforge.net/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/Freifunk&amp;lt;br /&amp;gt;&lt;br /&gt;
http://freifunk-texas.net/&lt;br /&gt;
http://socghop.appspot.com/gsoc/org/home/google/gsoc2009/ffopenwrt&lt;br /&gt;
 &lt;br /&gt;
=HyperWRT=&lt;br /&gt;
Märksõna(de)ks: lihtsus ja kiirus&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ HyperWRT]:&lt;br /&gt;
Esimene HyperWRT projekt (Avenger 2.0) sai alguse aastal 2004 Timothy Jansi poolt. Lisavõimalusi vähe, kiire ning lihtne kasutada. Baseerub Linksysi originaal firmware peal.&lt;br /&gt;
Seda valmistatud erinevatele Broadcom baasil olevatele ruuteritele (Buffalo, Linksys jt.). HyperWRT projekti eesmärgiks oli Linksysi firmwarele võimaluste lisamine (nt power boost), kuid seda nii, et jääks originaal firmwarega võimalikult sarnaseks. Tomatot loetakse HyperWRT järeltulijaks, kuna  &lt;br /&gt;
Hyperwrt edasiarendused.:&lt;br /&gt;
* Hyperwrt+Tofu. Lisatud asjad: signaalitugevuse kontroll, firewall scriptid, Telneti ja SSH daemon, staatiline CHCP lease, kliendi-, WET ja WDS moded, UPnp leht UPnp kaardistuste vaatamiseks ja kustutamiseks, 14 wifi kanalit, programeeritav SES nupp, SSHD.Arendus lõppes 2006a. Autoriks Jonathan Zarate, kes on ka Tomato loojaks.&lt;br /&gt;
*Hyperwrt+Thribor. Lisaks Tofu võimalustele veel pordi suunamine, lisafiltrid P2p bokeerimiseks, P2P spetisiiviline QoSA, printimisserver USB printerite jaoks. Arendus on nüüdseks samuti lõppenud. &lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritasin üleminekut Linksysi originaal firmware pealt, näitas et uuendamine toimus edukalt, kuid erinevusi silma ei paistnud. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid:&#039;&#039;&#039; &lt;br /&gt;
http://en.wikipedia.org/wiki/HyperWRT&lt;br /&gt;
http://wapedia.mobi/en/HyperWRT&lt;br /&gt;
&lt;br /&gt;
=TinyPEAP=&lt;br /&gt;
Märksõnaks turvalisus &amp;lt;br /&amp;gt;&lt;br /&gt;
Tavakasutajale mõeldud firmware, tegemaks oma ühendust turvalisemaks. &lt;br /&gt;
&lt;br /&gt;
Ühendab endas neli komponenti:&lt;br /&gt;
* AP, mis toetab pordipõhist 802.1X protokolli, mis EAP (Extensible authentication protocol) kasutamise tõttu lubab mitmeid eri autentimise protokolle. TinyPEAP kasutab PEAP protokolli, kuna see on turvaline ning kasutajasõbralik Windowsi ja MacOS-i kasutajate suthes.&lt;br /&gt;
*RADIUS server teostab kliendi autentimist. Kui klient proovib ühenduda, siis kõik autentimispaketid lähevad läbi AP RADIUS serverisse. Kui klient läbib autentimise, siis server saadab vastava teate AP-le. Tänu integreeritud RADIUS serverile, puudub vajadus lisaserveri jaoks &lt;br /&gt;
*Databaas kontollimaks autentimise andmete õigsust. Sageli kasutatakse Microsoft Active Directory serverit või SQL databaasi. Iga databaasi andmeväli omab informatsiooni kasutaja kohta, nagu kasutajanimi, parool hashitud kujul, hetke staatus, timeoudi informatsioon ja muud asjad, mida autentimiseks vaja on.&lt;br /&gt;
*PKI(Public key infrastructure). Autentimisel kasutatakse asümmeetrilisi võtmeid. Võti on vajalik kontrollimaks, et kliendi andmed lähevad õigesse AP-sse, mitte võõrasse. Võtmeid saab jagada läbi PKI või self-signed sertifikaatide kaudu&lt;br /&gt;
&lt;br /&gt;
Autentimine on kahe oaline:&lt;br /&gt;
Esimene osa on krüpteeritud TLS kanali loomine TinyPEAP serveriga. Autentimata klient üritab esmaslt ühenduda APg-ga, mille peale AP alustab 802.1X sessiooni ning küsib kliendi identiteeti. Klient vastab identiteediga ning AP saadab selle vastuse edasi TinyPEAP-ile. Kui see on lubatud kasutaja, tinyPEAP üritab luua TLS sessiooni, saates kliendile allkirjastatud sertifikaadi. Klient valideerib sertifikaadi ning luuakse TLS kanal.&lt;br /&gt;
Kui klient ei suuda valideerida setifikaadi autentsust, võib ta valida sessiooni lõpetamise. &lt;br /&gt;
Peale serveri valideerimist, algab teine osa TLS kanali sees. Kui TinyPEAP suudab valideerida kliendi andmed, tõmbab ta TLS kanali maha ja saadab uue paari võtmeid AP-sse. Samad võtmed tuletatakse kliendi pool, elimineerides vajadust saata võtmeid üle traadita LAN-i. Järgmiseks saadab AP broadcast võtme, mida kasutatakse edasiseks ülekandeks kasutades sessiooni võtmeid, mis tuletati TLS võtmest. WPA modes kasutatakse uute võtmetes tekemiseks TKIP meetodit. Võtmete uuesti loomine on see, mis hoiab krüptimise kaitstuna. &lt;br /&gt;
&lt;br /&gt;
Kui tinyPEAP-il puudub aktiivne TLS kanal, on mälu kasutus alla 1MB, aktiivsena natuke alla 3 MB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:tinypeap.jpg|200px|thumb|left|packages]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritasin üleminekut Linksys originaal firmware pealt, tegi umbes kolmveerand ära ja siis näitas et Failed ning jooksis kokku. Ruuterile restart tehes ärkas asi ellu ning Linksysi originaal firmware töötas ilusti edasi. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid: &lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
http://kennethhunt.com/archives/001379.html&amp;lt;br /&amp;gt;&lt;br /&gt;
openlinksys.info/downloads.php?cat_id=5&amp;amp;download_id=29&lt;br /&gt;
&lt;br /&gt;
=OpenWRT=&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/OpenWRT/RC5/ OpenWRT]&lt;br /&gt;
Märksõnaks:vabadus &amp;lt;br /&amp;gt;&lt;br /&gt;
Firmware edasijõudnud kasutajale, eeldab Linuxi kasutamise kogemust. Kasutajate seas poplulaarne. Ühe staatilise firmware asemel pakub openWRT kirjutatavat failisüsteemi package managmendiga. Vabastab tootja poolt paika pandud aplikatsioonidest/seadistustest ning lubab kõik ära seadistada enda vajaduste järgi. Arendajatele pakub OpenWRT võimaluse ehitada aplikatsioone, ilma et oleks vajadus ehitada framework aplikatsiooni ümber.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Lisavõimalused erinevalt tehase firmwarest:&lt;br /&gt;
*välise liikluse pordi edastamine arvutitele LAN-is mis on NAT-i taga&lt;br /&gt;
*UPnP dünaamiliselt konfigureeritud pordi edastamiseks&lt;br /&gt;
*static DHCP leases&lt;br /&gt;
*põhajlik ruuteri ja tulemüüri konfigureerimine&lt;br /&gt;
*QoS VoIP-i, online mängimise ja meedia striimimise jaoks&lt;br /&gt;
*seadme konfigureerimine wireless repeatresiks, access pointiks, wireless bridgeks või eelnevate kombinatsiooniks&lt;br /&gt;
*mesh võrgundus&lt;br /&gt;
*dünaamiliste DNS serverite kasutamine, sälitiamaks fikseeritud domeeni nime ISP-ga, mis ei paku staatilisi IP aadresse&lt;br /&gt;
*käsurea ligipääs SSH või Telneti kaudu&lt;br /&gt;
*USB portidega seadmete puhul printeri jagamine, SAMBA kaudu failide jagamine, USB audio jne&lt;br /&gt;
*reaalajas võrgu montoorimine&lt;br /&gt;
*liandatav AJAX-ipõhine veebi interfeiss (tänu LuCI projektile)&lt;br /&gt;
*regulaarne bugide parandus ning uuendised, isegi nendele sadmetele, mida enam ei toetata nende tootjate poolt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Versioon: White Russian RC5&lt;br /&gt;
Üleminek Linksysi originaal firmwarelt toimis ilusti. &amp;lt;br /&amp;gt;&lt;br /&gt;
Esialgu parool ning kasutajanimi puudusid, kuid suvalisele lingile vajutades, määras kasutajanimeks root ning nõudis parooli loomist. Panin hästi lihtsa parooli, hoiatas, et parool on nõrk kuid ümbervahetamist ei nõudnud. Kasutajamugavuse poolest olid põhiasjad lihtsad ning kergesti arusaadavad. Kanaliks valis 6da. &amp;lt;br /&amp;gt;&lt;br /&gt;
Üritasin teha upgrade HyperWRT firmware peale, kuid asi ebaõnnestus. Ilma ühtegi hoiatust näitamata muutus aadress 192.168.1.1 kättesaamatuks. Peale ruuterile mitmete resettide tegemist tuli avaleht paar korda küll ette veel, kuid seda umbes viieks sekundiks ning kadus seejärel jäädavalt. Ühenduse saatuseks oli limited ning väidetavalt ainus [ http://www.freewebs.com/wrt54grevival/wrt54grevial.htm.html &amp;quot;elustamise&amp;quot;] viis, mis jätab garantii kehtima, ei toiminud. (pingides jäi 192.168.1.1 kättesaamatuks).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid:&#039;&#039;&#039;&lt;br /&gt;
http://openwrt.org/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/OpenWrt&lt;br /&gt;
&lt;br /&gt;
[[File:openwrt_packages.jpg|200px|thumb|left|packages]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:openWRT_wire.jpg|200px|thumb|left|packages]]&lt;br /&gt;
[[File:openWwrt_firewall.jpg|200px|thumb|left|packages]]&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Category:Vabavaraline_p%C3%BCsivara/v%C3%A4hemtuntud_firmware&amp;diff=10899</id>
		<title>Category:Vabavaraline püsivara/vähemtuntud firmware</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Category:Vabavaraline_p%C3%BCsivara/v%C3%A4hemtuntud_firmware&amp;diff=10899"/>
		<updated>2010-05-28T12:41:18Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: /* TinyPEAP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Sissejuhatus=&lt;br /&gt;
Kuna paljudele ei piisa tootjafirmapoolt pakutavast firmwarest, siis on sellest loodud mitmeid eri variante.&lt;br /&gt;
Üldkasutatavate ning tuntumate firmwarede (Tomato ja DD-Wert) kõrval on ka neid, mis keskenduvad spetsiifilisematele valdkondadele ning mida kasutatakse vähem. &lt;br /&gt;
&lt;br /&gt;
Testitavaks seadmeks on Linksys WRT54GL ning uurimisobjektiks sellele ruuterile sobiv firmware. &lt;br /&gt;
&lt;br /&gt;
=Freifunk (&amp;quot;open radio&amp;quot;)=&lt;br /&gt;
Märksõnaks: jagamine&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ Freifunk]: OpenWRT baasil tehtud firmware, mis peaks aitama luua [http://en.wikipedia.org/wiki/Mesh_networking &amp;quot;mesh&amp;quot;] kommmuuni interneti jagamiseks, sest &amp;quot;internetile ligipääs on moodsa ühiskonna nurgakivi. Igaüks kes ei saa internetti ühenduda, on halvas olukorras ning ei saa olla tänapäeva ühiskonna täisväärtuslik liige.&amp;quot; Frwifunk on võrreldav avatud digitaalse ruumiga nagu pargid ja tänavad.&lt;br /&gt;
Friefunk firmwarega on kerge luua uusi traadita mesh võrke. Sihtgrupiks on noored ning levinud on Saksamaal. &amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutab teiste ruuteritega paremaks ühendumiseks spetsiaalseid protokolle. Kasutaja interfeis lubab põhjalikku signaali tugevuse kontrolli.&lt;br /&gt;
Firmwared on ressursi suhtes vähenõudlikud ja jooksevad seadmetel, mille jõudlus on väike. Töötavad hästi ka piiratud energiaressurssidega keskkondades ning madala voolutarbega seadmete peal. &lt;br /&gt;
Freifunk toetab ad-hoc WLAN kommunikatsiooni ning layer 2 ja 3 routingut OLSR protokolliga ja BATMAN routing protokolli. &lt;br /&gt;
&lt;br /&gt;
Freifungile luuakse erinevaid pluginaid, näiteks Apple Bonjouri abil saavad kasutajad jagada enda muusikat lokaalsetes wifi võrkudes. Freifunk mesh võrkudes on rohkem mooduseid jagamiseks ja suhtlemiseks, kuna teenuseid ehitatakse avatud standarditele ning open-source tarkvarana.&lt;br /&gt;
Saksaakeelset materjali palju, ingliskeelset vähem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritades OpenWRT-lt upgrade teha, asi ebaõnnestus ning ruuter andis otsad. &lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Lingid:&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
http://ff-firmware.sourceforge.net/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/Freifunk&amp;lt;br /&amp;gt;&lt;br /&gt;
http://freifunk-texas.net/&lt;br /&gt;
http://socghop.appspot.com/gsoc/org/home/google/gsoc2009/ffopenwrt&lt;br /&gt;
 &lt;br /&gt;
=HyperWRT=&lt;br /&gt;
Märksõna(de)ks: lihtsus ja kiirus&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ HyperWRT]:&lt;br /&gt;
Esimene HyperWRT projekt (Avenger 2.0) sai alguse aastal 2004 Timothy Jansi poolt. Lisavõimalusi vähe, kiire ning lihtne kasutada. Baseerub Linksysi originaal firmware peal.&lt;br /&gt;
Seda valmistatud erinevatele Broadcom baasil olevatele ruuteritele (Buffalo, Linksys jt.). HyperWRT projekti eesmärgiks oli Linksysi firmwarele võimaluste lisamine (nt power boost), kuid seda nii, et jääks originaal firmwarega võimalikult sarnaseks. Tomatot loetakse HyperWRT järeltulijaks, kuna  &lt;br /&gt;
Hyperwrt edasiarendused.:&lt;br /&gt;
* Hyperwrt+Tofu. Lisatud asjad: signaalitugevuse kontroll, firewall scriptid, Telneti ja SSH daemon, staatiline CHCP lease, kliendi-, WET ja WDS moded, UPnp leht UPnp kaardistuste vaatamiseks ja kustutamiseks, 14 wifi kanalit, programeeritav SES nupp, SSHD.Arendus lõppes 2006a. Autoriks Jonathan Zarate, kes on ka Tomato loojaks.&lt;br /&gt;
*Hyperwrt+Thribor. Lisaks Tofu võimalustele veel pordi suunamine, lisafiltrid P2p bokeerimiseks, P2P spetisiiviline QoSA, printimisserver USB printerite jaoks. Arendus on nüüdseks samuti lõppenud. &lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritasin üleminekut Linksysi originaal firmware pealt, näitas et uuendamine toimus edukalt, kuid erinevusi silma ei paistnud. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid:&#039;&#039;&#039; &lt;br /&gt;
http://en.wikipedia.org/wiki/HyperWRT&lt;br /&gt;
http://wapedia.mobi/en/HyperWRT&lt;br /&gt;
&lt;br /&gt;
=TinyPEAP=&lt;br /&gt;
Märksõnaks turvalisus &amp;lt;br /&amp;gt;&lt;br /&gt;
Tavakasutajale mõeldud firmware, tegemaks oma ühendust turvalisemaks. &lt;br /&gt;
&lt;br /&gt;
Ühendab endas neli komponenti:&lt;br /&gt;
* AP, mis toetab pordipõhist 802.1X protokolli, mis EAP (Extensible authentication protocol) kasutamise tõttu lubab mitmeid eri autentimise protokolle. TinyPEAP kasutab PEAP protokolli, kuna see on turvaline ning kasutajasõbralik Windowsi ja MacOS-i kasutajate suthes.&lt;br /&gt;
*RADIUS server teostab kliendi autentimist. Kui klient proovib ühenduda, siis kõik autentimispaketid lähevad läbi AP RADIUS serverisse. Kui klient läbib autentimise, siis server saadab vastava teate AP-le. Tänu integreeritud RADIUS serverile, puudub vajadus lisaserveri jaoks &lt;br /&gt;
*Databaas kontollimaks autentimise andmete õigsust. Sageli kasutatakse Microsoft Active Directory serverit või SQL databaasi. Iga databaasi andmeväli omab informatsiooni kasutaja kohta, nagu kasutajanimi, parool hashitud kujul, hetke staatus, timeoudi informatsioon ja muud asjad, mida autentimiseks vaja on.&lt;br /&gt;
*PKI(Public key infrastructure). Autentimisel kasutatakse asümmeetrilisi võtmeid. Võti on vajalik kontrollimaks, et kliendi andmed lähevad õigesse AP-sse, mitte võõrasse. Võtmeid saab jagada läbi PKI või self-signed sertifikaatide kaudu&lt;br /&gt;
&lt;br /&gt;
Autentimine on kahe oaline:&lt;br /&gt;
Esimene osa on krüpteeritud TLS kanali loomine TinyPEAP serveriga. Autentimata klient üritab esmaslt ühenduda APg-ga, mille peale AP alustab 802.1X sessiooni ning küsib kliendi identiteeti. Klient vastab identiteediga ning AP saadab selle vastuse edasi TinyPEAP-ile. Kui see on lubatud kasutaja, tinyPEAP üritab luua TLS sessiooni, saates kliendile allkirjastatud sertifikaadi. Klient valideerib sertifikaadi ning luuakse TLS kanal.&lt;br /&gt;
Kui klient ei suuda valideerida setifikaadi autentsust, võib ta valida sessiooni lõpetamise. &lt;br /&gt;
Peale serveri valideerimist, algab teine osa TLS kanali sees. Kui TinyPEAP suudab valideerida kliendi andmed, tõmbab ta TLS kanali maha ja saadab uue paari võtmeid AP-sse. Samad võtmed tuletatakse kliendi pool, elimineerides vajadust saata võtmeid üle traadita LAN-i. Järgmiseks saadab AP broadcast võtme, mida kasutatakse edasiseks ülekandeks kasutades sessiooni võtmeid, mis tuletati TLS võtmest. WPA modes kasutatakse uute võtmetes tekemiseks TKIP meetodit.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:tinypeap.jpg|200px|thumb|left|packages]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritasin üleminekut Linksys originaal firmware pealt, tegi umbes kolmveerand ära ja siis näitas et Failed ning jooksis kokku. Ruuterile restart tehes ärkas asi ellu ning Linksysi originaal firmware töötas ilusti edasi. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid: &lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
http://kennethhunt.com/archives/001379.html&amp;lt;br /&amp;gt;&lt;br /&gt;
openlinksys.info/downloads.php?cat_id=5&amp;amp;download_id=29&lt;br /&gt;
&lt;br /&gt;
=OpenWRT=&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/OpenWRT/RC5/ OpenWRT]&lt;br /&gt;
Märksõnaks:vabadus &amp;lt;br /&amp;gt;&lt;br /&gt;
Firmware edasijõudnud kasutajale, eeldab Linuxi kasutamise kogemust. Kasutajate seas poplulaarne. Ühe staatilise firmware asemel pakub openWRT kirjutatavat failisüsteemi package managmendiga. Vabastab tootja poolt paika pandud aplikatsioonidest/seadistustest ning lubab kõik ära seadistada enda vajaduste järgi. Arendajatele pakub OpenWRT võimaluse ehitada aplikatsioone, ilma et oleks vajadus ehitada framework aplikatsiooni ümber.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Lisavõimalused erinevalt tehase firmwarest:&lt;br /&gt;
*välise liikluse pordi edastamine arvutitele LAN-is mis on NAT-i taga&lt;br /&gt;
*UPnP dünaamiliselt konfigureeritud pordi edastamiseks&lt;br /&gt;
*static DHCP leases&lt;br /&gt;
*põhajlik ruuteri ja tulemüüri konfigureerimine&lt;br /&gt;
*QoS VoIP-i, online mängimise ja meedia striimimise jaoks&lt;br /&gt;
*seadme konfigureerimine wireless repeatresiks, access pointiks, wireless bridgeks või eelnevate kombinatsiooniks&lt;br /&gt;
*mesh võrgundus&lt;br /&gt;
*dünaamiliste DNS serverite kasutamine, sälitiamaks fikseeritud domeeni nime ISP-ga, mis ei paku staatilisi IP aadresse&lt;br /&gt;
*käsurea ligipääs SSH või Telneti kaudu&lt;br /&gt;
*USB portidega seadmete puhul printeri jagamine, SAMBA kaudu failide jagamine, USB audio jne&lt;br /&gt;
*reaalajas võrgu montoorimine&lt;br /&gt;
*liandatav AJAX-ipõhine veebi interfeiss (tänu LuCI projektile)&lt;br /&gt;
*regulaarne bugide parandus ning uuendised, isegi nendele sadmetele, mida enam ei toetata nende tootjate poolt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Versioon: White Russian RC5&lt;br /&gt;
Üleminek Linksysi originaal firmwarelt toimis ilusti. &amp;lt;br /&amp;gt;&lt;br /&gt;
Esialgu parool ning kasutajanimi puudusid, kuid suvalisele lingile vajutades, määras kasutajanimeks root ning nõudis parooli loomist. Panin hästi lihtsa parooli, hoiatas, et parool on nõrk kuid ümbervahetamist ei nõudnud. Kasutajamugavuse poolest olid põhiasjad lihtsad ning kergesti arusaadavad. Kanaliks valis 6da. &amp;lt;br /&amp;gt;&lt;br /&gt;
Üritasin teha upgrade HyperWRT firmware peale, kuid asi ebaõnnestus. Ilma ühtegi hoiatust näitamata muutus aadress 192.168.1.1 kättesaamatuks. Peale ruuterile mitmete resettide tegemist tuli avaleht paar korda küll ette veel, kuid seda umbes viieks sekundiks ning kadus seejärel jäädavalt. Ühenduse saatuseks oli limited ning väidetavalt ainus [ http://www.freewebs.com/wrt54grevival/wrt54grevial.htm.html &amp;quot;elustamise&amp;quot;] viis, mis jätab garantii kehtima, ei toiminud. (pingides jäi 192.168.1.1 kättesaamatuks).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid:&#039;&#039;&#039;&lt;br /&gt;
http://openwrt.org/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/OpenWrt&lt;br /&gt;
&lt;br /&gt;
[[File:openwrt_packages.jpg|200px|thumb|left|packages]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:openWRT_wire.jpg|200px|thumb|left|packages]]&lt;br /&gt;
[[File:openWwrt_firewall.jpg|200px|thumb|left|packages]]&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Category:Vabavaraline_p%C3%BCsivara/v%C3%A4hemtuntud_firmware&amp;diff=10898</id>
		<title>Category:Vabavaraline püsivara/vähemtuntud firmware</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Category:Vabavaraline_p%C3%BCsivara/v%C3%A4hemtuntud_firmware&amp;diff=10898"/>
		<updated>2010-05-28T12:21:32Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: /* TinyPEAP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Sissejuhatus=&lt;br /&gt;
Kuna paljudele ei piisa tootjafirmapoolt pakutavast firmwarest, siis on sellest loodud mitmeid eri variante.&lt;br /&gt;
Üldkasutatavate ning tuntumate firmwarede (Tomato ja DD-Wert) kõrval on ka neid, mis keskenduvad spetsiifilisematele valdkondadele ning mida kasutatakse vähem. &lt;br /&gt;
&lt;br /&gt;
Testitavaks seadmeks on Linksys WRT54GL ning uurimisobjektiks sellele ruuterile sobiv firmware. &lt;br /&gt;
&lt;br /&gt;
=Freifunk (&amp;quot;open radio&amp;quot;)=&lt;br /&gt;
Märksõnaks: jagamine&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ Freifunk]: OpenWRT baasil tehtud firmware, mis peaks aitama luua [http://en.wikipedia.org/wiki/Mesh_networking &amp;quot;mesh&amp;quot;] kommmuuni interneti jagamiseks, sest &amp;quot;internetile ligipääs on moodsa ühiskonna nurgakivi. Igaüks kes ei saa internetti ühenduda, on halvas olukorras ning ei saa olla tänapäeva ühiskonna täisväärtuslik liige.&amp;quot; Frwifunk on võrreldav avatud digitaalse ruumiga nagu pargid ja tänavad.&lt;br /&gt;
Friefunk firmwarega on kerge luua uusi traadita mesh võrke. Sihtgrupiks on noored ning levinud on Saksamaal. &amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutab teiste ruuteritega paremaks ühendumiseks spetsiaalseid protokolle. Kasutaja interfeis lubab põhjalikku signaali tugevuse kontrolli.&lt;br /&gt;
Firmwared on ressursi suhtes vähenõudlikud ja jooksevad seadmetel, mille jõudlus on väike. Töötavad hästi ka piiratud energiaressurssidega keskkondades ning madala voolutarbega seadmete peal. &lt;br /&gt;
Freifunk toetab ad-hoc WLAN kommunikatsiooni ning layer 2 ja 3 routingut OLSR protokolliga ja BATMAN routing protokolli. &lt;br /&gt;
&lt;br /&gt;
Freifungile luuakse erinevaid pluginaid, näiteks Apple Bonjouri abil saavad kasutajad jagada enda muusikat lokaalsetes wifi võrkudes. Freifunk mesh võrkudes on rohkem mooduseid jagamiseks ja suhtlemiseks, kuna teenuseid ehitatakse avatud standarditele ning open-source tarkvarana.&lt;br /&gt;
Saksaakeelset materjali palju, ingliskeelset vähem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritades OpenWRT-lt upgrade teha, asi ebaõnnestus ning ruuter andis otsad. &lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Lingid:&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
http://ff-firmware.sourceforge.net/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/Freifunk&amp;lt;br /&amp;gt;&lt;br /&gt;
http://freifunk-texas.net/&lt;br /&gt;
http://socghop.appspot.com/gsoc/org/home/google/gsoc2009/ffopenwrt&lt;br /&gt;
 &lt;br /&gt;
=HyperWRT=&lt;br /&gt;
Märksõna(de)ks: lihtsus ja kiirus&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ HyperWRT]:&lt;br /&gt;
Esimene HyperWRT projekt (Avenger 2.0) sai alguse aastal 2004 Timothy Jansi poolt. Lisavõimalusi vähe, kiire ning lihtne kasutada. Baseerub Linksysi originaal firmware peal.&lt;br /&gt;
Seda valmistatud erinevatele Broadcom baasil olevatele ruuteritele (Buffalo, Linksys jt.). HyperWRT projekti eesmärgiks oli Linksysi firmwarele võimaluste lisamine (nt power boost), kuid seda nii, et jääks originaal firmwarega võimalikult sarnaseks. Tomatot loetakse HyperWRT järeltulijaks, kuna  &lt;br /&gt;
Hyperwrt edasiarendused.:&lt;br /&gt;
* Hyperwrt+Tofu. Lisatud asjad: signaalitugevuse kontroll, firewall scriptid, Telneti ja SSH daemon, staatiline CHCP lease, kliendi-, WET ja WDS moded, UPnp leht UPnp kaardistuste vaatamiseks ja kustutamiseks, 14 wifi kanalit, programeeritav SES nupp, SSHD.Arendus lõppes 2006a. Autoriks Jonathan Zarate, kes on ka Tomato loojaks.&lt;br /&gt;
*Hyperwrt+Thribor. Lisaks Tofu võimalustele veel pordi suunamine, lisafiltrid P2p bokeerimiseks, P2P spetisiiviline QoSA, printimisserver USB printerite jaoks. Arendus on nüüdseks samuti lõppenud. &lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritasin üleminekut Linksysi originaal firmware pealt, näitas et uuendamine toimus edukalt, kuid erinevusi silma ei paistnud. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid:&#039;&#039;&#039; &lt;br /&gt;
http://en.wikipedia.org/wiki/HyperWRT&lt;br /&gt;
http://wapedia.mobi/en/HyperWRT&lt;br /&gt;
&lt;br /&gt;
=TinyPEAP=&lt;br /&gt;
Märksõnaks turvalisus &amp;lt;br /&amp;gt;&lt;br /&gt;
Tavakasutajale mõeldud firmware, tegemaks oma ühendust turvalisemaks. &lt;br /&gt;
&lt;br /&gt;
Ühendab endas neli komponenti:&lt;br /&gt;
* AP, mis toetab pordipõhist 802.1X protokolli, mis EAP (Extensible authentication protocol) kasutamise tõttu lubab mitmeid eri autentimise protokolle. TinyPEAP kasutab PEAP protokolli, kuna see on turvaline ning kasutajasõbralik Windowsi ja MacOS-i kasutajate suthes.&lt;br /&gt;
*RADIUS server teostab kliendi autentimist. Kui klient proovib ühenduda, siis kõik autentimispaketid lähevad läbi AP RADIUS serverisse. Kui klient läbib autentimise, siis server saadab vastava teate AP-le. Tänu integreeritud RADIUS serverile, puudub vajadus lisaserveri jaoks &lt;br /&gt;
*Databaas kontollimaks autentimise andmete õigsust. Sageli kasutatakse Microsoft Active Directory serverit või SQL databaasi. Iga databaasi andmeväli omab informatsiooni kasutaja kohta, nagu kasutajanimi, parool hashitud kujul, hetke staatus, timeoudi informatsioon ja muud asjad, mida autentimiseks vaja on.&lt;br /&gt;
*PKI(Public key infrastructure). Autentimisel kasutatakse asümmeetrilisi võtmeid. Võti on vajalik kontrollimaks, et kliendi andmed lähevad õigesse AP-sse, mitte võõrasse. Võtmeid saab jagada läbi PKI või self-signed sertifikaatide kaudu&lt;br /&gt;
&lt;br /&gt;
[[File:tinypeap.jpg|200px|thumb|left|packages]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritasin üleminekut Linksys originaal firmware pealt, tegi umbes kolmveerand ära ja siis näitas et Failed ning jooksis kokku. Ruuterile restart tehes ärkas asi ellu ning Linksysi originaal firmware töötas ilusti edasi. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid: &lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
http://kennethhunt.com/archives/001379.html&amp;lt;br /&amp;gt;&lt;br /&gt;
openlinksys.info/downloads.php?cat_id=5&amp;amp;download_id=29&lt;br /&gt;
&lt;br /&gt;
=OpenWRT=&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/OpenWRT/RC5/ OpenWRT]&lt;br /&gt;
Märksõnaks:vabadus &amp;lt;br /&amp;gt;&lt;br /&gt;
Firmware edasijõudnud kasutajale, eeldab Linuxi kasutamise kogemust. Kasutajate seas poplulaarne. Ühe staatilise firmware asemel pakub openWRT kirjutatavat failisüsteemi package managmendiga. Vabastab tootja poolt paika pandud aplikatsioonidest/seadistustest ning lubab kõik ära seadistada enda vajaduste järgi. Arendajatele pakub OpenWRT võimaluse ehitada aplikatsioone, ilma et oleks vajadus ehitada framework aplikatsiooni ümber.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Lisavõimalused erinevalt tehase firmwarest:&lt;br /&gt;
*välise liikluse pordi edastamine arvutitele LAN-is mis on NAT-i taga&lt;br /&gt;
*UPnP dünaamiliselt konfigureeritud pordi edastamiseks&lt;br /&gt;
*static DHCP leases&lt;br /&gt;
*põhajlik ruuteri ja tulemüüri konfigureerimine&lt;br /&gt;
*QoS VoIP-i, online mängimise ja meedia striimimise jaoks&lt;br /&gt;
*seadme konfigureerimine wireless repeatresiks, access pointiks, wireless bridgeks või eelnevate kombinatsiooniks&lt;br /&gt;
*mesh võrgundus&lt;br /&gt;
*dünaamiliste DNS serverite kasutamine, sälitiamaks fikseeritud domeeni nime ISP-ga, mis ei paku staatilisi IP aadresse&lt;br /&gt;
*käsurea ligipääs SSH või Telneti kaudu&lt;br /&gt;
*USB portidega seadmete puhul printeri jagamine, SAMBA kaudu failide jagamine, USB audio jne&lt;br /&gt;
*reaalajas võrgu montoorimine&lt;br /&gt;
*liandatav AJAX-ipõhine veebi interfeiss (tänu LuCI projektile)&lt;br /&gt;
*regulaarne bugide parandus ning uuendised, isegi nendele sadmetele, mida enam ei toetata nende tootjate poolt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Versioon: White Russian RC5&lt;br /&gt;
Üleminek Linksysi originaal firmwarelt toimis ilusti. &amp;lt;br /&amp;gt;&lt;br /&gt;
Esialgu parool ning kasutajanimi puudusid, kuid suvalisele lingile vajutades, määras kasutajanimeks root ning nõudis parooli loomist. Panin hästi lihtsa parooli, hoiatas, et parool on nõrk kuid ümbervahetamist ei nõudnud. Kasutajamugavuse poolest olid põhiasjad lihtsad ning kergesti arusaadavad. Kanaliks valis 6da. &amp;lt;br /&amp;gt;&lt;br /&gt;
Üritasin teha upgrade HyperWRT firmware peale, kuid asi ebaõnnestus. Ilma ühtegi hoiatust näitamata muutus aadress 192.168.1.1 kättesaamatuks. Peale ruuterile mitmete resettide tegemist tuli avaleht paar korda küll ette veel, kuid seda umbes viieks sekundiks ning kadus seejärel jäädavalt. Ühenduse saatuseks oli limited ning väidetavalt ainus [ http://www.freewebs.com/wrt54grevival/wrt54grevial.htm.html &amp;quot;elustamise&amp;quot;] viis, mis jätab garantii kehtima, ei toiminud. (pingides jäi 192.168.1.1 kättesaamatuks).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid:&#039;&#039;&#039;&lt;br /&gt;
http://openwrt.org/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/OpenWrt&lt;br /&gt;
&lt;br /&gt;
[[File:openwrt_packages.jpg|200px|thumb|left|packages]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:openWRT_wire.jpg|200px|thumb|left|packages]]&lt;br /&gt;
[[File:openWwrt_firewall.jpg|200px|thumb|left|packages]]&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Category:Vabavaraline_p%C3%BCsivara/v%C3%A4hemtuntud_firmware&amp;diff=10897</id>
		<title>Category:Vabavaraline püsivara/vähemtuntud firmware</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Category:Vabavaraline_p%C3%BCsivara/v%C3%A4hemtuntud_firmware&amp;diff=10897"/>
		<updated>2010-05-28T12:21:06Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: /* TinyPEAP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Sissejuhatus=&lt;br /&gt;
Kuna paljudele ei piisa tootjafirmapoolt pakutavast firmwarest, siis on sellest loodud mitmeid eri variante.&lt;br /&gt;
Üldkasutatavate ning tuntumate firmwarede (Tomato ja DD-Wert) kõrval on ka neid, mis keskenduvad spetsiifilisematele valdkondadele ning mida kasutatakse vähem. &lt;br /&gt;
&lt;br /&gt;
Testitavaks seadmeks on Linksys WRT54GL ning uurimisobjektiks sellele ruuterile sobiv firmware. &lt;br /&gt;
&lt;br /&gt;
=Freifunk (&amp;quot;open radio&amp;quot;)=&lt;br /&gt;
Märksõnaks: jagamine&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ Freifunk]: OpenWRT baasil tehtud firmware, mis peaks aitama luua [http://en.wikipedia.org/wiki/Mesh_networking &amp;quot;mesh&amp;quot;] kommmuuni interneti jagamiseks, sest &amp;quot;internetile ligipääs on moodsa ühiskonna nurgakivi. Igaüks kes ei saa internetti ühenduda, on halvas olukorras ning ei saa olla tänapäeva ühiskonna täisväärtuslik liige.&amp;quot; Frwifunk on võrreldav avatud digitaalse ruumiga nagu pargid ja tänavad.&lt;br /&gt;
Friefunk firmwarega on kerge luua uusi traadita mesh võrke. Sihtgrupiks on noored ning levinud on Saksamaal. &amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutab teiste ruuteritega paremaks ühendumiseks spetsiaalseid protokolle. Kasutaja interfeis lubab põhjalikku signaali tugevuse kontrolli.&lt;br /&gt;
Firmwared on ressursi suhtes vähenõudlikud ja jooksevad seadmetel, mille jõudlus on väike. Töötavad hästi ka piiratud energiaressurssidega keskkondades ning madala voolutarbega seadmete peal. &lt;br /&gt;
Freifunk toetab ad-hoc WLAN kommunikatsiooni ning layer 2 ja 3 routingut OLSR protokolliga ja BATMAN routing protokolli. &lt;br /&gt;
&lt;br /&gt;
Freifungile luuakse erinevaid pluginaid, näiteks Apple Bonjouri abil saavad kasutajad jagada enda muusikat lokaalsetes wifi võrkudes. Freifunk mesh võrkudes on rohkem mooduseid jagamiseks ja suhtlemiseks, kuna teenuseid ehitatakse avatud standarditele ning open-source tarkvarana.&lt;br /&gt;
Saksaakeelset materjali palju, ingliskeelset vähem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritades OpenWRT-lt upgrade teha, asi ebaõnnestus ning ruuter andis otsad. &lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Lingid:&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
http://ff-firmware.sourceforge.net/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/Freifunk&amp;lt;br /&amp;gt;&lt;br /&gt;
http://freifunk-texas.net/&lt;br /&gt;
http://socghop.appspot.com/gsoc/org/home/google/gsoc2009/ffopenwrt&lt;br /&gt;
 &lt;br /&gt;
=HyperWRT=&lt;br /&gt;
Märksõna(de)ks: lihtsus ja kiirus&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ HyperWRT]:&lt;br /&gt;
Esimene HyperWRT projekt (Avenger 2.0) sai alguse aastal 2004 Timothy Jansi poolt. Lisavõimalusi vähe, kiire ning lihtne kasutada. Baseerub Linksysi originaal firmware peal.&lt;br /&gt;
Seda valmistatud erinevatele Broadcom baasil olevatele ruuteritele (Buffalo, Linksys jt.). HyperWRT projekti eesmärgiks oli Linksysi firmwarele võimaluste lisamine (nt power boost), kuid seda nii, et jääks originaal firmwarega võimalikult sarnaseks. Tomatot loetakse HyperWRT järeltulijaks, kuna  &lt;br /&gt;
Hyperwrt edasiarendused.:&lt;br /&gt;
* Hyperwrt+Tofu. Lisatud asjad: signaalitugevuse kontroll, firewall scriptid, Telneti ja SSH daemon, staatiline CHCP lease, kliendi-, WET ja WDS moded, UPnp leht UPnp kaardistuste vaatamiseks ja kustutamiseks, 14 wifi kanalit, programeeritav SES nupp, SSHD.Arendus lõppes 2006a. Autoriks Jonathan Zarate, kes on ka Tomato loojaks.&lt;br /&gt;
*Hyperwrt+Thribor. Lisaks Tofu võimalustele veel pordi suunamine, lisafiltrid P2p bokeerimiseks, P2P spetisiiviline QoSA, printimisserver USB printerite jaoks. Arendus on nüüdseks samuti lõppenud. &lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritasin üleminekut Linksysi originaal firmware pealt, näitas et uuendamine toimus edukalt, kuid erinevusi silma ei paistnud. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid:&#039;&#039;&#039; &lt;br /&gt;
http://en.wikipedia.org/wiki/HyperWRT&lt;br /&gt;
http://wapedia.mobi/en/HyperWRT&lt;br /&gt;
&lt;br /&gt;
=TinyPEAP=&lt;br /&gt;
Märksõnaks turvalisus &amp;lt;br /&amp;gt;&lt;br /&gt;
Tavakasutajale mõeldud firmware, tegemaks oma ühendust turvalisemaks. &lt;br /&gt;
&lt;br /&gt;
Ühendab endas neli komponenti:&lt;br /&gt;
* AP, mis toetab pordipõhist 802.1X protokolli, mis EAP (Extensible authentication protocol) kasutamise tõttu lubab mitmeid eri autentimise protokolle. TinyPEAP kasutab PEAP protokolli, kuna see on turvaline ning kasutajasõbralik Windowsi ja MacOS-i kasutajate suthes.&lt;br /&gt;
*RADIUS server teostab kliendi autentimist. Kui klient proovib ühenduda, siis kõik autentimispaketid lähevad läbi AP RADIUS serverisse. Kui klient läbib autentimise, siis server saadab vastava teate AP-le. Tänu integreeritud RADIUS serverile, puudub vajadus lisaserveri jaoks &lt;br /&gt;
*Databaas kontollimaks autentimise andmete õigsust. Sageli kasutatakse Microsoft Active Directory serverit või SQL databaasi. Iga databaasi andmeväli omab informatsiooni kasutaja kohta, nagu kasutajanimi, parool hashitud kujul, hetke staatus, timeoudi informatsioon ja muud asjad, mida autentimiseks vaja on.&lt;br /&gt;
*PKI(Public key infrastructure). Autentimisel kasutatakse asümmeetrilisi võtmeid. Võti on vajalik kontrollimaks, et kliendi andmed lähevad õigesse AP-sse, mitte võõrasse. Võtmeid saab jagada läbi PKI või self-signed sertifikaatide kaudu&lt;br /&gt;
&lt;br /&gt;
[[File:tinypeap.jpg|200px|thumb|left|packages]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritasin üleminekut Linksys originaal firmware pealt, tegi umbes kolmveerand ära ja siis näitas et Failed ning jooksis kokku. Ruuterile restart tehes ärkas asi ellu ning Linksysi originaal firmware töötas ilusti edasi. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid: &lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
http://kennethhunt.com/archives/001379.html&amp;lt;br /&amp;gt;&lt;br /&gt;
openlinksys.info/downloads.php?cat_id=5&amp;amp;download_id=29&lt;br /&gt;
&lt;br /&gt;
=OpenWRT=&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/OpenWRT/RC5/ OpenWRT]&lt;br /&gt;
Märksõnaks:vabadus &amp;lt;br /&amp;gt;&lt;br /&gt;
Firmware edasijõudnud kasutajale, eeldab Linuxi kasutamise kogemust. Kasutajate seas poplulaarne. Ühe staatilise firmware asemel pakub openWRT kirjutatavat failisüsteemi package managmendiga. Vabastab tootja poolt paika pandud aplikatsioonidest/seadistustest ning lubab kõik ära seadistada enda vajaduste järgi. Arendajatele pakub OpenWRT võimaluse ehitada aplikatsioone, ilma et oleks vajadus ehitada framework aplikatsiooni ümber.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Lisavõimalused erinevalt tehase firmwarest:&lt;br /&gt;
*välise liikluse pordi edastamine arvutitele LAN-is mis on NAT-i taga&lt;br /&gt;
*UPnP dünaamiliselt konfigureeritud pordi edastamiseks&lt;br /&gt;
*static DHCP leases&lt;br /&gt;
*põhajlik ruuteri ja tulemüüri konfigureerimine&lt;br /&gt;
*QoS VoIP-i, online mängimise ja meedia striimimise jaoks&lt;br /&gt;
*seadme konfigureerimine wireless repeatresiks, access pointiks, wireless bridgeks või eelnevate kombinatsiooniks&lt;br /&gt;
*mesh võrgundus&lt;br /&gt;
*dünaamiliste DNS serverite kasutamine, sälitiamaks fikseeritud domeeni nime ISP-ga, mis ei paku staatilisi IP aadresse&lt;br /&gt;
*käsurea ligipääs SSH või Telneti kaudu&lt;br /&gt;
*USB portidega seadmete puhul printeri jagamine, SAMBA kaudu failide jagamine, USB audio jne&lt;br /&gt;
*reaalajas võrgu montoorimine&lt;br /&gt;
*liandatav AJAX-ipõhine veebi interfeiss (tänu LuCI projektile)&lt;br /&gt;
*regulaarne bugide parandus ning uuendised, isegi nendele sadmetele, mida enam ei toetata nende tootjate poolt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Versioon: White Russian RC5&lt;br /&gt;
Üleminek Linksysi originaal firmwarelt toimis ilusti. &amp;lt;br /&amp;gt;&lt;br /&gt;
Esialgu parool ning kasutajanimi puudusid, kuid suvalisele lingile vajutades, määras kasutajanimeks root ning nõudis parooli loomist. Panin hästi lihtsa parooli, hoiatas, et parool on nõrk kuid ümbervahetamist ei nõudnud. Kasutajamugavuse poolest olid põhiasjad lihtsad ning kergesti arusaadavad. Kanaliks valis 6da. &amp;lt;br /&amp;gt;&lt;br /&gt;
Üritasin teha upgrade HyperWRT firmware peale, kuid asi ebaõnnestus. Ilma ühtegi hoiatust näitamata muutus aadress 192.168.1.1 kättesaamatuks. Peale ruuterile mitmete resettide tegemist tuli avaleht paar korda küll ette veel, kuid seda umbes viieks sekundiks ning kadus seejärel jäädavalt. Ühenduse saatuseks oli limited ning väidetavalt ainus [ http://www.freewebs.com/wrt54grevival/wrt54grevial.htm.html &amp;quot;elustamise&amp;quot;] viis, mis jätab garantii kehtima, ei toiminud. (pingides jäi 192.168.1.1 kättesaamatuks).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid:&#039;&#039;&#039;&lt;br /&gt;
http://openwrt.org/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/OpenWrt&lt;br /&gt;
&lt;br /&gt;
[[File:openwrt_packages.jpg|200px|thumb|left|packages]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:openWRT_wire.jpg|200px|thumb|left|packages]]&lt;br /&gt;
[[File:openWwrt_firewall.jpg|200px|thumb|left|packages]]&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:Tinypeap.jpg&amp;diff=10896</id>
		<title>File:Tinypeap.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:Tinypeap.jpg&amp;diff=10896"/>
		<updated>2010-05-28T12:14:57Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Category:Vabavaraline_p%C3%BCsivara/v%C3%A4hemtuntud_firmware&amp;diff=10895</id>
		<title>Category:Vabavaraline püsivara/vähemtuntud firmware</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Category:Vabavaraline_p%C3%BCsivara/v%C3%A4hemtuntud_firmware&amp;diff=10895"/>
		<updated>2010-05-28T12:14:33Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Sissejuhatus=&lt;br /&gt;
Kuna paljudele ei piisa tootjafirmapoolt pakutavast firmwarest, siis on sellest loodud mitmeid eri variante.&lt;br /&gt;
Üldkasutatavate ning tuntumate firmwarede (Tomato ja DD-Wert) kõrval on ka neid, mis keskenduvad spetsiifilisematele valdkondadele ning mida kasutatakse vähem. &lt;br /&gt;
&lt;br /&gt;
Testitavaks seadmeks on Linksys WRT54GL ning uurimisobjektiks sellele ruuterile sobiv firmware. &lt;br /&gt;
&lt;br /&gt;
=Freifunk (&amp;quot;open radio&amp;quot;)=&lt;br /&gt;
Märksõnaks: jagamine&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ Freifunk]: OpenWRT baasil tehtud firmware, mis peaks aitama luua [http://en.wikipedia.org/wiki/Mesh_networking &amp;quot;mesh&amp;quot;] kommmuuni interneti jagamiseks, sest &amp;quot;internetile ligipääs on moodsa ühiskonna nurgakivi. Igaüks kes ei saa internetti ühenduda, on halvas olukorras ning ei saa olla tänapäeva ühiskonna täisväärtuslik liige.&amp;quot; Frwifunk on võrreldav avatud digitaalse ruumiga nagu pargid ja tänavad.&lt;br /&gt;
Friefunk firmwarega on kerge luua uusi traadita mesh võrke. Sihtgrupiks on noored ning levinud on Saksamaal. &amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutab teiste ruuteritega paremaks ühendumiseks spetsiaalseid protokolle. Kasutaja interfeis lubab põhjalikku signaali tugevuse kontrolli.&lt;br /&gt;
Firmwared on ressursi suhtes vähenõudlikud ja jooksevad seadmetel, mille jõudlus on väike. Töötavad hästi ka piiratud energiaressurssidega keskkondades ning madala voolutarbega seadmete peal. &lt;br /&gt;
Freifunk toetab ad-hoc WLAN kommunikatsiooni ning layer 2 ja 3 routingut OLSR protokolliga ja BATMAN routing protokolli. &lt;br /&gt;
&lt;br /&gt;
Freifungile luuakse erinevaid pluginaid, näiteks Apple Bonjouri abil saavad kasutajad jagada enda muusikat lokaalsetes wifi võrkudes. Freifunk mesh võrkudes on rohkem mooduseid jagamiseks ja suhtlemiseks, kuna teenuseid ehitatakse avatud standarditele ning open-source tarkvarana.&lt;br /&gt;
Saksaakeelset materjali palju, ingliskeelset vähem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritades OpenWRT-lt upgrade teha, asi ebaõnnestus ning ruuter andis otsad. &lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Lingid:&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
http://ff-firmware.sourceforge.net/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/Freifunk&amp;lt;br /&amp;gt;&lt;br /&gt;
http://freifunk-texas.net/&lt;br /&gt;
http://socghop.appspot.com/gsoc/org/home/google/gsoc2009/ffopenwrt&lt;br /&gt;
 &lt;br /&gt;
=HyperWRT=&lt;br /&gt;
Märksõna(de)ks: lihtsus ja kiirus&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ HyperWRT]:&lt;br /&gt;
Esimene HyperWRT projekt (Avenger 2.0) sai alguse aastal 2004 Timothy Jansi poolt. Lisavõimalusi vähe, kiire ning lihtne kasutada. Baseerub Linksysi originaal firmware peal.&lt;br /&gt;
Seda valmistatud erinevatele Broadcom baasil olevatele ruuteritele (Buffalo, Linksys jt.). HyperWRT projekti eesmärgiks oli Linksysi firmwarele võimaluste lisamine (nt power boost), kuid seda nii, et jääks originaal firmwarega võimalikult sarnaseks. Tomatot loetakse HyperWRT järeltulijaks, kuna  &lt;br /&gt;
Hyperwrt edasiarendused.:&lt;br /&gt;
* Hyperwrt+Tofu. Lisatud asjad: signaalitugevuse kontroll, firewall scriptid, Telneti ja SSH daemon, staatiline CHCP lease, kliendi-, WET ja WDS moded, UPnp leht UPnp kaardistuste vaatamiseks ja kustutamiseks, 14 wifi kanalit, programeeritav SES nupp, SSHD.Arendus lõppes 2006a. Autoriks Jonathan Zarate, kes on ka Tomato loojaks.&lt;br /&gt;
*Hyperwrt+Thribor. Lisaks Tofu võimalustele veel pordi suunamine, lisafiltrid P2p bokeerimiseks, P2P spetisiiviline QoSA, printimisserver USB printerite jaoks. Arendus on nüüdseks samuti lõppenud. &lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritasin üleminekut Linksysi originaal firmware pealt, näitas et uuendamine toimus edukalt, kuid erinevusi silma ei paistnud. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid:&#039;&#039;&#039; &lt;br /&gt;
http://en.wikipedia.org/wiki/HyperWRT&lt;br /&gt;
http://wapedia.mobi/en/HyperWRT&lt;br /&gt;
&lt;br /&gt;
=TinyPEAP=&lt;br /&gt;
Märksõnaks turvalisus &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ühendab endas neli komponenti:&lt;br /&gt;
* AP, mis toetab pordipõhist 802.1X protokolli, mis EAP (Extensible authentication protocol) kasutamise tõttu lubab mitmeid eri autentimise protokolle. TinyPEAP kasutab PEAP protokolli, kuna see on turvaline ning kasutajasõbralik Windowsi ja MacOS-i kasutajate suthes.&lt;br /&gt;
*RADIUS server teostab kliendi autentimist. Kui klient proovib ühenduda, siis kõik autentimispaketid lähevad läbi AP RADIUS serverisse. Kui klient läbib autentimise, siis server saadab vastava teate AP-le. &lt;br /&gt;
*Databaas kontollimaks autentimise andmete õigsust. Sageli kasutatakse Microsoft Active Directory serverit või SQL databaasi.&lt;br /&gt;
*PKI(Public key infrastructure). Autentimisel kasutatakse asümmeetrilisi võtmeid. Võti on vajalik kontrollimaks, et kliendi andmed lähevad õigesse AP-sse, mitte võõrasse. Võtmeid saab jagada läbi PKI või self-signed sertifikaatide kaudu&lt;br /&gt;
&lt;br /&gt;
[[File:tinypeap.jpg|200px|thumb|left|packages]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritasin üleminekut Linksys originaal firmware pealt, tegi umbes kolmveerand ära ja siis näitas et Failed ning jooksis kokku. Ruuterile restart tehes ärkas asi ellu ning Linksysi originaal firmware töötas ilusti edasi. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid: &lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
http://kennethhunt.com/archives/001379.html&amp;lt;br /&amp;gt;&lt;br /&gt;
openlinksys.info/downloads.php?cat_id=5&amp;amp;download_id=29&lt;br /&gt;
&lt;br /&gt;
=OpenWRT=&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/OpenWRT/RC5/ OpenWRT]&lt;br /&gt;
Märksõnaks:vabadus &amp;lt;br /&amp;gt;&lt;br /&gt;
Firmware edasijõudnud kasutajale, eeldab Linuxi kasutamise kogemust. Kasutajate seas poplulaarne. Ühe staatilise firmware asemel pakub openWRT kirjutatavat failisüsteemi package managmendiga. Vabastab tootja poolt paika pandud aplikatsioonidest/seadistustest ning lubab kõik ära seadistada enda vajaduste järgi. Arendajatele pakub OpenWRT võimaluse ehitada aplikatsioone, ilma et oleks vajadus ehitada framework aplikatsiooni ümber.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Lisavõimalused erinevalt tehase firmwarest:&lt;br /&gt;
*välise liikluse pordi edastamine arvutitele LAN-is mis on NAT-i taga&lt;br /&gt;
*UPnP dünaamiliselt konfigureeritud pordi edastamiseks&lt;br /&gt;
*static DHCP leases&lt;br /&gt;
*põhajlik ruuteri ja tulemüüri konfigureerimine&lt;br /&gt;
*QoS VoIP-i, online mängimise ja meedia striimimise jaoks&lt;br /&gt;
*seadme konfigureerimine wireless repeatresiks, access pointiks, wireless bridgeks või eelnevate kombinatsiooniks&lt;br /&gt;
*mesh võrgundus&lt;br /&gt;
*dünaamiliste DNS serverite kasutamine, sälitiamaks fikseeritud domeeni nime ISP-ga, mis ei paku staatilisi IP aadresse&lt;br /&gt;
*käsurea ligipääs SSH või Telneti kaudu&lt;br /&gt;
*USB portidega seadmete puhul printeri jagamine, SAMBA kaudu failide jagamine, USB audio jne&lt;br /&gt;
*reaalajas võrgu montoorimine&lt;br /&gt;
*liandatav AJAX-ipõhine veebi interfeiss (tänu LuCI projektile)&lt;br /&gt;
*regulaarne bugide parandus ning uuendised, isegi nendele sadmetele, mida enam ei toetata nende tootjate poolt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Versioon: White Russian RC5&lt;br /&gt;
Üleminek Linksysi originaal firmwarelt toimis ilusti. &amp;lt;br /&amp;gt;&lt;br /&gt;
Esialgu parool ning kasutajanimi puudusid, kuid suvalisele lingile vajutades, määras kasutajanimeks root ning nõudis parooli loomist. Panin hästi lihtsa parooli, hoiatas, et parool on nõrk kuid ümbervahetamist ei nõudnud. Kasutajamugavuse poolest olid põhiasjad lihtsad ning kergesti arusaadavad. Kanaliks valis 6da. &amp;lt;br /&amp;gt;&lt;br /&gt;
Üritasin teha upgrade HyperWRT firmware peale, kuid asi ebaõnnestus. Ilma ühtegi hoiatust näitamata muutus aadress 192.168.1.1 kättesaamatuks. Peale ruuterile mitmete resettide tegemist tuli avaleht paar korda küll ette veel, kuid seda umbes viieks sekundiks ning kadus seejärel jäädavalt. Ühenduse saatuseks oli limited ning väidetavalt ainus [ http://www.freewebs.com/wrt54grevival/wrt54grevial.htm.html &amp;quot;elustamise&amp;quot;] viis, mis jätab garantii kehtima, ei toiminud. (pingides jäi 192.168.1.1 kättesaamatuks).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid:&#039;&#039;&#039;&lt;br /&gt;
http://openwrt.org/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/OpenWrt&lt;br /&gt;
&lt;br /&gt;
[[File:openwrt_packages.jpg|200px|thumb|left|packages]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:openWRT_wire.jpg|200px|thumb|left|packages]]&lt;br /&gt;
[[File:openWwrt_firewall.jpg|200px|thumb|left|packages]]&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Category:Vabavaraline_p%C3%BCsivara/v%C3%A4hemtuntud_firmware&amp;diff=10893</id>
		<title>Category:Vabavaraline püsivara/vähemtuntud firmware</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Category:Vabavaraline_p%C3%BCsivara/v%C3%A4hemtuntud_firmware&amp;diff=10893"/>
		<updated>2010-05-28T11:58:20Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Sissejuhatus=&lt;br /&gt;
Kuna paljudele ei piisa tootjafirmapoolt pakutavast firmwarest, siis on sellest loodud mitmeid eri variante.&lt;br /&gt;
Üldkasutatavate ning tuntumate firmwarede (Tomato ja DD-Wert) kõrval on ka neid, mis keskenduvad spetsiifilisematele valdkondadele ning mida kasutatakse vähem. &lt;br /&gt;
&lt;br /&gt;
Testitavaks seadmeks on Linksys WRT54GL ning uurimisobjektiks sellele ruuterile sobiv firmware. &lt;br /&gt;
&lt;br /&gt;
=Freifunk (&amp;quot;open radio&amp;quot;)=&lt;br /&gt;
Märksõnaks: jagamine&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ Freifunk]: OpenWRT baasil tehtud firmware, mis peaks aitama luua [http://en.wikipedia.org/wiki/Mesh_networking &amp;quot;mesh&amp;quot;] kommmuuni interneti jagamiseks, sest &amp;quot;internetile ligipääs on moodsa ühiskonna nurgakivi. Igaüks kes ei saa internetti ühenduda, on halvas olukorras ning ei saa olla tänapäeva ühiskonna täisväärtuslik liige.&amp;quot; Frwifunk on võrreldav avatud digitaalse ruumiga nagu pargid ja tänavad.&lt;br /&gt;
Friefunk firmwarega on kerge luua uusi traadita mesh võrke. Sihtgrupiks on noored ning levinud on Saksamaal. &amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutab teiste ruuteritega paremaks ühendumiseks spetsiaalseid protokolle. Kasutaja interfeis lubab põhjalikku signaali tugevuse kontrolli.&lt;br /&gt;
Firmwared on ressursi suhtes vähenõudlikud ja jooksevad seadmetel, mille jõudlus on väike. Töötavad hästi ka piiratud energiaressurssidega keskkondades ning madala voolutarbega seadmete peal. &lt;br /&gt;
Freifunk toetab ad-hoc WLAN kommunikatsiooni ning layer 2 ja 3 routingut OLSR protokolliga ja BATMAn routing protokolli. &lt;br /&gt;
&lt;br /&gt;
Freifungile luuakse erinevaid pluginaid, näiteks Apple Bonjouri abil saavad kasutajad jagada enda muusikat lokaalsetes wifi võrkudes. Freifunk mesh võrkudes on rohkem mooduseid jagamiseks ja suhtlemiseks, kuna teenuseid ehitatakse avatud standarditele ning open-source tarkvarana.&lt;br /&gt;
Saksaakeelset materjali palju, ingliskeelset vähem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritades OpenWRT-lt upgrade teha, asi ebaõnnestus ning ruuter andis otsad. &lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Lingid:&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
http://ff-firmware.sourceforge.net/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/Freifunk&amp;lt;br /&amp;gt;&lt;br /&gt;
http://freifunk-texas.net/&lt;br /&gt;
http://socghop.appspot.com/gsoc/org/home/google/gsoc2009/ffopenwrt&lt;br /&gt;
 &lt;br /&gt;
=HyperWRT=&lt;br /&gt;
Märksõna(de)ks: lihtsus ja kiirus&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ HyperWRT]:&lt;br /&gt;
Esimene HyperWRT projekt (Avenger 2.0) sai alguse aastal 2004 Timothy Jansi poolt. Lisavõimalusi vähe, kiire ning lihtne kasutada. Baseerub Linksysi originaal firmware peal.&lt;br /&gt;
Seda valmistatud erinevatele Broadcom baasil olevatele ruuteritele (Buffalo, Linksys jt.). HyperWRT projekti eesmärgiks oli Linksysi firmwarele võimaluste lisamine (nt power boost), kuid seda nii, et jääks originaal firmwarega võimalikult sarnaseks. Tomatot loetakse HyperWRT järeltulijaks, kuna  &lt;br /&gt;
Hyperwrt edasiarendused.:&lt;br /&gt;
* Hyperwrt+Tofu. Lisatud asjad: signaalitugevuse kontroll, firewall scriptid, Telneti ja SSH daemon, staatiline CHCP lease, kliendi-, WET ja WDS moded, UPnp leht UPnp kaardistuste vaatamiseks ja kustutamiseks, 14 wifi kanalit, programeeritav SES nupp, SSHD.Arendus lõppes 2006a. Autoriks Jonathan Zarate, kes on ka Tomato loojaks.&lt;br /&gt;
*Hyperwrt+Thribor. Lisaks Tofu võimalustele veel pordi suunamine, lisafiltrid P2p bokeerimiseks, P2P spetisiiviline QoSA, printimisserver USB printerite jaoks. Arendus on nüüdseks samuti lõppenud. &lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritasin üleminekut Linksysi originaal firmware pealt, näitas et uuendamine toimus edukalt, kuid erinevusi silma ei paistnud. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid:&#039;&#039;&#039; &lt;br /&gt;
http://en.wikipedia.org/wiki/HyperWRT&lt;br /&gt;
http://wapedia.mobi/en/HyperWRT&lt;br /&gt;
&lt;br /&gt;
=TinyPEAP=&lt;br /&gt;
Märksõnaks turvalisus &amp;lt;br /&amp;gt;&lt;br /&gt;
*[[ http://www.wrtrouters.com/firmware/wrt54gl/TinyPEAP/TinyPEAP]]&lt;br /&gt;
Ühendab endas neli komponenti:&lt;br /&gt;
* AP, mis toetab pordipõhist 802.1X protokolli, mis EAP (Extensible authentication protocol) kasutamise tõttu lubab mitmeid eri autentimise protokolle. TinyPEAP kasutab PEAP protokolli, kuna see on turvaline ning kasutajasõbralik Windowsi ja MacOS-i kasutajate suthes.&lt;br /&gt;
*RADIUS server teostab kliendi autentimist. Kui klient proovib ühenduda, siis kõik autentimispaketid lähevad läbi AP RADIUS serverisse. Kui klient läbib autentimise, siis server saadab vastava teate AP-le. &lt;br /&gt;
*Databaas kontollimaks autentimise andmete õigsust. Sageli kasutatakse Microsoft Active Directory serverit või SQL databaasi.&lt;br /&gt;
*PKI(Public key infrastructure). Autentimisel kasutatakse asümmeetrilisi võtmeid. Võti on vajalik kontrollimaks, et kliendi andmed lähevad õigesse AP-sse, mitte võõrasse. Võtmeid saab jagada läbi PKI või self-signed sertifikaatide kaudu&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritasin üleminekut Linksys originaal firmware pealt, tegi umbes kolmveerand ära ja siis näitas et Failed ning jooksis kokku. Ruuterile restart tehes ärkas asi ellu ning Linksysi originaal firmware töötas ilusti edasi. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid: &lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
http://kennethhunt.com/archives/001379.html&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=OpenWRT=&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/OpenWRT/RC5/ OpenWRT]&lt;br /&gt;
Märksõnaks:vabadus &amp;lt;br /&amp;gt;&lt;br /&gt;
Firmware edasijõudnud kasutajale, eeldab Linuxi kasutamise kogemust. Kasutajate seas poplulaarne. Ühe staatilise firmware asemel pakub openWRT kirjutatavat failisüsteemi package managmendiga. Vabastab tootja poolt paika pandud aplikatsioonidest/seadistustest ning lubab kõik ära seadistada enda vajaduste järgi. Arendajatele pakub OpenWRT võimaluse ehitada aplikatsioone, ilma et oleks vajadus ehitada framework aplikatsiooni ümber. &amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Versioon: White Russian RC5&lt;br /&gt;
Üleminek Linksysi originaal firmwarelt toimis ilusti. &amp;lt;br /&amp;gt;&lt;br /&gt;
Esialgu parool ning kasutajanimi puudusid, kuid suvalisele lingile vajutades, määras kasutajanimeks root ning nõudis parooli loomist. Panin hästi lihtsa parooli, hoiatas, et parool on nõrk kuid ümbervahetamist ei nõudnud. Kasutajamugavuse poolest olid põhiasjad lihtsad ning kergesti arusaadavad. Kanaliks valis 6da. &amp;lt;br /&amp;gt;&lt;br /&gt;
Üritasin teha upgrade HyperWRT firmware peale, kuid asi ebaõnnestus. Ilma ühtegi hoiatust näitamata muutus aadress 192.168.1.1 kättesaamatuks. Peale ruuterile mitmete resettide tegemist tuli avaleht paar korda küll ette veel, kuid seda umbes viieks sekundiks ning kadus seejärel jäädavalt. Ühenduse saatuseks oli limited ning väidetavalt ainus [ http://www.freewebs.com/wrt54grevival/wrt54grevial.htm.html &amp;quot;elustamise&amp;quot;] viis, mis jätab garantii kehtima, ei toiminud. (pingides jäi 192.168.1.1 kättesaamatuks).&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Lingid:&#039;&#039;&#039;&lt;br /&gt;
http://openwrt.org/ &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:openwrt_packages.jpg|200px|thumb|left|packages]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:openWRT_wire.jpg|200px|thumb|left|packages]]&lt;br /&gt;
[[File:openWwrt_firewall.jpg|200px|thumb|left|packages]]&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Category:Vabavaraline_p%C3%BCsivara/v%C3%A4hemtuntud_firmware&amp;diff=10892</id>
		<title>Category:Vabavaraline püsivara/vähemtuntud firmware</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Category:Vabavaraline_p%C3%BCsivara/v%C3%A4hemtuntud_firmware&amp;diff=10892"/>
		<updated>2010-05-28T11:53:41Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Sissejuhatus=&lt;br /&gt;
Kuna paljudele ei piisa tootjafirmapoolt pakutavast firmwarest, siis on sellest loodud mitmeid eri variante.&lt;br /&gt;
Üldkasutatavate ning tuntumate firmwarede (Tomato ja DD-Wert) kõrval on ka neid, mis keskenduvad spetsiifilisematele valdkondadele ning mida kasutatakse vähem. &lt;br /&gt;
&lt;br /&gt;
Testitavaks seadmeks on Linksys WRT54GL ning uurimisobjektiks sellele ruuterile sobiv firmware. &lt;br /&gt;
&lt;br /&gt;
=Freifunk (&amp;quot;open radio&amp;quot;)=&lt;br /&gt;
Märksõnaks: jagamine&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ Freifunk]: OpenWRT baasil tehtud firmware, mis peaks aitama luua [http://en.wikipedia.org/wiki/Mesh_networking &amp;quot;mesh&amp;quot;] kommmuuni interneti jagamiseks, sest &amp;quot;internetile ligipääs on moodsa ühiskonna nurgakivi. Igaüks kes ei saa internetti ühenduda, on halvas olukorras ning ei saa olla tänapäeva ühiskonna täisväärtuslik liige.&amp;quot; Frwifunk on võrreldav avatud digitaalse ruumiga nagu pargid ja tänavad.&lt;br /&gt;
Friefunk firmwarega on kerge luua uusi traadita mesh võrke. Sihtgrupiks on noored ning levinud on Saksamaal. &amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutab teiste ruuteritega paremaks ühendumiseks spetsiaalseid protokolle. Kasutaja interfeis lubab põhjalikku signaali tugevuse kontrolli.&lt;br /&gt;
Firmwared on ressursi suhtes vähenõudlikud ja jooksevad seadmetel, mille jõudlus on väike. Töötavad hästi ka piiratud energiaressurssidega keskkondades ning madala voolutarbega seadmete peal. &lt;br /&gt;
Freifunk toetab ad-hoc WLAN kommunikatsiooni ning layer 2 ja 3 routingut OLSR protokolliga ja BATMAn routing protokolli. &lt;br /&gt;
&lt;br /&gt;
Freifungile luuakse erinevaid pluginaid, näiteks Apple Bonjouri abil saavad kasutajad jagada enda muusikat lokaalsetes wifi võrkudes. Freifunk mesh võrkudes on rohkem mooduseid jagamiseks ja suhtlemiseks, kuna teenuseid ehitatakse avatud standarditele ning open-source tarkvarana.&lt;br /&gt;
Saksaakeelset materjali palju, ingliskeelset vähem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Testimine:&lt;br /&gt;
Üritades OpenWRT-lt upgrade teha, asi ebaõnnestus ning ruuter andis otsad. &lt;br /&gt;
&lt;br /&gt;
Lingid: &amp;lt;br /&amp;gt;&lt;br /&gt;
http://ff-firmware.sourceforge.net/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/Freifunk&amp;lt;br /&amp;gt;&lt;br /&gt;
http://freifunk-texas.net/&lt;br /&gt;
http://socghop.appspot.com/gsoc/org/home/google/gsoc2009/ffopenwrt&lt;br /&gt;
 &lt;br /&gt;
=HyperWRT=&lt;br /&gt;
Märksõna(de)ks: lihtsus ja kiirus&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ HyperWRT]:&lt;br /&gt;
Esimene HyperWRT projekt (Avenger 2.0) sai alguse aastal 2004 Timothy Jansi poolt. Lisavõimalusi vähe, kiire ning lihtne kasutada. Baseerub Linksysi originaal firmware peal.&lt;br /&gt;
Seda valmistatud erinevatele Broadcom baasil olevatele ruuteritele (Buffalo, Linksys jt.). HyperWRT projekti eesmärgiks oli Linksysi firmwarele võimaluste lisamine (nt power boost), kuid seda nii, et jääks originaal firmwarega võimalikult sarnaseks. Tomatot loetakse HyperWRT järeltulijaks, kuna  &lt;br /&gt;
Hyperwrt edasiarendused.:&lt;br /&gt;
* Hyperwrt+Tofu. Lisatud asjad: signaalitugevuse kontroll, firewall scriptid, Telneti ja SSH daemon, staatiline CHCP lease, kliendi-, WET ja WDS moded, UPnp leht UPnp kaardistuste vaatamiseks ja kustutamiseks, 14 wifi kanalit, programeeritav SES nupp, SSHD.Arendus lõppes 2006a. Autoriks Jonathan Zarate, kes on ka Tomato loojaks.&lt;br /&gt;
*Hyperwrt+Thribor. Lisaks Tofu võimalustele veel pordi suunamine, lisafiltrid P2p bokeerimiseks, P2P spetisiiviline QoSA, printimisserver USB printerite jaoks. Arendus on nüüdseks samuti lõppenud. &lt;br /&gt;
&lt;br /&gt;
Testimine:&lt;br /&gt;
Üritasin üleminekut Linksysi originaal firmware pealt, näitas et uuendamine toimus edukalt, kuid erinevusi silma ei paistnud. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid:&#039;&#039;&#039; &lt;br /&gt;
http://en.wikipedia.org/wiki/HyperWRT&lt;br /&gt;
http://wapedia.mobi/en/HyperWRT&lt;br /&gt;
&lt;br /&gt;
=TinyPEAP=&lt;br /&gt;
Märksõnaks turvalisus &amp;lt;br /&amp;gt;&lt;br /&gt;
*[[ http://www.wrtrouters.com/firmware/wrt54gl/TinyPEAP/TinyPEAP]]&lt;br /&gt;
Ühendab endas neli komponenti:&lt;br /&gt;
* AP, mis toetab pordipõhist 802.1X protokolli, mis EAP (Extensible authentication protocol) kasutamise tõttu lubab mitmeid eri autentimise protokolle. TinyPEAP kasutab PEAP protokolli, kuna see on turvaline ning kasutajasõbralik Windowsi ja MacOS-i kasutajate suthes.&lt;br /&gt;
*RADIUS server teostab kliendi autentimist. Kui klient proovib ühenduda, siis kõik autentimispaketid lähevad läbi AP RADIUS serverisse. Kui klient läbib autentimise, siis server saadab vastava teate AP-le. &lt;br /&gt;
*Databaas kontollimaks autentimise andmete õigsust. Sageli kasutatakse Microsoft Active Directory serverit või SQL databaasi.&lt;br /&gt;
*PKI(Public key infrastructure). Autentimisel kasutatakse asümmeetrilisi võtmeid. Võti on vajalik kontrollimaks, et kliendi andmed lähevad õigesse AP-sse, mitte võõrasse. Võtmeid saab jagada läbi PKI või self-signed sertifikaatide kaudu&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritasin üleminekut Linksys originaal firmware pealt, tegi umbes kolmveerand ära ja siis näitas et Failed ning jooksis kokku. Ruuterile restart tehes ärkas asi ellu ning Linksysi originaal firmware töötas ilusti edasi. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid: &lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
http://kennethhunt.com/archives/001379.html&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=OpenWRT=&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/OpenWRT/RC5/ OpenWRT]&lt;br /&gt;
Märksõnaks:vabadus &amp;lt;br /&amp;gt;&lt;br /&gt;
Firmware edasijõudnud kasutajale, eeldab Linuxi kasutamise kogemust. Kasutajate seas poplulaarne. Ühe staatilise firmware asemel pakub openWRT kirjutatavat failisüsteemi package managmendiga. Vabastab tootja poolt paika pandud aplikatsioonidest/seadistustest ning lubab kõik ära seadistada enda vajaduste järgi. Arendajatele pakub OpenWRT võimaluse ehitada aplikatsioone, ilma et oleks vajadus ehitada framework aplikatsiooni ümber. &lt;br /&gt;
&lt;br /&gt;
Testimine:&lt;br /&gt;
Versioon: White Russian RC5&lt;br /&gt;
Üleminek Linksysi originaal firmwarelt toimis ilusti. &amp;lt;br /&amp;gt;&lt;br /&gt;
Esialgu parool ning kasutajanimi puudusid, kuid suvalisele lingile vajutades, määras kasutajanimeks root ning nõudis parooli loomist. Panin hästi lihtsa parooli, hoiatas, et parool on nõrk kuid ümbervahetamist ei nõudnud. Kasutajamugavuse poolest olid põhiasjad lihtsad ning kergesti arusaadavad. &amp;lt;br /&amp;gt;&lt;br /&gt;
Üritasin teha upgrade HyperWRT firmware peale, kuid asi ebaõnnestus. Ilma ühtegi hoiatust näitamata muutus aadress 192.168.1.1 kättesaamatuks. Peale ruuterile mitmete resettide tegemist tuli avaleht paar korda küll ette veel, kuid seda umbes viieks sekundiks ning kadus seejärel jäädavalt. Ühenduse saatuseks oli limited ning väidetavalt ainus [ http://www.freewebs.com/wrt54grevival/wrt54grevial.htm.html &amp;quot;elustamise&amp;quot;] viis, mis jätab garantii kehtima, ei toiminud. (pingides jäi 192.168.1.1 kättesaamatuks).&lt;br /&gt;
&lt;br /&gt;
Lingid:&lt;br /&gt;
http://openwrt.org/ &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:openwrt_packages.jpg|200px|thumb|left|packages]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:openWRT_wire.jpg|200px|thumb|left|packages]]&lt;br /&gt;
[[File:openWwrt_firewall.jpg|200px|thumb|left|packages]]&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Category:Vabavaraline_p%C3%BCsivara/v%C3%A4hemtuntud_firmware&amp;diff=10884</id>
		<title>Category:Vabavaraline püsivara/vähemtuntud firmware</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Category:Vabavaraline_p%C3%BCsivara/v%C3%A4hemtuntud_firmware&amp;diff=10884"/>
		<updated>2010-05-28T11:23:58Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Sissejuhatus=&lt;br /&gt;
Kuna paljudele ei piisa tootjafirmapoolt pakutavast firmwarest, siis on sellest loodud mitmeid eri variante.&lt;br /&gt;
Üldkasutatavate ning tuntumate firmwarede (Tomato ja DD-Wert) kõrval on ka neid, mis keskenduvad spetsiifilisematele valdkondadele ning mida kasutatakse vähem. &lt;br /&gt;
&lt;br /&gt;
Testitavaks seadmeks on Linksys WRT54GL ning uurimisobjektiks sellele ruuterile sobiv firmware. &lt;br /&gt;
&lt;br /&gt;
=Freifunk (&amp;quot;open radio&amp;quot;)=&lt;br /&gt;
Märksõnaks: jagamine&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ Freifunk]: OpenWRT baasil tehtud firmeare, mis peaks aitama luua [http://en.wikipedia.org/wiki/Mesh_networking &amp;quot;mesh&amp;quot;] kommmuuni interneti jagamiseks, sest &amp;quot;internetile ligipääs on moodsa ühiskonna nurgakivi. Igaüks kes ei saa internetti ühenduda, on halvas olukorras ning ei saa olla tänapäeva ühiskonna täisväärtuslik liige.&amp;quot; Frwifunk on võrreldav avatud digitaalse ruumiga nagu pargid ja tänavad.&lt;br /&gt;
Friefunk firmwarega on kerge luua uusi traadita mesh võrke. Sihtgrupiks on noored ning levinud on Saksamaal. &amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutab teiste ruuteritega paremaks ühendumiseks spetsiaalseid protokolle. Kasutaja interfeis lubab põhjalikku signaali tugevuse kontrolli.&lt;br /&gt;
Firmwared resursi suhtes vähenõudlikud ja jooksevad seadmetel, mille jõudlus on väike. Töötavad hästi ka piiratud energiaressurssidega keskkondades ning madala voolutarbega seadmete peal. &lt;br /&gt;
Freifunk toetab ad-hoc WLAN kommunikatsiooni ning layer 2 ja 3 routingut OLSR protokolliga ja BATMAn routing protokolli. &lt;br /&gt;
&lt;br /&gt;
Freifungile luuakse erinevaid pluginaid, näiteks Apple Bonjouri abil saavad kasutajad jagada enda muusikat lokaalsetes wifi võrkudes. Freifunk mesh võrkudes on rohkem mooduseid jagamiseks ja suhtlemiseks, kuna teenuseid ehitatakse avatud standarditele ning open-source tarkvarana.&lt;br /&gt;
Saksaakeelset materjali palju, ingliskeelset vähem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Testimine:&lt;br /&gt;
Üritades OpenWRT-lt upgrade teha, asi ebaõnnestus ning ruuter andis otsad. &lt;br /&gt;
&lt;br /&gt;
Lingid: &amp;lt;br /&amp;gt;&lt;br /&gt;
http://ff-firmware.sourceforge.net/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/Freifunk&amp;lt;br /&amp;gt;&lt;br /&gt;
http://freifunk-texas.net/&lt;br /&gt;
http://socghop.appspot.com/gsoc/org/home/google/gsoc2009/ffopenwrt&lt;br /&gt;
 &lt;br /&gt;
=HyperWRT=&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ HyperWRT]: Lisavõimalusi vähe, kiire ning lihtne kasutada. Sisaldab NeoCatSplashil põhinevat captive portaali. Laidetakse ebastabiilsust (tahab igapäevaselt resetti jms). Infot on suhteliselt vähe ning viimased kirjutised sellest jäävad aastasse 2004-2006.&lt;br /&gt;
&lt;br /&gt;
Testimine:&lt;br /&gt;
Üritasin üleminekut Linksysi originaal firmware pealt, näitas et uuendamine toimus edukalt, kuid mitte ühtegi muudatust polnud. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=TinyPEAP=&lt;br /&gt;
Märksõnaks turvalisus &amp;lt;br /&amp;gt;&lt;br /&gt;
*[[ http://www.wrtrouters.com/firmware/wrt54gl/TinyPEAP/TinyPEAP]]&lt;br /&gt;
Ühendab endas neli komponenti:&lt;br /&gt;
* AP, mis toetab pordipõhist 802.1X protokolli, mis EAP (Extensible authentication protocol) kasutamise tõttu lubab mitmeid eri autentimise protokolle. TinyPEAP kasutab PEAP protokolli, kuna see on turvaline ning kasutajasõbralik Windowsi ja MacOS-i kasutajate suthes.&lt;br /&gt;
*RADIUS server teostab kliendi autentimist. Kui klient proovib ühenduda, siis kõik autentimispaketid lähevad läbi AP RADIUS serverisse. Kui klient läbib autentimise, siis server saadab vastava teate AP-le. &lt;br /&gt;
*Databaas kontollimaks autentimise andmete õigsust. Sageli kasutatakse Microsoft Active Directory serverit või SQL databaasi.&lt;br /&gt;
*PKI(Public key infrastructure). Autentimisel kasutatakse asümmeetrilisi võtmeid. Võti on vajalik kontrollimaks, et kliendi andmed lähevad õigesse AP-sse, mitte võõrasse. Võtmeid saab jagada läbi PKI või self-signed sertifikaatide kaudu&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritasin üleminekut Linksys originaal firmware pealt, tegi umbes kolmveerand ära ja siis näitas et Failed ning jooksis kokku. Ruuterile restart tehes ärkas asi ellu ning Linksysi originaal firmware töötas ilusti edasi. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid: &lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
http://kennethhunt.com/archives/001379.html&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=OpenWRT=&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/OpenWRT/RC5/ OpenWRT]&lt;br /&gt;
Märksõnaks:vabadus &amp;lt;br /&amp;gt;&lt;br /&gt;
Firmware edasijõudnud kasutajale, eeldab Linuxi kasutamise kogemust. Kasutajate seas poplulaarne. Ühe staatilise firmware asemel pakub openWRT kirjutatavat failisüsteemi package managmendiga. Vabastab tootja poolt paika pandud aplikatsioonidest/seadistustest ning lubab kõik ära seadistada enda vajaduste järgi. Arendajatele pakub OpenWRT võimaluse ehitada aplikatsioone, ilma et oleks vajadus ehitada framework aplikatsiooni ümber. &lt;br /&gt;
&lt;br /&gt;
Testimine:&lt;br /&gt;
Versioon: White Russian RC5&lt;br /&gt;
Üleminek Linksysi originaal firmwarelt toimis ilusti. &amp;lt;br /&amp;gt;&lt;br /&gt;
Esialgu parool ning kasutajanimi puudusid, kuid suvalisele lingile vajutades, määras kasutajanimeks root ning nõudis parooli loomist. Panin hästi lihtsa parooli, hoiatas, et parool on nõrk kuid ümbervahetamist ei nõudnud. Kasutajamugavuse poolest olid põhiasjad lihtsad ning kergesti arusaadavad. &amp;lt;br /&amp;gt;&lt;br /&gt;
Üritasin teha upgrade HyperWRT firmware peale, kuid asi ebaõnnestus. Ilma ühtegi hoiatust näitamata muutus aadress 192.168.1.1 kättesaamatuks. Peale ruuterile mitmete resettide tegemist tuli avaleht paar korda küll ette veel, kuid seda umbes viieks sekundiks ning kadus seejärel jäädavalt. Ühenduse saatuseks oli limited ning väidetavalt ainus [ http://www.freewebs.com/wrt54grevival/wrt54grevial.htm.html &amp;quot;elustamise&amp;quot;] viis, mis jätab garantii kehtima, ei toiminud. (pingides jäi 192.168.1.1 kättesaamatuks).&lt;br /&gt;
&lt;br /&gt;
Lingid:&lt;br /&gt;
http://openwrt.org/ &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:openwrt_packages.jpg|200px|thumb|left|packages]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:openWRT_wire.jpg|200px|thumb|left|packages]]&lt;br /&gt;
[[File:openWwrt_firewall.jpg|200px|thumb|left|packages]]&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Category:Vabavaraline_p%C3%BCsivara/v%C3%A4hemtuntud_firmware&amp;diff=10868</id>
		<title>Category:Vabavaraline püsivara/vähemtuntud firmware</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Category:Vabavaraline_p%C3%BCsivara/v%C3%A4hemtuntud_firmware&amp;diff=10868"/>
		<updated>2010-05-28T01:44:46Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Sissejuhatus=&lt;br /&gt;
Kuna paljudele ei piisa tootjafirmapoolt pakutavast firmwarest, siis on sellest loodud mitmeid eri variante.&lt;br /&gt;
Üldkasutatavate ning tuntumate firmwarede (Tomato ja DD-Wert) kõrval on ka neid, mis keskenduvad spetsiifilisematele valdkondadele ning mida kasutatakse vähem. &lt;br /&gt;
&lt;br /&gt;
Testitavaks seadmeks on Linksys WRT54GL ning uurimisobjektiks sellele ruuterile sobiv firmware. &lt;br /&gt;
&lt;br /&gt;
=Freifunk=&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ Freifunk]: OpenWRT baasil tehtud. Selle firmwarega on kerge üles tuua uusi traadita mesh võrke, kasutades ad-hoc WLAn suhtlemist ning layer 3 routingut OLSR-iga. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Testimine:&lt;br /&gt;
Üritades OpenWRT-lt upgrade teha, asi ebaõnnestus ning ruuter andis otsad. &lt;br /&gt;
&lt;br /&gt;
Lingid: &amp;lt;br /&amp;gt;&lt;br /&gt;
http://ff-firmware.sourceforge.net/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/Freifunk&lt;br /&gt;
 &lt;br /&gt;
=HyperWRT=&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ HyperWRT]: Lisavõimalusi vähe, kiire ning lihtne kasutada. Sisaldab NeoCatSplashil põhinevat captive portaali. Laidetakse ebastabiilsust (tahab igapäevaselt resetti jms). Infot on suhteliselt vähe ning viimased kirjutised sellest jäävad aastasse 2004-2006.&lt;br /&gt;
&lt;br /&gt;
Testimine:&lt;br /&gt;
Üritasin üleminekut Linksysi originaal firmware pealt, näitas et uuendamine toimus edukalt, kuid mitte ühtegi muudatust polnud. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=TinyPEAP=&lt;br /&gt;
Märksõnaks turvalisus &amp;lt;br /&amp;gt;&lt;br /&gt;
*[[ http://www.wrtrouters.com/firmware/wrt54gl/TinyPEAP/TinyPEAP]]&lt;br /&gt;
Ühendab endas neli komponenti:&lt;br /&gt;
* AP, mis toetab pordipõhist 802.1X protokolli, mis EAP (Extensible authentication protocol) kasutamise tõttu lubab mitmeid eri autentimise protokolle. TinyPEAP kasutab PEAP protokolli, kuna see on turvaline ning kasutajasõbralik Windowsi ja MacOS-i kasutajate suthes.&lt;br /&gt;
*RADIUS server teostab kliendi autentimist. Kui klient proovib ühenduda, siis kõik autentimispaketid lähevad läbi AP RADIUS serverisse. Kui klient läbib autentimise, siis server saadab vastava teate AP-le. &lt;br /&gt;
*Databaas kontollimaks autentimise andmete õigsust. Sageli kasutatakse Microsoft Active Directory serverit või SQL databaasi.&lt;br /&gt;
*PKI(Public key infrastructure). Autentimisel kasutatakse asümmeetrilisi võtmeid. Võti on vajalik kontrollimaks, et kliendi andmed lähevad õigesse AP-sse, mitte võõrasse. Võtmeid saab jagada läbi PKI või self-signed sertifikaatide kaudu&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritasin üleminekut Linksys originaal firmware pealt, tegi umbes kolmveerand ära ja siis näitas et Failed ning jooksis kokku. Ruuterile restart tehes ärkas asi ellu ning Linksysi originaal firmware töötas ilusti edasi. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid: &lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
http://kennethhunt.com/archives/001379.html&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=OpenWRT=&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/OpenWRT/RC5/ OpenWRT]&lt;br /&gt;
Märksõnaks:vabadus &amp;lt;br /&amp;gt;&lt;br /&gt;
Firmware edasijõudnud kasutajale, eeldab Linuxi kasutamise kogemust. Kasutajate seas poplulaarne. Ühe staatilise firmware asemel pakub openWRT kirjutatavat failisüsteemi package managmendiga. Vabastab tootja poolt paika pandud aplikatsioonidest/seadistustest ning lubab kõik ära seadistada enda vajaduste järgi. Arendajatele pakub OpenWRT võimaluse ehitada aplikatsioone, ilma et oleks vajadus ehitada framework aplikatsiooni ümber. &lt;br /&gt;
&lt;br /&gt;
Testimine:&lt;br /&gt;
Versioon: White Russian RC5&lt;br /&gt;
Üleminek Linksysi originaal firmwarelt toimis ilusti. &amp;lt;br /&amp;gt;&lt;br /&gt;
Esialgu parool ning kasutajanimi puudusid, kuid suvalisele lingile vajutades, määras kasutajanimeks root ning nõudis parooli loomist. Panin hästi lihtsa parooli, hoiatas, et parool on nõrk kuid ümbervahetamist ei nõudnud. Kasutajamugavuse poolest olid põhiasjad lihtsad ning kergesti arusaadavad. &amp;lt;br /&amp;gt;&lt;br /&gt;
Üritasin teha upgrade HyperWRT firmware peale, kuid asi ebaõnnestus. Ilma ühtegi hoiatust näitamata muutus aadress 192.168.1.1 kättesaamatuks. Peale ruuterile mitmete resettide tegemist tuli avaleht paar korda küll ette veel, kuid seda umbes viieks sekundiks ning kadus seejärel jäädavalt. Ühenduse saatuseks oli limited ning väidetavalt ainus [ http://www.freewebs.com/wrt54grevival/wrt54grevial.htm.html &amp;quot;elustamise&amp;quot;] viis, mis jätab garantii kehtima, ei toiminud. (pingides jäi 192.168.1.1 kättesaamatuks).&lt;br /&gt;
&lt;br /&gt;
Lingid:&lt;br /&gt;
http://openwrt.org/ &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:openwrt_packages.jpg|200px|thumb|left|packages]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:openWRT_wire.jpg|200px|thumb|left|packages]]&lt;br /&gt;
[[File:openWwrt_firewall.jpg|200px|thumb|left|packages]]&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Category:Vabavaraline_p%C3%BCsivara/v%C3%A4hemtuntud_firmware&amp;diff=10867</id>
		<title>Category:Vabavaraline püsivara/vähemtuntud firmware</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Category:Vabavaraline_p%C3%BCsivara/v%C3%A4hemtuntud_firmware&amp;diff=10867"/>
		<updated>2010-05-28T01:43:56Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Sissejuhatus=&lt;br /&gt;
Kuna paljudele ei piisa tootjafirmapoolt pakutavast firmwarest, siis on sellest loodud mitmeid eri variante.&lt;br /&gt;
Üldkasutatavate ning tuntumate firmwarede (Tomato ja DD-Wert) kõrval on ka neid, mis keskenduvad spetsiifilisematele valdkondadele ning mida kasutatakse vähem. &lt;br /&gt;
&lt;br /&gt;
Testitavaks seadmeks on Linksys WRT54GL ning uurimisobjektiks sellele ruuterile sobiv firmware. &lt;br /&gt;
&lt;br /&gt;
=Freifunk=&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ Freifunk]: OpenWRT baasil tehtud. Selle firmwarega on kerge üles tuua uusi traadita mesh võrke, kasutades ad-hoc WLAn suhtlemist ning layer 3 routingut OLSR-iga. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Testimine:&lt;br /&gt;
Üritades OpenWRT-lt upgrade teha, asi ebaõnnestus ning ruuter andis otsad. &lt;br /&gt;
&lt;br /&gt;
Lingid: &amp;lt;br /&amp;gt;&lt;br /&gt;
http://ff-firmware.sourceforge.net/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/Freifunk&lt;br /&gt;
 &lt;br /&gt;
=HyperWRT=&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ HyperWRT]: Lisavõimalusi vähe, kiire ning lihtne kasutada. Sisaldab NeoCatSplashil põhinevat captive portaali. Laidetakse ebastabiilsust (tahab igapäevaselt resetti jms). Infot on suhteliselt vähe ning viimased kirjutised sellest jäävad aastasse 2004-2006.&lt;br /&gt;
&lt;br /&gt;
Testimine:&lt;br /&gt;
Üritasin üleminekut Linksysi originaal firmware pealt, näitas et uuendamine toimus edukalt, kuid mitte ühtegi muudatust polnud. &lt;br /&gt;
&lt;br /&gt;
=OpenWRT=&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/OpenWRT/RC5/ OpenWRT]&lt;br /&gt;
Märksõnaks:vabadus &amp;lt;br /&amp;gt;&lt;br /&gt;
Firmware edasijõudnud kasutajale, eeldab Linuxi kasutamise kogemust. Kasutajate seas poplulaarne. Ühe staatilise firmware asemel pakub openWRT kirjutatavat failisüsteemi package managmendiga. Vabastab tootja poolt paika pandud aplikatsioonidest/seadistustest ning lubab kõik ära seadistada enda vajaduste järgi. Arendajatele pakub OpenWRT võimaluse ehitada aplikatsioone, ilma et oleks vajadus ehitada framework aplikatsiooni ümber. &lt;br /&gt;
&lt;br /&gt;
Testimine:&lt;br /&gt;
Versioon: White Russian RC5&lt;br /&gt;
Üleminek Linksysi originaal firmwarelt toimis ilusti. &amp;lt;br /&amp;gt;&lt;br /&gt;
Esialgu parool ning kasutajanimi puudusid, kuid suvalisele lingile vajutades, määras kasutajanimeks root ning nõudis parooli loomist. Panin hästi lihtsa parooli, hoiatas, et parool on nõrk kuid ümbervahetamist ei nõudnud. Kasutajamugavuse poolest olid põhiasjad lihtsad ning kergesti arusaadavad. &amp;lt;br /&amp;gt;&lt;br /&gt;
Üritasin teha upgrade HyperWRT firmware peale, kuid asi ebaõnnestus. Ilma ühtegi hoiatust näitamata muutus aadress 192.168.1.1 kättesaamatuks. Peale ruuterile mitmete resettide tegemist tuli avaleht paar korda küll ette veel, kuid seda umbes viieks sekundiks ning kadus seejärel jäädavalt. Ühenduse saatuseks oli limited ning väidetavalt ainus [ http://www.freewebs.com/wrt54grevival/wrt54grevial.htm.html &amp;quot;elustamise&amp;quot;] viis, mis jätab garantii kehtima, ei toiminud. (pingides jäi 192.168.1.1 kättesaamatuks).&lt;br /&gt;
&lt;br /&gt;
Lingid:&lt;br /&gt;
http://openwrt.org/ &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:openwrt_packages.jpg|200px|thumb|left|packages]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:openWRT_wire.jpg|200px|thumb|left|packages]]&lt;br /&gt;
[[File:openWwrt_firewall.jpg|200px|thumb|left|packages]]&lt;br /&gt;
&lt;br /&gt;
=TinyPEAP=&lt;br /&gt;
Märksõnaks turvalisus &amp;lt;br /&amp;gt;&lt;br /&gt;
*[[ http://www.wrtrouters.com/firmware/wrt54gl/TinyPEAP/TinyPEAP]]&lt;br /&gt;
Ühendab endas neli komponenti:&lt;br /&gt;
* AP, mis toetab pordipõhist 802.1X protokolli, mis EAP (Extensible authentication protocol) kasutamise tõttu lubab mitmeid eri autentimise protokolle. TinyPEAP kasutab PEAP protokolli, kuna see on turvaline ning kasutajasõbralik Windowsi ja MacOS-i kasutajate suthes.&lt;br /&gt;
*RADIUS server teostab kliendi autentimist. Kui klient proovib ühenduda, siis kõik autentimispaketid lähevad läbi AP RADIUS serverisse. Kui klient läbib autentimise, siis server saadab vastava teate AP-le. &lt;br /&gt;
*Databaas kontollimaks autentimise andmete õigsust. Sageli kasutatakse Microsoft Active Directory serverit või SQL databaasi.&lt;br /&gt;
*PKI(Public key infrastructure). Autentimisel kasutatakse asümmeetrilisi võtmeid. Võti on vajalik kontrollimaks, et kliendi andmed lähevad õigesse AP-sse, mitte võõrasse. Võtmeid saab jagada läbi PKI või self-signed sertifikaatide kaudu&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Testimine:&#039;&#039;&#039;&lt;br /&gt;
Üritasin üleminekut Linksys originaal firmware pealt, tegi umbes kolmveerand ära ja siis näitas et Failed ning jooksis kokku. Ruuterile restart tehes ärkas asi ellu ning Linksysi originaal firmware töötas ilusti edasi. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lingid: &lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
http://kennethhunt.com/archives/001379.html&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:OpenWwrt_firewall.jpg&amp;diff=10866</id>
		<title>File:OpenWwrt firewall.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:OpenWwrt_firewall.jpg&amp;diff=10866"/>
		<updated>2010-05-28T01:22:50Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Category:Vabavaraline_p%C3%BCsivara/v%C3%A4hemtuntud_firmware&amp;diff=10865</id>
		<title>Category:Vabavaraline püsivara/vähemtuntud firmware</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Category:Vabavaraline_p%C3%BCsivara/v%C3%A4hemtuntud_firmware&amp;diff=10865"/>
		<updated>2010-05-28T01:22:37Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Sissejuhatus=&lt;br /&gt;
Kuna paljudele ei piisa tootjafirmapoolt pakutavast firmwarest, siis on sellest loodud mitmeid eri variante.&lt;br /&gt;
Üldkasutatavate ning tuntumate firmwarede (Tomato ja DD-Wert) kõrval on ka neid, mis keskenduvad spetsiifilisematele valdkondadele ning mida kasutatakse vähem. &lt;br /&gt;
&lt;br /&gt;
Testitavaks seadmeks on Linksys WRT54GL ning uurimisobjektiks sellele ruuterile sobiv firmware. &lt;br /&gt;
&lt;br /&gt;
=Freifunk=&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ Freifunk]: OpenWRT baasil tehtud. Selle firmwarega on kerge üles tuua uusi traadita mesh võrke, kasutades ad-hoc WLAn suhtlemist ning layer 3 routingut OLSR-iga. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Testimine:&lt;br /&gt;
Üritades OpenWRT-lt upgrade teha, asi ebaõnnestus ning ruuter andis otsad. &lt;br /&gt;
&lt;br /&gt;
Lingid: &amp;lt;br /&amp;gt;&lt;br /&gt;
http://ff-firmware.sourceforge.net/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/Freifunk&lt;br /&gt;
 &lt;br /&gt;
=HyperWRT=&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ HyperWRT]: Lisavõimalusi vähe, kiire ning lihtne kasutada. Sisaldab NeoCatSplashil põhinevat captive portaali. Laidetakse ebastabiilsust (tahab igapäevaselt resetti jms). Infot on suhteliselt vähe ning viimased kirjutised sellest jäävad aastasse 2004-2006.&lt;br /&gt;
&lt;br /&gt;
Testimine:&lt;br /&gt;
Üritasin üleminekut Linksysi originaal firmware pealt, näitas et uuendamine toimus edukalt, kuid mitte ühtegi muudatust polnud. &lt;br /&gt;
&lt;br /&gt;
=OpenWRT=&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/OpenWRT/RC5/ OpenWRT]&lt;br /&gt;
Märksõnaks:vabadus &amp;lt;br /&amp;gt;&lt;br /&gt;
Firmware edasijõudnud kasutajale, eeldab Linuxi kasutamise kogemust. Kasutajate seas poplulaarne. Ühe staatilise firmware asemel pakub openWRT kirjutatavat failisüsteemi package managmendiga. Vabastab tootja poolt paika pandud aplikatsioonidest/seadistustest ning lubab kõik ära seadistada enda vajaduste järgi. Arendajatele pakub OpenWRT võimaluse ehitada aplikatsioone, ilma et oleks vajadus ehitada framework aplikatsiooni ümber. &lt;br /&gt;
&lt;br /&gt;
Kasutamine:&lt;br /&gt;
Versioon: White Russian RC5&lt;br /&gt;
Üleminek Linksysi originaal firmwarelt toimis ilusti. &amp;lt;br /&amp;gt;&lt;br /&gt;
Esialgu parool ning kasutajanimi puudusid, kuid suvalisele lingile vajutades, määras kasutajanimeks root ning nõudis parooli loomist. Panin hästi lihtsa parooli, hoiatas, et parool on nõrk kuid ümbervahetamist ei nõudnud. Kasutajamugavuse poolest olid põhiasjad lihtsad ning kergesti arusaadavad. &amp;lt;br /&amp;gt;&lt;br /&gt;
Üritasin teha upgrade HyperWRT firmware peale, kuid asi ebaõnnestus. Ilma ühtegi hoiatust näitamata muutus aadress 192.168.1.1 kättesaamatuks. Peale ruuterile mitmete resettide tegemist tuli avaleht paar korda küll ette veel, kuid seda umbes viieks sekundiks ning kadus seejärel jäädavalt. Ühenduse saatuseks oli limited ning väidetavalt ainus [ http://www.freewebs.com/wrt54grevival/wrt54grevial.htm.html &amp;quot;elustamise&amp;quot;] viis, mis jätab garantii kehtima, ei toiminud. (pingides jäi 192.168.1.1 kättesaamatuks).&lt;br /&gt;
&lt;br /&gt;
Lingid:&lt;br /&gt;
http://openwrt.org/ &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:openwrt_packages.jpg|200px|thumb|left|packages]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:openWRT_wire.jpg|200px|thumb|left|packages]]&lt;br /&gt;
[[File:openWwrt_firewall.jpg|200px|thumb|left|packages]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Sveasoft: One of the most popular, many features (Latest Version: Alchemy)&lt;br /&gt;
*TinyPEAP: Based off Sveasoft&#039;s Satori, this stable RADIUS server is great for advanced users. (Latest Version: 2.50)&lt;br /&gt;
*Thibor: Based on HyperWRT with more featuress. (Latest Version: 15c)&lt;br /&gt;
*Ewrt: Allows users to create hotspots (Latest Version: .03 beta3) - DISCONTINUED&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:OpenWRT_wire.jpg&amp;diff=10864</id>
		<title>File:OpenWRT wire.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:OpenWRT_wire.jpg&amp;diff=10864"/>
		<updated>2010-05-28T01:21:07Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Category:Vabavaraline_p%C3%BCsivara/v%C3%A4hemtuntud_firmware&amp;diff=10863</id>
		<title>Category:Vabavaraline püsivara/vähemtuntud firmware</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Category:Vabavaraline_p%C3%BCsivara/v%C3%A4hemtuntud_firmware&amp;diff=10863"/>
		<updated>2010-05-28T01:17:39Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Sissejuhatus=&lt;br /&gt;
Kuna paljudele ei piisa tootjafirmapoolt pakutavast firmwarest, siis on sellest loodud mitmeid eri variante.&lt;br /&gt;
Üldkasutatavate ning tuntumate firmwarede (Tomato ja DD-Wert) kõrval on ka neid, mis keskenduvad spetsiifilisematele valdkondadele ning mida kasutatakse vähem. &lt;br /&gt;
&lt;br /&gt;
Testitavaks seadmeks on Linksys WRT54GL ning uurimisobjektiks sellele ruuterile sobiv firmware. &lt;br /&gt;
&lt;br /&gt;
=Freifunk=&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ Freifunk]: OpenWRT baasil tehtud. Selle firmwarega on kerge üles tuua uusi traadita mesh võrke, kasutades ad-hoc WLAn suhtlemist ning layer 3 routingut OLSR-iga. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Testimine:&lt;br /&gt;
Üritades OpenWRT-lt upgrade teha, asi ebaõnnestus ning ruuter andis otsad. &lt;br /&gt;
&lt;br /&gt;
Lingid: &amp;lt;br /&amp;gt;&lt;br /&gt;
http://ff-firmware.sourceforge.net/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/Freifunk&lt;br /&gt;
 &lt;br /&gt;
=HyperWRT=&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ HyperWRT]: Lisavõimalusi vähe, kiire ning lihtne kasutada. Sisaldab NeoCatSplashil põhinevat captive portaali. Laidetakse ebastabiilsust (tahab igapäevaselt resetti jms). Infot on suhteliselt vähe ning viimased kirjutised sellest jäävad aastasse 2004-2006.&lt;br /&gt;
&lt;br /&gt;
Testimine:&lt;br /&gt;
Üritasin üleminekut Linksysi originaal firmware pealt, näitas et uuendamine toimus edukalt, kuid mitte ühtegi muudatust polnud. &lt;br /&gt;
&lt;br /&gt;
=OpenWRT=&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/OpenWRT/RC5/ OpenWRT]&lt;br /&gt;
Märksõnaks:vabadus &amp;lt;br /&amp;gt;&lt;br /&gt;
Firmware edasijõudnud kasutajale, eeldab Linuxi kasutamise kogemust. Kasutajate seas poplulaarne. Ühe staatilise firmware asemel pakub openWRT kirjutatavat failisüsteemi package managmendiga. Vabastab tootja poolt paika pandud aplikatsioonidest/seadistustest ning lubab kõik ära seadistada enda vajaduste järgi. Arendajatele pakub OpenWRT võimaluse ehitada aplikatsioone, ilma et oleks vajadus ehitada framework aplikatsiooni ümber. &lt;br /&gt;
&lt;br /&gt;
Kasutamine:&lt;br /&gt;
Versioon: White Russian RC5&lt;br /&gt;
Üleminek Linksysi originaal firmwarelt toimis ilusti. &amp;lt;br /&amp;gt;&lt;br /&gt;
Esialgu parool ning kasutajanimi puudusid, kuid suvalisele lingile vajutades, määras kasutajanimeks root ning nõudis parooli loomist. Panin hästi lihtsa parooli, hoiatas, et parool on nõrk kuid ümbervahetamist ei nõudnud. Kasutajamugavuse poolest olid põhiasjad lihtsad ning kergesti arusaadavad. &amp;lt;br /&amp;gt;&lt;br /&gt;
Üritasin teha upgrade HyperWRT firmware peale, kuid asi ebaõnnestus. Ilma ühtegi hoiatust näitamata muutus aadress 192.168.1.1 kättesaamatuks. Peale ruuterile mitmete resettide tegemist tuli avaleht paar korda küll ette veel, kuid seda umbes viieks sekundiks ning kadus seejärel jäädavalt. Ühenduse saatuseks oli limited ning väidetavalt ainus [ http://www.freewebs.com/wrt54grevival/wrt54grevial.htm.html &amp;quot;elustamise&amp;quot;] viis, mis jätab garantii kehtima, ei toiminud. (pingides jäi 192.168.1.1 kättesaamatuks).&lt;br /&gt;
&lt;br /&gt;
[[File:openwrt_packages.jpg]]&lt;br /&gt;
&lt;br /&gt;
Lingid:&lt;br /&gt;
http://openwrt.org/ &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Sveasoft: One of the most popular, many features (Latest Version: Alchemy)&lt;br /&gt;
*TinyPEAP: Based off Sveasoft&#039;s Satori, this stable RADIUS server is great for advanced users. (Latest Version: 2.50)&lt;br /&gt;
*Thibor: Based on HyperWRT with more featuress. (Latest Version: 15c)&lt;br /&gt;
*Ewrt: Allows users to create hotspots (Latest Version: .03 beta3) - DISCONTINUED&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:Openwrt_packages.jpg&amp;diff=10862</id>
		<title>File:Openwrt packages.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:Openwrt_packages.jpg&amp;diff=10862"/>
		<updated>2010-05-28T01:16:23Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Category:Vabavaraline_p%C3%BCsivara/v%C3%A4hemtuntud_firmware&amp;diff=10861</id>
		<title>Category:Vabavaraline püsivara/vähemtuntud firmware</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Category:Vabavaraline_p%C3%BCsivara/v%C3%A4hemtuntud_firmware&amp;diff=10861"/>
		<updated>2010-05-28T01:13:31Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: Created page with &amp;#039;=Sissejuhatus= Kuna paljudele ei piisa tootjafirmapoolt pakutavast firmwarest, siis on sellest loodud mitmeid eri variante. Üldkasutatavate ning tuntumate firmwarede (Tomato ja …&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Sissejuhatus=&lt;br /&gt;
Kuna paljudele ei piisa tootjafirmapoolt pakutavast firmwarest, siis on sellest loodud mitmeid eri variante.&lt;br /&gt;
Üldkasutatavate ning tuntumate firmwarede (Tomato ja DD-Wert) kõrval on ka neid, mis keskenduvad spetsiifilisematele valdkondadele ning mida kasutatakse vähem. &lt;br /&gt;
&lt;br /&gt;
Testitavaks seadmeks on Linksys WRT54GL ning uurimisobjektiks sellele ruuterile sobiv firmware. &lt;br /&gt;
&lt;br /&gt;
=Freifunk=&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ Freifunk]: OpenWRT baasil tehtud. Selle firmwarega on kerge üles tuua uusi traadita mesh võrke, kasutades ad-hoc WLAn suhtlemist ning layer 3 routingut OLSR-iga. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Testimine:&lt;br /&gt;
Üritades OpenWRT-lt upgrade teha, asi ebaõnnestus ning ruuter andis otsad. &lt;br /&gt;
&lt;br /&gt;
Lingid: &amp;lt;br /&amp;gt;&lt;br /&gt;
http://ff-firmware.sourceforge.net/ &amp;lt;br /&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/Freifunk&lt;br /&gt;
 &lt;br /&gt;
=HyperWRT=&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/Freifunk/ HyperWRT]: Lisavõimalusi vähe, kiire ning lihtne kasutada. Sisaldab NeoCatSplashil põhinevat captive portaali. Laidetakse ebastabiilsust (tahab igapäevaselt resetti jms). Infot on suhteliselt vähe ning viimased kirjutised sellest jäävad aastasse 2004-2006.&lt;br /&gt;
&lt;br /&gt;
Testimine:&lt;br /&gt;
Üritasin üleminekut Linksysi originaal firmware pealt, näitas et uuendamine toimus edukalt, kuid mitte ühtegi muudatust polnud. &lt;br /&gt;
&lt;br /&gt;
=OpenWRT=&lt;br /&gt;
*[http://www.wrtrouters.com/firmware/wrt54gl/OpenWRT/RC5/ OpenWRT]&lt;br /&gt;
Märksõnaks:vabadus &amp;lt;br /&amp;gt;&lt;br /&gt;
Firmware edasijõudnud kasutajale, eeldab Linuxi kasutamise kogemust. Kasutajate seas poplulaarne. Ühe staatilise firmware asemel pakub openWRT kirjutatavat failisüsteemi package managmendiga. Vabastab tootja poolt paika pandud aplikatsioonidest/seadistustest ning lubab kõik ära seadistada enda vajaduste järgi. Arendajatele pakub OpenWRT võimaluse ehitada aplikatsioone, ilma et oleks vajadus ehitada framework aplikatsiooni ümber. &lt;br /&gt;
&lt;br /&gt;
Kasutamine:&lt;br /&gt;
Versioon: White Russian RC5&lt;br /&gt;
Üleminek Linksysi originaal firmwarelt toimis ilusti. &amp;lt;br /&amp;gt;&lt;br /&gt;
Esialgu parool ning kasutajanimi puudusid, kuid suvalisele lingile vajutades, määras kasutajanimeks root ning nõudis parooli loomist. Panin hästi lihtsa parooli, hoiatas, et parool on nõrk kuid ümbervahetamist ei nõudnud. Kasutajamugavuse poolest olid põhiasjad lihtsad ning kergesti arusaadavad. &amp;lt;br /&amp;gt;&lt;br /&gt;
Üritasin teha upgrade HyperWRT firmware peale, kuid asi ebaõnnestus. Ilma ühtegi hoiatust näitamata muutus aadress 192.168.1.1 kättesaamatuks. Peale ruuterile mitmete resettide tegemist tuli avaleht paar korda küll ette veel, kuid seda umbes viieks sekundiks ning kadus seejärel jäädavalt. Ühenduse saatuseks oli limited ning väidetavalt ainus [ http://www.freewebs.com/wrt54grevival/wrt54grevial.htm.html &amp;quot;elustamise&amp;quot;] viis, mis jätab garantii kehtima, ei toiminud. (pingides jäi 192.168.1.1 kättesaamatuks).&lt;br /&gt;
&lt;br /&gt;
[[File:Example.jpg]]&lt;br /&gt;
&lt;br /&gt;
Lingid:&lt;br /&gt;
http://openwrt.org/ &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Sveasoft: One of the most popular, many features (Latest Version: Alchemy)&lt;br /&gt;
*TinyPEAP: Based off Sveasoft&#039;s Satori, this stable RADIUS server is great for advanced users. (Latest Version: 2.50)&lt;br /&gt;
*Thibor: Based on HyperWRT with more featuress. (Latest Version: 15c)&lt;br /&gt;
*Ewrt: Allows users to create hotspots (Latest Version: .03 beta3) - DISCONTINUED&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10426</id>
		<title>Meeskond &quot;näljased&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10426"/>
		<updated>2010-05-19T17:34:00Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: /* 1. XML */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1. XML ==&lt;br /&gt;
XML-i tegime menüü kohta. XSLT faile on kaks: üks teeb XML-i HTML-i ning teine vahetab elementide ja atribuutide kohtad. XML faili kohta on olemas ka kirjeldav schema. Raskeimaks osaks oli elementidest atribuutide tegemine, asi küll toimis, kuid vormistus oli kole ning auklik. Schema vajas ka veidi harjumist, kuid kui asi käppa sai, siis läks imelihtsaks. Koodi leiab lehe altosast.&lt;br /&gt;
&lt;br /&gt;
== 2. Teenus ==&lt;br /&gt;
2.1&lt;br /&gt;
&#039;&#039;&#039;Teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:   &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutajagrupid&#039;&#039;&#039;:Hetkel on 3 kasutajagruppi: admin (saab teha kõike), müüja (saab teha kõike peale kasutajate ja kasutajagruppide loomise) ning tavakasutajad. On olemas eraldi funktsioon ka kasutajagruppide loomiseks. Iga meetodi käivitamisel kontrollitakse kasutajaõigusi. Ühel kasutajal saab olla mitu kasutajagruppi. &lt;br /&gt;
***Meetodid:&lt;br /&gt;
**public System.Collections.ObjectModel.Collection&amp;lt;Kategooria&amp;gt; kuvaKasutajaGrupid()- kuvab olemasolevad kasutajagrupid ja nende id-d.&lt;br /&gt;
**public string lisaKasutajagrupp()- lisab antud nimetusega kasutajagrupi&lt;br /&gt;
**public string kustutaKasutajagrupp()- kustutab antud ig-ga kasutajagrupi. Kui antud id-ga gruppi pole, siis annab exeptioni.&lt;br /&gt;
          &lt;br /&gt;
*&#039;&#039;&#039;Kasutajad&#039;&#039;&#039;. Kasutajate loomiseks on 2 funktsiooni: üks tavakasutajate tegemiseks, mis ei eelda sisselogimist ning teine, mida saab teostada vaid administraator (ja lisada müüjaid või teisi administraatoreid). Kasutajate loomisel kontrollitakse seda, kas kasutajanimi on juba kasutusel. Kasutaja id ning roll sisestatakse ka tabelisse kasutajaRollis, mis näitab kasutajatel olevaid rolle. Kasutajate kustutamine käib otse andmebaasist. Kasutaja loomisel salvestatakse andmebaasi kasutaja parool hashitud kujul (algoritmiks sha1).&lt;br /&gt;
***Meetodid:&lt;br /&gt;
**public string looKasutaja()- Kastuamiseks administraatorile. Võimaldab luua uue kasutaja. Kontrollib kasutajanime olemasolu. Lisab kasutaja rolli id ja kasutaja id ka tabelisse kasutajaRollis.&lt;br /&gt;
**public string looTavaKasutaja()- Võimaldab ilma sisselogimiseta luua tavakasutaja. Kasutaja rolliks määratakse automaatselt tavakasutaja.&lt;br /&gt;
      &lt;br /&gt;
*&#039;&#039;&#039;Tooted&#039;&#039;&#039;. Kasutajatel (hetkel müüjal) on võimalus lisada ja kustutada tooteid toodete kategooriaid, hindu jms. &lt;br /&gt;
***Meetodid:&lt;br /&gt;
**public System.Collections.ObjectModel.Collection&amp;lt;Toode&amp;gt; kuvaTooted()-kuvab kõik tooted&lt;br /&gt;
**public string lisaToode()- võimaldab lisada toote ning määrata sellele kategooria.&lt;br /&gt;
**public string kustutaToode()- võimaldab kusutada antud ID-ga toote&lt;br /&gt;
**public List&amp;lt;String&amp;gt; katToList()-teeb kasutajatest arraylisti&lt;br /&gt;
**public System.Collections.ObjectModel.Collection&amp;lt;Kategooria&amp;gt; kuvaKategooriad()-kuvab kõik olemasolevad kategooriad ja nende id-d&lt;br /&gt;
**public string lisaKategooria()- võimaldab lisada uue kategooria&lt;br /&gt;
**public string kustutaKategooria()-kustutab antud id-ga kategooria. kontrollib, kas sellise id-ga kategooria on üldse olemas.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sessioonid&#039;&#039;&#039;. Kasutaja edukal sisselogimisel luuakse unikaalne juhuslik sessiooni võti, mille olemasolu kontrollitakse iga sisselogimist eeldava meetodi käivitamisel. Session_key salvestatakse andmebaasis vastavas väljas. Eraldi on funktsioonid sessiooni olemasolu kontrollimiseks ning uuendamiseks. Hetkel on timeoudiks 10 minutit. Sessiooni kehtivust kontrollitakse ka kasutajaõiguste kontrollimisel. &lt;br /&gt;
      &lt;br /&gt;
* &#039;&#039;&#039;Logimine&#039;&#039;&#039;. Võrreldakse sisestatud kasjutajanime ning sisestatud parooli hashi andmebaasis olevatega. Kui need ühtivad, siis sisselogimine on edukas ning luuakse unikaalne session key, mis salvestatakse andmebaasi. Sisselogimine ning sessiooni olemasolu on eelduseks meetodite käivitamiseks. Kui sessioon aegub, siis toimub kasutaja väljalogimine. Väljalogimisfunktsioon kirjutab üle sessiooni aegumise aja, pannes selleks hetkelise kellaaja.  &lt;br /&gt;
***Meetodid:&lt;br /&gt;
**public string logIn()- kontrollib kasutajanime ja parooli. Edukal sisselogimisel salvestab sessiooni andmebaasi ning määrab aegumisajaks hetkeaeg + 10 minutit. &lt;br /&gt;
**public void logOut()- kirjutab sessiooni aegumise aja üle hetkeajaga.&lt;br /&gt;
&lt;br /&gt;
*Lisaks on veel hunnik &#039;&#039;&#039;abifunktsioone&#039;&#039;&#039;, näiteks parooli hashimine, väärtuste tagastamine jms.&lt;br /&gt;
**public string hash()- hashib ära parooli kasutades SHA1 algoritmi&lt;br /&gt;
**public bool kontrolliSessiooni()- vaatab, kas sessioon on aktiivne&lt;br /&gt;
**private bool kontrolliOiguseid()- vaatab kas antud kasutajal on õigus soovitud toiminguid teha&lt;br /&gt;
**enum Rollid- määratletakse kasutusel olevad rollinimed&lt;br /&gt;
**public int kysiKasutajagrupiID()- kasutajanimele vastava kasutajagrupi id küsimine tabelist kasutajagrupp&lt;br /&gt;
**private string kysiKasutajagrupinimetus()- kõikide kasutajagruppide nimetuste küsimiseks tabelist kasutajagrupp&lt;br /&gt;
**private string kysiKasutajanimi()-kõikide kasutajanimede küsimiseks tabelist kasutaja&lt;br /&gt;
**private int kysikasutajaIDsesioon()- kasutaja id küsimiseks tabelist sessioon&lt;br /&gt;
**private int kysiKasutajaID()- kasutaja id küsimiseks tabelist kasutaja&lt;br /&gt;
**private void salvestaSessioon()- sessiooni salvestamine andmebaasi&lt;br /&gt;
**public void uuendaSessiooni()- sessiooni uuendamine&lt;br /&gt;
**public bool kontrolliParool()- sisestatud parooli hashimine võrdlemine andmebaasis olevaga&lt;br /&gt;
&lt;br /&gt;
[[http://enos.itcollege.ee/~ljogiste/VR2/ TeenuseSource]]&lt;br /&gt;
   &lt;br /&gt;
Klient on kirjutatud WPF-is ning hetkel on võimalik kuvada tooteid, kasutajaid, gruppe ning kasutajagruppe.&lt;br /&gt;
&lt;br /&gt;
2.2&lt;br /&gt;
&#039;&#039;&#039;Menüü teenuse klient&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et meie tore teenus oleks veidi rohkem käega katsutavam, sai külge tehtud ka klient, mis realiseeriks põhifunktsioone. Kliendiks on WPF rakendus ning funktsionaalsus on järgmine:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sisse logimine&#039;&#039;&#039;: rakenduse käivitamisel ahistatakse kasutajat sisselogimisaknaga, valede andmete korral saab kasutaja ilusa punase veateate. Õnnestumise korral genereeritakse sessioonivõti, ning kantakse teda pidevalt edasi.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Toodete kuvamine,lisamine, kustutamine&#039;&#039;&#039;: kuvatakse väike popup, kus hunnik lahtreid ning kasutaja saab neid täites lisada toote. ID alusel saab kustutada ebasoovitava toote. Õnnestumisel või ebaõnnestumisel kuvatakse muidugi veateade.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kategooriate kuvamine, lisamine, kustutamine&#039;&#039;&#039;: iga toit tuleb paigutada kategooriasse, siin on koht kus neid luua saab. ID alusel jällegi kustutamine.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutajate kuvamine, lisamine&#039;&#039;&#039;: siin kuvatakse kõik süsteemis olevad kasutajad, ning toimub ka lisamine&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutaja gruppide kuvamine (kustutamine)&#039;&#039;&#039;: kuvatakse kehtivad kasutaja grupid, meetod ka kustutamiseks&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Pildid&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/rakendus_login.png Login Aken]&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/klient_ba.png BackEnd]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Klient&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/VR2__Menyy.rar Source]&lt;br /&gt;
&lt;br /&gt;
== 3. Flickr API ==&lt;br /&gt;
[http://i40.tinypic.com/k3r90i.png Pilt]&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:&lt;br /&gt;
*&#039;&#039;&#039;Pildiotsing&#039;&#039;&#039;: Kasutajal on võimalus otsida otsingusõna järgi pilte Flickri pildibaasist. Pilte otsitakse kasutajate galeriidest, pildikomplektidest ja niisama üles laetud piltidest, mis on &#039;&#039;publicud&#039;&#039; ehk avalikud. Kui kasutaja sisestab vähem kui 2 tähte, kuvatakse veateade. See on Flickri poolt samuti kinni keeratud, et ühetähe otsinguid ei teostataks. Üldjoontes ei oleks sellel ka mingisugust mõtet. Otsingusõna sisestamisel kuvatakse paremale aknasse 5 pildi &#039;&#039;thumbnaili&#039;&#039;, mis on kõige värskemad. &#039;&#039;Thumbnailidest&#039;&#039; vasakul all nurgas kuvatakse, mitu lehekülge pilte leiti ja mitmendal leheküljel parasjagu ollakse. Olles esimesel lehel ja/või teostades esimest otsingut, nuppu &amp;quot;eelmine&amp;quot; ei kuvata. Seejärel saab kasutaja hakata navigeerima lehekülgedel &amp;quot;eelmine&amp;quot; ja &amp;quot;järgmine&amp;quot; nuppudega. Valides thumbnaili välja ja klikkides selle peale, kuvatakse pilt suurena, laiusega 380 pikslit ja kõrgusega 380 pikslit. Kui suur pilt on kuvatud, avaneb ka võimalus vajutada nuppu &amp;quot;Ava kasutaja profiil&amp;quot;. Sellega pääseb API kasutaja ligi suure pildi kasutaja profiilile. See on sobilik näiteks kui API kasutajale hakkas huvi pakkuma pildi üles laadinud kasutaja, ning soovib tema teisigi pilte sirvida.&lt;br /&gt;
*&#039;&#039;&#039;Inimese otsing&#039;&#039;&#039;: Kasutajal on võimalus otsida emaili järgi Flickri kasutajaid. Otsingulahtrisse mitte millegi sisestamisel või jättes sisestamata &amp;quot;@&amp;quot; sümbol, kuvatakse veateade. Vastasel korral kuvatakse kas kasutaja Flickri kasutajanimi, pärisnimi (kui see on tal määratud) ja tema profiili URL. Kui kasutaja on leitud, kuvatakse ka nuppu &amp;quot;Ava veebisait&amp;quot;, millega pääseb kasutaja ligi ka tema profiilile, kirjutamata ise midagi veebibrauseri aknasse. Kui kasutajat ei leitud, antakse ka vastav veateade.&lt;br /&gt;
*&#039;&#039;&#039;Fotokomplektide kuvamine&#039;&#039;&#039;: Kasutaja saab vaadata oma fotokomplekte. Selleks tuleb kõigepealt vastava nupuga omandad &#039;&#039;frob&#039;&#039;, mis on Flickri API ajutine kood (kehtib ühe tunni). Kui &#039;&#039;frob&#039;&#039; on omandatud, avaneb kasutajale nupp &amp;quot;omanda token&amp;quot;. &#039;&#039;Tokeniga&#039;&#039; on Flickri poolne frobi teisendus &#039;&#039;tokeniks&#039;&#039;, mida kasutatakse edaspidi kasutaja identifitseerimiseks. Kui &#039;&#039;token&#039;&#039; on omandatud, kuvatakse teade &amp;quot;token omandatud&amp;quot; või vastasel juhul &amp;quot;token omandamata&amp;quot;. Seejärel ilmub nähtavale nupp &amp;quot;tiri fotosetid&amp;quot;. Sellele klikkides kuvatakse thumbnailidena kasutaja fotokomplektid.&lt;br /&gt;
*&#039;&#039;&#039;Piltide üleslaadimine&#039;&#039;&#039;: Kõigepealt tuleb omandada &#039;&#039;frob&#039;&#039; ja &#039;&#039;token&#039;&#039;, nagu eelnevas punktis kirjeldatud. Seejärel saab kasutaja üles laadida oma pilte arvutist &#039;&#039;OpenFileDialogi&#039;&#039; abil. Seejärel saab sisestada pildile tiitli ehk nime, kirjelduse ja &#039;&#039;tagi&#039;&#039;, mida aga ei pea tegema (Flickr samuti ei nõua nende atribuutide olemasolu). Olles salvestanud atribuudid ilmneb nupp &amp;quot;lae üles&amp;quot;. Sellele vajutades laetakse pilt kasutaja üldpiltide sekka üles.&lt;br /&gt;
&lt;br /&gt;
Klient, installer ja lähtekood:&lt;br /&gt;
[http://enos.itcollege.ee/~jhannus/VRII/FlickrWPF.zip Download]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;menyy xmlns:xsi =&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
       xsi:noNamespaceSchemaLocation=&amp;quot;menyy_schema.xsd&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;pearoad&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Seapraad&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kotlett&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;42&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
  &amp;lt;/pearoad&amp;gt;&lt;br /&gt;
  &amp;lt;lisandid&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Riis&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;7&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;kartul&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
  &amp;lt;/lisandid&amp;gt;&lt;br /&gt;
  &amp;lt;joogid&amp;gt;&lt;br /&gt;
    &amp;lt;soojad&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Kohv&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Tee&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;15&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
    &amp;lt;/soojad&amp;gt;&lt;br /&gt;
    &amp;lt;kylmad&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Morss&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Vesi&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;3&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
    &amp;lt;/kylmad&amp;gt;&lt;br /&gt;
  &amp;lt;/joogid&amp;gt;&lt;br /&gt;
  &amp;lt;magustoidud&amp;gt;&lt;br /&gt;
    &amp;lt;magustoit&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kisell&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;14&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/magustoit&amp;gt;&lt;br /&gt;
  &amp;lt;/magustoidud&amp;gt;&lt;br /&gt;
&amp;lt;/menyy&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT atribuutide tegemiseks elementidest ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot; version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;*[*]&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:when test=&amp;quot;not(@*)&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;not(*) and not(@*) &amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;{local-name(.)}&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML schema ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- definition of simple elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;nimi&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;hind&amp;quot; type=&amp;quot;xs:decimal&amp;quot;/&amp;gt;    &lt;br /&gt;
  &amp;lt;!-- definition of complex elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;menyy&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;pearoad&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;lisandid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;joogid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;magustoidud&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoog&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisandid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
	         &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisand&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;joogid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soojad&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylmad&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soojad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
	        &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylmad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylm&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soe&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoidud&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;magustoit&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoit&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT andmete kuvamiseks html-ina ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;!--&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;style.css&amp;quot; /&amp;gt;--&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;font-color: #D0D0D0;font-family:verdana;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Menüü&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#77a1af;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Pearoad&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;                 &lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/pearoad/pearoog&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c08e1d;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Lisandid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/lisandid/lisand&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c47121;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Kuumad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/soojad/soe&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#b03428;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Külmad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/kylmad/kylm&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#862419;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Magustoidud&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/magustoidud/magustoit&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10425</id>
		<title>Meeskond &quot;näljased&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10425"/>
		<updated>2010-05-19T17:33:28Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: /* 2. Teenus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1. XML ==&lt;br /&gt;
XML-i tegime menüü kohta. XSLT faile on kaks: üks teeb XML-i HTML-i ning teine vahetab elementide ja atribuutide kohtad. XML faili kohta on olemas ka kirjeldav schema. Raskeimaks osaks oli elementidest atribuutide tegemine, asi küll toimis, kuid vormistus oli kole ning auklik. Schema vajas ka veidi harjumist, kuid kui asi käppa sai, siis läks imelihtsaks. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2. Teenus ==&lt;br /&gt;
2.1&lt;br /&gt;
&#039;&#039;&#039;Teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:   &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutajagrupid&#039;&#039;&#039;:Hetkel on 3 kasutajagruppi: admin (saab teha kõike), müüja (saab teha kõike peale kasutajate ja kasutajagruppide loomise) ning tavakasutajad. On olemas eraldi funktsioon ka kasutajagruppide loomiseks. Iga meetodi käivitamisel kontrollitakse kasutajaõigusi. Ühel kasutajal saab olla mitu kasutajagruppi. &lt;br /&gt;
***Meetodid:&lt;br /&gt;
**public System.Collections.ObjectModel.Collection&amp;lt;Kategooria&amp;gt; kuvaKasutajaGrupid()- kuvab olemasolevad kasutajagrupid ja nende id-d.&lt;br /&gt;
**public string lisaKasutajagrupp()- lisab antud nimetusega kasutajagrupi&lt;br /&gt;
**public string kustutaKasutajagrupp()- kustutab antud ig-ga kasutajagrupi. Kui antud id-ga gruppi pole, siis annab exeptioni.&lt;br /&gt;
          &lt;br /&gt;
*&#039;&#039;&#039;Kasutajad&#039;&#039;&#039;. Kasutajate loomiseks on 2 funktsiooni: üks tavakasutajate tegemiseks, mis ei eelda sisselogimist ning teine, mida saab teostada vaid administraator (ja lisada müüjaid või teisi administraatoreid). Kasutajate loomisel kontrollitakse seda, kas kasutajanimi on juba kasutusel. Kasutaja id ning roll sisestatakse ka tabelisse kasutajaRollis, mis näitab kasutajatel olevaid rolle. Kasutajate kustutamine käib otse andmebaasist. Kasutaja loomisel salvestatakse andmebaasi kasutaja parool hashitud kujul (algoritmiks sha1).&lt;br /&gt;
***Meetodid:&lt;br /&gt;
**public string looKasutaja()- Kastuamiseks administraatorile. Võimaldab luua uue kasutaja. Kontrollib kasutajanime olemasolu. Lisab kasutaja rolli id ja kasutaja id ka tabelisse kasutajaRollis.&lt;br /&gt;
**public string looTavaKasutaja()- Võimaldab ilma sisselogimiseta luua tavakasutaja. Kasutaja rolliks määratakse automaatselt tavakasutaja.&lt;br /&gt;
      &lt;br /&gt;
*&#039;&#039;&#039;Tooted&#039;&#039;&#039;. Kasutajatel (hetkel müüjal) on võimalus lisada ja kustutada tooteid toodete kategooriaid, hindu jms. &lt;br /&gt;
***Meetodid:&lt;br /&gt;
**public System.Collections.ObjectModel.Collection&amp;lt;Toode&amp;gt; kuvaTooted()-kuvab kõik tooted&lt;br /&gt;
**public string lisaToode()- võimaldab lisada toote ning määrata sellele kategooria.&lt;br /&gt;
**public string kustutaToode()- võimaldab kusutada antud ID-ga toote&lt;br /&gt;
**public List&amp;lt;String&amp;gt; katToList()-teeb kasutajatest arraylisti&lt;br /&gt;
**public System.Collections.ObjectModel.Collection&amp;lt;Kategooria&amp;gt; kuvaKategooriad()-kuvab kõik olemasolevad kategooriad ja nende id-d&lt;br /&gt;
**public string lisaKategooria()- võimaldab lisada uue kategooria&lt;br /&gt;
**public string kustutaKategooria()-kustutab antud id-ga kategooria. kontrollib, kas sellise id-ga kategooria on üldse olemas.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sessioonid&#039;&#039;&#039;. Kasutaja edukal sisselogimisel luuakse unikaalne juhuslik sessiooni võti, mille olemasolu kontrollitakse iga sisselogimist eeldava meetodi käivitamisel. Session_key salvestatakse andmebaasis vastavas väljas. Eraldi on funktsioonid sessiooni olemasolu kontrollimiseks ning uuendamiseks. Hetkel on timeoudiks 10 minutit. Sessiooni kehtivust kontrollitakse ka kasutajaõiguste kontrollimisel. &lt;br /&gt;
      &lt;br /&gt;
* &#039;&#039;&#039;Logimine&#039;&#039;&#039;. Võrreldakse sisestatud kasjutajanime ning sisestatud parooli hashi andmebaasis olevatega. Kui need ühtivad, siis sisselogimine on edukas ning luuakse unikaalne session key, mis salvestatakse andmebaasi. Sisselogimine ning sessiooni olemasolu on eelduseks meetodite käivitamiseks. Kui sessioon aegub, siis toimub kasutaja väljalogimine. Väljalogimisfunktsioon kirjutab üle sessiooni aegumise aja, pannes selleks hetkelise kellaaja.  &lt;br /&gt;
***Meetodid:&lt;br /&gt;
**public string logIn()- kontrollib kasutajanime ja parooli. Edukal sisselogimisel salvestab sessiooni andmebaasi ning määrab aegumisajaks hetkeaeg + 10 minutit. &lt;br /&gt;
**public void logOut()- kirjutab sessiooni aegumise aja üle hetkeajaga.&lt;br /&gt;
&lt;br /&gt;
*Lisaks on veel hunnik &#039;&#039;&#039;abifunktsioone&#039;&#039;&#039;, näiteks parooli hashimine, väärtuste tagastamine jms.&lt;br /&gt;
**public string hash()- hashib ära parooli kasutades SHA1 algoritmi&lt;br /&gt;
**public bool kontrolliSessiooni()- vaatab, kas sessioon on aktiivne&lt;br /&gt;
**private bool kontrolliOiguseid()- vaatab kas antud kasutajal on õigus soovitud toiminguid teha&lt;br /&gt;
**enum Rollid- määratletakse kasutusel olevad rollinimed&lt;br /&gt;
**public int kysiKasutajagrupiID()- kasutajanimele vastava kasutajagrupi id küsimine tabelist kasutajagrupp&lt;br /&gt;
**private string kysiKasutajagrupinimetus()- kõikide kasutajagruppide nimetuste küsimiseks tabelist kasutajagrupp&lt;br /&gt;
**private string kysiKasutajanimi()-kõikide kasutajanimede küsimiseks tabelist kasutaja&lt;br /&gt;
**private int kysikasutajaIDsesioon()- kasutaja id küsimiseks tabelist sessioon&lt;br /&gt;
**private int kysiKasutajaID()- kasutaja id küsimiseks tabelist kasutaja&lt;br /&gt;
**private void salvestaSessioon()- sessiooni salvestamine andmebaasi&lt;br /&gt;
**public void uuendaSessiooni()- sessiooni uuendamine&lt;br /&gt;
**public bool kontrolliParool()- sisestatud parooli hashimine võrdlemine andmebaasis olevaga&lt;br /&gt;
&lt;br /&gt;
[[http://enos.itcollege.ee/~ljogiste/VR2/ TeenuseSource]]&lt;br /&gt;
   &lt;br /&gt;
Klient on kirjutatud WPF-is ning hetkel on võimalik kuvada tooteid, kasutajaid, gruppe ning kasutajagruppe.&lt;br /&gt;
&lt;br /&gt;
2.2&lt;br /&gt;
&#039;&#039;&#039;Menüü teenuse klient&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et meie tore teenus oleks veidi rohkem käega katsutavam, sai külge tehtud ka klient, mis realiseeriks põhifunktsioone. Kliendiks on WPF rakendus ning funktsionaalsus on järgmine:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sisse logimine&#039;&#039;&#039;: rakenduse käivitamisel ahistatakse kasutajat sisselogimisaknaga, valede andmete korral saab kasutaja ilusa punase veateate. Õnnestumise korral genereeritakse sessioonivõti, ning kantakse teda pidevalt edasi.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Toodete kuvamine,lisamine, kustutamine&#039;&#039;&#039;: kuvatakse väike popup, kus hunnik lahtreid ning kasutaja saab neid täites lisada toote. ID alusel saab kustutada ebasoovitava toote. Õnnestumisel või ebaõnnestumisel kuvatakse muidugi veateade.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kategooriate kuvamine, lisamine, kustutamine&#039;&#039;&#039;: iga toit tuleb paigutada kategooriasse, siin on koht kus neid luua saab. ID alusel jällegi kustutamine.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutajate kuvamine, lisamine&#039;&#039;&#039;: siin kuvatakse kõik süsteemis olevad kasutajad, ning toimub ka lisamine&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutaja gruppide kuvamine (kustutamine)&#039;&#039;&#039;: kuvatakse kehtivad kasutaja grupid, meetod ka kustutamiseks&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Pildid&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/rakendus_login.png Login Aken]&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/klient_ba.png BackEnd]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Klient&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/VR2__Menyy.rar Source]&lt;br /&gt;
&lt;br /&gt;
== 3. Flickr API ==&lt;br /&gt;
[http://i40.tinypic.com/k3r90i.png Pilt]&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:&lt;br /&gt;
*&#039;&#039;&#039;Pildiotsing&#039;&#039;&#039;: Kasutajal on võimalus otsida otsingusõna järgi pilte Flickri pildibaasist. Pilte otsitakse kasutajate galeriidest, pildikomplektidest ja niisama üles laetud piltidest, mis on &#039;&#039;publicud&#039;&#039; ehk avalikud. Kui kasutaja sisestab vähem kui 2 tähte, kuvatakse veateade. See on Flickri poolt samuti kinni keeratud, et ühetähe otsinguid ei teostataks. Üldjoontes ei oleks sellel ka mingisugust mõtet. Otsingusõna sisestamisel kuvatakse paremale aknasse 5 pildi &#039;&#039;thumbnaili&#039;&#039;, mis on kõige värskemad. &#039;&#039;Thumbnailidest&#039;&#039; vasakul all nurgas kuvatakse, mitu lehekülge pilte leiti ja mitmendal leheküljel parasjagu ollakse. Olles esimesel lehel ja/või teostades esimest otsingut, nuppu &amp;quot;eelmine&amp;quot; ei kuvata. Seejärel saab kasutaja hakata navigeerima lehekülgedel &amp;quot;eelmine&amp;quot; ja &amp;quot;järgmine&amp;quot; nuppudega. Valides thumbnaili välja ja klikkides selle peale, kuvatakse pilt suurena, laiusega 380 pikslit ja kõrgusega 380 pikslit. Kui suur pilt on kuvatud, avaneb ka võimalus vajutada nuppu &amp;quot;Ava kasutaja profiil&amp;quot;. Sellega pääseb API kasutaja ligi suure pildi kasutaja profiilile. See on sobilik näiteks kui API kasutajale hakkas huvi pakkuma pildi üles laadinud kasutaja, ning soovib tema teisigi pilte sirvida.&lt;br /&gt;
*&#039;&#039;&#039;Inimese otsing&#039;&#039;&#039;: Kasutajal on võimalus otsida emaili järgi Flickri kasutajaid. Otsingulahtrisse mitte millegi sisestamisel või jättes sisestamata &amp;quot;@&amp;quot; sümbol, kuvatakse veateade. Vastasel korral kuvatakse kas kasutaja Flickri kasutajanimi, pärisnimi (kui see on tal määratud) ja tema profiili URL. Kui kasutaja on leitud, kuvatakse ka nuppu &amp;quot;Ava veebisait&amp;quot;, millega pääseb kasutaja ligi ka tema profiilile, kirjutamata ise midagi veebibrauseri aknasse. Kui kasutajat ei leitud, antakse ka vastav veateade.&lt;br /&gt;
*&#039;&#039;&#039;Fotokomplektide kuvamine&#039;&#039;&#039;: Kasutaja saab vaadata oma fotokomplekte. Selleks tuleb kõigepealt vastava nupuga omandad &#039;&#039;frob&#039;&#039;, mis on Flickri API ajutine kood (kehtib ühe tunni). Kui &#039;&#039;frob&#039;&#039; on omandatud, avaneb kasutajale nupp &amp;quot;omanda token&amp;quot;. &#039;&#039;Tokeniga&#039;&#039; on Flickri poolne frobi teisendus &#039;&#039;tokeniks&#039;&#039;, mida kasutatakse edaspidi kasutaja identifitseerimiseks. Kui &#039;&#039;token&#039;&#039; on omandatud, kuvatakse teade &amp;quot;token omandatud&amp;quot; või vastasel juhul &amp;quot;token omandamata&amp;quot;. Seejärel ilmub nähtavale nupp &amp;quot;tiri fotosetid&amp;quot;. Sellele klikkides kuvatakse thumbnailidena kasutaja fotokomplektid.&lt;br /&gt;
*&#039;&#039;&#039;Piltide üleslaadimine&#039;&#039;&#039;: Kõigepealt tuleb omandada &#039;&#039;frob&#039;&#039; ja &#039;&#039;token&#039;&#039;, nagu eelnevas punktis kirjeldatud. Seejärel saab kasutaja üles laadida oma pilte arvutist &#039;&#039;OpenFileDialogi&#039;&#039; abil. Seejärel saab sisestada pildile tiitli ehk nime, kirjelduse ja &#039;&#039;tagi&#039;&#039;, mida aga ei pea tegema (Flickr samuti ei nõua nende atribuutide olemasolu). Olles salvestanud atribuudid ilmneb nupp &amp;quot;lae üles&amp;quot;. Sellele vajutades laetakse pilt kasutaja üldpiltide sekka üles.&lt;br /&gt;
&lt;br /&gt;
Klient, installer ja lähtekood:&lt;br /&gt;
[http://enos.itcollege.ee/~jhannus/VRII/FlickrWPF.zip Download]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;menyy xmlns:xsi =&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
       xsi:noNamespaceSchemaLocation=&amp;quot;menyy_schema.xsd&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;pearoad&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Seapraad&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kotlett&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;42&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
  &amp;lt;/pearoad&amp;gt;&lt;br /&gt;
  &amp;lt;lisandid&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Riis&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;7&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;kartul&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
  &amp;lt;/lisandid&amp;gt;&lt;br /&gt;
  &amp;lt;joogid&amp;gt;&lt;br /&gt;
    &amp;lt;soojad&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Kohv&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Tee&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;15&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
    &amp;lt;/soojad&amp;gt;&lt;br /&gt;
    &amp;lt;kylmad&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Morss&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Vesi&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;3&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
    &amp;lt;/kylmad&amp;gt;&lt;br /&gt;
  &amp;lt;/joogid&amp;gt;&lt;br /&gt;
  &amp;lt;magustoidud&amp;gt;&lt;br /&gt;
    &amp;lt;magustoit&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kisell&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;14&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/magustoit&amp;gt;&lt;br /&gt;
  &amp;lt;/magustoidud&amp;gt;&lt;br /&gt;
&amp;lt;/menyy&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT atribuutide tegemiseks elementidest ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot; version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;*[*]&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:when test=&amp;quot;not(@*)&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;not(*) and not(@*) &amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;{local-name(.)}&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML schema ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- definition of simple elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;nimi&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;hind&amp;quot; type=&amp;quot;xs:decimal&amp;quot;/&amp;gt;    &lt;br /&gt;
  &amp;lt;!-- definition of complex elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;menyy&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;pearoad&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;lisandid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;joogid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;magustoidud&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoog&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisandid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
	         &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisand&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;joogid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soojad&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylmad&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soojad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
	        &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylmad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylm&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soe&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoidud&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;magustoit&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoit&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT andmete kuvamiseks html-ina ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;!--&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;style.css&amp;quot; /&amp;gt;--&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;font-color: #D0D0D0;font-family:verdana;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Menüü&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#77a1af;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Pearoad&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;                 &lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/pearoad/pearoog&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c08e1d;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Lisandid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/lisandid/lisand&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c47121;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Kuumad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/soojad/soe&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#b03428;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Külmad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/kylmad/kylm&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#862419;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Magustoidud&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/magustoidud/magustoit&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10424</id>
		<title>Meeskond &quot;näljased&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10424"/>
		<updated>2010-05-19T17:32:45Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: /* 2. Teenus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1. XML ==&lt;br /&gt;
XML-i tegime menüü kohta. XSLT faile on kaks: üks teeb XML-i HTML-i ning teine vahetab elementide ja atribuutide kohtad. XML faili kohta on olemas ka kirjeldav schema. Raskeimaks osaks oli elementidest atribuutide tegemine, asi küll toimis, kuid vormistus oli kole ning auklik. Schema vajas ka veidi harjumist, kuid kui asi käppa sai, siis läks imelihtsaks. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2. Teenus ==&lt;br /&gt;
2.1&lt;br /&gt;
&#039;&#039;&#039;Teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutajagrupid&#039;&#039;&#039;:Hetkel on 3 kasutajagruppi: admin (saab teha kõike), müüja (saab teha kõike peale kasutajate ja kasutajagruppide loomise) ning tavakasutajad. On olemas eraldi funktsioon ka kasutajagruppide loomiseks. Iga meetodi käivitamisel kontrollitakse kasutajaõigusi. Ühel kasutajal saab olla mitu kasutajagruppi. &lt;br /&gt;
***Meetodid:&lt;br /&gt;
**public System.Collections.ObjectModel.Collection&amp;lt;Kategooria&amp;gt; kuvaKasutajaGrupid()- kuvab olemasolevad kasutajagrupid ja nende id-d.&lt;br /&gt;
**public string lisaKasutajagrupp()- lisab antud nimetusega kasutajagrupi&lt;br /&gt;
**public string kustutaKasutajagrupp()- kustutab antud ig-ga kasutajagrupi. Kui antud id-ga gruppi pole, siis annab exeptioni.&lt;br /&gt;
          &lt;br /&gt;
*&#039;&#039;&#039;Kasutajad&#039;&#039;&#039;. Kasutajate loomiseks on 2 funktsiooni: üks tavakasutajate tegemiseks, mis ei eelda sisselogimist ning teine, mida saab teostada vaid administraator (ja lisada müüjaid või teisi administraatoreid). Kasutajate loomisel kontrollitakse seda, kas kasutajanimi on juba kasutusel. Kasutaja id ning roll sisestatakse ka tabelisse kasutajaRollis, mis näitab kasutajatel olevaid rolle. Kasutajate kustutamine käib otse andmebaasist. Kasutaja loomisel salvestatakse andmebaasi kasutaja parool hashitud kujul (algoritmiks sha1).&lt;br /&gt;
***Meetodid:&lt;br /&gt;
**public string looKasutaja()- Kastuamiseks administraatorile. Võimaldab luua uue kasutaja. Kontrollib kasutajanime olemasolu. Lisab kasutaja rolli id ja kasutaja id ka tabelisse kasutajaRollis.&lt;br /&gt;
**public string looTavaKasutaja()- Võimaldab ilma sisselogimiseta luua tavakasutaja. Kasutaja rolliks määratakse automaatselt tavakasutaja.&lt;br /&gt;
&lt;br /&gt;
      &lt;br /&gt;
*&#039;&#039;&#039;Tooted&#039;&#039;&#039;. Kasutajatel (hetkel müüjal) on võimalus lisada ja kustutada tooteid toodete kategooriaid, hindu jms. &lt;br /&gt;
***Meetodid:&lt;br /&gt;
**public System.Collections.ObjectModel.Collection&amp;lt;Toode&amp;gt; kuvaTooted()-kuvab kõik tooted&lt;br /&gt;
**public string lisaToode()- võimaldab lisada toote ning määrata sellele kategooria.&lt;br /&gt;
**public string kustutaToode()- võimaldab kusutada antud ID-ga toote&lt;br /&gt;
**public List&amp;lt;String&amp;gt; katToList()-teeb kasutajatest arraylisti&lt;br /&gt;
**public System.Collections.ObjectModel.Collection&amp;lt;Kategooria&amp;gt; kuvaKategooriad()-kuvab kõik olemasolevad kategooriad ja nende id-d&lt;br /&gt;
**public string lisaKategooria()- võimaldab lisada uue kategooria&lt;br /&gt;
**public string kustutaKategooria()-kustutab antud id-ga kategooria. kontrollib, kas sellise id-ga kategooria on üldse olemas.&lt;br /&gt;
&lt;br /&gt;
         &lt;br /&gt;
*&#039;&#039;&#039;Sessioonid&#039;&#039;&#039;. Kasutaja edukal sisselogimisel luuakse unikaalne juhuslik sessiooni võti, mille olemasolu kontrollitakse iga sisselogimist eeldava meetodi käivitamisel. Session_key salvestatakse andmebaasis vastavas väljas. Eraldi on funktsioonid sessiooni olemasolu kontrollimiseks ning uuendamiseks. Hetkel on timeoudiks 10 minutit. Sessiooni kehtivust kontrollitakse ka kasutajaõiguste kontrollimisel. &lt;br /&gt;
&lt;br /&gt;
      &lt;br /&gt;
* &#039;&#039;&#039;Logimine&#039;&#039;&#039;. Võrreldakse sisestatud kasjutajanime ning sisestatud parooli hashi andmebaasis olevatega. Kui need ühtivad, siis sisselogimine on edukas ning luuakse unikaalne session key, mis salvestatakse andmebaasi. Sisselogimine ning sessiooni olemasolu on eelduseks meetodite käivitamiseks. Kui sessioon aegub, siis toimub kasutaja väljalogimine. Väljalogimisfunktsioon kirjutab üle sessiooni aegumise aja, pannes selleks hetkelise kellaaja.  &lt;br /&gt;
***Meetodid:&lt;br /&gt;
**public string logIn()- kontrollib kasutajanime ja parooli. Edukal sisselogimisel salvestab sessiooni andmebaasi ning määrab aegumisajaks hetkeaeg + 10 minutit. &lt;br /&gt;
**public void logOut()- kirjutab sessiooni aegumise aja üle hetkeajaga.&lt;br /&gt;
&lt;br /&gt;
*Lisaks on veel hunnik &#039;&#039;&#039;abifunktsioone&#039;&#039;&#039;, näiteks parooli hashimine, väärtuste tagastamine jms.&lt;br /&gt;
**public string hash()- hashib ära parooli kasutades SHA1 algoritmi&lt;br /&gt;
**public bool kontrolliSessiooni()- vaatab, kas sessioon on aktiivne&lt;br /&gt;
**private bool kontrolliOiguseid()- vaatab kas antud kasutajal on õigus soovitud toiminguid teha&lt;br /&gt;
**enum Rollid- määratletakse kasutusel olevad rollinimed&lt;br /&gt;
**public int kysiKasutajagrupiID()- kasutajanimele vastava kasutajagrupi id küsimine tabelist kasutajagrupp&lt;br /&gt;
**private string kysiKasutajagrupinimetus()- kõikide kasutajagruppide nimetuste küsimiseks tabelist kasutajagrupp&lt;br /&gt;
**private string kysiKasutajanimi()-kõikide kasutajanimede küsimiseks tabelist kasutaja&lt;br /&gt;
**private int kysikasutajaIDsesioon()- kasutaja id küsimiseks tabelist sessioon&lt;br /&gt;
**private int kysiKasutajaID()- kasutaja id küsimiseks tabelist kasutaja&lt;br /&gt;
**private void salvestaSessioon()- sessiooni salvestamine andmebaasi&lt;br /&gt;
**public void uuendaSessiooni()- sessiooni uuendamine&lt;br /&gt;
**public bool kontrolliParool()- sisestatud parooli hashimine võrdlemine andmebaasis olevaga&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[http://enos.itcollege.ee/~ljogiste/VR2/ TeenuseSource]]&lt;br /&gt;
   &lt;br /&gt;
Klient on kirjutatud WPF-is ning hetkel on võimalik kuvada tooteid, kasutajaid, gruppe ning kasutajagruppe.&lt;br /&gt;
&lt;br /&gt;
2.2&lt;br /&gt;
&#039;&#039;&#039;Menüü teenuse klient&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et meie tore teenus oleks veidi rohkem käega katsutavam, sai külge tehtud ka klient, mis realiseeriks põhifunktsioone. Kliendiks on WPF rakendus ning funktsionaalsus on järgmine:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sisse logimine&#039;&#039;&#039;: rakenduse käivitamisel ahistatakse kasutajat sisselogimisaknaga, valede andmete korral saab kasutaja ilusa punase veateate. Õnnestumise korral genereeritakse sessioonivõti, ning kantakse teda pidevalt edasi.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Toodete kuvamine,lisamine, kustutamine&#039;&#039;&#039;: kuvatakse väike popup, kus hunnik lahtreid ning kasutaja saab neid täites lisada toote. ID alusel saab kustutada ebasoovitava toote. Õnnestumisel või ebaõnnestumisel kuvatakse muidugi veateade.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kategooriate kuvamine, lisamine, kustutamine&#039;&#039;&#039;: iga toit tuleb paigutada kategooriasse, siin on koht kus neid luua saab. ID alusel jällegi kustutamine.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutajate kuvamine, lisamine&#039;&#039;&#039;: siin kuvatakse kõik süsteemis olevad kasutajad, ning toimub ka lisamine&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutaja gruppide kuvamine (kustutamine)&#039;&#039;&#039;: kuvatakse kehtivad kasutaja grupid, meetod ka kustutamiseks&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Pildid&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/rakendus_login.png Login Aken]&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/klient_ba.png BackEnd]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Klient&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/VR2__Menyy.rar Source]&lt;br /&gt;
&lt;br /&gt;
== 3. Flickr API ==&lt;br /&gt;
[http://i40.tinypic.com/k3r90i.png Pilt]&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:&lt;br /&gt;
*&#039;&#039;&#039;Pildiotsing&#039;&#039;&#039;: Kasutajal on võimalus otsida otsingusõna järgi pilte Flickri pildibaasist. Pilte otsitakse kasutajate galeriidest, pildikomplektidest ja niisama üles laetud piltidest, mis on &#039;&#039;publicud&#039;&#039; ehk avalikud. Kui kasutaja sisestab vähem kui 2 tähte, kuvatakse veateade. See on Flickri poolt samuti kinni keeratud, et ühetähe otsinguid ei teostataks. Üldjoontes ei oleks sellel ka mingisugust mõtet. Otsingusõna sisestamisel kuvatakse paremale aknasse 5 pildi &#039;&#039;thumbnaili&#039;&#039;, mis on kõige värskemad. &#039;&#039;Thumbnailidest&#039;&#039; vasakul all nurgas kuvatakse, mitu lehekülge pilte leiti ja mitmendal leheküljel parasjagu ollakse. Olles esimesel lehel ja/või teostades esimest otsingut, nuppu &amp;quot;eelmine&amp;quot; ei kuvata. Seejärel saab kasutaja hakata navigeerima lehekülgedel &amp;quot;eelmine&amp;quot; ja &amp;quot;järgmine&amp;quot; nuppudega. Valides thumbnaili välja ja klikkides selle peale, kuvatakse pilt suurena, laiusega 380 pikslit ja kõrgusega 380 pikslit. Kui suur pilt on kuvatud, avaneb ka võimalus vajutada nuppu &amp;quot;Ava kasutaja profiil&amp;quot;. Sellega pääseb API kasutaja ligi suure pildi kasutaja profiilile. See on sobilik näiteks kui API kasutajale hakkas huvi pakkuma pildi üles laadinud kasutaja, ning soovib tema teisigi pilte sirvida.&lt;br /&gt;
*&#039;&#039;&#039;Inimese otsing&#039;&#039;&#039;: Kasutajal on võimalus otsida emaili järgi Flickri kasutajaid. Otsingulahtrisse mitte millegi sisestamisel või jättes sisestamata &amp;quot;@&amp;quot; sümbol, kuvatakse veateade. Vastasel korral kuvatakse kas kasutaja Flickri kasutajanimi, pärisnimi (kui see on tal määratud) ja tema profiili URL. Kui kasutaja on leitud, kuvatakse ka nuppu &amp;quot;Ava veebisait&amp;quot;, millega pääseb kasutaja ligi ka tema profiilile, kirjutamata ise midagi veebibrauseri aknasse. Kui kasutajat ei leitud, antakse ka vastav veateade.&lt;br /&gt;
*&#039;&#039;&#039;Fotokomplektide kuvamine&#039;&#039;&#039;: Kasutaja saab vaadata oma fotokomplekte. Selleks tuleb kõigepealt vastava nupuga omandad &#039;&#039;frob&#039;&#039;, mis on Flickri API ajutine kood (kehtib ühe tunni). Kui &#039;&#039;frob&#039;&#039; on omandatud, avaneb kasutajale nupp &amp;quot;omanda token&amp;quot;. &#039;&#039;Tokeniga&#039;&#039; on Flickri poolne frobi teisendus &#039;&#039;tokeniks&#039;&#039;, mida kasutatakse edaspidi kasutaja identifitseerimiseks. Kui &#039;&#039;token&#039;&#039; on omandatud, kuvatakse teade &amp;quot;token omandatud&amp;quot; või vastasel juhul &amp;quot;token omandamata&amp;quot;. Seejärel ilmub nähtavale nupp &amp;quot;tiri fotosetid&amp;quot;. Sellele klikkides kuvatakse thumbnailidena kasutaja fotokomplektid.&lt;br /&gt;
*&#039;&#039;&#039;Piltide üleslaadimine&#039;&#039;&#039;: Kõigepealt tuleb omandada &#039;&#039;frob&#039;&#039; ja &#039;&#039;token&#039;&#039;, nagu eelnevas punktis kirjeldatud. Seejärel saab kasutaja üles laadida oma pilte arvutist &#039;&#039;OpenFileDialogi&#039;&#039; abil. Seejärel saab sisestada pildile tiitli ehk nime, kirjelduse ja &#039;&#039;tagi&#039;&#039;, mida aga ei pea tegema (Flickr samuti ei nõua nende atribuutide olemasolu). Olles salvestanud atribuudid ilmneb nupp &amp;quot;lae üles&amp;quot;. Sellele vajutades laetakse pilt kasutaja üldpiltide sekka üles.&lt;br /&gt;
&lt;br /&gt;
Klient, installer ja lähtekood:&lt;br /&gt;
[http://enos.itcollege.ee/~jhannus/VRII/FlickrWPF.zip Download]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;menyy xmlns:xsi =&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
       xsi:noNamespaceSchemaLocation=&amp;quot;menyy_schema.xsd&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;pearoad&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Seapraad&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kotlett&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;42&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
  &amp;lt;/pearoad&amp;gt;&lt;br /&gt;
  &amp;lt;lisandid&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Riis&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;7&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;kartul&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
  &amp;lt;/lisandid&amp;gt;&lt;br /&gt;
  &amp;lt;joogid&amp;gt;&lt;br /&gt;
    &amp;lt;soojad&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Kohv&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Tee&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;15&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
    &amp;lt;/soojad&amp;gt;&lt;br /&gt;
    &amp;lt;kylmad&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Morss&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Vesi&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;3&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
    &amp;lt;/kylmad&amp;gt;&lt;br /&gt;
  &amp;lt;/joogid&amp;gt;&lt;br /&gt;
  &amp;lt;magustoidud&amp;gt;&lt;br /&gt;
    &amp;lt;magustoit&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kisell&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;14&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/magustoit&amp;gt;&lt;br /&gt;
  &amp;lt;/magustoidud&amp;gt;&lt;br /&gt;
&amp;lt;/menyy&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT atribuutide tegemiseks elementidest ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot; version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;*[*]&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:when test=&amp;quot;not(@*)&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;not(*) and not(@*) &amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;{local-name(.)}&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML schema ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- definition of simple elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;nimi&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;hind&amp;quot; type=&amp;quot;xs:decimal&amp;quot;/&amp;gt;    &lt;br /&gt;
  &amp;lt;!-- definition of complex elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;menyy&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;pearoad&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;lisandid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;joogid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;magustoidud&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoog&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisandid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
	         &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisand&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;joogid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soojad&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylmad&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soojad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
	        &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylmad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylm&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soe&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoidud&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;magustoit&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoit&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT andmete kuvamiseks html-ina ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;!--&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;style.css&amp;quot; /&amp;gt;--&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;font-color: #D0D0D0;font-family:verdana;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Menüü&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#77a1af;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Pearoad&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;                 &lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/pearoad/pearoog&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c08e1d;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Lisandid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/lisandid/lisand&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c47121;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Kuumad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/soojad/soe&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#b03428;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Külmad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/kylmad/kylm&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#862419;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Magustoidud&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/magustoidud/magustoit&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10423</id>
		<title>Meeskond &quot;näljased&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10423"/>
		<updated>2010-05-19T17:31:03Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1. XML ==&lt;br /&gt;
XML-i tegime menüü kohta. XSLT faile on kaks: üks teeb XML-i HTML-i ning teine vahetab elementide ja atribuutide kohtad. XML faili kohta on olemas ka kirjeldav schema. Raskeimaks osaks oli elementidest atribuutide tegemine, asi küll toimis, kuid vormistus oli kole ning auklik. Schema vajas ka veidi harjumist, kuid kui asi käppa sai, siis läks imelihtsaks. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2. Teenus ==&lt;br /&gt;
2.1&lt;br /&gt;
&#039;&#039;&#039;Teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:   &lt;br /&gt;
*Kasutajagrupid:Hetkel on 3 kasutajagruppi: admin (saab teha kõike), müüja (saab teha kõike peale kasutajate ja kasutajagruppide loomise) ning tavakasutajad. On olemas eraldi funktsioon ka kasutajagruppide loomiseks. Iga meetodi käivitamisel kontrollitakse kasutajaõigusi. Ühel kasutajal saab olla mitu kasutajagruppi. &lt;br /&gt;
***Meetodid:&lt;br /&gt;
**public System.Collections.ObjectModel.Collection&amp;lt;Kategooria&amp;gt; kuvaKasutajaGrupid()- kuvab olemasolevad kasutajagrupid ja nende id-d.&lt;br /&gt;
**public string lisaKasutajagrupp()- lisab antud nimetusega kasutajagrupi&lt;br /&gt;
**public string kustutaKasutajagrupp()- kustutab antud ig-ga kasutajagrupi. Kui antud id-ga gruppi pole, siis annab exeptioni.&lt;br /&gt;
          &lt;br /&gt;
*Kasutajad. Kasutajate loomiseks on 2 funktsiooni: üks tavakasutajate tegemiseks, mis ei eelda sisselogimist ning teine, mida saab teostada vaid administraator (ja lisada müüjaid või teisi administraatoreid). Kasutajate loomisel kontrollitakse seda, kas kasutajanimi on juba kasutusel. Kasutaja id ning roll sisestatakse ka tabelisse kasutajaRollis, mis näitab kasutajatel olevaid rolle. Kasutajate kustutamine käib otse andmebaasist. Kasutaja loomisel salvestatakse andmebaasi kasutaja parool hashitud kujul (algoritmiks sha1).&lt;br /&gt;
***Meetodid:&lt;br /&gt;
**public string looKasutaja()- Kastuamiseks administraatorile. Võimaldab luua uue kasutaja. Kontrollib kasutajanime olemasolu. Lisab kasutaja rolli id ja kasutaja id ka tabelisse kasutajaRollis.&lt;br /&gt;
**public string looTavaKasutaja()- Võimaldab ilma sisselogimiseta luua tavakasutaja. Kasutaja rolliks määratakse automaatselt tavakasutaja.&lt;br /&gt;
&lt;br /&gt;
      &lt;br /&gt;
*Tooted. Kasutajatel (hetkel müüjal) on võimalus lisada ja kustutada tooteid toodete kategooriaid, hindu jms. &lt;br /&gt;
***Meetodid:&lt;br /&gt;
**public System.Collections.ObjectModel.Collection&amp;lt;Toode&amp;gt; kuvaTooted()-kuvab kõik tooted&lt;br /&gt;
**public string lisaToode()- võimaldab lisada toote ning määrata sellele kategooria.&lt;br /&gt;
**public string kustutaToode()- võimaldab kusutada antud ID-ga toote&lt;br /&gt;
**public List&amp;lt;String&amp;gt; katToList()-teeb kasutajatest arraylisti&lt;br /&gt;
**public System.Collections.ObjectModel.Collection&amp;lt;Kategooria&amp;gt; kuvaKategooriad()-kuvab kõik olemasolevad kategooriad ja nende id-d&lt;br /&gt;
**public string lisaKategooria()- võimaldab lisada uue kategooria&lt;br /&gt;
**public string kustutaKategooria()-kustutab antud id-ga kategooria. kontrollib, kas sellise id-ga kategooria on üldse olemas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
         &lt;br /&gt;
*Sessioonid. Kasutaja edukal sisselogimisel luuakse unikaalne juhuslik sessiooni võti, mille olemasolu kontrollitakse iga sisselogimist eeldava meetodi käivitamisel. Session_key salvestatakse andmebaasis vastavas väljas. Eraldi on funktsioonid sessiooni olemasolu kontrollimiseks ning uuendamiseks. Hetkel on timeoudiks 10 minutit. Sessiooni kehtivust kontrollitakse ka kasutajaõiguste kontrollimisel. &lt;br /&gt;
&lt;br /&gt;
      &lt;br /&gt;
* Logimine. Võrreldakse sisestatud kasjutajanime ning sisestatud parooli hashi andmebaasis olevatega. Kui need ühtivad, siis sisselogimine on edukas ning luuakse unikaalne session key, mis salvestatakse andmebaasi. Sisselogimine ning sessiooni olemasolu on eelduseks meetodite käivitamiseks. Kui sessioon aegub, siis toimub kasutaja väljalogimine. Väljalogimisfunktsioon kirjutab üle sessiooni aegumise aja, pannes selleks hetkelise kellaaja.  &lt;br /&gt;
 &lt;br /&gt;
***Meetodid:&lt;br /&gt;
**public string logIn()- kontrollib kasutajanime ja parooli. Edukal sisselogimisel salvestab sessiooni andmebaasi ning määrab aegumisajaks hetkeaeg + 10 minutit. &lt;br /&gt;
**public void logOut()- kirjutab sessiooni aegumise aja üle hetkeajaga.&lt;br /&gt;
&lt;br /&gt;
*Lisaks on veel hunnik abifunktsioone, näiteks parooli hashimine, väärtuste tagastamine jms.&lt;br /&gt;
**public string hash()- hashib ära parooli kasutades SHA1 algoritmi&lt;br /&gt;
**public bool kontrolliSessiooni()- vaatab, kas sessioon on aktiivne&lt;br /&gt;
**private bool kontrolliOiguseid()- vaatab kas antud kasutajal on õigus soovitud toiminguid teha&lt;br /&gt;
**enum Rollid- määratletakse kasutusel olevad rollinimed&lt;br /&gt;
**public int kysiKasutajagrupiID()- kasutajanimele vastava kasutajagrupi id küsimine tabelist kasutajagrupp&lt;br /&gt;
**private string kysiKasutajagrupinimetus()- kõikide kasutajagruppide nimetuste küsimiseks tabelist kasutajagrupp&lt;br /&gt;
**private string kysiKasutajanimi()-kõikide kasutajanimede küsimiseks tabelist kasutaja&lt;br /&gt;
**private int kysikasutajaIDsesioon()- kasutaja id küsimiseks tabelist sessioon&lt;br /&gt;
**private int kysiKasutajaID()- kasutaja id küsimiseks tabelist kasutaja&lt;br /&gt;
**private void salvestaSessioon()- sessiooni salvestamine andmebaasi&lt;br /&gt;
**public void uuendaSessiooni()- sessiooni uuendamine&lt;br /&gt;
**public bool kontrolliParool()- sisestatud parooli hashimine võrdlemine andmebaasis olevaga&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[http://enos.itcollege.ee/~ljogiste/VR2/ TeenuseSource]]&lt;br /&gt;
   &lt;br /&gt;
Klient on kirjutatud WPF-is ning hetkel on võimalik kuvada tooteid, kasutajaid, gruppe ning kasutajagruppe.&lt;br /&gt;
&lt;br /&gt;
2.2&lt;br /&gt;
&#039;&#039;&#039;Menüü teenuse klient&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et meie tore teenus oleks veidi rohkem käega katsutavam, sai külge tehtud ka klient, mis realiseeriks põhifunktsioone. Kliendiks on WPF rakendus ning funktsionaalsus on järgmine:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sisse logimine&#039;&#039;&#039;: rakenduse käivitamisel ahistatakse kasutajat sisselogimisaknaga, valede andmete korral saab kasutaja ilusa punase veateate. Õnnestumise korral genereeritakse sessioonivõti, ning kantakse teda pidevalt edasi.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Toodete kuvamine,lisamine, kustutamine&#039;&#039;&#039;: kuvatakse väike popup, kus hunnik lahtreid ning kasutaja saab neid täites lisada toote. ID alusel saab kustutada ebasoovitava toote. Õnnestumisel või ebaõnnestumisel kuvatakse muidugi veateade.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kategooriate kuvamine, lisamine, kustutamine&#039;&#039;&#039;: iga toit tuleb paigutada kategooriasse, siin on koht kus neid luua saab. ID alusel jällegi kustutamine.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutajate kuvamine, lisamine&#039;&#039;&#039;: siin kuvatakse kõik süsteemis olevad kasutajad, ning toimub ka lisamine&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutaja gruppide kuvamine (kustutamine)&#039;&#039;&#039;: kuvatakse kehtivad kasutaja grupid, meetod ka kustutamiseks&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Pildid&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/rakendus_login.png Login Aken]&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/klient_ba.png BackEnd]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Klient&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/VR2__Menyy.rar Source]&lt;br /&gt;
&lt;br /&gt;
== 3. Flickr API ==&lt;br /&gt;
[http://i40.tinypic.com/k3r90i.png Pilt]&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:&lt;br /&gt;
*&#039;&#039;&#039;Pildiotsing&#039;&#039;&#039;: Kasutajal on võimalus otsida otsingusõna järgi pilte Flickri pildibaasist. Pilte otsitakse kasutajate galeriidest, pildikomplektidest ja niisama üles laetud piltidest, mis on &#039;&#039;publicud&#039;&#039; ehk avalikud. Kui kasutaja sisestab vähem kui 2 tähte, kuvatakse veateade. See on Flickri poolt samuti kinni keeratud, et ühetähe otsinguid ei teostataks. Üldjoontes ei oleks sellel ka mingisugust mõtet. Otsingusõna sisestamisel kuvatakse paremale aknasse 5 pildi &#039;&#039;thumbnaili&#039;&#039;, mis on kõige värskemad. &#039;&#039;Thumbnailidest&#039;&#039; vasakul all nurgas kuvatakse, mitu lehekülge pilte leiti ja mitmendal leheküljel parasjagu ollakse. Olles esimesel lehel ja/või teostades esimest otsingut, nuppu &amp;quot;eelmine&amp;quot; ei kuvata. Seejärel saab kasutaja hakata navigeerima lehekülgedel &amp;quot;eelmine&amp;quot; ja &amp;quot;järgmine&amp;quot; nuppudega. Valides thumbnaili välja ja klikkides selle peale, kuvatakse pilt suurena, laiusega 380 pikslit ja kõrgusega 380 pikslit. Kui suur pilt on kuvatud, avaneb ka võimalus vajutada nuppu &amp;quot;Ava kasutaja profiil&amp;quot;. Sellega pääseb API kasutaja ligi suure pildi kasutaja profiilile. See on sobilik näiteks kui API kasutajale hakkas huvi pakkuma pildi üles laadinud kasutaja, ning soovib tema teisigi pilte sirvida.&lt;br /&gt;
*&#039;&#039;&#039;Inimese otsing&#039;&#039;&#039;: Kasutajal on võimalus otsida emaili järgi Flickri kasutajaid. Otsingulahtrisse mitte millegi sisestamisel või jättes sisestamata &amp;quot;@&amp;quot; sümbol, kuvatakse veateade. Vastasel korral kuvatakse kas kasutaja Flickri kasutajanimi, pärisnimi (kui see on tal määratud) ja tema profiili URL. Kui kasutaja on leitud, kuvatakse ka nuppu &amp;quot;Ava veebisait&amp;quot;, millega pääseb kasutaja ligi ka tema profiilile, kirjutamata ise midagi veebibrauseri aknasse. Kui kasutajat ei leitud, antakse ka vastav veateade.&lt;br /&gt;
*&#039;&#039;&#039;Fotokomplektide kuvamine&#039;&#039;&#039;: Kasutaja saab vaadata oma fotokomplekte. Selleks tuleb kõigepealt vastava nupuga omandad &#039;&#039;frob&#039;&#039;, mis on Flickri API ajutine kood (kehtib ühe tunni). Kui &#039;&#039;frob&#039;&#039; on omandatud, avaneb kasutajale nupp &amp;quot;omanda token&amp;quot;. &#039;&#039;Tokeniga&#039;&#039; on Flickri poolne frobi teisendus &#039;&#039;tokeniks&#039;&#039;, mida kasutatakse edaspidi kasutaja identifitseerimiseks. Kui &#039;&#039;token&#039;&#039; on omandatud, kuvatakse teade &amp;quot;token omandatud&amp;quot; või vastasel juhul &amp;quot;token omandamata&amp;quot;. Seejärel ilmub nähtavale nupp &amp;quot;tiri fotosetid&amp;quot;. Sellele klikkides kuvatakse thumbnailidena kasutaja fotokomplektid.&lt;br /&gt;
*&#039;&#039;&#039;Piltide üleslaadimine&#039;&#039;&#039;: Kõigepealt tuleb omandada &#039;&#039;frob&#039;&#039; ja &#039;&#039;token&#039;&#039;, nagu eelnevas punktis kirjeldatud. Seejärel saab kasutaja üles laadida oma pilte arvutist &#039;&#039;OpenFileDialogi&#039;&#039; abil. Seejärel saab sisestada pildile tiitli ehk nime, kirjelduse ja &#039;&#039;tagi&#039;&#039;, mida aga ei pea tegema (Flickr samuti ei nõua nende atribuutide olemasolu). Olles salvestanud atribuudid ilmneb nupp &amp;quot;lae üles&amp;quot;. Sellele vajutades laetakse pilt kasutaja üldpiltide sekka üles.&lt;br /&gt;
&lt;br /&gt;
Klient, installer ja lähtekood:&lt;br /&gt;
[http://enos.itcollege.ee/~jhannus/VRII/FlickrWPF.zip Download]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;menyy xmlns:xsi =&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
       xsi:noNamespaceSchemaLocation=&amp;quot;menyy_schema.xsd&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;pearoad&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Seapraad&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kotlett&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;42&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
  &amp;lt;/pearoad&amp;gt;&lt;br /&gt;
  &amp;lt;lisandid&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Riis&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;7&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;kartul&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
  &amp;lt;/lisandid&amp;gt;&lt;br /&gt;
  &amp;lt;joogid&amp;gt;&lt;br /&gt;
    &amp;lt;soojad&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Kohv&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Tee&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;15&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
    &amp;lt;/soojad&amp;gt;&lt;br /&gt;
    &amp;lt;kylmad&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Morss&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Vesi&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;3&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
    &amp;lt;/kylmad&amp;gt;&lt;br /&gt;
  &amp;lt;/joogid&amp;gt;&lt;br /&gt;
  &amp;lt;magustoidud&amp;gt;&lt;br /&gt;
    &amp;lt;magustoit&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kisell&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;14&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/magustoit&amp;gt;&lt;br /&gt;
  &amp;lt;/magustoidud&amp;gt;&lt;br /&gt;
&amp;lt;/menyy&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT atribuutide tegemiseks elementidest ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot; version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;*[*]&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:when test=&amp;quot;not(@*)&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;not(*) and not(@*) &amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;{local-name(.)}&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML schema ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- definition of simple elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;nimi&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;hind&amp;quot; type=&amp;quot;xs:decimal&amp;quot;/&amp;gt;    &lt;br /&gt;
  &amp;lt;!-- definition of complex elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;menyy&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;pearoad&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;lisandid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;joogid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;magustoidud&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoog&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisandid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
	         &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisand&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;joogid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soojad&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylmad&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soojad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
	        &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylmad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylm&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soe&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoidud&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;magustoit&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoit&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT andmete kuvamiseks html-ina ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;!--&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;style.css&amp;quot; /&amp;gt;--&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;font-color: #D0D0D0;font-family:verdana;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Menüü&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#77a1af;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Pearoad&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;                 &lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/pearoad/pearoog&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c08e1d;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Lisandid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/lisandid/lisand&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c47121;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Kuumad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/soojad/soe&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#b03428;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Külmad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/kylmad/kylm&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#862419;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Magustoidud&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/magustoidud/magustoit&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10401</id>
		<title>Meeskond &quot;näljased&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10401"/>
		<updated>2010-05-19T14:36:23Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: /* 2. Teenus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1. XML ==&lt;br /&gt;
XML-i tegime menüü kohta. XSLT faile on kaks: üks teeb XML-i HTML-i ning teine vahetab elementide ja atribuutide kohtad. XML faili kohta on olemas ka kirjeldav schema. Raskeimaks osaks oli elementidest atribuutide tegemine, asi küll toimis, kuid vormistus oli kole ning auklik. Schema vajas ka veidi harjumist, kuid kui asi käppa sai, siis läks imelihtsaks. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2. Teenus ==&lt;br /&gt;
2.1&lt;br /&gt;
&#039;&#039;&#039;Teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:   &lt;br /&gt;
*Kasutajagrupid:Hetkel on 3 kasutajagruppi: admin (saab teha kõike), müüja (saab teha kõike peale kasutajate ja kasutajagruppide loomise) ning tavakasutajad. On olemas eraldi funktsioon ka kasutajagruppide loomiseks. Iga meetodi käivitamisel kontrollitakse kasutajaõigusi. Ühel kasutajal saab olla mitu kasutajagruppi. &lt;br /&gt;
Meetodid:&lt;br /&gt;
public System.Collections.ObjectModel.Collection&amp;lt;Kategooria&amp;gt; kuvaKasutajaGrupid()- kuvab olemasolevad kasutajagrupid ja nende id-d.&lt;br /&gt;
public string lisaKasutajagrupp()- lisab antud nimetusega kasutajagrupi&lt;br /&gt;
public string kustutaKasutajagrupp()- kustutab antud ig-ga kasutajagrupi. Kui antud id-ga gruppi pole, siis annab exeptioni.&lt;br /&gt;
          &lt;br /&gt;
*Kasutajad. Kasutajate loomiseks on 2 funktsiooni: üks tavakasutajate tegemiseks, mis ei eelda sisselogimist ning teine, mida saab teostada vaid administraator (ja lisada müüjaid või teisi administraatoreid). Kasutajate loomisel kontrollitakse seda, kas kasutajanimi on juba kasutusel. Kasutaja id ning roll sisestatakse ka tabelisse kasutajaRollis, mis näitab kasutajatel olevaid rolle. Kasutajate kustutamine käib otse andmebaasist. Kasutaja loomisel salvestatakse andmebaasi kasutaja parool hashitud kujul (algoritmiks sha1).&lt;br /&gt;
Meetodid:&lt;br /&gt;
public string looKasutaja()- Kastuamiseks administraatorile. Võimaldab luua uue kasutaja. Kontrollib kasutajanime olemasolu. Lisab kasutaja rolli id ja kasutaja id ka tabelisse kasutajaRollis.&lt;br /&gt;
&lt;br /&gt;
public string looTavaKasutaja()- Võimaldab ilma sisselogimiseta luua tavakasutaja. Kasutaja rolliks määratakse automaatselt tavakasutaja.&lt;br /&gt;
&lt;br /&gt;
      &lt;br /&gt;
*Tooted. Kasutajatel (hetkel müüjal) on võimalus lisada ja kustutada tooteid toodete kategooriaid, hindu jms. &lt;br /&gt;
Meetodid:&lt;br /&gt;
public System.Collections.ObjectModel.Collection&amp;lt;Toode&amp;gt; kuvaTooted()-kuvab kõik tooted&lt;br /&gt;
&lt;br /&gt;
public string lisaToode()- võimaldab lisada toote ning määrata sellele kategooria.&lt;br /&gt;
&lt;br /&gt;
public string kustutaToode()- võimaldab kusutada antud ID-ga toote&lt;br /&gt;
&lt;br /&gt;
public List&amp;lt;String&amp;gt; katToList()-teeb kasutajatest arraylisti&lt;br /&gt;
&lt;br /&gt;
public System.Collections.ObjectModel.Collection&amp;lt;Kategooria&amp;gt; kuvaKategooriad()-kuvab kõik olemasolevad kategooriad ja nende id-d&lt;br /&gt;
&lt;br /&gt;
public string lisaKategooria()- võimaldab lisada uue kategooria&lt;br /&gt;
&lt;br /&gt;
public string kustutaKategooria()-kustutab antud id-ga kategooria. kontrollib, kas sellise id-ga kategooria on üldse olemas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
         &lt;br /&gt;
*Sessioonid. Kasutaja edukal sisselogimisel luuakse unikaalne juhuslik sessiooni võti, mille olemasolu kontrollitakse iga sisselogimist eeldava meetodi käivitamisel. Session_key salvestatakse andmebaasis vastavas väljas. Eraldi on funktsioonid sessiooni olemasolu kontrollimiseks ning uuendamiseks. Hetkel on timeoudiks 10 minutit. Sessiooni kehtivust kontrollitakse ka kasutajaõiguste kontrollimisel. &lt;br /&gt;
&lt;br /&gt;
      &lt;br /&gt;
* Logimine. Võrreldakse sisestatud kasjutajanime ning sisestatud parooli hashi andmebaasis olevatega. Kui need ühtivad, siis sisselogimine on edukas ning luuakse unikaalne session key, mis salvestatakse andmebaasi. Sisselogimine ning sessiooni olemasolu on eelduseks meetodite käivitamiseks. Kui sessioon aegub, siis toimub kasutaja väljalogimine. Väljalogimisfunktsioon kirjutab üle sessiooni aegumise aja, pannes selleks hetkelise kellaaja.  &lt;br /&gt;
 &lt;br /&gt;
Meetodid:&lt;br /&gt;
public string logIn()- kontrollib kasutajanime ja parooli. Edukal sisselogimisel salvestab sessiooni andmebaasi ning määrab aegumisajaks hetkeaeg + 10 minutit. &lt;br /&gt;
&lt;br /&gt;
public void logOut()- kirjutab sessiooni aegumise aja üle hetkeajaga.&lt;br /&gt;
&lt;br /&gt;
*Lisaks on veel hunnik abifunktsioone, näiteks parooli hashimine, väärtuste tagastamine jms.&lt;br /&gt;
public string hash()- hashib ära parooli kasutades SHA1 algoritmi&lt;br /&gt;
&lt;br /&gt;
public bool kontrolliSessiooni()- vaatab, kas sessioon on aktiivne&lt;br /&gt;
&lt;br /&gt;
private bool kontrolliOiguseid()- vaatab kas antud kasutajal on õigus soovitud toiminguid teha&lt;br /&gt;
&lt;br /&gt;
enum Rollid- määratletakse kasutusel olevad rollinimed&lt;br /&gt;
&lt;br /&gt;
public int kysiKasutajagrupiID()- kasutajanimele vastava kasutajagrupi id küsimine tabelist kasutajagrupp&lt;br /&gt;
&lt;br /&gt;
private string kysiKasutajagrupinimetus()- kõikide kasutajagruppide nimetuste küsimiseks tabelist kasutajagrupp&lt;br /&gt;
&lt;br /&gt;
private string kysiKasutajanimi()-kõikide kasutajanimede küsimiseks tabelist kasutaja&lt;br /&gt;
&lt;br /&gt;
private int kysikasutajaIDsesioon()- kasutaja id küsimiseks tabelist sessioon&lt;br /&gt;
&lt;br /&gt;
private int kysiKasutajaID()- kasutaja id küsimiseks tabelist kasutaja&lt;br /&gt;
&lt;br /&gt;
private void salvestaSessioon()- sessiooni salvestamine andmebaasi&lt;br /&gt;
&lt;br /&gt;
public void uuendaSessiooni()- sessiooni uuendamine&lt;br /&gt;
&lt;br /&gt;
public bool kontrolliParool()- sisestatud parooli hashimine võrdlemine andmebaasis olevaga&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[http://enos.itcollege.ee/~ljogiste/VR2/ TeenuseSource]]&lt;br /&gt;
   &lt;br /&gt;
Klient on kirjutatud WPF-is ning hetkel on võimalik kuvada tooteid, kasutajaid, gruppe ning kasutajagruppe.&lt;br /&gt;
&lt;br /&gt;
2.2&lt;br /&gt;
&#039;&#039;&#039;Menüü teenuse klient&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et meie tore teenus oleks veidi rohkem käega katsutavam, sai külge tehtud ka klient, mis realiseeriks põhifunktsioone. Kliendiks on WPF rakendus ning funktsionaalsus on järgmine:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sisse logimine&#039;&#039;&#039;: rakenduse käivitamisel ahistatakse kasutajat sisselogimisaknaga, valede andmete korral saab kasutaja ilusa punase veateate. Õnnestumise korral genereeritakse sessioonivõti, ning kantakse teda pidevalt edasi.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Toodete kuvamine,lisamine, kustutamine&#039;&#039;&#039;: kuvatakse väike popup, kus hunnik lahtreid ning kasutaja saab neid täites lisada toote. ID alusel saab kustutada ebasoovitava toote. Õnnestumisel või ebaõnnestumisel kuvatakse muidugi veateade.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kategooriate kuvamine, lisamine, kustutamine&#039;&#039;&#039;: iga toit tuleb paigutada kategooriasse, siin on koht kus neid luua saab. ID alusel jällegi kustutamine.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutajate kuvamine, lisamine&#039;&#039;&#039;: siin kuvatakse kõik süsteemis olevad kasutajad, ning toimub ka lisamine&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutaja gruppide kuvamine (kustutamine)&#039;&#039;&#039;: kuvatakse kehtivad kasutaja grupid, meetod ka kustutamiseks&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Pildid&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/rakendus_login.png Login Aken]&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/klient_ba.png BackEnd]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Klient&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/VR2__Menyy.rar Source]&lt;br /&gt;
&lt;br /&gt;
== 3. Flickr API ==&lt;br /&gt;
[http://i40.tinypic.com/k3r90i.png Pilt]&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:&lt;br /&gt;
*&#039;&#039;&#039;Pildiotsing&#039;&#039;&#039;: Kasutajal on võimalus otsida otsingusõna järgi pilte Flickri pildibaasist. Pilte otsitakse kasutajate galeriidest, pildikomplektidest ja niisama üles laetud piltidest, mis on &#039;&#039;publicud&#039;&#039; ehk avalikud. Kui kasutaja sisestab vähem kui 2 tähte, kuvatakse veateade. See on Flickri poolt samuti kinni keeratud, et ühetähe otsinguid ei teostataks. Üldjoontes ei oleks sellel ka mingisugust mõtet. Otsingusõna sisestamisel kuvatakse paremale aknasse 5 pildi &#039;&#039;thumbnaili&#039;&#039;, mis on kõige värskemad. &#039;&#039;Thumbnailidest&#039;&#039; vasakul all nurgas kuvatakse, mitu lehekülge pilte leiti ja mitmendal leheküljel parasjagu ollakse. Olles esimesel lehel ja/või teostades esimest otsingut, nuppu &amp;quot;eelmine&amp;quot; ei kuvata. Seejärel saab kasutaja hakata navigeerima lehekülgedel &amp;quot;eelmine&amp;quot; ja &amp;quot;järgmine&amp;quot; nuppudega. Valides thumbnaili välja ja klikkides selle peale, kuvatakse pilt suurena, laiusega 380 pikslit ja kõrgusega 380 pikslit. Kui suur pilt on kuvatud, avaneb ka võimalus vajutada nuppu &amp;quot;Ava kasutaja profiil&amp;quot;. Sellega pääseb API kasutaja ligi suure pildi kasutaja profiilile. See on sobilik näiteks kui API kasutajale hakkas huvi pakkuma pildi üles laadinud kasutaja, ning soovib tema teisigi pilte sirvida.&lt;br /&gt;
*&#039;&#039;&#039;Inimese otsing&#039;&#039;&#039;: Kasutajal on võimalus otsida emaili järgi Flickri kasutajaid. Otsingulahtrisse mitte millegi sisestamisel või jättes sisestamata &amp;quot;@&amp;quot; sümbol, kuvatakse veateade. Vastasel korral kuvatakse kas kasutaja Flickri kasutajanimi, pärisnimi (kui see on tal määratud) ja tema profiili URL. Kui kasutaja on leitud, kuvatakse ka nuppu &amp;quot;Ava veebisait&amp;quot;, millega pääseb kasutaja ligi ka tema profiilile, kirjutamata ise midagi veebibrauseri aknasse. Kui kasutajat ei leitud, antakse ka vastav veateade.&lt;br /&gt;
*&#039;&#039;&#039;Fotokomplektide kuvamine&#039;&#039;&#039;: Kasutaja saab vaadata oma fotokomplekte. Selleks tuleb kõigepealt vastava nupuga omandad &#039;&#039;frob&#039;&#039;, mis on Flickri API ajutine kood (kehtib ühe tunni). Kui &#039;&#039;frob&#039;&#039; on omandatud, avaneb kasutajale nupp &amp;quot;omanda token&amp;quot;. &#039;&#039;Tokeniga&#039;&#039; on Flickri poolne frobi teisendus &#039;&#039;tokeniks&#039;&#039;, mida kasutatakse edaspidi kasutaja identifitseerimiseks. Kui &#039;&#039;token&#039;&#039; on omandatud, kuvatakse teade &amp;quot;token omandatud&amp;quot; või vastasel juhul &amp;quot;token omandamata&amp;quot;. Seejärel ilmub nähtavale nupp &amp;quot;tiri fotosetid&amp;quot;. Sellele klikkides kuvatakse thumbnailidena kasutaja fotokomplektid.&lt;br /&gt;
*&#039;&#039;&#039;Piltide üleslaadimine&#039;&#039;&#039;: Kõigepealt tuleb omandada &#039;&#039;frob&#039;&#039; ja &#039;&#039;token&#039;&#039;, nagu eelnevas punktis kirjeldatud. Seejärel saab kasutaja üles laadida oma pilte arvutist &#039;&#039;OpenFileDialogi&#039;&#039; abil. Seejärel saab sisestada pildile tiitli ehk nime, kirjelduse ja &#039;&#039;tagi&#039;&#039;, mida aga ei pea tegema (Flickr samuti ei nõua nende atribuutide olemasolu). Olles salvestanud atribuudid ilmneb nupp &amp;quot;lae üles&amp;quot;. Sellele vajutades laetakse pilt kasutaja üldpiltide sekka üles.&lt;br /&gt;
&lt;br /&gt;
Klient, installer ja lähtekood:&lt;br /&gt;
[http://enos.itcollege.ee/~jhannus/VRII/FlickrWPF.zip Download]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;menyy xmlns:xsi =&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
       xsi:noNamespaceSchemaLocation=&amp;quot;menyy_schema.xsd&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;pearoad&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Seapraad&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kotlett&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;42&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
  &amp;lt;/pearoad&amp;gt;&lt;br /&gt;
  &amp;lt;lisandid&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Riis&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;7&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;kartul&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
  &amp;lt;/lisandid&amp;gt;&lt;br /&gt;
  &amp;lt;joogid&amp;gt;&lt;br /&gt;
    &amp;lt;soojad&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Kohv&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Tee&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;15&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
    &amp;lt;/soojad&amp;gt;&lt;br /&gt;
    &amp;lt;kylmad&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Morss&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Vesi&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;3&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
    &amp;lt;/kylmad&amp;gt;&lt;br /&gt;
  &amp;lt;/joogid&amp;gt;&lt;br /&gt;
  &amp;lt;magustoidud&amp;gt;&lt;br /&gt;
    &amp;lt;magustoit&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kisell&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;14&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/magustoit&amp;gt;&lt;br /&gt;
  &amp;lt;/magustoidud&amp;gt;&lt;br /&gt;
&amp;lt;/menyy&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT atribuutide tegemiseks elementidest ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot; version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;*[*]&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:when test=&amp;quot;not(@*)&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;not(*) and not(@*) &amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;{local-name(.)}&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML schema ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- definition of simple elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;nimi&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;hind&amp;quot; type=&amp;quot;xs:decimal&amp;quot;/&amp;gt;    &lt;br /&gt;
  &amp;lt;!-- definition of complex elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;menyy&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;pearoad&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;lisandid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;joogid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;magustoidud&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoog&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisandid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
	         &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisand&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;joogid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soojad&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylmad&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soojad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
	        &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylmad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylm&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soe&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoidud&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;magustoit&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoit&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT andmete kuvamiseks html-ina ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;!--&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;style.css&amp;quot; /&amp;gt;--&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;font-color: #D0D0D0;font-family:verdana;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Menüü&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#77a1af;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Pearoad&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;                 &lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/pearoad/pearoog&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c08e1d;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Lisandid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/lisandid/lisand&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c47121;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Kuumad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/soojad/soe&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#b03428;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Külmad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/kylmad/kylm&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#862419;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Magustoidud&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/magustoidud/magustoit&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10400</id>
		<title>Meeskond &quot;näljased&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10400"/>
		<updated>2010-05-19T14:31:22Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: /* 2. Teenus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1. XML ==&lt;br /&gt;
XML-i tegime menüü kohta. XSLT faile on kaks: üks teeb XML-i HTML-i ning teine vahetab elementide ja atribuutide kohtad. XML faili kohta on olemas ka kirjeldav schema. Raskeimaks osaks oli elementidest atribuutide tegemine, asi küll toimis, kuid vormistus oli kole ning auklik. Schema vajas ka veidi harjumist, kuid kui asi käppa sai, siis läks imelihtsaks. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2. Teenus ==&lt;br /&gt;
2.1&lt;br /&gt;
&#039;&#039;&#039;Teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:   &lt;br /&gt;
*Kasutajagrupid:Hetkel on 3 kasutajagruppi: admin (saab teha kõike), müüja (saab teha kõike peale kasutajate ja kasutajagruppide loomise) ning tavakasutajad. On olemas eraldi funktsioon ka kasutajagruppide loomiseks. Iga meetodi käivitamisel kontrollitakse kasutajaõigusi. Ühel kasutajal saab olla mitu kasutajagruppi. &lt;br /&gt;
Meetodid:&lt;br /&gt;
public System.Collections.ObjectModel.Collection&amp;lt;Kategooria&amp;gt; kuvaKasutajaGrupid()- kuvab olemasolevad kasutajagrupid ja nende id-d.&lt;br /&gt;
public string lisaKasutajagrupp()- lisab antud nimetusega kasutajagrupi&lt;br /&gt;
public string kustutaKasutajagrupp()- kustutab antud ig-ga kasutajagrupi. Kui antud id-ga gruppi pole, siis annab exeptioni.&lt;br /&gt;
          &lt;br /&gt;
*Kasutajad. Kasutajate loomiseks on 2 funktsiooni: üks tavakasutajate tegemiseks, mis ei eelda sisselogimist ning teine, mida saab teostada vaid administraator (ja lisada müüjaid või teisi administraatoreid). Kasutajate loomisel kontrollitakse seda, kas kasutajanimi on juba kasutusel. Kasutaja id ning roll sisestatakse ka tabelisse kasutajaRollis, mis näitab kasutajatel olevaid rolle. Kasutajate kustutamine käib otse andmebaasist. Kasutaja loomisel salvestatakse andmebaasi kasutaja parool hashitud kujul (algoritmiks sha1).&lt;br /&gt;
Meetodid:&lt;br /&gt;
public string looKasutaja()- Kastuamiseks administraatorile. Võimaldab luua uue kasutaja. Kontrollib kasutajanime olemasolu. Lisab kasutaja rolli id ja kasutaja id ka tabelisse kasutajaRollis.&lt;br /&gt;
&lt;br /&gt;
public string looTavaKasutaja()- Võimaldab ilma sisselogimiseta luua tavakasutaja. Kasutaja rolliks määratakse automaatselt tavakasutaja.&lt;br /&gt;
&lt;br /&gt;
      &lt;br /&gt;
*Tooted. Kasutajatel (hetkel müüjal) on võimalus lisada ja kustutada tooteid toodete kategooriaid, hindu jms. &lt;br /&gt;
Meetodid:&lt;br /&gt;
public System.Collections.ObjectModel.Collection&amp;lt;Toode&amp;gt; kuvaTooted()-kuvab kõik tooted&lt;br /&gt;
&lt;br /&gt;
public string lisaToode()- võimaldab lisada toote ning määrata sellele kategooria.&lt;br /&gt;
&lt;br /&gt;
public string kustutaToode()- võimaldab kusutada antud ID-ga toote&lt;br /&gt;
&lt;br /&gt;
public List&amp;lt;String&amp;gt; katToList()-teeb kasutajatest arraylisti&lt;br /&gt;
&lt;br /&gt;
public System.Collections.ObjectModel.Collection&amp;lt;Kategooria&amp;gt; kuvaKategooriad()-kuvab kõik olemasolevad kategooriad ja nende id-d&lt;br /&gt;
&lt;br /&gt;
public string lisaKategooria()- võimaldab lisada uue kategooria&lt;br /&gt;
&lt;br /&gt;
public string kustutaKategooria()-kustutab antud id-ga kategooria. kontrollib, kas sellise id-ga kategooria on üldse olemas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
         &lt;br /&gt;
*Sessioonid. Kasutaja edukal sisselogimisel luuakse unikaalne juhuslik sessiooni võti, mille olemasolu kontrollitakse iga sisselogimist eeldava meetodi käivitamisel. Session_key salvestatakse andmebaasis vastavas väljas. Eraldi on funktsioonid sessiooni olemasolu kontrollimiseks ning uuendamiseks. Hetkel on timeoudiks 10 minutit. Sessiooni kehtivust kontrollitakse ka kasutajaõiguste kontrollimisel. &lt;br /&gt;
Abifunktsioonid:&lt;br /&gt;
      &lt;br /&gt;
* Logimine. Võrreldakse sisestatud kasjutajanime ning sisestatud parooli hashi andmebaasis olevatega. Kui need ühtivad, siis sisselogimine on edukas ning luuakse unikaalne session key, mis salvestatakse andmebaasi. Sisselogimine ning sessiooni olemasolu on eelduseks meetodite käivitamiseks. Kui sessioon aegub, siis toimub kasutaja väljalogimine. Väljalogimisfunktsioon kirjutab üle sessiooni aegumise aja, pannes selleks hetkelise kellaaja.  &lt;br /&gt;
 &lt;br /&gt;
Meetodid:&lt;br /&gt;
public string logIn()- kontrollib kasutajanime ja parooli. Edukal sisselogimisel salvestab sessiooni andmebaasi ning määrab aegumisajaks hetkeaeg + 10 minutit. &lt;br /&gt;
&lt;br /&gt;
public void logOut()- kirjutab sessiooni aegumise aja üle hetkeajaga.&lt;br /&gt;
&lt;br /&gt;
*Lisaks on veel hunnik abifunktsioone, näiteks parooli hashimine, väärtuste tagastamine jms.&lt;br /&gt;
public string hash()- hashib ära parooli kasutades SHA1 algoritmi&lt;br /&gt;
&lt;br /&gt;
public bool kontrolliSessiooni()- vaatab, kas sessioon on aktiivne&lt;br /&gt;
&lt;br /&gt;
private bool kontrolliOiguseid()- vaatab kas antud kasutajal on õigus soovitud toiminguid teha&lt;br /&gt;
&lt;br /&gt;
enum Rollid- määratletakse kasutusel olevad rollinimed&lt;br /&gt;
&lt;br /&gt;
public int kysiKasutajagrupiID()- kasutajanimele vastava kasutajagrupi id küsimine tabelist kasutajagrupp&lt;br /&gt;
&lt;br /&gt;
private string kysiKasutajagrupinimetus()- kõikide kasutajagruppide nimetuste küsimiseks tabelist kasutajagrupp&lt;br /&gt;
&lt;br /&gt;
private string kysiKasutajanimi()-kõikide kasutajanimede küsimiseks tabelist kasutaja&lt;br /&gt;
&lt;br /&gt;
private int kysikasutajaIDsesioon()- kasutaja id küsimiseks tabelist sessioon&lt;br /&gt;
&lt;br /&gt;
private int kysiKasutajaID()- kasutaja id küsimiseks tabelist kasutaja&lt;br /&gt;
&lt;br /&gt;
private void salvestaSessioon()- sessiooni salvestamine andmebaasi&lt;br /&gt;
&lt;br /&gt;
public void uuendaSessiooni()- sessiooni uuendamine&lt;br /&gt;
&lt;br /&gt;
public bool kontrolliParool()- sisestatud parooli hashimine võrdlemine andmebaasis olevaga&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[http://enos.itcollege.ee/~ljogiste/VR2/ TeenuseSource]]&lt;br /&gt;
   &lt;br /&gt;
Klient on kirjutatud WPF-is ning hetkel on võimalik kuvada tooteid, kasutajaid, gruppe ning kasutajagruppe.&lt;br /&gt;
&lt;br /&gt;
2.2&lt;br /&gt;
&#039;&#039;&#039;Menüü teenuse klient&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et meie tore teenus oleks veidi rohkem käega katsutavam, sai külge tehtud ka klient, mis realiseeriks põhifunktsioone. Kliendiks on WPF rakendus ning funktsionaalsus on järgmine:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sisse logimine&#039;&#039;&#039;: rakenduse käivitamisel ahistatakse kasutajat sisselogimisaknaga, valede andmete korral saab kasutaja ilusa punase veateate. Õnnestumise korral genereeritakse sessioonivõti, ning kantakse teda pidevalt edasi.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Toodete kuvamine,lisamine, kustutamine&#039;&#039;&#039;: kuvatakse väike popup, kus hunnik lahtreid ning kasutaja saab neid täites lisada toote. ID alusel saab kustutada ebasoovitava toote. Õnnestumisel või ebaõnnestumisel kuvatakse muidugi veateade.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kategooriate kuvamine, lisamine, kustutamine&#039;&#039;&#039;: iga toit tuleb paigutada kategooriasse, siin on koht kus neid luua saab. ID alusel jällegi kustutamine.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutajate kuvamine, lisamine&#039;&#039;&#039;: siin kuvatakse kõik süsteemis olevad kasutajad, ning toimub ka lisamine&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutaja gruppide kuvamine (kustutamine)&#039;&#039;&#039;: kuvatakse kehtivad kasutaja grupid, meetod ka kustutamiseks&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Pildid&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/rakendus_login.png Login Aken]&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/klient_ba.png BackEnd]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Klient&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/VR2__Menyy.rar Source]&lt;br /&gt;
&lt;br /&gt;
== 3. Flickr API ==&lt;br /&gt;
[http://i40.tinypic.com/k3r90i.png Pilt]&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:&lt;br /&gt;
*&#039;&#039;&#039;Pildiotsing&#039;&#039;&#039;: Kasutajal on võimalus otsida otsingusõna järgi pilte Flickri pildibaasist. Pilte otsitakse kasutajate galeriidest, pildikomplektidest ja niisama üles laetud piltidest, mis on &#039;&#039;publicud&#039;&#039; ehk avalikud. Kui kasutaja sisestab vähem kui 2 tähte, kuvatakse veateade. See on Flickri poolt samuti kinni keeratud, et ühetähe otsinguid ei teostataks. Üldjoontes ei oleks sellel ka mingisugust mõtet. Otsingusõna sisestamisel kuvatakse paremale aknasse 5 pildi &#039;&#039;thumbnaili&#039;&#039;, mis on kõige värskemad. &#039;&#039;Thumbnailidest&#039;&#039; vasakul all nurgas kuvatakse, mitu lehekülge pilte leiti ja mitmendal leheküljel parasjagu ollakse. Olles esimesel lehel ja/või teostades esimest otsingut, nuppu &amp;quot;eelmine&amp;quot; ei kuvata. Seejärel saab kasutaja hakata navigeerima lehekülgedel &amp;quot;eelmine&amp;quot; ja &amp;quot;järgmine&amp;quot; nuppudega. Valides thumbnaili välja ja klikkides selle peale, kuvatakse pilt suurena, laiusega 380 pikslit ja kõrgusega 380 pikslit. Kui suur pilt on kuvatud, avaneb ka võimalus vajutada nuppu &amp;quot;Ava kasutaja profiil&amp;quot;. Sellega pääseb API kasutaja ligi suure pildi kasutaja profiilile. See on sobilik näiteks kui API kasutajale hakkas huvi pakkuma pildi üles laadinud kasutaja, ning soovib tema teisigi pilte sirvida.&lt;br /&gt;
*&#039;&#039;&#039;Inimese otsing&#039;&#039;&#039;: Kasutajal on võimalus otsida emaili järgi Flickri kasutajaid. Otsingulahtrisse mitte millegi sisestamisel või jättes sisestamata &amp;quot;@&amp;quot; sümbol, kuvatakse veateade. Vastasel korral kuvatakse kas kasutaja Flickri kasutajanimi, pärisnimi (kui see on tal määratud) ja tema profiili URL. Kui kasutaja on leitud, kuvatakse ka nuppu &amp;quot;Ava veebisait&amp;quot;, millega pääseb kasutaja ligi ka tema profiilile, kirjutamata ise midagi veebibrauseri aknasse. Kui kasutajat ei leitud, antakse ka vastav veateade.&lt;br /&gt;
*&#039;&#039;&#039;Fotokomplektide kuvamine&#039;&#039;&#039;: Kasutaja saab vaadata oma fotokomplekte. Selleks tuleb kõigepealt vastava nupuga omandad &#039;&#039;frob&#039;&#039;, mis on Flickri API ajutine kood (kehtib ühe tunni). Kui &#039;&#039;frob&#039;&#039; on omandatud, avaneb kasutajale nupp &amp;quot;omanda token&amp;quot;. &#039;&#039;Tokeniga&#039;&#039; on Flickri poolne frobi teisendus &#039;&#039;tokeniks&#039;&#039;, mida kasutatakse edaspidi kasutaja identifitseerimiseks. Kui &#039;&#039;token&#039;&#039; on omandatud, kuvatakse teade &amp;quot;token omandatud&amp;quot; või vastasel juhul &amp;quot;token omandamata&amp;quot;. Seejärel ilmub nähtavale nupp &amp;quot;tiri fotosetid&amp;quot;. Sellele klikkides kuvatakse thumbnailidena kasutaja fotokomplektid.&lt;br /&gt;
*&#039;&#039;&#039;Piltide üleslaadimine&#039;&#039;&#039;: Kõigepealt tuleb omandada &#039;&#039;frob&#039;&#039; ja &#039;&#039;token&#039;&#039;, nagu eelnevas punktis kirjeldatud. Seejärel saab kasutaja üles laadida oma pilte arvutist &#039;&#039;OpenFileDialogi&#039;&#039; abil. Seejärel saab sisestada pildile tiitli ehk nime, kirjelduse ja &#039;&#039;tagi&#039;&#039;, mida aga ei pea tegema (Flickr samuti ei nõua nende atribuutide olemasolu). Olles salvestanud atribuudid ilmneb nupp &amp;quot;lae üles&amp;quot;. Sellele vajutades laetakse pilt kasutaja üldpiltide sekka üles.&lt;br /&gt;
&lt;br /&gt;
Klient, installer ja lähtekood:&lt;br /&gt;
[http://enos.itcollege.ee/~jhannus/VRII/FlickrWPF.zip Download]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;menyy xmlns:xsi =&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
       xsi:noNamespaceSchemaLocation=&amp;quot;menyy_schema.xsd&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;pearoad&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Seapraad&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kotlett&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;42&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
  &amp;lt;/pearoad&amp;gt;&lt;br /&gt;
  &amp;lt;lisandid&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Riis&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;7&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;kartul&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
  &amp;lt;/lisandid&amp;gt;&lt;br /&gt;
  &amp;lt;joogid&amp;gt;&lt;br /&gt;
    &amp;lt;soojad&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Kohv&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Tee&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;15&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
    &amp;lt;/soojad&amp;gt;&lt;br /&gt;
    &amp;lt;kylmad&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Morss&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Vesi&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;3&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
    &amp;lt;/kylmad&amp;gt;&lt;br /&gt;
  &amp;lt;/joogid&amp;gt;&lt;br /&gt;
  &amp;lt;magustoidud&amp;gt;&lt;br /&gt;
    &amp;lt;magustoit&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kisell&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;14&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/magustoit&amp;gt;&lt;br /&gt;
  &amp;lt;/magustoidud&amp;gt;&lt;br /&gt;
&amp;lt;/menyy&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT atribuutide tegemiseks elementidest ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot; version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;*[*]&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:when test=&amp;quot;not(@*)&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;not(*) and not(@*) &amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;{local-name(.)}&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML schema ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- definition of simple elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;nimi&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;hind&amp;quot; type=&amp;quot;xs:decimal&amp;quot;/&amp;gt;    &lt;br /&gt;
  &amp;lt;!-- definition of complex elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;menyy&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;pearoad&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;lisandid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;joogid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;magustoidud&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoog&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisandid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
	         &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisand&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;joogid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soojad&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylmad&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soojad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
	        &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylmad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylm&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soe&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoidud&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;magustoit&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoit&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT andmete kuvamiseks html-ina ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;!--&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;style.css&amp;quot; /&amp;gt;--&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;font-color: #D0D0D0;font-family:verdana;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Menüü&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#77a1af;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Pearoad&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;                 &lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/pearoad/pearoog&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c08e1d;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Lisandid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/lisandid/lisand&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c47121;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Kuumad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/soojad/soe&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#b03428;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Külmad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/kylmad/kylm&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#862419;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Magustoidud&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/magustoidud/magustoit&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10399</id>
		<title>Meeskond &quot;näljased&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10399"/>
		<updated>2010-05-19T14:29:49Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1. XML ==&lt;br /&gt;
XML-i tegime menüü kohta. XSLT faile on kaks: üks teeb XML-i HTML-i ning teine vahetab elementide ja atribuutide kohtad. XML faili kohta on olemas ka kirjeldav schema. Raskeimaks osaks oli elementidest atribuutide tegemine, asi küll toimis, kuid vormistus oli kole ning auklik. Schema vajas ka veidi harjumist, kuid kui asi käppa sai, siis läks imelihtsaks. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2. Teenus ==&lt;br /&gt;
2.1&lt;br /&gt;
&#039;&#039;&#039;Teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:   &lt;br /&gt;
*Kasutajagrupid:Hetkel on 3 kasutajagruppi: admin (saab teha kõike), müüja (saab teha kõike peale kasutajate ja kasutajagruppide loomise) ning tavakasutajad. On olemas eraldi funktsioon ka kasutajagruppide loomiseks. Iga meetodi käivitamisel kontrollitakse kasutajaõigusi. Ühel kasutajal saab olla mitu kasutajagruppi. &lt;br /&gt;
Meetodid:&lt;br /&gt;
public System.Collections.ObjectModel.Collection&amp;lt;Kategooria&amp;gt; kuvaKasutajaGrupid()- kuvab olemasolevad kasutajagrupid ja nende id-d.&lt;br /&gt;
public string lisaKasutajagrupp()- lisab antud nimetusega kasutajagrupi&lt;br /&gt;
public string kustutaKasutajagrupp()- kustutab antud ig-ga kasutajagrupi. Kui antud id-ga gruppi pole, siis annab exeptioni.&lt;br /&gt;
          &lt;br /&gt;
*Kasutajad. Kasutajate loomiseks on 2 funktsiooni: üks tavakasutajate tegemiseks, mis ei eelda sisselogimist ning teine, mida saab teostada vaid administraator (ja lisada müüjaid või teisi administraatoreid). Kasutajate loomisel kontrollitakse seda, kas kasutajanimi on juba kasutusel. Kasutaja id ning roll sisestatakse ka tabelisse kasutajaRollis, mis näitab kasutajatel olevaid rolle. Kasutajate kustutamine käib otse andmebaasist. Kasutaja loomisel salvestatakse andmebaasi kasutaja parool hashitud kujul (algoritmiks sha1).&lt;br /&gt;
Meetodid:&lt;br /&gt;
public string looKasutaja()- Kastuamiseks administraatorile. Võimaldab luua uue kasutaja. Kontrollib kasutajanime olemasolu. Lisab kasutaja rolli id ja kasutaja id ka tabelisse kasutajaRollis.&lt;br /&gt;
public string looTavaKasutaja()- Võimaldab ilma sisselogimiseta luua tavakasutaja. Kasutaja rolliks määratakse automaatselt tavakasutaja.&lt;br /&gt;
&lt;br /&gt;
      &lt;br /&gt;
*Tooted. Kasutajatel (hetkel müüjal) on võimalus lisada ja kustutada tooteid toodete kategooriaid, hindu jms. &lt;br /&gt;
Meetodid:&lt;br /&gt;
public System.Collections.ObjectModel.Collection&amp;lt;Toode&amp;gt; kuvaTooted()-kuvab kõik tooted&lt;br /&gt;
public string lisaToode()- võimaldab lisada toote ning määrata sellele kategooria.&lt;br /&gt;
public string kustutaToode()- võimaldab kusutada antud ID-ga toote&lt;br /&gt;
public List&amp;lt;String&amp;gt; katToList()-teeb kasutajatest arraylisti&lt;br /&gt;
public System.Collections.ObjectModel.Collection&amp;lt;Kategooria&amp;gt; kuvaKategooriad()-kuvab kõik olemasolevad kategooriad ja nende id-d&lt;br /&gt;
public string lisaKategooria()- võimaldab lisada uue kategooria&lt;br /&gt;
public string kustutaKategooria()-kustutab antud id-ga kategooria. kontrollib, kas sellise id-ga kategooria on üldse olemas.&lt;br /&gt;
&lt;br /&gt;
         &lt;br /&gt;
*Sessioonid. Kasutaja edukal sisselogimisel luuakse unikaalne juhuslik sessiooni võti, mille olemasolu kontrollitakse iga sisselogimist eeldava meetodi käivitamisel. Session_key salvestatakse andmebaasis vastavas väljas. Eraldi on funktsioonid sessiooni olemasolu kontrollimiseks ning uuendamiseks. Hetkel on timeoudiks 10 minutit. Sessiooni kehtivust kontrollitakse ka kasutajaõiguste kontrollimisel. &lt;br /&gt;
Abifunktsioonid:&lt;br /&gt;
      &lt;br /&gt;
* Logimine. Võrreldakse sisestatud kasjutajanime ning sisestatud parooli hashi andmebaasis olevatega. Kui need ühtivad, siis sisselogimine on edukas ning luuakse unikaalne session key, mis salvestatakse andmebaasi. Sisselogimine ning sessiooni olemasolu on eelduseks meetodite käivitamiseks. Kui sessioon aegub, siis toimub kasutaja väljalogimine. Väljalogimisfunktsioon kirjutab üle sessiooni aegumise aja, pannes selleks hetkelise kellaaja.  &lt;br /&gt;
 &lt;br /&gt;
Meetodid:&lt;br /&gt;
public string logIn()- kontrollib kasutajanime ja parooli. Edukal sisselogimisel salvestab sessiooni andmebaasi ning määrab aegumisajaks hetkeaeg + 10 minutit. &lt;br /&gt;
public void logOut()- kirjutab sessiooni aegumise aja üle hetkeajaga.&lt;br /&gt;
&lt;br /&gt;
*Lisaks on veel hunnik abifunktsioone, näiteks parooli hashimine, väärtuste tagastamine jms.&lt;br /&gt;
public string hash()- hashib ära parooli kasutades SHA1 algoritmi&lt;br /&gt;
public bool kontrolliSessiooni()- vaatab, kas sessioon on aktiivne&lt;br /&gt;
private bool kontrolliOiguseid()- vaatab kas antud kasutajal on õigus soovitud toiminguid teha&lt;br /&gt;
enum Rollid- määratletakse kasutusel olevad rollinimed&lt;br /&gt;
public int kysiKasutajagrupiID()- kasutajanimele vastava kasutajagrupi id küsimine tabelist kasutajagrupp&lt;br /&gt;
private string kysiKasutajagrupinimetus()- kõikide kasutajagruppide nimetuste küsimiseks tabelist kasutajagrupp&lt;br /&gt;
private string kysiKasutajanimi()-kõikide kasutajanimede küsimiseks tabelist kasutaja&lt;br /&gt;
private int kysikasutajaIDsesioon()- kasutaja id küsimiseks tabelist sessioon&lt;br /&gt;
private int kysiKasutajaID()- kasutaja id küsimiseks tabelist kasutaja&lt;br /&gt;
private void salvestaSessioon()- sessiooni salvestamine andmebaasi&lt;br /&gt;
public void uuendaSessiooni()- sessiooni uuendamine&lt;br /&gt;
public bool kontrolliParool()- sisestatud parooli hashimine võrdlemine andmebaasis olevaga&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[http://enos.itcollege.ee/~ljogiste/VR2/ TeenuseSource]]&lt;br /&gt;
   &lt;br /&gt;
Klient on kirjutatud WPF-is ning hetkel on võimalik kuvada tooteid, kasutajaid, gruppe ning kasutajagruppe.&lt;br /&gt;
&lt;br /&gt;
2.2&lt;br /&gt;
&#039;&#039;&#039;Menüü teenuse klient&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et meie tore teenus oleks veidi rohkem käega katsutavam, sai külge tehtud ka klient, mis realiseeriks põhifunktsioone. Kliendiks on WPF rakendus ning funktsionaalsus on järgmine:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sisse logimine&#039;&#039;&#039;: rakenduse käivitamisel ahistatakse kasutajat sisselogimisaknaga, valede andmete korral saab kasutaja ilusa punase veateate. Õnnestumise korral genereeritakse sessioonivõti, ning kantakse teda pidevalt edasi.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Toodete kuvamine,lisamine, kustutamine&#039;&#039;&#039;: kuvatakse väike popup, kus hunnik lahtreid ning kasutaja saab neid täites lisada toote. ID alusel saab kustutada ebasoovitava toote. Õnnestumisel või ebaõnnestumisel kuvatakse muidugi veateade.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kategooriate kuvamine, lisamine, kustutamine&#039;&#039;&#039;: iga toit tuleb paigutada kategooriasse, siin on koht kus neid luua saab. ID alusel jällegi kustutamine.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutajate kuvamine, lisamine&#039;&#039;&#039;: siin kuvatakse kõik süsteemis olevad kasutajad, ning toimub ka lisamine&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutaja gruppide kuvamine (kustutamine)&#039;&#039;&#039;: kuvatakse kehtivad kasutaja grupid, meetod ka kustutamiseks&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Pildid&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/rakendus_login.png Login Aken]&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/klient_ba.png BackEnd]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Klient&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/VR2__Menyy.rar Source]&lt;br /&gt;
&lt;br /&gt;
== 3. Flickr API ==&lt;br /&gt;
[http://i40.tinypic.com/k3r90i.png Pilt]&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:&lt;br /&gt;
*&#039;&#039;&#039;Pildiotsing&#039;&#039;&#039;: Kasutajal on võimalus otsida otsingusõna järgi pilte Flickri pildibaasist. Pilte otsitakse kasutajate galeriidest, pildikomplektidest ja niisama üles laetud piltidest, mis on &#039;&#039;publicud&#039;&#039; ehk avalikud. Kui kasutaja sisestab vähem kui 2 tähte, kuvatakse veateade. See on Flickri poolt samuti kinni keeratud, et ühetähe otsinguid ei teostataks. Üldjoontes ei oleks sellel ka mingisugust mõtet. Otsingusõna sisestamisel kuvatakse paremale aknasse 5 pildi &#039;&#039;thumbnaili&#039;&#039;, mis on kõige värskemad. &#039;&#039;Thumbnailidest&#039;&#039; vasakul all nurgas kuvatakse, mitu lehekülge pilte leiti ja mitmendal leheküljel parasjagu ollakse. Olles esimesel lehel ja/või teostades esimest otsingut, nuppu &amp;quot;eelmine&amp;quot; ei kuvata. Seejärel saab kasutaja hakata navigeerima lehekülgedel &amp;quot;eelmine&amp;quot; ja &amp;quot;järgmine&amp;quot; nuppudega. Valides thumbnaili välja ja klikkides selle peale, kuvatakse pilt suurena, laiusega 380 pikslit ja kõrgusega 380 pikslit. Kui suur pilt on kuvatud, avaneb ka võimalus vajutada nuppu &amp;quot;Ava kasutaja profiil&amp;quot;. Sellega pääseb API kasutaja ligi suure pildi kasutaja profiilile. See on sobilik näiteks kui API kasutajale hakkas huvi pakkuma pildi üles laadinud kasutaja, ning soovib tema teisigi pilte sirvida.&lt;br /&gt;
*&#039;&#039;&#039;Inimese otsing&#039;&#039;&#039;: Kasutajal on võimalus otsida emaili järgi Flickri kasutajaid. Otsingulahtrisse mitte millegi sisestamisel või jättes sisestamata &amp;quot;@&amp;quot; sümbol, kuvatakse veateade. Vastasel korral kuvatakse kas kasutaja Flickri kasutajanimi, pärisnimi (kui see on tal määratud) ja tema profiili URL. Kui kasutaja on leitud, kuvatakse ka nuppu &amp;quot;Ava veebisait&amp;quot;, millega pääseb kasutaja ligi ka tema profiilile, kirjutamata ise midagi veebibrauseri aknasse. Kui kasutajat ei leitud, antakse ka vastav veateade.&lt;br /&gt;
*&#039;&#039;&#039;Fotokomplektide kuvamine&#039;&#039;&#039;: Kasutaja saab vaadata oma fotokomplekte. Selleks tuleb kõigepealt vastava nupuga omandad &#039;&#039;frob&#039;&#039;, mis on Flickri API ajutine kood (kehtib ühe tunni). Kui &#039;&#039;frob&#039;&#039; on omandatud, avaneb kasutajale nupp &amp;quot;omanda token&amp;quot;. &#039;&#039;Tokeniga&#039;&#039; on Flickri poolne frobi teisendus &#039;&#039;tokeniks&#039;&#039;, mida kasutatakse edaspidi kasutaja identifitseerimiseks. Kui &#039;&#039;token&#039;&#039; on omandatud, kuvatakse teade &amp;quot;token omandatud&amp;quot; või vastasel juhul &amp;quot;token omandamata&amp;quot;. Seejärel ilmub nähtavale nupp &amp;quot;tiri fotosetid&amp;quot;. Sellele klikkides kuvatakse thumbnailidena kasutaja fotokomplektid.&lt;br /&gt;
*&#039;&#039;&#039;Piltide üleslaadimine&#039;&#039;&#039;: Kõigepealt tuleb omandada &#039;&#039;frob&#039;&#039; ja &#039;&#039;token&#039;&#039;, nagu eelnevas punktis kirjeldatud. Seejärel saab kasutaja üles laadida oma pilte arvutist &#039;&#039;OpenFileDialogi&#039;&#039; abil. Seejärel saab sisestada pildile tiitli ehk nime, kirjelduse ja &#039;&#039;tagi&#039;&#039;, mida aga ei pea tegema (Flickr samuti ei nõua nende atribuutide olemasolu). Olles salvestanud atribuudid ilmneb nupp &amp;quot;lae üles&amp;quot;. Sellele vajutades laetakse pilt kasutaja üldpiltide sekka üles.&lt;br /&gt;
&lt;br /&gt;
Klient, installer ja lähtekood:&lt;br /&gt;
[http://enos.itcollege.ee/~jhannus/VRII/FlickrWPF.zip Download]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;menyy xmlns:xsi =&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
       xsi:noNamespaceSchemaLocation=&amp;quot;menyy_schema.xsd&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;pearoad&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Seapraad&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kotlett&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;42&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
  &amp;lt;/pearoad&amp;gt;&lt;br /&gt;
  &amp;lt;lisandid&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Riis&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;7&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;kartul&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
  &amp;lt;/lisandid&amp;gt;&lt;br /&gt;
  &amp;lt;joogid&amp;gt;&lt;br /&gt;
    &amp;lt;soojad&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Kohv&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Tee&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;15&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
    &amp;lt;/soojad&amp;gt;&lt;br /&gt;
    &amp;lt;kylmad&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Morss&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Vesi&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;3&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
    &amp;lt;/kylmad&amp;gt;&lt;br /&gt;
  &amp;lt;/joogid&amp;gt;&lt;br /&gt;
  &amp;lt;magustoidud&amp;gt;&lt;br /&gt;
    &amp;lt;magustoit&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kisell&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;14&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/magustoit&amp;gt;&lt;br /&gt;
  &amp;lt;/magustoidud&amp;gt;&lt;br /&gt;
&amp;lt;/menyy&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT atribuutide tegemiseks elementidest ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot; version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;*[*]&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:when test=&amp;quot;not(@*)&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;not(*) and not(@*) &amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;{local-name(.)}&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML schema ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- definition of simple elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;nimi&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;hind&amp;quot; type=&amp;quot;xs:decimal&amp;quot;/&amp;gt;    &lt;br /&gt;
  &amp;lt;!-- definition of complex elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;menyy&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;pearoad&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;lisandid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;joogid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;magustoidud&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoog&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisandid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
	         &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisand&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;joogid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soojad&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylmad&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soojad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
	        &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylmad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylm&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soe&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoidud&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;magustoit&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoit&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT andmete kuvamiseks html-ina ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;!--&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;style.css&amp;quot; /&amp;gt;--&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;font-color: #D0D0D0;font-family:verdana;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Menüü&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#77a1af;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Pearoad&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;                 &lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/pearoad/pearoog&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c08e1d;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Lisandid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/lisandid/lisand&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c47121;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Kuumad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/soojad/soe&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#b03428;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Külmad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/kylmad/kylm&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#862419;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Magustoidud&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/magustoidud/magustoit&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10380</id>
		<title>Meeskond &quot;näljased&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10380"/>
		<updated>2010-05-19T10:50:15Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1. XML ==&lt;br /&gt;
XML-i tegime menüü kohta. XSLT faile on kaks: üks teeb XML-i HTML-i ning teine vahetab elementide ja atribuutide kohtad. XML faili kohta on olemas ka kirjeldav schema. Raskeimaks osaks oli elementidest atribuutide tegemine, asi küll toimis, kuid vormistus oli kole ning auklik. Schema vajas ka veidi harjumist, kuid kui asi käppa sai, siis läks imelihtsaks. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2. Teenus ==&lt;br /&gt;
2.1&lt;br /&gt;
&#039;&#039;&#039;Teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:   &lt;br /&gt;
*Kasutajagrupid:Hetkel on 3 kasutajagruppi: admin (saab teha kõike), müüja (saab teha kõike peale kasutajate ja kasutajagruppide loomise) ning tavakasutajad. On olemas eraldi funktsioon ka kasutajagruppide loomiseks. Iga meetodi käivitamisel kontrollitakse kasutajaõigusi. Ühel kasutajal saab olla mitu kasutajagruppi.           &lt;br /&gt;
*Kasutajad. Kasutajate loomiseks on 2 funktsiooni: üks tavakasutajate tegemiseks, mis ei eelda sisselogimist ning teine, mida saab teostada vaid administraator (ja lisada müüjaid või teisi administraatoreid). Kasutajate loomisel kontrollitakse seda, kas kasutajanimi on juba kasutusel. Kasutaja id ning roll sisestatakse ka tabelisse kasutajaRollis, mis näitab kasutajatel olevaid rolle. Kasutajate kustutamine käib otse andmebaasist. Kasutaja loomisel salvestatakse andmebaasi kasutaja parool hashitud kujul (algoritmiks sha1)        &lt;br /&gt;
*Tooted. Kasutajatel (hetkel müüjal) on võimalus lisada ja kustutada tooteid toodete kategooriaid, hindu jms.          &lt;br /&gt;
*Sessioonid. Kasutaja edukal sisselogimisel luuakse unikaalne juhuslik sessiooni võti, mille olemasolu kontrollitakse iga sisselogimist eeldava meetodi käivitamisel. Session_key salvestatakse andmebaasis vastavas väljas. Eraldi on funktsioonid sessiooni olemasolu kontrollimiseks ning uuendamiseks. Hetkel on timeoudiks 10 minutit. Sessiooni kehtivust kontrollitakse ka kasutajaõiguste kontrollimisel.       &lt;br /&gt;
* Logimine. Võrreldakse sisestatud kasjutajanime ning sisestatud parooli hashi andmebaasis olevatega. Kui need ühtivad, siis sisselogimine on edukas ning luuakse unikaalne session key, mis salvestatakse andmebaasi. Sisselogimine ning sessiooni olemasolu on eelduseks meetodite käivitamiseks. Kui sessioon aegub, siis toimub kasutaja väljalogimine. Väljalogimisfunktsioon kirjutab üle sessiooni aegumise aja, pannes selleks hetkelise kellaaja.  &lt;br /&gt;
Lisaks on veel hunnik abifunktsioone, näiteks parooli hashimine, väärtuste tagastamine jms. &lt;br /&gt;
&lt;br /&gt;
[[http://enos.itcollege.ee/~ljogiste/VR2/ TeenuseSource]]&lt;br /&gt;
   &lt;br /&gt;
Klient on kirjutatud WPF-is ning hetkel on võimalik kuvada tooteid, kasutajaid, gruppe ning kasutajagruppe.&lt;br /&gt;
&lt;br /&gt;
2.2&lt;br /&gt;
&#039;&#039;&#039;Menüü teenuse klient&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et meie tore teenus oleks veidi rohkem käega katsutavam, sai külge tehtud ka klient, mis realiseeriks põhifunktsioone. Kliendiks on WPF rakendus ning funktsionaalsus on järgmine:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sisse logimine&#039;&#039;&#039;: rakenduse käivitamisel ahistatakse kasutajat sisselogimisaknaga, valede andmete korral saab kasutaja ilusa punase veateate. Õnnestumise korral genereeritakse sessioonivõti, ning kantakse teda pidevalt edasi.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Toodete kuvamine,lisamine, kustutamine&#039;&#039;&#039;: kuvatakse väike popup, kus hunnik lahtreid ning kasutaja saab neid täites lisada toote. ID alusel saab kustutada ebasoovitava toote. Õnnestumisel või ebaõnnestumisel kuvatakse muidugi veateade.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kategooriate kuvamine, lisamine, kustutamine&#039;&#039;&#039;: iga toit tuleb paigutada kategooriasse, siin on koht kus neid luua saab. ID alusel jällegi kustutamine.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutajate kuvamine, lisamine&#039;&#039;&#039;: siin kuvatakse kõik süsteemis olevad kasutajad, ning toimub ka lisamine&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutaja gruppide kuvamine (kustutamine)&#039;&#039;&#039;: kuvatakse kehtivad kasutaja grupid, meetod ka kustutamiseks&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Pildid&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/rakendus_login.png Login Aken]&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/klient_ba.png BackEnd]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Klient&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/VR2__Menyy.rar Source]&lt;br /&gt;
&lt;br /&gt;
== 3. Flickr API ==&lt;br /&gt;
[http://i40.tinypic.com/k3r90i.png Pilt]&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:&lt;br /&gt;
*&#039;&#039;&#039;Pildiotsing&#039;&#039;&#039;: Kasutajal on võimalus otsida otsingusõna järgi pilte Flickri pildibaasist. Pilte otsitakse kasutajate galeriidest, pildikomplektidest ja niisama üles laetud piltidest, mis on &#039;&#039;publicud&#039;&#039; ehk avalikud. Kui kasutaja sisestab vähem kui 2 tähte, kuvatakse veateade. See on Flickri poolt samuti kinni keeratud, et ühetähe otsinguid ei teostataks. Üldjoontes ei oleks sellel ka mingisugust mõtet. Otsingusõna sisestamisel kuvatakse paremale aknasse 5 pildi &#039;&#039;thumbnaili&#039;&#039;, mis on kõige värskemad. &#039;&#039;Thumbnailidest&#039;&#039; vasakul all nurgas kuvatakse, mitu lehekülge pilte leiti ja mitmendal leheküljel parasjagu ollakse. Olles esimesel lehel ja/või teostades esimest otsingut, nuppu &amp;quot;eelmine&amp;quot; ei kuvata. Seejärel saab kasutaja hakata navigeerima lehekülgedel &amp;quot;eelmine&amp;quot; ja &amp;quot;järgmine&amp;quot; nuppudega. Valides thumbnaili välja ja klikkides selle peale, kuvatakse pilt suurena, laiusega 380 pikslit ja kõrgusega 380 pikslit. Kui suur pilt on kuvatud, avaneb ka võimalus vajutada nuppu &amp;quot;Ava kasutaja profiil&amp;quot;. Sellega pääseb API kasutaja ligi suure pildi kasutaja profiilile. See on sobilik näiteks kui API kasutajale hakkas huvi pakkuma pildi üles laadinud kasutaja, ning soovib tema teisigi pilte sirvida.&lt;br /&gt;
*&#039;&#039;&#039;Inimese otsing&#039;&#039;&#039;: Kasutajal on võimalus otsida emaili järgi Flickri kasutajaid. Otsingulahtrisse mitte millegi sisestamisel või jättes sisestamata &amp;quot;@&amp;quot; sümbol, kuvatakse veateade. Vastasel korral kuvatakse kas kasutaja Flickri kasutajanimi, pärisnimi (kui see on tal määratud) ja tema profiili URL. Kui kasutaja on leitud, kuvatakse ka nuppu &amp;quot;Ava veebisait&amp;quot;, millega pääseb kasutaja ligi ka tema profiilile, kirjutamata ise midagi veebibrauseri aknasse. Kui kasutajat ei leitud, antakse ka vastav veateade.&lt;br /&gt;
*&#039;&#039;&#039;Fotokomplektide kuvamine&#039;&#039;&#039;: Kasutaja saab vaadata oma fotokomplekte. Selleks tuleb kõigepealt vastava nupuga omandad &#039;&#039;frob&#039;&#039;, mis on Flickri API ajutine kood (kehtib ühe tunni). Kui &#039;&#039;frob&#039;&#039; on omandatud, avaneb kasutajale nupp &amp;quot;omanda token&amp;quot;. &#039;&#039;Tokeniga&#039;&#039; on Flickri poolne frobi teisendus &#039;&#039;tokeniks&#039;&#039;, mida kasutatakse edaspidi kasutaja identifitseerimiseks. Kui &#039;&#039;token&#039;&#039; on omandatud, kuvatakse teade &amp;quot;token omandatud&amp;quot; või vastasel juhul &amp;quot;token omandamata&amp;quot;. Seejärel ilmub nähtavale nupp &amp;quot;tiri fotosetid&amp;quot;. Sellele klikkides kuvatakse thumbnailidena kasutaja fotokomplektid.&lt;br /&gt;
*&#039;&#039;&#039;Piltide üleslaadimine&#039;&#039;&#039;: Kõigepealt tuleb omandada &#039;&#039;frob&#039;&#039; ja &#039;&#039;token&#039;&#039;, nagu eelnevas punktis kirjeldatud. Seejärel saab kasutaja üles laadida oma pilte arvutist &#039;&#039;OpenFileDialogi&#039;&#039; abil. Seejärel saab sisestada pildile tiitli ehk nime, kirjelduse ja &#039;&#039;tagi&#039;&#039;, mida aga ei pea tegema (Flickr samuti ei nõua nende atribuutide olemasolu). Olles salvestanud atribuudid ilmneb nupp &amp;quot;lae üles&amp;quot;. Sellele vajutades laetakse pilt kasutaja üldpiltide sekka üles.&lt;br /&gt;
&lt;br /&gt;
Klient, installer ja lähtekood:&lt;br /&gt;
[http://enos.itcollege.ee/~jhannus/VRII/FlickrWPF.zip Download]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;menyy xmlns:xsi =&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
       xsi:noNamespaceSchemaLocation=&amp;quot;menyy_schema.xsd&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;pearoad&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Seapraad&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kotlett&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;42&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
  &amp;lt;/pearoad&amp;gt;&lt;br /&gt;
  &amp;lt;lisandid&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Riis&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;7&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;kartul&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
  &amp;lt;/lisandid&amp;gt;&lt;br /&gt;
  &amp;lt;joogid&amp;gt;&lt;br /&gt;
    &amp;lt;soojad&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Kohv&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Tee&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;15&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
    &amp;lt;/soojad&amp;gt;&lt;br /&gt;
    &amp;lt;kylmad&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Morss&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Vesi&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;3&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
    &amp;lt;/kylmad&amp;gt;&lt;br /&gt;
  &amp;lt;/joogid&amp;gt;&lt;br /&gt;
  &amp;lt;magustoidud&amp;gt;&lt;br /&gt;
    &amp;lt;magustoit&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kisell&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;14&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/magustoit&amp;gt;&lt;br /&gt;
  &amp;lt;/magustoidud&amp;gt;&lt;br /&gt;
&amp;lt;/menyy&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT atribuutide tegemiseks elementidest ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot; version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;*[*]&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:when test=&amp;quot;not(@*)&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;not(*) and not(@*) &amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;{local-name(.)}&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML schema ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- definition of simple elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;nimi&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;hind&amp;quot; type=&amp;quot;xs:decimal&amp;quot;/&amp;gt;    &lt;br /&gt;
  &amp;lt;!-- definition of complex elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;menyy&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;pearoad&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;lisandid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;joogid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;magustoidud&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoog&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisandid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
	         &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisand&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;joogid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soojad&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylmad&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soojad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
	        &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylmad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylm&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soe&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoidud&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;magustoit&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoit&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT andmete kuvamiseks html-ina ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;!--&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;style.css&amp;quot; /&amp;gt;--&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;font-color: #D0D0D0;font-family:verdana;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Menüü&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#77a1af;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Pearoad&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;                 &lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/pearoad/pearoog&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c08e1d;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Lisandid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/lisandid/lisand&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c47121;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Kuumad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/soojad/soe&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#b03428;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Külmad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/kylmad/kylm&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#862419;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Magustoidud&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/magustoidud/magustoit&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10379</id>
		<title>Meeskond &quot;näljased&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10379"/>
		<updated>2010-05-19T10:49:42Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1. XML ==&lt;br /&gt;
XML-i tegime menüü kohta. XSLT faile on kaks: üks teeb XML-i HTML-i ning teine vahetab elementide ja atribuutide kohtad. XML faili kohta on olemas ka kirjeldav schema. Raskeimaks osaks oli elementidest atribuutide tegemine, asi küll toimis, kuid vormistus oli kole ning auklik. Schema vajas ka veidi harjumist, kuid kui asi käppa sai, siis läks imelihtsaks. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2. Teenus ==&lt;br /&gt;
2.1&lt;br /&gt;
&#039;&#039;&#039;Teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:   &lt;br /&gt;
*Kasutajagrupid:Hetkel on 3 kasutajagruppi: admin (saab teha kõike), müüja (saab teha kõike peale kasutajate ja kasutajagruppide loomise) ning tavakasutajad. On olemas eraldi funktsioon ka kasutajagruppide loomiseks. Iga meetodi käivitamisel kontrollitakse kasutajaõigusi. Ühel kasutajal saab olla mitu kasutajagruppi.           &lt;br /&gt;
*Kasutajad. Kasutajate loomiseks on 2 funktsiooni: üks tavakasutajate tegemiseks, mis ei eelda sisselogimist ning teine, mida saab teostada vaid administraator (ja lisada müüjaid või teisi administraatoreid). Kasutajate loomisel kontrollitakse seda, kas kasutajanimi on juba kasutusel. Kasutaja id ning roll sisestatakse ka tabelisse kasutajaRollis, mis näitab kasutajatel olevaid rolle. Kasutajate kustutamine käib otse andmebaasist. Kasutaja loomisel salvestatakse andmebaasi kasutaja parool hashitud kujul (algoritmiks sha1)        &lt;br /&gt;
*Tooted. Kasutajatel (hetkel müüjal) on võimalus lisada ja kustutada tooteid toodete kategooriaid, hindu jms.          &lt;br /&gt;
*Sessioonid. Kasutaja edukal sisselogimisel luuakse unikaalne juhuslik sessiooni võti, mille olemasolu kontrollitakse iga sisselogimist eeldava meetodi käivitamisel. Session_key salvestatakse andmebaasis vastavas väljas. Eraldi on funktsioonid sessiooni olemasolu kontrollimiseks ning uuendamiseks. Hetkel on timeoudiks 10 minutit. Sessiooni kehtivust kontrollitakse ka kasutajaõiguste kontrollimisel.       &lt;br /&gt;
* Logimine. Võrreldakse sisestatud kasjutajanime ning sisestatud parooli hashi andmebaasis olevatega. Kui need ühtivad, siis sisselogimine on edukas ning luuakse unikaalne session key, mis salvestatakse andmebaasi. Sisselogimine ning sessiooni olemasolu on eelduseks meetodite käivitamiseks. Kui sessioon aegub, siis toimub kasutaja väljalogimine. Väljalogimisfunktsioon kirjutab üle sessiooni aegumise aja, pannes selleks hetkelise kellaaja.  &lt;br /&gt;
Lisaks on veel hunnik abifunktsioone, näiteks parooli hashimine, väärtuste tagastamine jms. &lt;br /&gt;
&lt;br /&gt;
[[TeenuseSource]]&lt;br /&gt;
   &lt;br /&gt;
Klient on kirjutatud WPF-is ning hetkel on võimalik kuvada tooteid, kasutajaid, gruppe ning kasutajagruppe.&lt;br /&gt;
&lt;br /&gt;
2.2&lt;br /&gt;
&#039;&#039;&#039;Menüü teenuse klient&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et meie tore teenus oleks veidi rohkem käega katsutavam, sai külge tehtud ka klient, mis realiseeriks põhifunktsioone. Kliendiks on WPF rakendus ning funktsionaalsus on järgmine:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sisse logimine&#039;&#039;&#039;: rakenduse käivitamisel ahistatakse kasutajat sisselogimisaknaga, valede andmete korral saab kasutaja ilusa punase veateate. Õnnestumise korral genereeritakse sessioonivõti, ning kantakse teda pidevalt edasi.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Toodete kuvamine,lisamine, kustutamine&#039;&#039;&#039;: kuvatakse väike popup, kus hunnik lahtreid ning kasutaja saab neid täites lisada toote. ID alusel saab kustutada ebasoovitava toote. Õnnestumisel või ebaõnnestumisel kuvatakse muidugi veateade.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kategooriate kuvamine, lisamine, kustutamine&#039;&#039;&#039;: iga toit tuleb paigutada kategooriasse, siin on koht kus neid luua saab. ID alusel jällegi kustutamine.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutajate kuvamine, lisamine&#039;&#039;&#039;: siin kuvatakse kõik süsteemis olevad kasutajad, ning toimub ka lisamine&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutaja gruppide kuvamine (kustutamine)&#039;&#039;&#039;: kuvatakse kehtivad kasutaja grupid, meetod ka kustutamiseks&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Pildid&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/rakendus_login.png Login Aken]&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/klient_ba.png BackEnd]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Klient&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/VR2__Menyy.rar Source]&lt;br /&gt;
&lt;br /&gt;
== 3. Flickr API ==&lt;br /&gt;
[http://i40.tinypic.com/k3r90i.png Pilt]&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:&lt;br /&gt;
*&#039;&#039;&#039;Pildiotsing&#039;&#039;&#039;: Kasutajal on võimalus otsida otsingusõna järgi pilte Flickri pildibaasist. Pilte otsitakse kasutajate galeriidest, pildikomplektidest ja niisama üles laetud piltidest, mis on &#039;&#039;publicud&#039;&#039; ehk avalikud. Kui kasutaja sisestab vähem kui 2 tähte, kuvatakse veateade. See on Flickri poolt samuti kinni keeratud, et ühetähe otsinguid ei teostataks. Üldjoontes ei oleks sellel ka mingisugust mõtet. Otsingusõna sisestamisel kuvatakse paremale aknasse 5 pildi &#039;&#039;thumbnaili&#039;&#039;, mis on kõige värskemad. &#039;&#039;Thumbnailidest&#039;&#039; vasakul all nurgas kuvatakse, mitu lehekülge pilte leiti ja mitmendal leheküljel parasjagu ollakse. Olles esimesel lehel ja/või teostades esimest otsingut, nuppu &amp;quot;eelmine&amp;quot; ei kuvata. Seejärel saab kasutaja hakata navigeerima lehekülgedel &amp;quot;eelmine&amp;quot; ja &amp;quot;järgmine&amp;quot; nuppudega. Valides thumbnaili välja ja klikkides selle peale, kuvatakse pilt suurena, laiusega 380 pikslit ja kõrgusega 380 pikslit. Kui suur pilt on kuvatud, avaneb ka võimalus vajutada nuppu &amp;quot;Ava kasutaja profiil&amp;quot;. Sellega pääseb API kasutaja ligi suure pildi kasutaja profiilile. See on sobilik näiteks kui API kasutajale hakkas huvi pakkuma pildi üles laadinud kasutaja, ning soovib tema teisigi pilte sirvida.&lt;br /&gt;
*&#039;&#039;&#039;Inimese otsing&#039;&#039;&#039;: Kasutajal on võimalus otsida emaili järgi Flickri kasutajaid. Otsingulahtrisse mitte millegi sisestamisel või jättes sisestamata &amp;quot;@&amp;quot; sümbol, kuvatakse veateade. Vastasel korral kuvatakse kas kasutaja Flickri kasutajanimi, pärisnimi (kui see on tal määratud) ja tema profiili URL. Kui kasutaja on leitud, kuvatakse ka nuppu &amp;quot;Ava veebisait&amp;quot;, millega pääseb kasutaja ligi ka tema profiilile, kirjutamata ise midagi veebibrauseri aknasse. Kui kasutajat ei leitud, antakse ka vastav veateade.&lt;br /&gt;
*&#039;&#039;&#039;Fotokomplektide kuvamine&#039;&#039;&#039;: Kasutaja saab vaadata oma fotokomplekte. Selleks tuleb kõigepealt vastava nupuga omandad &#039;&#039;frob&#039;&#039;, mis on Flickri API ajutine kood (kehtib ühe tunni). Kui &#039;&#039;frob&#039;&#039; on omandatud, avaneb kasutajale nupp &amp;quot;omanda token&amp;quot;. &#039;&#039;Tokeniga&#039;&#039; on Flickri poolne frobi teisendus &#039;&#039;tokeniks&#039;&#039;, mida kasutatakse edaspidi kasutaja identifitseerimiseks. Kui &#039;&#039;token&#039;&#039; on omandatud, kuvatakse teade &amp;quot;token omandatud&amp;quot; või vastasel juhul &amp;quot;token omandamata&amp;quot;. Seejärel ilmub nähtavale nupp &amp;quot;tiri fotosetid&amp;quot;. Sellele klikkides kuvatakse thumbnailidena kasutaja fotokomplektid.&lt;br /&gt;
*&#039;&#039;&#039;Piltide üleslaadimine&#039;&#039;&#039;: Kõigepealt tuleb omandada &#039;&#039;frob&#039;&#039; ja &#039;&#039;token&#039;&#039;, nagu eelnevas punktis kirjeldatud. Seejärel saab kasutaja üles laadida oma pilte arvutist &#039;&#039;OpenFileDialogi&#039;&#039; abil. Seejärel saab sisestada pildile tiitli ehk nime, kirjelduse ja &#039;&#039;tagi&#039;&#039;, mida aga ei pea tegema (Flickr samuti ei nõua nende atribuutide olemasolu). Olles salvestanud atribuudid ilmneb nupp &amp;quot;lae üles&amp;quot;. Sellele vajutades laetakse pilt kasutaja üldpiltide sekka üles.&lt;br /&gt;
&lt;br /&gt;
Klient, installer ja lähtekood:&lt;br /&gt;
[http://enos.itcollege.ee/~jhannus/VRII/FlickrWPF.zip Download]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;menyy xmlns:xsi =&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
       xsi:noNamespaceSchemaLocation=&amp;quot;menyy_schema.xsd&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;pearoad&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Seapraad&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kotlett&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;42&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
  &amp;lt;/pearoad&amp;gt;&lt;br /&gt;
  &amp;lt;lisandid&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Riis&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;7&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;kartul&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
  &amp;lt;/lisandid&amp;gt;&lt;br /&gt;
  &amp;lt;joogid&amp;gt;&lt;br /&gt;
    &amp;lt;soojad&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Kohv&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Tee&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;15&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
    &amp;lt;/soojad&amp;gt;&lt;br /&gt;
    &amp;lt;kylmad&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Morss&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Vesi&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;3&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
    &amp;lt;/kylmad&amp;gt;&lt;br /&gt;
  &amp;lt;/joogid&amp;gt;&lt;br /&gt;
  &amp;lt;magustoidud&amp;gt;&lt;br /&gt;
    &amp;lt;magustoit&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kisell&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;14&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/magustoit&amp;gt;&lt;br /&gt;
  &amp;lt;/magustoidud&amp;gt;&lt;br /&gt;
&amp;lt;/menyy&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT atribuutide tegemiseks elementidest ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot; version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;*[*]&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:when test=&amp;quot;not(@*)&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;not(*) and not(@*) &amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;{local-name(.)}&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML schema ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- definition of simple elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;nimi&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;hind&amp;quot; type=&amp;quot;xs:decimal&amp;quot;/&amp;gt;    &lt;br /&gt;
  &amp;lt;!-- definition of complex elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;menyy&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;pearoad&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;lisandid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;joogid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;magustoidud&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoog&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisandid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
	         &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisand&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;joogid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soojad&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylmad&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soojad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
	        &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylmad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylm&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soe&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoidud&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;magustoit&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoit&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT andmete kuvamiseks html-ina ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;!--&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;style.css&amp;quot; /&amp;gt;--&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;font-color: #D0D0D0;font-family:verdana;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Menüü&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#77a1af;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Pearoad&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;                 &lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/pearoad/pearoog&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c08e1d;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Lisandid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/lisandid/lisand&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c47121;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Kuumad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/soojad/soe&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#b03428;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Külmad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/kylmad/kylm&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#862419;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Magustoidud&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/magustoidud/magustoit&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10340</id>
		<title>Meeskond &quot;näljased&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10340"/>
		<updated>2010-05-18T13:24:39Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: /* XSLT andmete kuvamiseks html-ina */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1. XML ==&lt;br /&gt;
XML-i tegime menüü kohta. XSLT faile on kaks: üks teeb XML-i HTML-i ning teine vahetab elementide ja atribuutide kohtad. XML faili kohta on olemas ka kirjeldav schema. Raskeimaks osaks oli elementidest atribuutide tegemine, asi küll toimis, kuid vormistus oli kole ning auklik. Schema vajas ka veidi harjumist, kuid kui asi käppa sai, siis läks imelihtsaks. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2. Teenus ==&lt;br /&gt;
2.1&lt;br /&gt;
&#039;&#039;&#039;Teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:   &lt;br /&gt;
*Kasutajagrupid:Hetkel on 3 kasutajagruppi: admin (saab teha kõike), müüja (saab teha kõike peale kasutajate ja kasutajagruppide loomise) ning tavakasutajad. On olemas eraldi funktsioon ka kasutajagruppide loomiseks. Iga meetodi käivitamisel kontrollitakse kasutajaõigusi. Ühel kasutajal saab olla mitu kasutajagruppi.           &lt;br /&gt;
*Kasutajad. Kasutajate loomiseks on 2 funktsiooni: üks tavakasutajate tegemiseks, mis ei eelda sisselogimist ning teine, mida saab teostada vaid administraator (ja lisada müüjaid või teisi administraatoreid). Kasutajate loomisel kontrollitakse seda, kas kasutajanimi on juba kasutusel. Kasutaja id ning roll sisestatakse ka tabelisse kasutajaRollis, mis näitab kasutajatel olevaid rolle. Kasutajate kustutamine käib otse andmebaasist. Kasutaja loomisel salvestatakse andmebaasi kasutaja parool hashitud kujul (algoritmiks sha1)        &lt;br /&gt;
*Tooted. Kasutajatel (hetkel müüjal) on võimalus lisada ja kustutada tooteid toodete kategooriaid, hindu jms.          &lt;br /&gt;
*Sessioonid. Kasutaja edukal sisselogimisel luuakse unikaalne juhuslik sessiooni võti, mille olemasolu kontrollitakse iga sisselogimist eeldava meetodi käivitamisel. Session_key salvestatakse andmebaasis vastavas väljas. Eraldi on funktsioonid sessiooni olemasolu kontrollimiseks ning uuendamiseks. Hetkel on timeoudiks 10 minutit. Sessiooni kehtivust kontrollitakse ka kasutajaõiguste kontrollimisel.       &lt;br /&gt;
* Logimine. Võrreldakse sisestatud kasjutajanime ning sisestatud parooli hashi andmebaasis olevatega. Kui need ühtivad, siis sisselogimine on edukas ning luuakse unikaalne session key, mis salvestatakse andmebaasi. Sisselogimine ning sessiooni olemasolu on eelduseks meetodite käivitamiseks. Kui sessioon aegub, siis toimub kasutaja väljalogimine. Väljalogimisfunktsioon kirjutab üle sessiooni aegumise aja, pannes selleks hetkelise kellaaja.  &lt;br /&gt;
Lisaks on veel hunnik abifunktsioone, näiteks parooli hashimine, väärtuste tagastamine jms. &lt;br /&gt;
   &lt;br /&gt;
Klient on kirjutatud WPF-is ning hetkel on võimalik kuvada tooteid, kasutajaid, gruppe ning kasutajagruppe.&lt;br /&gt;
&lt;br /&gt;
2.2&lt;br /&gt;
&#039;&#039;&#039;Menüü teenuse klient&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et meie tore teenus oleks veidi rohkem käega katsutavam, sai külge tehtud ka klient, mis realiseeriks põhifunktsioone. Kliendiks on WPF rakendus ning funktsionaalsus on järgmine:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sisse logimine&#039;&#039;&#039;: rakenduse käivitamisel ahistatakse kasutajat sisselogimisaknaga, valede andmete korral saab kasutaja ilusa punase veateate. Õnnestumise korral genereeritakse sessioonivõti, ning kantakse teda pidevalt edasi.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Toodete kuvamine,lisamine, kustutamine&#039;&#039;&#039;: kuvatakse väike popup, kus hunnik lahtreid ning kasutaja saab neid täites lisada toote. ID alusel saab kustutada ebasoovitava toote. Õnnestumisel või ebaõnnestumisel kuvatakse muidugi veateade.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kategooriate kuvamine, lisamine, kustutamine&#039;&#039;&#039;: iga toit tuleb paigutada kategooriasse, siin on koht kus neid luua saab. ID alusel jällegi kustutamine.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutajate kuvamine, lisamine&#039;&#039;&#039;: siin kuvatakse kõik süsteemis olevad kasutajad, ning toimub ka lisamine&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutaja gruppide kuvamine (kustutamine)&#039;&#039;&#039;: kuvatakse kehtivad kasutaja grupid, meetod ka kustutamiseks&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Pildid&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/rakendus_login.png Login Aken]&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/klient_ba.png BackEnd]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Klient&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/VR2__Menyy.rar Source]&lt;br /&gt;
&lt;br /&gt;
== 3. Flickr API ==&lt;br /&gt;
[http://i40.tinypic.com/k3r90i.png Pilt]&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:&lt;br /&gt;
*&#039;&#039;&#039;Pildiotsing&#039;&#039;&#039;: Kasutajal on võimalus otsida otsingusõna järgi pilte Flickri pildibaasist. Pilte otsitakse kasutajate galeriidest, pildikomplektidest ja niisama üles laetud piltidest, mis on &#039;&#039;publicud&#039;&#039; ehk avalikud. Kui kasutaja sisestab vähem kui 2 tähte, kuvatakse veateade. See on Flickri poolt samuti kinni keeratud, et ühetähe otsinguid ei teostataks. Üldjoontes ei oleks sellel ka mingisugust mõtet. Otsingusõna sisestamisel kuvatakse paremale aknasse 5 pildi &#039;&#039;thumbnaili&#039;&#039;, mis on kõige värskemad. &#039;&#039;Thumbnailidest&#039;&#039; vasakul all nurgas kuvatakse, mitu lehekülge pilte leiti ja mitmendal leheküljel parasjagu ollakse. Olles esimesel lehel ja/või teostades esimest otsingut, nuppu &amp;quot;eelmine&amp;quot; ei kuvata. Seejärel saab kasutaja hakata navigeerima lehekülgedel &amp;quot;eelmine&amp;quot; ja &amp;quot;järgmine&amp;quot; nuppudega. Valides thumbnaili välja ja klikkides selle peale, kuvatakse pilt suurena, laiusega 380 pikslit ja kõrgusega 380 pikslit. Kui suur pilt on kuvatud, avaneb ka võimalus vajutada nuppu &amp;quot;Ava kasutaja profiil&amp;quot;. Sellega pääseb API kasutaja ligi suure pildi kasutaja profiilile. See on sobilik näiteks kui API kasutajale hakkas huvi pakkuma pildi üles laadinud kasutaja, ning soovib tema teisigi pilte sirvida.&lt;br /&gt;
*&#039;&#039;&#039;Inimese otsing&#039;&#039;&#039;: Kasutajal on võimalus otsida emaili järgi Flickri kasutajaid. Otsingulahtrisse mitte millegi sisestamisel või jättes sisestamata &amp;quot;@&amp;quot; sümbol, kuvatakse veateade. Vastasel korral kuvatakse kas kasutaja Flickri kasutajanimi, pärisnimi (kui see on tal määratud) ja tema profiili URL. Kui kasutaja on leitud, kuvatakse ka nuppu &amp;quot;Ava veebisait&amp;quot;, millega pääseb kasutaja ligi ka tema profiilile, kirjutamata ise midagi veebibrauseri aknasse. Kui kasutajat ei leitud, antakse ka vastav veateade.&lt;br /&gt;
*&#039;&#039;&#039;Fotokomplektide kuvamine&#039;&#039;&#039;: Kasutaja saab vaadata oma fotokomplekte. Selleks tuleb kõigepealt vastava nupuga omandad &#039;&#039;frob&#039;&#039;, mis on Flickri API ajutine kood (kehtib ühe tunni). Kui &#039;&#039;frob&#039;&#039; on omandatud, avaneb kasutajale nupp &amp;quot;omanda token&amp;quot;. &#039;&#039;Tokeniga&#039;&#039; on Flickri poolne frobi teisendus &#039;&#039;tokeniks&#039;&#039;, mida kasutatakse edaspidi kasutaja identifitseerimiseks. Kui &#039;&#039;token&#039;&#039; on omandatud, kuvatakse teade &amp;quot;token omandatud&amp;quot; või vastasel juhul &amp;quot;token omandamata&amp;quot;. Seejärel ilmub nähtavale nupp &amp;quot;tiri fotosetid&amp;quot;. Sellele klikkides kuvatakse thumbnailidena kasutaja fotokomplektid.&lt;br /&gt;
*&#039;&#039;&#039;Piltide üleslaadimine&#039;&#039;&#039;: Kõigepealt tuleb omandada &#039;&#039;frob&#039;&#039; ja &#039;&#039;token&#039;&#039;, nagu eelnevas punktis kirjeldatud. Seejärel saab kasutaja üles laadida oma pilte arvutist &#039;&#039;OpenFileDialogi&#039;&#039; abil. Seejärel saab sisestada pildile tiitli ehk nime, kirjelduse ja &#039;&#039;tagi&#039;&#039;, mida aga ei pea tegema (Flickr samuti ei nõua nende atribuutide olemasolu). Olles salvestanud atribuudid ilmneb nupp &amp;quot;lae üles&amp;quot;. Sellele vajutades laetakse pilt kasutaja üldpiltide sekka üles.&lt;br /&gt;
&lt;br /&gt;
Klient, installer ja lähtekood:&lt;br /&gt;
[http://enos.itcollege.ee/~jhannus/VRII/FlickrWPF.zip Download]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;menyy xmlns:xsi =&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
       xsi:noNamespaceSchemaLocation=&amp;quot;menyy_schema.xsd&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;pearoad&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Seapraad&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kotlett&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;42&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
  &amp;lt;/pearoad&amp;gt;&lt;br /&gt;
  &amp;lt;lisandid&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Riis&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;7&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;kartul&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
  &amp;lt;/lisandid&amp;gt;&lt;br /&gt;
  &amp;lt;joogid&amp;gt;&lt;br /&gt;
    &amp;lt;soojad&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Kohv&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Tee&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;15&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
    &amp;lt;/soojad&amp;gt;&lt;br /&gt;
    &amp;lt;kylmad&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Morss&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Vesi&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;3&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
    &amp;lt;/kylmad&amp;gt;&lt;br /&gt;
  &amp;lt;/joogid&amp;gt;&lt;br /&gt;
  &amp;lt;magustoidud&amp;gt;&lt;br /&gt;
    &amp;lt;magustoit&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kisell&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;14&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/magustoit&amp;gt;&lt;br /&gt;
  &amp;lt;/magustoidud&amp;gt;&lt;br /&gt;
&amp;lt;/menyy&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT atribuutide tegemiseks elementidest ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot; version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;*[*]&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:when test=&amp;quot;not(@*)&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;not(*) and not(@*) &amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;{local-name(.)}&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML schema ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- definition of simple elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;nimi&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;hind&amp;quot; type=&amp;quot;xs:decimal&amp;quot;/&amp;gt;    &lt;br /&gt;
  &amp;lt;!-- definition of complex elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;menyy&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;pearoad&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;lisandid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;joogid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;magustoidud&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoog&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisandid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
	         &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisand&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;joogid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soojad&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylmad&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soojad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
	        &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylmad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylm&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soe&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoidud&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;magustoit&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoit&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT andmete kuvamiseks html-ina ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;!--&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;style.css&amp;quot; /&amp;gt;--&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;font-color: #D0D0D0;font-family:verdana;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Menüü&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#77a1af;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Pearoad&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;                 &lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/pearoad/pearoog&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c08e1d;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Lisandid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/lisandid/lisand&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c47121;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Kuumad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/soojad/soe&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#b03428;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Külmad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/kylmad/kylm&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#862419;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Magustoidud&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/magustoidud/magustoit&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10339</id>
		<title>Meeskond &quot;näljased&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10339"/>
		<updated>2010-05-18T13:22:38Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: /* XML schema */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1. XML ==&lt;br /&gt;
XML-i tegime menüü kohta. XSLT faile on kaks: üks teeb XML-i HTML-i ning teine vahetab elementide ja atribuutide kohtad. XML faili kohta on olemas ka kirjeldav schema. Raskeimaks osaks oli elementidest atribuutide tegemine, asi küll toimis, kuid vormistus oli kole ning auklik. Schema vajas ka veidi harjumist, kuid kui asi käppa sai, siis läks imelihtsaks. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2. Teenus ==&lt;br /&gt;
2.1&lt;br /&gt;
&#039;&#039;&#039;Teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:   &lt;br /&gt;
*Kasutajagrupid:Hetkel on 3 kasutajagruppi: admin (saab teha kõike), müüja (saab teha kõike peale kasutajate ja kasutajagruppide loomise) ning tavakasutajad. On olemas eraldi funktsioon ka kasutajagruppide loomiseks. Iga meetodi käivitamisel kontrollitakse kasutajaõigusi. Ühel kasutajal saab olla mitu kasutajagruppi.           &lt;br /&gt;
*Kasutajad. Kasutajate loomiseks on 2 funktsiooni: üks tavakasutajate tegemiseks, mis ei eelda sisselogimist ning teine, mida saab teostada vaid administraator (ja lisada müüjaid või teisi administraatoreid). Kasutajate loomisel kontrollitakse seda, kas kasutajanimi on juba kasutusel. Kasutaja id ning roll sisestatakse ka tabelisse kasutajaRollis, mis näitab kasutajatel olevaid rolle. Kasutajate kustutamine käib otse andmebaasist. Kasutaja loomisel salvestatakse andmebaasi kasutaja parool hashitud kujul (algoritmiks sha1)        &lt;br /&gt;
*Tooted. Kasutajatel (hetkel müüjal) on võimalus lisada ja kustutada tooteid toodete kategooriaid, hindu jms.          &lt;br /&gt;
*Sessioonid. Kasutaja edukal sisselogimisel luuakse unikaalne juhuslik sessiooni võti, mille olemasolu kontrollitakse iga sisselogimist eeldava meetodi käivitamisel. Session_key salvestatakse andmebaasis vastavas väljas. Eraldi on funktsioonid sessiooni olemasolu kontrollimiseks ning uuendamiseks. Hetkel on timeoudiks 10 minutit. Sessiooni kehtivust kontrollitakse ka kasutajaõiguste kontrollimisel.       &lt;br /&gt;
* Logimine. Võrreldakse sisestatud kasjutajanime ning sisestatud parooli hashi andmebaasis olevatega. Kui need ühtivad, siis sisselogimine on edukas ning luuakse unikaalne session key, mis salvestatakse andmebaasi. Sisselogimine ning sessiooni olemasolu on eelduseks meetodite käivitamiseks. Kui sessioon aegub, siis toimub kasutaja väljalogimine. Väljalogimisfunktsioon kirjutab üle sessiooni aegumise aja, pannes selleks hetkelise kellaaja.  &lt;br /&gt;
Lisaks on veel hunnik abifunktsioone, näiteks parooli hashimine, väärtuste tagastamine jms. &lt;br /&gt;
   &lt;br /&gt;
Klient on kirjutatud WPF-is ning hetkel on võimalik kuvada tooteid, kasutajaid, gruppe ning kasutajagruppe.&lt;br /&gt;
&lt;br /&gt;
2.2&lt;br /&gt;
&#039;&#039;&#039;Menüü teenuse klient&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et meie tore teenus oleks veidi rohkem käega katsutavam, sai külge tehtud ka klient, mis realiseeriks põhifunktsioone. Kliendiks on WPF rakendus ning funktsionaalsus on järgmine:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sisse logimine&#039;&#039;&#039;: rakenduse käivitamisel ahistatakse kasutajat sisselogimisaknaga, valede andmete korral saab kasutaja ilusa punase veateate. Õnnestumise korral genereeritakse sessioonivõti, ning kantakse teda pidevalt edasi.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Toodete kuvamine,lisamine, kustutamine&#039;&#039;&#039;: kuvatakse väike popup, kus hunnik lahtreid ning kasutaja saab neid täites lisada toote. ID alusel saab kustutada ebasoovitava toote. Õnnestumisel või ebaõnnestumisel kuvatakse muidugi veateade.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kategooriate kuvamine, lisamine, kustutamine&#039;&#039;&#039;: iga toit tuleb paigutada kategooriasse, siin on koht kus neid luua saab. ID alusel jällegi kustutamine.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutajate kuvamine, lisamine&#039;&#039;&#039;: siin kuvatakse kõik süsteemis olevad kasutajad, ning toimub ka lisamine&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutaja gruppide kuvamine (kustutamine)&#039;&#039;&#039;: kuvatakse kehtivad kasutaja grupid, meetod ka kustutamiseks&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Pildid&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/rakendus_login.png Login Aken]&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/klient_ba.png BackEnd]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Klient&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/VR2__Menyy.rar Source]&lt;br /&gt;
&lt;br /&gt;
== 3. Flickr API ==&lt;br /&gt;
[http://i40.tinypic.com/k3r90i.png Pilt]&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:&lt;br /&gt;
*&#039;&#039;&#039;Pildiotsing&#039;&#039;&#039;: Kasutajal on võimalus otsida otsingusõna järgi pilte Flickri pildibaasist. Pilte otsitakse kasutajate galeriidest, pildikomplektidest ja niisama üles laetud piltidest, mis on &#039;&#039;publicud&#039;&#039; ehk avalikud. Kui kasutaja sisestab vähem kui 2 tähte, kuvatakse veateade. See on Flickri poolt samuti kinni keeratud, et ühetähe otsinguid ei teostataks. Üldjoontes ei oleks sellel ka mingisugust mõtet. Otsingusõna sisestamisel kuvatakse paremale aknasse 5 pildi &#039;&#039;thumbnaili&#039;&#039;, mis on kõige värskemad. &#039;&#039;Thumbnailidest&#039;&#039; vasakul all nurgas kuvatakse, mitu lehekülge pilte leiti ja mitmendal leheküljel parasjagu ollakse. Olles esimesel lehel ja/või teostades esimest otsingut, nuppu &amp;quot;eelmine&amp;quot; ei kuvata. Seejärel saab kasutaja hakata navigeerima lehekülgedel &amp;quot;eelmine&amp;quot; ja &amp;quot;järgmine&amp;quot; nuppudega. Valides thumbnaili välja ja klikkides selle peale, kuvatakse pilt suurena, laiusega 380 pikslit ja kõrgusega 380 pikslit. Kui suur pilt on kuvatud, avaneb ka võimalus vajutada nuppu &amp;quot;Ava kasutaja profiil&amp;quot;. Sellega pääseb API kasutaja ligi suure pildi kasutaja profiilile. See on sobilik näiteks kui API kasutajale hakkas huvi pakkuma pildi üles laadinud kasutaja, ning soovib tema teisigi pilte sirvida.&lt;br /&gt;
*&#039;&#039;&#039;Inimese otsing&#039;&#039;&#039;: Kasutajal on võimalus otsida emaili järgi Flickri kasutajaid. Otsingulahtrisse mitte millegi sisestamisel või jättes sisestamata &amp;quot;@&amp;quot; sümbol, kuvatakse veateade. Vastasel korral kuvatakse kas kasutaja Flickri kasutajanimi, pärisnimi (kui see on tal määratud) ja tema profiili URL. Kui kasutaja on leitud, kuvatakse ka nuppu &amp;quot;Ava veebisait&amp;quot;, millega pääseb kasutaja ligi ka tema profiilile, kirjutamata ise midagi veebibrauseri aknasse. Kui kasutajat ei leitud, antakse ka vastav veateade.&lt;br /&gt;
*&#039;&#039;&#039;Fotokomplektide kuvamine&#039;&#039;&#039;: Kasutaja saab vaadata oma fotokomplekte. Selleks tuleb kõigepealt vastava nupuga omandad &#039;&#039;frob&#039;&#039;, mis on Flickri API ajutine kood (kehtib ühe tunni). Kui &#039;&#039;frob&#039;&#039; on omandatud, avaneb kasutajale nupp &amp;quot;omanda token&amp;quot;. &#039;&#039;Tokeniga&#039;&#039; on Flickri poolne frobi teisendus &#039;&#039;tokeniks&#039;&#039;, mida kasutatakse edaspidi kasutaja identifitseerimiseks. Kui &#039;&#039;token&#039;&#039; on omandatud, kuvatakse teade &amp;quot;token omandatud&amp;quot; või vastasel juhul &amp;quot;token omandamata&amp;quot;. Seejärel ilmub nähtavale nupp &amp;quot;tiri fotosetid&amp;quot;. Sellele klikkides kuvatakse thumbnailidena kasutaja fotokomplektid.&lt;br /&gt;
*&#039;&#039;&#039;Piltide üleslaadimine&#039;&#039;&#039;: Kõigepealt tuleb omandada &#039;&#039;frob&#039;&#039; ja &#039;&#039;token&#039;&#039;, nagu eelnevas punktis kirjeldatud. Seejärel saab kasutaja üles laadida oma pilte arvutist &#039;&#039;OpenFileDialogi&#039;&#039; abil. Seejärel saab sisestada pildile tiitli ehk nime, kirjelduse ja &#039;&#039;tagi&#039;&#039;, mida aga ei pea tegema (Flickr samuti ei nõua nende atribuutide olemasolu). Olles salvestanud atribuudid ilmneb nupp &amp;quot;lae üles&amp;quot;. Sellele vajutades laetakse pilt kasutaja üldpiltide sekka üles.&lt;br /&gt;
&lt;br /&gt;
Klient, installer ja lähtekood:&lt;br /&gt;
[http://enos.itcollege.ee/~jhannus/VRII/FlickrWPF.zip Download]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;menyy xmlns:xsi =&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
       xsi:noNamespaceSchemaLocation=&amp;quot;menyy_schema.xsd&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;pearoad&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Seapraad&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kotlett&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;42&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
  &amp;lt;/pearoad&amp;gt;&lt;br /&gt;
  &amp;lt;lisandid&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Riis&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;7&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;kartul&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
  &amp;lt;/lisandid&amp;gt;&lt;br /&gt;
  &amp;lt;joogid&amp;gt;&lt;br /&gt;
    &amp;lt;soojad&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Kohv&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Tee&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;15&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
    &amp;lt;/soojad&amp;gt;&lt;br /&gt;
    &amp;lt;kylmad&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Morss&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Vesi&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;3&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
    &amp;lt;/kylmad&amp;gt;&lt;br /&gt;
  &amp;lt;/joogid&amp;gt;&lt;br /&gt;
  &amp;lt;magustoidud&amp;gt;&lt;br /&gt;
    &amp;lt;magustoit&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kisell&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;14&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/magustoit&amp;gt;&lt;br /&gt;
  &amp;lt;/magustoidud&amp;gt;&lt;br /&gt;
&amp;lt;/menyy&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT atribuutide tegemiseks elementidest ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot; version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;*[*]&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:when test=&amp;quot;not(@*)&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;not(*) and not(@*) &amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;{local-name(.)}&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML schema ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- definition of simple elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;nimi&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;hind&amp;quot; type=&amp;quot;xs:decimal&amp;quot;/&amp;gt;    &lt;br /&gt;
  &amp;lt;!-- definition of complex elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;menyy&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;pearoad&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;lisandid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;joogid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;magustoidud&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoog&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisandid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
	         &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisand&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;joogid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soojad&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylmad&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soojad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
	        &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylmad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylm&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soe&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoidud&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;magustoit&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoit&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT andmete kuvamiseks html-ina ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;!--&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;style.css&amp;quot; /&amp;gt;--&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;font-color: #D0D0D0;font-family:verdana;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Menüü&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#77a1af;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Pearoad&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;                 &lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/pearoad/pearoog&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c08e1d;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Lisandid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/lisandid/lisand&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c47121;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Kuumad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/soojad/soe&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#b03428;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Külmad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/kylmad/kylm&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#862419;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Magustoidud&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/magustoidud/magustoit&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10338</id>
		<title>Meeskond &quot;näljased&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10338"/>
		<updated>2010-05-18T13:21:48Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: /* XSLT atribuutide tegemiseks elementidest */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1. XML ==&lt;br /&gt;
XML-i tegime menüü kohta. XSLT faile on kaks: üks teeb XML-i HTML-i ning teine vahetab elementide ja atribuutide kohtad. XML faili kohta on olemas ka kirjeldav schema. Raskeimaks osaks oli elementidest atribuutide tegemine, asi küll toimis, kuid vormistus oli kole ning auklik. Schema vajas ka veidi harjumist, kuid kui asi käppa sai, siis läks imelihtsaks. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2. Teenus ==&lt;br /&gt;
2.1&lt;br /&gt;
&#039;&#039;&#039;Teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:   &lt;br /&gt;
*Kasutajagrupid:Hetkel on 3 kasutajagruppi: admin (saab teha kõike), müüja (saab teha kõike peale kasutajate ja kasutajagruppide loomise) ning tavakasutajad. On olemas eraldi funktsioon ka kasutajagruppide loomiseks. Iga meetodi käivitamisel kontrollitakse kasutajaõigusi. Ühel kasutajal saab olla mitu kasutajagruppi.           &lt;br /&gt;
*Kasutajad. Kasutajate loomiseks on 2 funktsiooni: üks tavakasutajate tegemiseks, mis ei eelda sisselogimist ning teine, mida saab teostada vaid administraator (ja lisada müüjaid või teisi administraatoreid). Kasutajate loomisel kontrollitakse seda, kas kasutajanimi on juba kasutusel. Kasutaja id ning roll sisestatakse ka tabelisse kasutajaRollis, mis näitab kasutajatel olevaid rolle. Kasutajate kustutamine käib otse andmebaasist. Kasutaja loomisel salvestatakse andmebaasi kasutaja parool hashitud kujul (algoritmiks sha1)        &lt;br /&gt;
*Tooted. Kasutajatel (hetkel müüjal) on võimalus lisada ja kustutada tooteid toodete kategooriaid, hindu jms.          &lt;br /&gt;
*Sessioonid. Kasutaja edukal sisselogimisel luuakse unikaalne juhuslik sessiooni võti, mille olemasolu kontrollitakse iga sisselogimist eeldava meetodi käivitamisel. Session_key salvestatakse andmebaasis vastavas väljas. Eraldi on funktsioonid sessiooni olemasolu kontrollimiseks ning uuendamiseks. Hetkel on timeoudiks 10 minutit. Sessiooni kehtivust kontrollitakse ka kasutajaõiguste kontrollimisel.       &lt;br /&gt;
* Logimine. Võrreldakse sisestatud kasjutajanime ning sisestatud parooli hashi andmebaasis olevatega. Kui need ühtivad, siis sisselogimine on edukas ning luuakse unikaalne session key, mis salvestatakse andmebaasi. Sisselogimine ning sessiooni olemasolu on eelduseks meetodite käivitamiseks. Kui sessioon aegub, siis toimub kasutaja väljalogimine. Väljalogimisfunktsioon kirjutab üle sessiooni aegumise aja, pannes selleks hetkelise kellaaja.  &lt;br /&gt;
Lisaks on veel hunnik abifunktsioone, näiteks parooli hashimine, väärtuste tagastamine jms. &lt;br /&gt;
   &lt;br /&gt;
Klient on kirjutatud WPF-is ning hetkel on võimalik kuvada tooteid, kasutajaid, gruppe ning kasutajagruppe.&lt;br /&gt;
&lt;br /&gt;
2.2&lt;br /&gt;
&#039;&#039;&#039;Menüü teenuse klient&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et meie tore teenus oleks veidi rohkem käega katsutavam, sai külge tehtud ka klient, mis realiseeriks põhifunktsioone. Kliendiks on WPF rakendus ning funktsionaalsus on järgmine:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sisse logimine&#039;&#039;&#039;: rakenduse käivitamisel ahistatakse kasutajat sisselogimisaknaga, valede andmete korral saab kasutaja ilusa punase veateate. Õnnestumise korral genereeritakse sessioonivõti, ning kantakse teda pidevalt edasi.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Toodete kuvamine,lisamine, kustutamine&#039;&#039;&#039;: kuvatakse väike popup, kus hunnik lahtreid ning kasutaja saab neid täites lisada toote. ID alusel saab kustutada ebasoovitava toote. Õnnestumisel või ebaõnnestumisel kuvatakse muidugi veateade.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kategooriate kuvamine, lisamine, kustutamine&#039;&#039;&#039;: iga toit tuleb paigutada kategooriasse, siin on koht kus neid luua saab. ID alusel jällegi kustutamine.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutajate kuvamine, lisamine&#039;&#039;&#039;: siin kuvatakse kõik süsteemis olevad kasutajad, ning toimub ka lisamine&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutaja gruppide kuvamine (kustutamine)&#039;&#039;&#039;: kuvatakse kehtivad kasutaja grupid, meetod ka kustutamiseks&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Pildid&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/rakendus_login.png Login Aken]&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/klient_ba.png BackEnd]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Klient&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/VR2__Menyy.rar Source]&lt;br /&gt;
&lt;br /&gt;
== 3. Flickr API ==&lt;br /&gt;
[http://i40.tinypic.com/k3r90i.png Pilt]&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:&lt;br /&gt;
*&#039;&#039;&#039;Pildiotsing&#039;&#039;&#039;: Kasutajal on võimalus otsida otsingusõna järgi pilte Flickri pildibaasist. Pilte otsitakse kasutajate galeriidest, pildikomplektidest ja niisama üles laetud piltidest, mis on &#039;&#039;publicud&#039;&#039; ehk avalikud. Kui kasutaja sisestab vähem kui 2 tähte, kuvatakse veateade. See on Flickri poolt samuti kinni keeratud, et ühetähe otsinguid ei teostataks. Üldjoontes ei oleks sellel ka mingisugust mõtet. Otsingusõna sisestamisel kuvatakse paremale aknasse 5 pildi &#039;&#039;thumbnaili&#039;&#039;, mis on kõige värskemad. &#039;&#039;Thumbnailidest&#039;&#039; vasakul all nurgas kuvatakse, mitu lehekülge pilte leiti ja mitmendal leheküljel parasjagu ollakse. Olles esimesel lehel ja/või teostades esimest otsingut, nuppu &amp;quot;eelmine&amp;quot; ei kuvata. Seejärel saab kasutaja hakata navigeerima lehekülgedel &amp;quot;eelmine&amp;quot; ja &amp;quot;järgmine&amp;quot; nuppudega. Valides thumbnaili välja ja klikkides selle peale, kuvatakse pilt suurena, laiusega 380 pikslit ja kõrgusega 380 pikslit. Kui suur pilt on kuvatud, avaneb ka võimalus vajutada nuppu &amp;quot;Ava kasutaja profiil&amp;quot;. Sellega pääseb API kasutaja ligi suure pildi kasutaja profiilile. See on sobilik näiteks kui API kasutajale hakkas huvi pakkuma pildi üles laadinud kasutaja, ning soovib tema teisigi pilte sirvida.&lt;br /&gt;
*&#039;&#039;&#039;Inimese otsing&#039;&#039;&#039;: Kasutajal on võimalus otsida emaili järgi Flickri kasutajaid. Otsingulahtrisse mitte millegi sisestamisel või jättes sisestamata &amp;quot;@&amp;quot; sümbol, kuvatakse veateade. Vastasel korral kuvatakse kas kasutaja Flickri kasutajanimi, pärisnimi (kui see on tal määratud) ja tema profiili URL. Kui kasutaja on leitud, kuvatakse ka nuppu &amp;quot;Ava veebisait&amp;quot;, millega pääseb kasutaja ligi ka tema profiilile, kirjutamata ise midagi veebibrauseri aknasse. Kui kasutajat ei leitud, antakse ka vastav veateade.&lt;br /&gt;
*&#039;&#039;&#039;Fotokomplektide kuvamine&#039;&#039;&#039;: Kasutaja saab vaadata oma fotokomplekte. Selleks tuleb kõigepealt vastava nupuga omandad &#039;&#039;frob&#039;&#039;, mis on Flickri API ajutine kood (kehtib ühe tunni). Kui &#039;&#039;frob&#039;&#039; on omandatud, avaneb kasutajale nupp &amp;quot;omanda token&amp;quot;. &#039;&#039;Tokeniga&#039;&#039; on Flickri poolne frobi teisendus &#039;&#039;tokeniks&#039;&#039;, mida kasutatakse edaspidi kasutaja identifitseerimiseks. Kui &#039;&#039;token&#039;&#039; on omandatud, kuvatakse teade &amp;quot;token omandatud&amp;quot; või vastasel juhul &amp;quot;token omandamata&amp;quot;. Seejärel ilmub nähtavale nupp &amp;quot;tiri fotosetid&amp;quot;. Sellele klikkides kuvatakse thumbnailidena kasutaja fotokomplektid.&lt;br /&gt;
*&#039;&#039;&#039;Piltide üleslaadimine&#039;&#039;&#039;: Kõigepealt tuleb omandada &#039;&#039;frob&#039;&#039; ja &#039;&#039;token&#039;&#039;, nagu eelnevas punktis kirjeldatud. Seejärel saab kasutaja üles laadida oma pilte arvutist &#039;&#039;OpenFileDialogi&#039;&#039; abil. Seejärel saab sisestada pildile tiitli ehk nime, kirjelduse ja &#039;&#039;tagi&#039;&#039;, mida aga ei pea tegema (Flickr samuti ei nõua nende atribuutide olemasolu). Olles salvestanud atribuudid ilmneb nupp &amp;quot;lae üles&amp;quot;. Sellele vajutades laetakse pilt kasutaja üldpiltide sekka üles.&lt;br /&gt;
&lt;br /&gt;
Klient, installer ja lähtekood:&lt;br /&gt;
[http://enos.itcollege.ee/~jhannus/VRII/FlickrWPF.zip Download]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;menyy xmlns:xsi =&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
       xsi:noNamespaceSchemaLocation=&amp;quot;menyy_schema.xsd&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;pearoad&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Seapraad&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kotlett&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;42&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
  &amp;lt;/pearoad&amp;gt;&lt;br /&gt;
  &amp;lt;lisandid&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Riis&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;7&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;kartul&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
  &amp;lt;/lisandid&amp;gt;&lt;br /&gt;
  &amp;lt;joogid&amp;gt;&lt;br /&gt;
    &amp;lt;soojad&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Kohv&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Tee&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;15&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
    &amp;lt;/soojad&amp;gt;&lt;br /&gt;
    &amp;lt;kylmad&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Morss&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Vesi&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;3&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
    &amp;lt;/kylmad&amp;gt;&lt;br /&gt;
  &amp;lt;/joogid&amp;gt;&lt;br /&gt;
  &amp;lt;magustoidud&amp;gt;&lt;br /&gt;
    &amp;lt;magustoit&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kisell&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;14&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/magustoit&amp;gt;&lt;br /&gt;
  &amp;lt;/magustoidud&amp;gt;&lt;br /&gt;
&amp;lt;/menyy&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT atribuutide tegemiseks elementidest ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot; version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;*[*]&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:when test=&amp;quot;not(@*)&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;not(*) and not(@*) &amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;{local-name(.)}&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML schema ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- definition of simple elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;nimi&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;hind&amp;quot; type=&amp;quot;xs:decimal&amp;quot;/&amp;gt;    &lt;br /&gt;
  &amp;lt;!-- definition of complex elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;menyy&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;pearoad&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;lisandid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;joogid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;magustoidud&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoog&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisandid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
	         &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisand&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;joogid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soojad&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylmad&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soojad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
	        &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylmad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylm&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soe&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoidud&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;magustoit&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoit&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XSLT andmete kuvamiseks html-ina ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;!--&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;style.css&amp;quot; /&amp;gt;--&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;font-color: #D0D0D0;font-family:verdana;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Menüü&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#77a1af;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Pearoad&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;                 &lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/pearoad/pearoog&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c08e1d;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Lisandid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/lisandid/lisand&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c47121;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Kuumad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/soojad/soe&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#b03428;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Külmad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/kylmad/kylm&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#862419;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Magustoidud&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/magustoidud/magustoit&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10336</id>
		<title>Meeskond &quot;näljased&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10336"/>
		<updated>2010-05-18T13:21:17Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: /* XSLT atribuutide tegemiseks elementidest */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1. XML ==&lt;br /&gt;
XML-i tegime menüü kohta. XSLT faile on kaks: üks teeb XML-i HTML-i ning teine vahetab elementide ja atribuutide kohtad. XML faili kohta on olemas ka kirjeldav schema. Raskeimaks osaks oli elementidest atribuutide tegemine, asi küll toimis, kuid vormistus oli kole ning auklik. Schema vajas ka veidi harjumist, kuid kui asi käppa sai, siis läks imelihtsaks. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2. Teenus ==&lt;br /&gt;
2.1&lt;br /&gt;
&#039;&#039;&#039;Teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:   &lt;br /&gt;
*Kasutajagrupid:Hetkel on 3 kasutajagruppi: admin (saab teha kõike), müüja (saab teha kõike peale kasutajate ja kasutajagruppide loomise) ning tavakasutajad. On olemas eraldi funktsioon ka kasutajagruppide loomiseks. Iga meetodi käivitamisel kontrollitakse kasutajaõigusi. Ühel kasutajal saab olla mitu kasutajagruppi.           &lt;br /&gt;
*Kasutajad. Kasutajate loomiseks on 2 funktsiooni: üks tavakasutajate tegemiseks, mis ei eelda sisselogimist ning teine, mida saab teostada vaid administraator (ja lisada müüjaid või teisi administraatoreid). Kasutajate loomisel kontrollitakse seda, kas kasutajanimi on juba kasutusel. Kasutaja id ning roll sisestatakse ka tabelisse kasutajaRollis, mis näitab kasutajatel olevaid rolle. Kasutajate kustutamine käib otse andmebaasist. Kasutaja loomisel salvestatakse andmebaasi kasutaja parool hashitud kujul (algoritmiks sha1)        &lt;br /&gt;
*Tooted. Kasutajatel (hetkel müüjal) on võimalus lisada ja kustutada tooteid toodete kategooriaid, hindu jms.          &lt;br /&gt;
*Sessioonid. Kasutaja edukal sisselogimisel luuakse unikaalne juhuslik sessiooni võti, mille olemasolu kontrollitakse iga sisselogimist eeldava meetodi käivitamisel. Session_key salvestatakse andmebaasis vastavas väljas. Eraldi on funktsioonid sessiooni olemasolu kontrollimiseks ning uuendamiseks. Hetkel on timeoudiks 10 minutit. Sessiooni kehtivust kontrollitakse ka kasutajaõiguste kontrollimisel.       &lt;br /&gt;
* Logimine. Võrreldakse sisestatud kasjutajanime ning sisestatud parooli hashi andmebaasis olevatega. Kui need ühtivad, siis sisselogimine on edukas ning luuakse unikaalne session key, mis salvestatakse andmebaasi. Sisselogimine ning sessiooni olemasolu on eelduseks meetodite käivitamiseks. Kui sessioon aegub, siis toimub kasutaja väljalogimine. Väljalogimisfunktsioon kirjutab üle sessiooni aegumise aja, pannes selleks hetkelise kellaaja.  &lt;br /&gt;
Lisaks on veel hunnik abifunktsioone, näiteks parooli hashimine, väärtuste tagastamine jms. &lt;br /&gt;
   &lt;br /&gt;
Klient on kirjutatud WPF-is ning hetkel on võimalik kuvada tooteid, kasutajaid, gruppe ning kasutajagruppe.&lt;br /&gt;
&lt;br /&gt;
2.2&lt;br /&gt;
&#039;&#039;&#039;Menüü teenuse klient&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et meie tore teenus oleks veidi rohkem käega katsutavam, sai külge tehtud ka klient, mis realiseeriks põhifunktsioone. Kliendiks on WPF rakendus ning funktsionaalsus on järgmine:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sisse logimine&#039;&#039;&#039;: rakenduse käivitamisel ahistatakse kasutajat sisselogimisaknaga, valede andmete korral saab kasutaja ilusa punase veateate. Õnnestumise korral genereeritakse sessioonivõti, ning kantakse teda pidevalt edasi.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Toodete kuvamine,lisamine, kustutamine&#039;&#039;&#039;: kuvatakse väike popup, kus hunnik lahtreid ning kasutaja saab neid täites lisada toote. ID alusel saab kustutada ebasoovitava toote. Õnnestumisel või ebaõnnestumisel kuvatakse muidugi veateade.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kategooriate kuvamine, lisamine, kustutamine&#039;&#039;&#039;: iga toit tuleb paigutada kategooriasse, siin on koht kus neid luua saab. ID alusel jällegi kustutamine.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutajate kuvamine, lisamine&#039;&#039;&#039;: siin kuvatakse kõik süsteemis olevad kasutajad, ning toimub ka lisamine&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutaja gruppide kuvamine (kustutamine)&#039;&#039;&#039;: kuvatakse kehtivad kasutaja grupid, meetod ka kustutamiseks&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Pildid&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/rakendus_login.png Login Aken]&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/klient_ba.png BackEnd]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Klient&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/VR2__Menyy.rar Source]&lt;br /&gt;
&lt;br /&gt;
== 3. Flickr API ==&lt;br /&gt;
[http://i40.tinypic.com/k3r90i.png Pilt]&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:&lt;br /&gt;
*&#039;&#039;&#039;Pildiotsing&#039;&#039;&#039;: Kasutajal on võimalus otsida otsingusõna järgi pilte Flickri pildibaasist. Pilte otsitakse kasutajate galeriidest, pildikomplektidest ja niisama üles laetud piltidest, mis on &#039;&#039;publicud&#039;&#039; ehk avalikud. Kui kasutaja sisestab vähem kui 2 tähte, kuvatakse veateade. See on Flickri poolt samuti kinni keeratud, et ühetähe otsinguid ei teostataks. Üldjoontes ei oleks sellel ka mingisugust mõtet. Otsingusõna sisestamisel kuvatakse paremale aknasse 5 pildi &#039;&#039;thumbnaili&#039;&#039;, mis on kõige värskemad. &#039;&#039;Thumbnailidest&#039;&#039; vasakul all nurgas kuvatakse, mitu lehekülge pilte leiti ja mitmendal leheküljel parasjagu ollakse. Olles esimesel lehel ja/või teostades esimest otsingut, nuppu &amp;quot;eelmine&amp;quot; ei kuvata. Seejärel saab kasutaja hakata navigeerima lehekülgedel &amp;quot;eelmine&amp;quot; ja &amp;quot;järgmine&amp;quot; nuppudega. Valides thumbnaili välja ja klikkides selle peale, kuvatakse pilt suurena, laiusega 380 pikslit ja kõrgusega 380 pikslit. Kui suur pilt on kuvatud, avaneb ka võimalus vajutada nuppu &amp;quot;Ava kasutaja profiil&amp;quot;. Sellega pääseb API kasutaja ligi suure pildi kasutaja profiilile. See on sobilik näiteks kui API kasutajale hakkas huvi pakkuma pildi üles laadinud kasutaja, ning soovib tema teisigi pilte sirvida.&lt;br /&gt;
*&#039;&#039;&#039;Inimese otsing&#039;&#039;&#039;: Kasutajal on võimalus otsida emaili järgi Flickri kasutajaid. Otsingulahtrisse mitte millegi sisestamisel või jättes sisestamata &amp;quot;@&amp;quot; sümbol, kuvatakse veateade. Vastasel korral kuvatakse kas kasutaja Flickri kasutajanimi, pärisnimi (kui see on tal määratud) ja tema profiili URL. Kui kasutaja on leitud, kuvatakse ka nuppu &amp;quot;Ava veebisait&amp;quot;, millega pääseb kasutaja ligi ka tema profiilile, kirjutamata ise midagi veebibrauseri aknasse. Kui kasutajat ei leitud, antakse ka vastav veateade.&lt;br /&gt;
*&#039;&#039;&#039;Fotokomplektide kuvamine&#039;&#039;&#039;: Kasutaja saab vaadata oma fotokomplekte. Selleks tuleb kõigepealt vastava nupuga omandad &#039;&#039;frob&#039;&#039;, mis on Flickri API ajutine kood (kehtib ühe tunni). Kui &#039;&#039;frob&#039;&#039; on omandatud, avaneb kasutajale nupp &amp;quot;omanda token&amp;quot;. &#039;&#039;Tokeniga&#039;&#039; on Flickri poolne frobi teisendus &#039;&#039;tokeniks&#039;&#039;, mida kasutatakse edaspidi kasutaja identifitseerimiseks. Kui &#039;&#039;token&#039;&#039; on omandatud, kuvatakse teade &amp;quot;token omandatud&amp;quot; või vastasel juhul &amp;quot;token omandamata&amp;quot;. Seejärel ilmub nähtavale nupp &amp;quot;tiri fotosetid&amp;quot;. Sellele klikkides kuvatakse thumbnailidena kasutaja fotokomplektid.&lt;br /&gt;
*&#039;&#039;&#039;Piltide üleslaadimine&#039;&#039;&#039;: Kõigepealt tuleb omandada &#039;&#039;frob&#039;&#039; ja &#039;&#039;token&#039;&#039;, nagu eelnevas punktis kirjeldatud. Seejärel saab kasutaja üles laadida oma pilte arvutist &#039;&#039;OpenFileDialogi&#039;&#039; abil. Seejärel saab sisestada pildile tiitli ehk nime, kirjelduse ja &#039;&#039;tagi&#039;&#039;, mida aga ei pea tegema (Flickr samuti ei nõua nende atribuutide olemasolu). Olles salvestanud atribuudid ilmneb nupp &amp;quot;lae üles&amp;quot;. Sellele vajutades laetakse pilt kasutaja üldpiltide sekka üles.&lt;br /&gt;
&lt;br /&gt;
Klient, installer ja lähtekood:&lt;br /&gt;
[http://enos.itcollege.ee/~jhannus/VRII/FlickrWPF.zip Download]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;menyy xmlns:xsi =&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
       xsi:noNamespaceSchemaLocation=&amp;quot;menyy_schema.xsd&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;pearoad&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Seapraad&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kotlett&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;42&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
  &amp;lt;/pearoad&amp;gt;&lt;br /&gt;
  &amp;lt;lisandid&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Riis&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;7&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;kartul&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
  &amp;lt;/lisandid&amp;gt;&lt;br /&gt;
  &amp;lt;joogid&amp;gt;&lt;br /&gt;
    &amp;lt;soojad&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Kohv&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Tee&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;15&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
    &amp;lt;/soojad&amp;gt;&lt;br /&gt;
    &amp;lt;kylmad&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Morss&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Vesi&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;3&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
    &amp;lt;/kylmad&amp;gt;&lt;br /&gt;
  &amp;lt;/joogid&amp;gt;&lt;br /&gt;
  &amp;lt;magustoidud&amp;gt;&lt;br /&gt;
    &amp;lt;magustoit&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kisell&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;14&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/magustoit&amp;gt;&lt;br /&gt;
  &amp;lt;/magustoidud&amp;gt;&lt;br /&gt;
&amp;lt;/menyy&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT atribuutide tegemiseks elementidest ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot; version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;*[*]&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:when test=&amp;quot;not(@*)&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;not(*) and not(@*) &amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;{local-name(.)}&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML schema ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- definition of simple elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;nimi&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;hind&amp;quot; type=&amp;quot;xs:decimal&amp;quot;/&amp;gt;    &lt;br /&gt;
  &amp;lt;!-- definition of complex elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;menyy&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;pearoad&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;lisandid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;joogid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;magustoidud&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoog&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisandid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
	         &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisand&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;joogid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soojad&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylmad&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soojad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
	        &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylmad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylm&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soe&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoidud&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;magustoit&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoit&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XSLT andmete kuvamiseks html-ina ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;!--&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;style.css&amp;quot; /&amp;gt;--&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;font-color: #D0D0D0;font-family:verdana;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Menüü&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#77a1af;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Pearoad&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;                 &lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/pearoad/pearoog&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c08e1d;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Lisandid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/lisandid/lisand&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c47121;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Kuumad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/soojad/soe&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#b03428;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Külmad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/kylmad/kylm&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#862419;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Magustoidud&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/magustoidud/magustoit&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10335</id>
		<title>Meeskond &quot;näljased&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10335"/>
		<updated>2010-05-18T13:20:30Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: /* XML */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1. XML ==&lt;br /&gt;
XML-i tegime menüü kohta. XSLT faile on kaks: üks teeb XML-i HTML-i ning teine vahetab elementide ja atribuutide kohtad. XML faili kohta on olemas ka kirjeldav schema. Raskeimaks osaks oli elementidest atribuutide tegemine, asi küll toimis, kuid vormistus oli kole ning auklik. Schema vajas ka veidi harjumist, kuid kui asi käppa sai, siis läks imelihtsaks. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2. Teenus ==&lt;br /&gt;
2.1&lt;br /&gt;
&#039;&#039;&#039;Teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:   &lt;br /&gt;
*Kasutajagrupid:Hetkel on 3 kasutajagruppi: admin (saab teha kõike), müüja (saab teha kõike peale kasutajate ja kasutajagruppide loomise) ning tavakasutajad. On olemas eraldi funktsioon ka kasutajagruppide loomiseks. Iga meetodi käivitamisel kontrollitakse kasutajaõigusi. Ühel kasutajal saab olla mitu kasutajagruppi.           &lt;br /&gt;
*Kasutajad. Kasutajate loomiseks on 2 funktsiooni: üks tavakasutajate tegemiseks, mis ei eelda sisselogimist ning teine, mida saab teostada vaid administraator (ja lisada müüjaid või teisi administraatoreid). Kasutajate loomisel kontrollitakse seda, kas kasutajanimi on juba kasutusel. Kasutaja id ning roll sisestatakse ka tabelisse kasutajaRollis, mis näitab kasutajatel olevaid rolle. Kasutajate kustutamine käib otse andmebaasist. Kasutaja loomisel salvestatakse andmebaasi kasutaja parool hashitud kujul (algoritmiks sha1)        &lt;br /&gt;
*Tooted. Kasutajatel (hetkel müüjal) on võimalus lisada ja kustutada tooteid toodete kategooriaid, hindu jms.          &lt;br /&gt;
*Sessioonid. Kasutaja edukal sisselogimisel luuakse unikaalne juhuslik sessiooni võti, mille olemasolu kontrollitakse iga sisselogimist eeldava meetodi käivitamisel. Session_key salvestatakse andmebaasis vastavas väljas. Eraldi on funktsioonid sessiooni olemasolu kontrollimiseks ning uuendamiseks. Hetkel on timeoudiks 10 minutit. Sessiooni kehtivust kontrollitakse ka kasutajaõiguste kontrollimisel.       &lt;br /&gt;
* Logimine. Võrreldakse sisestatud kasjutajanime ning sisestatud parooli hashi andmebaasis olevatega. Kui need ühtivad, siis sisselogimine on edukas ning luuakse unikaalne session key, mis salvestatakse andmebaasi. Sisselogimine ning sessiooni olemasolu on eelduseks meetodite käivitamiseks. Kui sessioon aegub, siis toimub kasutaja väljalogimine. Väljalogimisfunktsioon kirjutab üle sessiooni aegumise aja, pannes selleks hetkelise kellaaja.  &lt;br /&gt;
Lisaks on veel hunnik abifunktsioone, näiteks parooli hashimine, väärtuste tagastamine jms. &lt;br /&gt;
   &lt;br /&gt;
Klient on kirjutatud WPF-is ning hetkel on võimalik kuvada tooteid, kasutajaid, gruppe ning kasutajagruppe.&lt;br /&gt;
&lt;br /&gt;
2.2&lt;br /&gt;
&#039;&#039;&#039;Menüü teenuse klient&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et meie tore teenus oleks veidi rohkem käega katsutavam, sai külge tehtud ka klient, mis realiseeriks põhifunktsioone. Kliendiks on WPF rakendus ning funktsionaalsus on järgmine:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sisse logimine&#039;&#039;&#039;: rakenduse käivitamisel ahistatakse kasutajat sisselogimisaknaga, valede andmete korral saab kasutaja ilusa punase veateate. Õnnestumise korral genereeritakse sessioonivõti, ning kantakse teda pidevalt edasi.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Toodete kuvamine,lisamine, kustutamine&#039;&#039;&#039;: kuvatakse väike popup, kus hunnik lahtreid ning kasutaja saab neid täites lisada toote. ID alusel saab kustutada ebasoovitava toote. Õnnestumisel või ebaõnnestumisel kuvatakse muidugi veateade.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kategooriate kuvamine, lisamine, kustutamine&#039;&#039;&#039;: iga toit tuleb paigutada kategooriasse, siin on koht kus neid luua saab. ID alusel jällegi kustutamine.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutajate kuvamine, lisamine&#039;&#039;&#039;: siin kuvatakse kõik süsteemis olevad kasutajad, ning toimub ka lisamine&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutaja gruppide kuvamine (kustutamine)&#039;&#039;&#039;: kuvatakse kehtivad kasutaja grupid, meetod ka kustutamiseks&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Pildid&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/rakendus_login.png Login Aken]&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/klient_ba.png BackEnd]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Klient&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/VR2__Menyy.rar Source]&lt;br /&gt;
&lt;br /&gt;
== 3. Flickr API ==&lt;br /&gt;
[http://i40.tinypic.com/k3r90i.png Pilt]&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:&lt;br /&gt;
*&#039;&#039;&#039;Pildiotsing&#039;&#039;&#039;: Kasutajal on võimalus otsida otsingusõna järgi pilte Flickri pildibaasist. Pilte otsitakse kasutajate galeriidest, pildikomplektidest ja niisama üles laetud piltidest, mis on &#039;&#039;publicud&#039;&#039; ehk avalikud. Kui kasutaja sisestab vähem kui 2 tähte, kuvatakse veateade. See on Flickri poolt samuti kinni keeratud, et ühetähe otsinguid ei teostataks. Üldjoontes ei oleks sellel ka mingisugust mõtet. Otsingusõna sisestamisel kuvatakse paremale aknasse 5 pildi &#039;&#039;thumbnaili&#039;&#039;, mis on kõige värskemad. &#039;&#039;Thumbnailidest&#039;&#039; vasakul all nurgas kuvatakse, mitu lehekülge pilte leiti ja mitmendal leheküljel parasjagu ollakse. Olles esimesel lehel ja/või teostades esimest otsingut, nuppu &amp;quot;eelmine&amp;quot; ei kuvata. Seejärel saab kasutaja hakata navigeerima lehekülgedel &amp;quot;eelmine&amp;quot; ja &amp;quot;järgmine&amp;quot; nuppudega. Valides thumbnaili välja ja klikkides selle peale, kuvatakse pilt suurena, laiusega 380 pikslit ja kõrgusega 380 pikslit. Kui suur pilt on kuvatud, avaneb ka võimalus vajutada nuppu &amp;quot;Ava kasutaja profiil&amp;quot;. Sellega pääseb API kasutaja ligi suure pildi kasutaja profiilile. See on sobilik näiteks kui API kasutajale hakkas huvi pakkuma pildi üles laadinud kasutaja, ning soovib tema teisigi pilte sirvida.&lt;br /&gt;
*&#039;&#039;&#039;Inimese otsing&#039;&#039;&#039;: Kasutajal on võimalus otsida emaili järgi Flickri kasutajaid. Otsingulahtrisse mitte millegi sisestamisel või jättes sisestamata &amp;quot;@&amp;quot; sümbol, kuvatakse veateade. Vastasel korral kuvatakse kas kasutaja Flickri kasutajanimi, pärisnimi (kui see on tal määratud) ja tema profiili URL. Kui kasutaja on leitud, kuvatakse ka nuppu &amp;quot;Ava veebisait&amp;quot;, millega pääseb kasutaja ligi ka tema profiilile, kirjutamata ise midagi veebibrauseri aknasse. Kui kasutajat ei leitud, antakse ka vastav veateade.&lt;br /&gt;
*&#039;&#039;&#039;Fotokomplektide kuvamine&#039;&#039;&#039;: Kasutaja saab vaadata oma fotokomplekte. Selleks tuleb kõigepealt vastava nupuga omandad &#039;&#039;frob&#039;&#039;, mis on Flickri API ajutine kood (kehtib ühe tunni). Kui &#039;&#039;frob&#039;&#039; on omandatud, avaneb kasutajale nupp &amp;quot;omanda token&amp;quot;. &#039;&#039;Tokeniga&#039;&#039; on Flickri poolne frobi teisendus &#039;&#039;tokeniks&#039;&#039;, mida kasutatakse edaspidi kasutaja identifitseerimiseks. Kui &#039;&#039;token&#039;&#039; on omandatud, kuvatakse teade &amp;quot;token omandatud&amp;quot; või vastasel juhul &amp;quot;token omandamata&amp;quot;. Seejärel ilmub nähtavale nupp &amp;quot;tiri fotosetid&amp;quot;. Sellele klikkides kuvatakse thumbnailidena kasutaja fotokomplektid.&lt;br /&gt;
*&#039;&#039;&#039;Piltide üleslaadimine&#039;&#039;&#039;: Kõigepealt tuleb omandada &#039;&#039;frob&#039;&#039; ja &#039;&#039;token&#039;&#039;, nagu eelnevas punktis kirjeldatud. Seejärel saab kasutaja üles laadida oma pilte arvutist &#039;&#039;OpenFileDialogi&#039;&#039; abil. Seejärel saab sisestada pildile tiitli ehk nime, kirjelduse ja &#039;&#039;tagi&#039;&#039;, mida aga ei pea tegema (Flickr samuti ei nõua nende atribuutide olemasolu). Olles salvestanud atribuudid ilmneb nupp &amp;quot;lae üles&amp;quot;. Sellele vajutades laetakse pilt kasutaja üldpiltide sekka üles.&lt;br /&gt;
&lt;br /&gt;
Klient, installer ja lähtekood:&lt;br /&gt;
[http://enos.itcollege.ee/~jhannus/VRII/FlickrWPF.zip Download]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;menyy xmlns:xsi =&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
       xsi:noNamespaceSchemaLocation=&amp;quot;menyy_schema.xsd&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;pearoad&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Seapraad&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kotlett&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;42&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
  &amp;lt;/pearoad&amp;gt;&lt;br /&gt;
  &amp;lt;lisandid&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Riis&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;7&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;kartul&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
  &amp;lt;/lisandid&amp;gt;&lt;br /&gt;
  &amp;lt;joogid&amp;gt;&lt;br /&gt;
    &amp;lt;soojad&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Kohv&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Tee&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;15&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
    &amp;lt;/soojad&amp;gt;&lt;br /&gt;
    &amp;lt;kylmad&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Morss&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Vesi&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;3&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
    &amp;lt;/kylmad&amp;gt;&lt;br /&gt;
  &amp;lt;/joogid&amp;gt;&lt;br /&gt;
  &amp;lt;magustoidud&amp;gt;&lt;br /&gt;
    &amp;lt;magustoit&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kisell&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;14&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/magustoit&amp;gt;&lt;br /&gt;
  &amp;lt;/magustoidud&amp;gt;&lt;br /&gt;
&amp;lt;/menyy&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT atribuutide tegemiseks elementidest ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot; version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;*[*]&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:when test=&amp;quot;not(@*)&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;not(*) and not(@*) &amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;{local-name(.)}&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML schema ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- definition of simple elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;nimi&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;hind&amp;quot; type=&amp;quot;xs:decimal&amp;quot;/&amp;gt;    &lt;br /&gt;
  &amp;lt;!-- definition of complex elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;menyy&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;pearoad&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;lisandid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;joogid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;magustoidud&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoog&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisandid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
	         &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisand&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;joogid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soojad&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylmad&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soojad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
	        &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylmad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylm&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soe&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoidud&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;magustoit&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoit&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XSLT andmete kuvamiseks html-ina ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;!--&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;style.css&amp;quot; /&amp;gt;--&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;font-color: #D0D0D0;font-family:verdana;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Menüü&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#77a1af;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Pearoad&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;                 &lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/pearoad/pearoog&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c08e1d;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Lisandid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/lisandid/lisand&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c47121;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Kuumad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/soojad/soe&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#b03428;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Külmad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/kylmad/kylm&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#862419;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Magustoidud&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/magustoidud/magustoit&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10329</id>
		<title>Meeskond &quot;näljased&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10329"/>
		<updated>2010-05-18T13:17:08Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1. XML ==&lt;br /&gt;
XML-i tegime menüü kohta. XSLT faile on kaks: üks teeb XML-i HTML-i ning teine vahetab elementide ja atribuutide kohtad. XML faili kohta on olemas ka kirjeldav schema. Raskeimaks osaks oli elementidest atribuutide tegemine, asi küll toimis, kuid vormistus oli kole ning auklik. Schema vajas ka veidi harjumist, kuid kui asi käppa sai, siis läks imelihtsaks. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2. Teenus ==&lt;br /&gt;
2.1&lt;br /&gt;
&#039;&#039;&#039;Teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:   &lt;br /&gt;
*Kasutajagrupid:Hetkel on 3 kasutajagruppi: admin (saab teha kõike), müüja (saab teha kõike peale kasutajate ja kasutajagruppide loomise) ning tavakasutajad. On olemas eraldi funktsioon ka kasutajagruppide loomiseks. Iga meetodi käivitamisel kontrollitakse kasutajaõigusi. Ühel kasutajal saab olla mitu kasutajagruppi.           &lt;br /&gt;
*Kasutajad. Kasutajate loomiseks on 2 funktsiooni: üks tavakasutajate tegemiseks, mis ei eelda sisselogimist ning teine, mida saab teostada vaid administraator (ja lisada müüjaid või teisi administraatoreid). Kasutajate loomisel kontrollitakse seda, kas kasutajanimi on juba kasutusel. Kasutaja id ning roll sisestatakse ka tabelisse kasutajaRollis, mis näitab kasutajatel olevaid rolle. Kasutajate kustutamine käib otse andmebaasist. Kasutaja loomisel salvestatakse andmebaasi kasutaja parool hashitud kujul (algoritmiks sha1)        &lt;br /&gt;
*Tooted. Kasutajatel (hetkel müüjal) on võimalus lisada ja kustutada tooteid toodete kategooriaid, hindu jms.          &lt;br /&gt;
*Sessioonid. Kasutaja edukal sisselogimisel luuakse unikaalne juhuslik sessiooni võti, mille olemasolu kontrollitakse iga sisselogimist eeldava meetodi käivitamisel. Session_key salvestatakse andmebaasis vastavas väljas. Eraldi on funktsioonid sessiooni olemasolu kontrollimiseks ning uuendamiseks. Hetkel on timeoudiks 10 minutit. Sessiooni kehtivust kontrollitakse ka kasutajaõiguste kontrollimisel.       &lt;br /&gt;
* Logimine. Võrreldakse sisestatud kasjutajanime ning sisestatud parooli hashi andmebaasis olevatega. Kui need ühtivad, siis sisselogimine on edukas ning luuakse unikaalne session key, mis salvestatakse andmebaasi. Sisselogimine ning sessiooni olemasolu on eelduseks meetodite käivitamiseks. Kui sessioon aegub, siis toimub kasutaja väljalogimine. Väljalogimisfunktsioon kirjutab üle sessiooni aegumise aja, pannes selleks hetkelise kellaaja.  &lt;br /&gt;
Lisaks on veel hunnik abifunktsioone, näiteks parooli hashimine, väärtuste tagastamine jms. &lt;br /&gt;
   &lt;br /&gt;
Klient on kirjutatud WPF-is ning hetkel on võimalik kuvada tooteid, kasutajaid, gruppe ning kasutajagruppe.&lt;br /&gt;
&lt;br /&gt;
2.2&lt;br /&gt;
&#039;&#039;&#039;Menüü teenuse klient&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et meie tore teenus oleks veidi rohkem käega katsutavam, sai külge tehtud ka klient, mis realiseeriks põhifunktsioone. Kliendiks on WPF rakendus ning funktsionaalsus on järgmine:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sisse logimine&#039;&#039;&#039;: rakenduse käivitamisel ahistatakse kasutajat sisselogimisaknaga, valede andmete korral saab kasutaja ilusa punase veateate. Õnnestumise korral genereeritakse sessioonivõti, ning kantakse teda pidevalt edasi.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Toodete kuvamine,lisamine, kustutamine&#039;&#039;&#039;: kuvatakse väike popup, kus hunnik lahtreid ning kasutaja saab neid täites lisada toote. ID alusel saab kustutada ebasoovitava toote. Õnnestumisel või ebaõnnestumisel kuvatakse muidugi veateade.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kategooriate kuvamine, lisamine, kustutamine&#039;&#039;&#039;: iga toit tuleb paigutada kategooriasse, siin on koht kus neid luua saab. ID alusel jällegi kustutamine.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutajate kuvamine, lisamine&#039;&#039;&#039;: siin kuvatakse kõik süsteemis olevad kasutajad, ning toimub ka lisamine&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutaja gruppide kuvamine (kustutamine)&#039;&#039;&#039;: kuvatakse kehtivad kasutaja grupid, meetod ka kustutamiseks&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Pildid&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/rakendus_login.png Login Aken]&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/klient_ba.png BackEnd]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Klient&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/VR2__Menyy.rar Source]&lt;br /&gt;
&lt;br /&gt;
== 3. Flickr API ==&lt;br /&gt;
[http://i40.tinypic.com/k3r90i.png Pilt]&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:&lt;br /&gt;
*&#039;&#039;&#039;Pildiotsing&#039;&#039;&#039;: Kasutajal on võimalus otsida otsingusõna järgi pilte Flickri pildibaasist. Pilte otsitakse kasutajate galeriidest, pildikomplektidest ja niisama üles laetud piltidest, mis on &#039;&#039;publicud&#039;&#039; ehk avalikud. Kui kasutaja sisestab vähem kui 2 tähte, kuvatakse veateade. See on Flickri poolt samuti kinni keeratud, et ühetähe otsinguid ei teostataks. Üldjoontes ei oleks sellel ka mingisugust mõtet. Otsingusõna sisestamisel kuvatakse paremale aknasse 5 pildi &#039;&#039;thumbnaili&#039;&#039;, mis on kõige värskemad. &#039;&#039;Thumbnailidest&#039;&#039; vasakul all nurgas kuvatakse, mitu lehekülge pilte leiti ja mitmendal leheküljel parasjagu ollakse. Olles esimesel lehel ja/või teostades esimest otsingut, nuppu &amp;quot;eelmine&amp;quot; ei kuvata. Seejärel saab kasutaja hakata navigeerima lehekülgedel &amp;quot;eelmine&amp;quot; ja &amp;quot;järgmine&amp;quot; nuppudega. Valides thumbnaili välja ja klikkides selle peale, kuvatakse pilt suurena, laiusega 380 pikslit ja kõrgusega 380 pikslit. Kui suur pilt on kuvatud, avaneb ka võimalus vajutada nuppu &amp;quot;Ava kasutaja profiil&amp;quot;. Sellega pääseb API kasutaja ligi suure pildi kasutaja profiilile. See on sobilik näiteks kui API kasutajale hakkas huvi pakkuma pildi üles laadinud kasutaja, ning soovib tema teisigi pilte sirvida.&lt;br /&gt;
*&#039;&#039;&#039;Inimese otsing&#039;&#039;&#039;: Kasutajal on võimalus otsida emaili järgi Flickri kasutajaid. Otsingulahtrisse mitte millegi sisestamisel või jättes sisestamata &amp;quot;@&amp;quot; sümbol, kuvatakse veateade. Vastasel korral kuvatakse kas kasutaja Flickri kasutajanimi, pärisnimi (kui see on tal määratud) ja tema profiili URL. Kui kasutaja on leitud, kuvatakse ka nuppu &amp;quot;Ava veebisait&amp;quot;, millega pääseb kasutaja ligi ka tema profiilile, kirjutamata ise midagi veebibrauseri aknasse. Kui kasutajat ei leitud, antakse ka vastav veateade.&lt;br /&gt;
*&#039;&#039;&#039;Fotokomplektide kuvamine&#039;&#039;&#039;: Kasutaja saab vaadata oma fotokomplekte. Selleks tuleb kõigepealt vastava nupuga omandad &#039;&#039;frob&#039;&#039;, mis on Flickri API ajutine kood (kehtib ühe tunni). Kui &#039;&#039;frob&#039;&#039; on omandatud, avaneb kasutajale nupp &amp;quot;omanda token&amp;quot;. &#039;&#039;Tokeniga&#039;&#039; on Flickri poolne frobi teisendus &#039;&#039;tokeniks&#039;&#039;, mida kasutatakse edaspidi kasutaja identifitseerimiseks. Kui &#039;&#039;token&#039;&#039; on omandatud, kuvatakse teade &amp;quot;token omandatud&amp;quot; või vastasel juhul &amp;quot;token omandamata&amp;quot;. Seejärel ilmub nähtavale nupp &amp;quot;tiri fotosetid&amp;quot;. Sellele klikkides kuvatakse thumbnailidena kasutaja fotokomplektid.&lt;br /&gt;
*&#039;&#039;&#039;Piltide üleslaadimine&#039;&#039;&#039;: Kõigepealt tuleb omandada &#039;&#039;frob&#039;&#039; ja &#039;&#039;token&#039;&#039;, nagu eelnevas punktis kirjeldatud. Seejärel saab kasutaja üles laadida oma pilte arvutist &#039;&#039;OpenFileDialogi&#039;&#039; abil. Seejärel saab sisestada pildile tiitli ehk nime, kirjelduse ja &#039;&#039;tagi&#039;&#039;, mida aga ei pea tegema (Flickr samuti ei nõua nende atribuutide olemasolu). Olles salvestanud atribuudid ilmneb nupp &amp;quot;lae üles&amp;quot;. Sellele vajutades laetakse pilt kasutaja üldpiltide sekka üles.&lt;br /&gt;
&lt;br /&gt;
Klient, installer ja lähtekood:&lt;br /&gt;
[http://enos.itcollege.ee/~jhannus/VRII/FlickrWPF.zip Download]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;menyy xmlns:xsi =&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
       xsi:noNamespaceSchemaLocation=&amp;quot;menyy_schema.xsd&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;pearoad&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Seapraad&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kotlett&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;42&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
  &amp;lt;/pearoad&amp;gt;&lt;br /&gt;
  &amp;lt;lisandid&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Riis&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;7&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;kartul&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
  &amp;lt;/lisandid&amp;gt;&lt;br /&gt;
  &amp;lt;joogid&amp;gt;&lt;br /&gt;
    &amp;lt;soojad&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Kohv&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Tee&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;15&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
    &amp;lt;/soojad&amp;gt;&lt;br /&gt;
    &amp;lt;kylmad&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Morss&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Vesi&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;3&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
    &amp;lt;/kylmad&amp;gt;&lt;br /&gt;
  &amp;lt;/joogid&amp;gt;&lt;br /&gt;
  &amp;lt;magustoidud&amp;gt;&lt;br /&gt;
    &amp;lt;magustoit&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kisell&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;14&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/magustoit&amp;gt;&lt;br /&gt;
  &amp;lt;/magustoidud&amp;gt;&lt;br /&gt;
&amp;lt;/menyy&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT atribuutide tegemiseks elementidest ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot; version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;*[*]&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:when test=&amp;quot;not(@*)&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;not(*) and not(@*) &amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;{local-name(.)}&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML schema ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- definition of simple elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;nimi&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;hind&amp;quot; type=&amp;quot;xs:decimal&amp;quot;/&amp;gt;    &lt;br /&gt;
  &amp;lt;!-- definition of complex elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;menyy&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;pearoad&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;lisandid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;joogid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;magustoidud&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoog&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisandid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
	         &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisand&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;joogid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soojad&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylmad&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soojad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
	        &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylmad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylm&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soe&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoidud&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;magustoit&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoit&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XSLT andmete kuvamiseks html-ina ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;!--&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;style.css&amp;quot; /&amp;gt;--&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;font-color: #D0D0D0;font-family:verdana;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Menüü&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#77a1af;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Pearoad&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;                 &lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/pearoad/pearoog&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c08e1d;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Lisandid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/lisandid/lisand&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c47121;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Kuumad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/soojad/soe&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#b03428;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Külmad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/kylmad/kylm&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#862419;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Magustoidud&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/magustoidud/magustoit&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10328</id>
		<title>Meeskond &quot;näljased&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10328"/>
		<updated>2010-05-18T13:14:40Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1. XML ==&lt;br /&gt;
XML-i tegime menüü kohta. XSLT faile on kaks: üks teeb XML-i HTML-i ning teine vahetab elementide ja atribuutide kohtad. XML faili kohta on olemas ka kirjeldav schema. Raskeimaks osaks oli elementidest atribuutide tegemine, asi küll toimis, kuid vormistus oli kole ning auklik. Schema vajas ka veidi harjumist, kuid kui asi käppa sai, siis läks imelihtsaks. &lt;br /&gt;
[[Media:XML]]&lt;br /&gt;
&lt;br /&gt;
== 2. Teenus ==&lt;br /&gt;
2.1&lt;br /&gt;
&#039;&#039;&#039;Teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:   &lt;br /&gt;
*Kasutajagrupid:Hetkel on 3 kasutajagruppi: admin (saab teha kõike), müüja (saab teha kõike peale kasutajate ja kasutajagruppide loomise) ning tavakasutajad. On olemas eraldi funktsioon ka kasutajagruppide loomiseks. Iga meetodi käivitamisel kontrollitakse kasutajaõigusi. Ühel kasutajal saab olla mitu kasutajagruppi.           &lt;br /&gt;
*Kasutajad. Kasutajate loomiseks on 2 funktsiooni: üks tavakasutajate tegemiseks, mis ei eelda sisselogimist ning teine, mida saab teostada vaid administraator (ja lisada müüjaid või teisi administraatoreid). Kasutajate loomisel kontrollitakse seda, kas kasutajanimi on juba kasutusel. Kasutaja id ning roll sisestatakse ka tabelisse kasutajaRollis, mis näitab kasutajatel olevaid rolle. Kasutajate kustutamine käib otse andmebaasist. Kasutaja loomisel salvestatakse andmebaasi kasutaja parool hashitud kujul (algoritmiks sha1)        &lt;br /&gt;
*Tooted. Kasutajatel (hetkel müüjal) on võimalus lisada ja kustutada tooteid toodete kategooriaid, hindu jms.          &lt;br /&gt;
*Sessioonid. Kasutaja edukal sisselogimisel luuakse unikaalne juhuslik sessiooni võti, mille olemasolu kontrollitakse iga sisselogimist eeldava meetodi käivitamisel. Session_key salvestatakse andmebaasis vastavas väljas. Eraldi on funktsioonid sessiooni olemasolu kontrollimiseks ning uuendamiseks. Hetkel on timeoudiks 10 minutit. Sessiooni kehtivust kontrollitakse ka kasutajaõiguste kontrollimisel.       &lt;br /&gt;
* Logimine. Võrreldakse sisestatud kasjutajanime ning sisestatud parooli hashi andmebaasis olevatega. Kui need ühtivad, siis sisselogimine on edukas ning luuakse unikaalne session key, mis salvestatakse andmebaasi. Sisselogimine ning sessiooni olemasolu on eelduseks meetodite käivitamiseks. Kui sessioon aegub, siis toimub kasutaja väljalogimine. Väljalogimisfunktsioon kirjutab üle sessiooni aegumise aja, pannes selleks hetkelise kellaaja.  &lt;br /&gt;
Lisaks on veel hunnik abifunktsioone, näiteks parooli hashimine, väärtuste tagastamine jms. &lt;br /&gt;
   &lt;br /&gt;
Klient on kirjutatud WPF-is ning hetkel on võimalik kuvada tooteid, kasutajaid, gruppe ning kasutajagruppe.&lt;br /&gt;
&lt;br /&gt;
2.2&lt;br /&gt;
&#039;&#039;&#039;Menüü teenuse klient&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et meie tore teenus oleks veidi rohkem käega katsutavam, sai külge tehtud ka klient, mis realiseeriks põhifunktsioone. Kliendiks on WPF rakendus ning funktsionaalsus on järgmine:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sisse logimine&#039;&#039;&#039;: rakenduse käivitamisel ahistatakse kasutajat sisselogimisaknaga, valede andmete korral saab kasutaja ilusa punase veateate. Õnnestumise korral genereeritakse sessioonivõti, ning kantakse teda pidevalt edasi.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Toodete kuvamine,lisamine, kustutamine&#039;&#039;&#039;: kuvatakse väike popup, kus hunnik lahtreid ning kasutaja saab neid täites lisada toote. ID alusel saab kustutada ebasoovitava toote. Õnnestumisel või ebaõnnestumisel kuvatakse muidugi veateade.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kategooriate kuvamine, lisamine, kustutamine&#039;&#039;&#039;: iga toit tuleb paigutada kategooriasse, siin on koht kus neid luua saab. ID alusel jällegi kustutamine.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutajate kuvamine, lisamine&#039;&#039;&#039;: siin kuvatakse kõik süsteemis olevad kasutajad, ning toimub ka lisamine&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutaja gruppide kuvamine (kustutamine)&#039;&#039;&#039;: kuvatakse kehtivad kasutaja grupid, meetod ka kustutamiseks&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Pildid&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/rakendus_login.png Login Aken]&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/klient_ba.png BackEnd]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Klient&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/VR2__Menyy.rar Source]&lt;br /&gt;
&lt;br /&gt;
== 3. Flickr API ==&lt;br /&gt;
[http://i40.tinypic.com/k3r90i.png Pilt]&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:&lt;br /&gt;
*&#039;&#039;&#039;Pildiotsing&#039;&#039;&#039;: Kasutajal on võimalus otsida otsingusõna järgi pilte Flickri pildibaasist. Pilte otsitakse kasutajate galeriidest, pildikomplektidest ja niisama üles laetud piltidest, mis on &#039;&#039;publicud&#039;&#039; ehk avalikud. Kui kasutaja sisestab vähem kui 2 tähte, kuvatakse veateade. See on Flickri poolt samuti kinni keeratud, et ühetähe otsinguid ei teostataks. Üldjoontes ei oleks sellel ka mingisugust mõtet. Otsingusõna sisestamisel kuvatakse paremale aknasse 5 pildi &#039;&#039;thumbnaili&#039;&#039;, mis on kõige värskemad. &#039;&#039;Thumbnailidest&#039;&#039; vasakul all nurgas kuvatakse, mitu lehekülge pilte leiti ja mitmendal leheküljel parasjagu ollakse. Olles esimesel lehel ja/või teostades esimest otsingut, nuppu &amp;quot;eelmine&amp;quot; ei kuvata. Seejärel saab kasutaja hakata navigeerima lehekülgedel &amp;quot;eelmine&amp;quot; ja &amp;quot;järgmine&amp;quot; nuppudega. Valides thumbnaili välja ja klikkides selle peale, kuvatakse pilt suurena, laiusega 380 pikslit ja kõrgusega 380 pikslit. Kui suur pilt on kuvatud, avaneb ka võimalus vajutada nuppu &amp;quot;Ava kasutaja profiil&amp;quot;. Sellega pääseb API kasutaja ligi suure pildi kasutaja profiilile. See on sobilik näiteks kui API kasutajale hakkas huvi pakkuma pildi üles laadinud kasutaja, ning soovib tema teisigi pilte sirvida.&lt;br /&gt;
*&#039;&#039;&#039;Inimese otsing&#039;&#039;&#039;: Kasutajal on võimalus otsida emaili järgi Flickri kasutajaid. Otsingulahtrisse mitte millegi sisestamisel või jättes sisestamata &amp;quot;@&amp;quot; sümbol, kuvatakse veateade. Vastasel korral kuvatakse kas kasutaja Flickri kasutajanimi, pärisnimi (kui see on tal määratud) ja tema profiili URL. Kui kasutaja on leitud, kuvatakse ka nuppu &amp;quot;Ava veebisait&amp;quot;, millega pääseb kasutaja ligi ka tema profiilile, kirjutamata ise midagi veebibrauseri aknasse. Kui kasutajat ei leitud, antakse ka vastav veateade.&lt;br /&gt;
*&#039;&#039;&#039;Fotokomplektide kuvamine&#039;&#039;&#039;: Kasutaja saab vaadata oma fotokomplekte. Selleks tuleb kõigepealt vastava nupuga omandad &#039;&#039;frob&#039;&#039;, mis on Flickri API ajutine kood (kehtib ühe tunni). Kui &#039;&#039;frob&#039;&#039; on omandatud, avaneb kasutajale nupp &amp;quot;omanda token&amp;quot;. &#039;&#039;Tokeniga&#039;&#039; on Flickri poolne frobi teisendus &#039;&#039;tokeniks&#039;&#039;, mida kasutatakse edaspidi kasutaja identifitseerimiseks. Kui &#039;&#039;token&#039;&#039; on omandatud, kuvatakse teade &amp;quot;token omandatud&amp;quot; või vastasel juhul &amp;quot;token omandamata&amp;quot;. Seejärel ilmub nähtavale nupp &amp;quot;tiri fotosetid&amp;quot;. Sellele klikkides kuvatakse thumbnailidena kasutaja fotokomplektid.&lt;br /&gt;
*&#039;&#039;&#039;Piltide üleslaadimine&#039;&#039;&#039;: Kõigepealt tuleb omandada &#039;&#039;frob&#039;&#039; ja &#039;&#039;token&#039;&#039;, nagu eelnevas punktis kirjeldatud. Seejärel saab kasutaja üles laadida oma pilte arvutist &#039;&#039;OpenFileDialogi&#039;&#039; abil. Seejärel saab sisestada pildile tiitli ehk nime, kirjelduse ja &#039;&#039;tagi&#039;&#039;, mida aga ei pea tegema (Flickr samuti ei nõua nende atribuutide olemasolu). Olles salvestanud atribuudid ilmneb nupp &amp;quot;lae üles&amp;quot;. Sellele vajutades laetakse pilt kasutaja üldpiltide sekka üles.&lt;br /&gt;
&lt;br /&gt;
Klient, installer ja lähtekood:&lt;br /&gt;
[http://enos.itcollege.ee/~jhannus/VRII/FlickrWPF.zip Download]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;menyy xmlns:xsi =&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
       xsi:noNamespaceSchemaLocation=&amp;quot;menyy_schema.xsd&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;pearoad&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Seapraad&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kotlett&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;42&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
  &amp;lt;/pearoad&amp;gt;&lt;br /&gt;
  &amp;lt;lisandid&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Riis&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;7&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;kartul&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
  &amp;lt;/lisandid&amp;gt;&lt;br /&gt;
  &amp;lt;joogid&amp;gt;&lt;br /&gt;
    &amp;lt;soojad&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Kohv&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Tee&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;15&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
    &amp;lt;/soojad&amp;gt;&lt;br /&gt;
    &amp;lt;kylmad&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Morss&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Vesi&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;3&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
    &amp;lt;/kylmad&amp;gt;&lt;br /&gt;
  &amp;lt;/joogid&amp;gt;&lt;br /&gt;
  &amp;lt;magustoidud&amp;gt;&lt;br /&gt;
    &amp;lt;magustoit&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kisell&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;14&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/magustoit&amp;gt;&lt;br /&gt;
  &amp;lt;/magustoidud&amp;gt;&lt;br /&gt;
&amp;lt;/menyy&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT atribuutide tegemiseks elementidest ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot; version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;*[*]&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:when test=&amp;quot;not(@*)&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;not(*) and not(@*) &amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;{local-name(.)}&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== XML schema ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- definition of simple elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;nimi&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;hind&amp;quot; type=&amp;quot;xs:decimal&amp;quot;/&amp;gt;    &lt;br /&gt;
  &amp;lt;!-- definition of complex elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;menyy&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;pearoad&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;lisandid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;joogid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;magustoidud&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoog&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisandid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
	         &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisand&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;joogid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soojad&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylmad&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soojad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
	        &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylmad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylm&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soe&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoidud&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;magustoit&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoit&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XSLT andmete kuvamiseks html-ina ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;!--&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;style.css&amp;quot; /&amp;gt;--&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;font-color: #D0D0D0;font-family:verdana;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Menüü&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#77a1af;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Pearoad&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;                 &lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/pearoad/pearoog&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c08e1d;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Lisandid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/lisandid/lisand&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c47121;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Kuumad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/soojad/soe&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#b03428;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Külmad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/kylmad/kylm&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#862419;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Magustoidud&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/magustoidud/magustoit&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10321</id>
		<title>Meeskond &quot;näljased&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10321"/>
		<updated>2010-05-18T13:08:25Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1. XML ==&lt;br /&gt;
XML-i tegime menüü kohta. XSLT faile on kaks: üks teeb XML-i HTML-i ning teine vahetab elementide ja atribuutide kohtad. XML faili kohta on olemas ka kirjeldav schema. Raskeimaks osaks oli elementidest atribuutide tegemine, asi küll toimis, kuid vormistus oli kole ning auklik. Schema vajas ka veidi harjumist, kuid kui asi käppa sai, siis läks imelihtsaks. &lt;br /&gt;
[[Media:XML]]&lt;br /&gt;
&lt;br /&gt;
== 2. Teenus ==&lt;br /&gt;
2.1&lt;br /&gt;
&#039;&#039;&#039;Teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:   &lt;br /&gt;
*Kasutajagrupid:Hetkel on 3 kasutajagruppi: admin (saab teha kõike), müüja (saab teha kõike peale kasutajate ja kasutajagruppide loomise) ning tavakasutajad. On olemas eraldi funktsioon ka kasutajagruppide loomiseks. Iga meetodi käivitamisel kontrollitakse kasutajaõigusi. Ühel kasutajal saab olla mitu kasutajagruppi.           &lt;br /&gt;
*Kasutajad. Kasutajate loomiseks on 2 funktsiooni: üks tavakasutajate tegemiseks, mis ei eelda sisselogimist ning teine, mida saab teostada vaid administraator (ja lisada müüjaid või teisi administraatoreid). Kasutajate loomisel kontrollitakse seda, kas kasutajanimi on juba kasutusel. Kasutaja id ning roll sisestatakse ka tabelisse kasutajaRollis, mis näitab kasutajatel olevaid rolle. Kasutajate kustutamine käib otse andmebaasist. Kasutaja loomisel salvestatakse andmebaasi kasutaja parool hashitud kujul (algoritmiks sha1)        &lt;br /&gt;
*Tooted. Kasutajatel (hetkel müüjal) on võimalus lisada ja kustutada tooteid toodete kategooriaid, hindu jms.          &lt;br /&gt;
*Sessioonid. Kasutaja edukal sisselogimisel luuakse unikaalne juhuslik sessiooni võti, mille olemasolu kontrollitakse iga sisselogimist eeldava meetodi käivitamisel. Session_key salvestatakse andmebaasis vastavas väljas. Eraldi on funktsioonid sessiooni olemasolu kontrollimiseks ning uuendamiseks. Hetkel on timeoudiks 10 minutit. Sessiooni kehtivust kontrollitakse ka kasutajaõiguste kontrollimisel.       &lt;br /&gt;
* Logimine. Võrreldakse sisestatud kasjutajanime ning sisestatud parooli hashi andmebaasis olevatega. Kui need ühtivad, siis sisselogimine on edukas ning luuakse unikaalne session key, mis salvestatakse andmebaasi. Sisselogimine ning sessiooni olemasolu on eelduseks meetodite käivitamiseks. Kui sessioon aegub, siis toimub kasutaja väljalogimine. Väljalogimisfunktsioon kirjutab üle sessiooni aegumise aja, pannes selleks hetkelise kellaaja.  &lt;br /&gt;
Lisaks on veel hunnik abifunktsioone, näiteks parooli hashimine, väärtuste tagastamine jms. &lt;br /&gt;
   &lt;br /&gt;
Klient on kirjutatud WPF-is ning hetkel on võimalik kuvada tooteid, kasutajaid, gruppe ning kasutajagruppe.&lt;br /&gt;
&lt;br /&gt;
2.2&lt;br /&gt;
&#039;&#039;&#039;Menüü teenuse klient&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et meie tore teenus oleks veidi rohkem käega katsutavam, sai külge tehtud ka klient, mis realiseeriks põhifunktsioone. Kliendiks on WPF rakendus ning funktsionaalsus on järgmine:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sisse logimine&#039;&#039;&#039;: rakenduse käivitamisel ahistatakse kasutajat sisselogimisaknaga, valede andmete korral saab kasutaja ilusa punase veateate. Õnnestumise korral genereeritakse sessioonivõti, ning kantakse teda pidevalt edasi.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Toodete kuvamine,lisamine, kustutamine&#039;&#039;&#039;: kuvatakse väike popup, kus hunnik lahtreid ning kasutaja saab neid täites lisada toote. ID alusel saab kustutada ebasoovitava toote. Õnnestumisel või ebaõnnestumisel kuvatakse muidugi veateade.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kategooriate kuvamine, lisamine, kustutamine&#039;&#039;&#039;: iga toit tuleb paigutada kategooriasse, siin on koht kus neid luua saab. ID alusel jällegi kustutamine.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutajate kuvamine, lisamine&#039;&#039;&#039;: siin kuvatakse kõik süsteemis olevad kasutajad, ning toimub ka lisamine&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutaja gruppide kuvamine (kustutamine)&#039;&#039;&#039;: kuvatakse kehtivad kasutaja grupid, meetod ka kustutamiseks&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Pildid&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/rakendus_login.png Login Aken]&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/klient_ba.png BackEnd]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Klient&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/VR2__Menyy.rar Source]&lt;br /&gt;
&lt;br /&gt;
== 3. Flickr API ==&lt;br /&gt;
[http://i40.tinypic.com/k3r90i.png Pilt]&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:&lt;br /&gt;
*&#039;&#039;&#039;Pildiotsing&#039;&#039;&#039;: Kasutajal on võimalus otsida otsingusõna järgi pilte Flickri pildibaasist. Pilte otsitakse kasutajate galeriidest, pildikomplektidest ja niisama üles laetud piltidest, mis on &#039;&#039;publicud&#039;&#039; ehk avalikud. Kui kasutaja sisestab vähem kui 2 tähte, kuvatakse veateade. See on Flickri poolt samuti kinni keeratud, et ühetähe otsinguid ei teostataks. Üldjoontes ei oleks sellel ka mingisugust mõtet. Otsingusõna sisestamisel kuvatakse paremale aknasse 5 pildi &#039;&#039;thumbnaili&#039;&#039;, mis on kõige värskemad. &#039;&#039;Thumbnailidest&#039;&#039; vasakul all nurgas kuvatakse, mitu lehekülge pilte leiti ja mitmendal leheküljel parasjagu ollakse. Olles esimesel lehel ja/või teostades esimest otsingut, nuppu &amp;quot;eelmine&amp;quot; ei kuvata. Seejärel saab kasutaja hakata navigeerima lehekülgedel &amp;quot;eelmine&amp;quot; ja &amp;quot;järgmine&amp;quot; nuppudega. Valides thumbnaili välja ja klikkides selle peale, kuvatakse pilt suurena, laiusega 380 pikslit ja kõrgusega 380 pikslit. Kui suur pilt on kuvatud, avaneb ka võimalus vajutada nuppu &amp;quot;Ava kasutaja profiil&amp;quot;. Sellega pääseb API kasutaja ligi suure pildi kasutaja profiilile. See on sobilik näiteks kui API kasutajale hakkas huvi pakkuma pildi üles laadinud kasutaja, ning soovib tema teisigi pilte sirvida.&lt;br /&gt;
*&#039;&#039;&#039;Inimese otsing&#039;&#039;&#039;: Kasutajal on võimalus otsida emaili järgi Flickri kasutajaid. Otsingulahtrisse mitte millegi sisestamisel või jättes sisestamata &amp;quot;@&amp;quot; sümbol, kuvatakse veateade. Vastasel korral kuvatakse kas kasutaja Flickri kasutajanimi, pärisnimi (kui see on tal määratud) ja tema profiili URL. Kui kasutaja on leitud, kuvatakse ka nuppu &amp;quot;Ava veebisait&amp;quot;, millega pääseb kasutaja ligi ka tema profiilile, kirjutamata ise midagi veebibrauseri aknasse. Kui kasutajat ei leitud, antakse ka vastav veateade.&lt;br /&gt;
*&#039;&#039;&#039;Fotokomplektide kuvamine&#039;&#039;&#039;: Kasutaja saab vaadata oma fotokomplekte. Selleks tuleb kõigepealt vastava nupuga omandad &#039;&#039;frob&#039;&#039;, mis on Flickri API ajutine kood (kehtib ühe tunni). Kui &#039;&#039;frob&#039;&#039; on omandatud, avaneb kasutajale nupp &amp;quot;omanda token&amp;quot;. &#039;&#039;Tokeniga&#039;&#039; on Flickri poolne frobi teisendus &#039;&#039;tokeniks&#039;&#039;, mida kasutatakse edaspidi kasutaja identifitseerimiseks. Kui &#039;&#039;token&#039;&#039; on omandatud, kuvatakse teade &amp;quot;token omandatud&amp;quot; või vastasel juhul &amp;quot;token omandamata&amp;quot;. Seejärel ilmub nähtavale nupp &amp;quot;tiri fotosetid&amp;quot;. Sellele klikkides kuvatakse thumbnailidena kasutaja fotokomplektid.&lt;br /&gt;
*&#039;&#039;&#039;Piltide üleslaadimine&#039;&#039;&#039;: Kõigepealt tuleb omandada &#039;&#039;frob&#039;&#039; ja &#039;&#039;token&#039;&#039;, nagu eelnevas punktis kirjeldatud. Seejärel saab kasutaja üles laadida oma pilte arvutist &#039;&#039;OpenFileDialogi&#039;&#039; abil. Seejärel saab sisestada pildile tiitli ehk nime, kirjelduse ja &#039;&#039;tagi&#039;&#039;, mida aga ei pea tegema (Flickr samuti ei nõua nende atribuutide olemasolu). Olles salvestanud atribuudid ilmneb nupp &amp;quot;lae üles&amp;quot;. Sellele vajutades laetakse pilt kasutaja üldpiltide sekka üles.&lt;br /&gt;
&lt;br /&gt;
Klient, installer ja lähtekood:&lt;br /&gt;
[http://enos.itcollege.ee/~jhannus/VRII/FlickrWPF.zip Download]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;menyy xmlns:xsi =&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
       xsi:noNamespaceSchemaLocation=&amp;quot;menyy_schema.xsd&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;pearoad&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Seapraad&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kotlett&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;42&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
  &amp;lt;/pearoad&amp;gt;&lt;br /&gt;
  &amp;lt;lisandid&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Riis&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;7&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;kartul&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
  &amp;lt;/lisandid&amp;gt;&lt;br /&gt;
  &amp;lt;joogid&amp;gt;&lt;br /&gt;
    &amp;lt;soojad&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Kohv&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Tee&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;15&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
    &amp;lt;/soojad&amp;gt;&lt;br /&gt;
    &amp;lt;kylmad&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Morss&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Vesi&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;3&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
    &amp;lt;/kylmad&amp;gt;&lt;br /&gt;
  &amp;lt;/joogid&amp;gt;&lt;br /&gt;
  &amp;lt;magustoidud&amp;gt;&lt;br /&gt;
    &amp;lt;magustoit&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kisell&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;14&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/magustoit&amp;gt;&lt;br /&gt;
  &amp;lt;/magustoidud&amp;gt;&lt;br /&gt;
&amp;lt;/menyy&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT atribuutide tegemiseks elementidest ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot; version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;*[*]&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:when test=&amp;quot;not(@*)&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;not(*) and not(@*) &amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;{local-name(.)}&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML schema ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- definition of simple elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;nimi&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;hind&amp;quot; type=&amp;quot;xs:decimal&amp;quot;/&amp;gt;    &lt;br /&gt;
  &amp;lt;!-- definition of complex elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;menyy&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;pearoad&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;lisandid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;joogid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;magustoidud&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoog&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisandid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
	         &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisand&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;joogid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soojad&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylmad&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soojad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
	        &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylmad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylm&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soe&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoidud&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;magustoit&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoit&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XSLT andmete kuvamiseks html-ina ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;!--&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;style.css&amp;quot; /&amp;gt;--&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;font-color: #D0D0D0;font-family:verdana;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Menüü&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#77a1af;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Pearoad&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;                 &lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/pearoad/pearoog&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c08e1d;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Lisandid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/lisandid/lisand&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c47121;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Kuumad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/soojad/soe&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#b03428;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Külmad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/kylmad/kylm&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#862419;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Magustoidud&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/magustoidud/magustoit&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10320</id>
		<title>Meeskond &quot;näljased&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10320"/>
		<updated>2010-05-18T13:07:57Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: /* XSLT andmete kuvamiseks html-ina */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1. XML ==&lt;br /&gt;
XML-i tegime menüü kohta. XSLT faile on kaks: üks teeb XML-i HTML-i ning teine vahetab elementide ja atribuutide kohtad. XML faili kohta on olemas ka kirjeldav schema. Raskeimaks osaks oli elementidest atribuutide tegemine, asi küll toimis, kuid vormistus oli kole ning auklik. Schema vajas ka veidi harjumist, kuid kui asi käppa sai, siis läks imelihtsaks. &lt;br /&gt;
[[Media:XML]]&lt;br /&gt;
&lt;br /&gt;
== 2. Teenus ==&lt;br /&gt;
2.1&lt;br /&gt;
&#039;&#039;&#039;Teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:   &lt;br /&gt;
*Kasutajagrupid:Hetkel on 3 kasutajagruppi: admin (saab teha kõike), müüja (saab teha kõike peale kasutajate ja kasutajagruppide loomise) ning tavakasutajad. On olemas eraldi funktsioon ka kasutajagruppide loomiseks. Iga meetodi käivitamisel kontrollitakse kasutajaõigusi. Ühel kasutajal saab olla mitu kasutajagruppi.           &lt;br /&gt;
*Kasutajad. Kasutajate loomiseks on 2 funktsiooni: üks tavakasutajate tegemiseks, mis ei eelda sisselogimist ning teine, mida saab teostada vaid administraator (ja lisada müüjaid või teisi administraatoreid). Kasutajate loomisel kontrollitakse seda, kas kasutajanimi on juba kasutusel. Kasutaja id ning roll sisestatakse ka tabelisse kasutajaRollis, mis näitab kasutajatel olevaid rolle. Kasutajate kustutamine käib otse andmebaasist. Kasutaja loomisel salvestatakse andmebaasi kasutaja parool hashitud kujul (algoritmiks sha1)        &lt;br /&gt;
*Tooted. Kasutajatel (hetkel müüjal) on võimalus lisada ja kustutada tooteid toodete kategooriaid, hindu jms.          &lt;br /&gt;
*Sessioonid. Kasutaja edukal sisselogimisel luuakse unikaalne juhuslik sessiooni võti, mille olemasolu kontrollitakse iga sisselogimist eeldava meetodi käivitamisel. Session_key salvestatakse andmebaasis vastavas väljas. Eraldi on funktsioonid sessiooni olemasolu kontrollimiseks ning uuendamiseks. Hetkel on timeoudiks 10 minutit. Sessiooni kehtivust kontrollitakse ka kasutajaõiguste kontrollimisel.       &lt;br /&gt;
* Logimine. Võrreldakse sisestatud kasjutajanime ning sisestatud parooli hashi andmebaasis olevatega. Kui need ühtivad, siis sisselogimine on edukas ning luuakse unikaalne session key, mis salvestatakse andmebaasi. Sisselogimine ning sessiooni olemasolu on eelduseks meetodite käivitamiseks. Kui sessioon aegub, siis toimub kasutaja väljalogimine. Väljalogimisfunktsioon kirjutab üle sessiooni aegumise aja, pannes selleks hetkelise kellaaja.  &lt;br /&gt;
Lisaks on veel hunnik abifunktsioone, näiteks parooli hashimine, väärtuste tagastamine jms. &lt;br /&gt;
   &lt;br /&gt;
Klient on kirjutatud WPF-is ning hetkel on võimalik kuvada tooteid, kasutajaid, gruppe ning kasutajagruppe.&lt;br /&gt;
&lt;br /&gt;
2.2&lt;br /&gt;
&#039;&#039;&#039;Menüü teenuse klient&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et meie tore teenus oleks veidi rohkem käega katsutavam, sai külge tehtud ka klient, mis realiseeriks põhifunktsioone. Kliendiks on WPF rakendus ning funktsionaalsus on järgmine:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sisse logimine&#039;&#039;&#039;: rakenduse käivitamisel ahistatakse kasutajat sisselogimisaknaga, valede andmete korral saab kasutaja ilusa punase veateate. Õnnestumise korral genereeritakse sessioonivõti, ning kantakse teda pidevalt edasi.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Toodete kuvamine,lisamine, kustutamine&#039;&#039;&#039;: kuvatakse väike popup, kus hunnik lahtreid ning kasutaja saab neid täites lisada toote. ID alusel saab kustutada ebasoovitava toote. Õnnestumisel või ebaõnnestumisel kuvatakse muidugi veateade.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kategooriate kuvamine, lisamine, kustutamine&#039;&#039;&#039;: iga toit tuleb paigutada kategooriasse, siin on koht kus neid luua saab. ID alusel jällegi kustutamine.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutajate kuvamine, lisamine&#039;&#039;&#039;: siin kuvatakse kõik süsteemis olevad kasutajad, ning toimub ka lisamine&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutaja gruppide kuvamine (kustutamine)&#039;&#039;&#039;: kuvatakse kehtivad kasutaja grupid, meetod ka kustutamiseks&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Pildid&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/rakendus_login.png Login Aken]&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/klient_ba.png BackEnd]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Klient&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/VR2__Menyy.rar Source]&lt;br /&gt;
&lt;br /&gt;
== 3. Flickr API ==&lt;br /&gt;
[http://i40.tinypic.com/k3r90i.png Pilt]&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:&lt;br /&gt;
*&#039;&#039;&#039;Pildiotsing&#039;&#039;&#039;: Kasutajal on võimalus otsida otsingusõna järgi pilte Flickri pildibaasist. Pilte otsitakse kasutajate galeriidest, pildikomplektidest ja niisama üles laetud piltidest, mis on &#039;&#039;publicud&#039;&#039; ehk avalikud. Kui kasutaja sisestab vähem kui 2 tähte, kuvatakse veateade. See on Flickri poolt samuti kinni keeratud, et ühetähe otsinguid ei teostataks. Üldjoontes ei oleks sellel ka mingisugust mõtet. Otsingusõna sisestamisel kuvatakse paremale aknasse 5 pildi &#039;&#039;thumbnaili&#039;&#039;, mis on kõige värskemad. &#039;&#039;Thumbnailidest&#039;&#039; vasakul all nurgas kuvatakse, mitu lehekülge pilte leiti ja mitmendal leheküljel parasjagu ollakse. Olles esimesel lehel ja/või teostades esimest otsingut, nuppu &amp;quot;eelmine&amp;quot; ei kuvata. Seejärel saab kasutaja hakata navigeerima lehekülgedel &amp;quot;eelmine&amp;quot; ja &amp;quot;järgmine&amp;quot; nuppudega. Valides thumbnaili välja ja klikkides selle peale, kuvatakse pilt suurena, laiusega 380 pikslit ja kõrgusega 380 pikslit. Kui suur pilt on kuvatud, avaneb ka võimalus vajutada nuppu &amp;quot;Ava kasutaja profiil&amp;quot;. Sellega pääseb API kasutaja ligi suure pildi kasutaja profiilile. See on sobilik näiteks kui API kasutajale hakkas huvi pakkuma pildi üles laadinud kasutaja, ning soovib tema teisigi pilte sirvida.&lt;br /&gt;
*&#039;&#039;&#039;Inimese otsing&#039;&#039;&#039;: Kasutajal on võimalus otsida emaili järgi Flickri kasutajaid. Otsingulahtrisse mitte millegi sisestamisel või jättes sisestamata &amp;quot;@&amp;quot; sümbol, kuvatakse veateade. Vastasel korral kuvatakse kas kasutaja Flickri kasutajanimi, pärisnimi (kui see on tal määratud) ja tema profiili URL. Kui kasutaja on leitud, kuvatakse ka nuppu &amp;quot;Ava veebisait&amp;quot;, millega pääseb kasutaja ligi ka tema profiilile, kirjutamata ise midagi veebibrauseri aknasse. Kui kasutajat ei leitud, antakse ka vastav veateade.&lt;br /&gt;
*&#039;&#039;&#039;Fotokomplektide kuvamine&#039;&#039;&#039;: Kasutaja saab vaadata oma fotokomplekte. Selleks tuleb kõigepealt vastava nupuga omandad &#039;&#039;frob&#039;&#039;, mis on Flickri API ajutine kood (kehtib ühe tunni). Kui &#039;&#039;frob&#039;&#039; on omandatud, avaneb kasutajale nupp &amp;quot;omanda token&amp;quot;. &#039;&#039;Tokeniga&#039;&#039; on Flickri poolne frobi teisendus &#039;&#039;tokeniks&#039;&#039;, mida kasutatakse edaspidi kasutaja identifitseerimiseks. Kui &#039;&#039;token&#039;&#039; on omandatud, kuvatakse teade &amp;quot;token omandatud&amp;quot; või vastasel juhul &amp;quot;token omandamata&amp;quot;. Seejärel ilmub nähtavale nupp &amp;quot;tiri fotosetid&amp;quot;. Sellele klikkides kuvatakse thumbnailidena kasutaja fotokomplektid.&lt;br /&gt;
*&#039;&#039;&#039;Piltide üleslaadimine&#039;&#039;&#039;: Kõigepealt tuleb omandada &#039;&#039;frob&#039;&#039; ja &#039;&#039;token&#039;&#039;, nagu eelnevas punktis kirjeldatud. Seejärel saab kasutaja üles laadida oma pilte arvutist &#039;&#039;OpenFileDialogi&#039;&#039; abil. Seejärel saab sisestada pildile tiitli ehk nime, kirjelduse ja &#039;&#039;tagi&#039;&#039;, mida aga ei pea tegema (Flickr samuti ei nõua nende atribuutide olemasolu). Olles salvestanud atribuudid ilmneb nupp &amp;quot;lae üles&amp;quot;. Sellele vajutades laetakse pilt kasutaja üldpiltide sekka üles.&lt;br /&gt;
&lt;br /&gt;
Klient, installer ja lähtekood:&lt;br /&gt;
[http://enos.itcollege.ee/~jhannus/VRII/FlickrWPF.zip Download]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;menyy xmlns:xsi =&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
       xsi:noNamespaceSchemaLocation=&amp;quot;menyy_schema.xsd&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;pearoad&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Seapraad&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kotlett&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;42&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
  &amp;lt;/pearoad&amp;gt;&lt;br /&gt;
  &amp;lt;lisandid&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Riis&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;7&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;kartul&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
  &amp;lt;/lisandid&amp;gt;&lt;br /&gt;
  &amp;lt;joogid&amp;gt;&lt;br /&gt;
    &amp;lt;soojad&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Kohv&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Tee&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;15&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
    &amp;lt;/soojad&amp;gt;&lt;br /&gt;
    &amp;lt;kylmad&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Morss&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Vesi&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;3&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
    &amp;lt;/kylmad&amp;gt;&lt;br /&gt;
  &amp;lt;/joogid&amp;gt;&lt;br /&gt;
  &amp;lt;magustoidud&amp;gt;&lt;br /&gt;
    &amp;lt;magustoit&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kisell&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;14&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/magustoit&amp;gt;&lt;br /&gt;
  &amp;lt;/magustoidud&amp;gt;&lt;br /&gt;
&amp;lt;/menyy&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT atribuutide tegemiseks elementidest ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot; version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;*[*]&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:when test=&amp;quot;not(@*)&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;not(*) and not(@*) &amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;{local-name(.)}&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML schema ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- definition of simple elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;nimi&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;hind&amp;quot; type=&amp;quot;xs:decimal&amp;quot;/&amp;gt;    &lt;br /&gt;
  &amp;lt;!-- definition of complex elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;menyy&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;pearoad&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;lisandid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;joogid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;magustoidud&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoog&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisandid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
	         &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisand&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;joogid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soojad&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylmad&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soojad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
	        &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylmad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylm&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soe&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoidud&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;magustoit&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoit&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10319</id>
		<title>Meeskond &quot;näljased&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10319"/>
		<updated>2010-05-18T13:06:03Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: /* XML */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1. XML ==&lt;br /&gt;
XML-i tegime menüü kohta. XSLT faile on kaks: üks teeb XML-i HTML-i ning teine vahetab elementide ja atribuutide kohtad. XML faili kohta on olemas ka kirjeldav schema. Raskeimaks osaks oli elementidest atribuutide tegemine, asi küll toimis, kuid vormistus oli kole ning auklik. Schema vajas ka veidi harjumist, kuid kui asi käppa sai, siis läks imelihtsaks. &lt;br /&gt;
[[Media:XML]]&lt;br /&gt;
&lt;br /&gt;
== 2. Teenus ==&lt;br /&gt;
2.1&lt;br /&gt;
&#039;&#039;&#039;Teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:   &lt;br /&gt;
*Kasutajagrupid:Hetkel on 3 kasutajagruppi: admin (saab teha kõike), müüja (saab teha kõike peale kasutajate ja kasutajagruppide loomise) ning tavakasutajad. On olemas eraldi funktsioon ka kasutajagruppide loomiseks. Iga meetodi käivitamisel kontrollitakse kasutajaõigusi. Ühel kasutajal saab olla mitu kasutajagruppi.           &lt;br /&gt;
*Kasutajad. Kasutajate loomiseks on 2 funktsiooni: üks tavakasutajate tegemiseks, mis ei eelda sisselogimist ning teine, mida saab teostada vaid administraator (ja lisada müüjaid või teisi administraatoreid). Kasutajate loomisel kontrollitakse seda, kas kasutajanimi on juba kasutusel. Kasutaja id ning roll sisestatakse ka tabelisse kasutajaRollis, mis näitab kasutajatel olevaid rolle. Kasutajate kustutamine käib otse andmebaasist. Kasutaja loomisel salvestatakse andmebaasi kasutaja parool hashitud kujul (algoritmiks sha1)        &lt;br /&gt;
*Tooted. Kasutajatel (hetkel müüjal) on võimalus lisada ja kustutada tooteid toodete kategooriaid, hindu jms.          &lt;br /&gt;
*Sessioonid. Kasutaja edukal sisselogimisel luuakse unikaalne juhuslik sessiooni võti, mille olemasolu kontrollitakse iga sisselogimist eeldava meetodi käivitamisel. Session_key salvestatakse andmebaasis vastavas väljas. Eraldi on funktsioonid sessiooni olemasolu kontrollimiseks ning uuendamiseks. Hetkel on timeoudiks 10 minutit. Sessiooni kehtivust kontrollitakse ka kasutajaõiguste kontrollimisel.       &lt;br /&gt;
* Logimine. Võrreldakse sisestatud kasjutajanime ning sisestatud parooli hashi andmebaasis olevatega. Kui need ühtivad, siis sisselogimine on edukas ning luuakse unikaalne session key, mis salvestatakse andmebaasi. Sisselogimine ning sessiooni olemasolu on eelduseks meetodite käivitamiseks. Kui sessioon aegub, siis toimub kasutaja väljalogimine. Väljalogimisfunktsioon kirjutab üle sessiooni aegumise aja, pannes selleks hetkelise kellaaja.  &lt;br /&gt;
Lisaks on veel hunnik abifunktsioone, näiteks parooli hashimine, väärtuste tagastamine jms. &lt;br /&gt;
   &lt;br /&gt;
Klient on kirjutatud WPF-is ning hetkel on võimalik kuvada tooteid, kasutajaid, gruppe ning kasutajagruppe.&lt;br /&gt;
&lt;br /&gt;
2.2&lt;br /&gt;
&#039;&#039;&#039;Menüü teenuse klient&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et meie tore teenus oleks veidi rohkem käega katsutavam, sai külge tehtud ka klient, mis realiseeriks põhifunktsioone. Kliendiks on WPF rakendus ning funktsionaalsus on järgmine:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sisse logimine&#039;&#039;&#039;: rakenduse käivitamisel ahistatakse kasutajat sisselogimisaknaga, valede andmete korral saab kasutaja ilusa punase veateate. Õnnestumise korral genereeritakse sessioonivõti, ning kantakse teda pidevalt edasi.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Toodete kuvamine,lisamine, kustutamine&#039;&#039;&#039;: kuvatakse väike popup, kus hunnik lahtreid ning kasutaja saab neid täites lisada toote. ID alusel saab kustutada ebasoovitava toote. Õnnestumisel või ebaõnnestumisel kuvatakse muidugi veateade.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kategooriate kuvamine, lisamine, kustutamine&#039;&#039;&#039;: iga toit tuleb paigutada kategooriasse, siin on koht kus neid luua saab. ID alusel jällegi kustutamine.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutajate kuvamine, lisamine&#039;&#039;&#039;: siin kuvatakse kõik süsteemis olevad kasutajad, ning toimub ka lisamine&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutaja gruppide kuvamine (kustutamine)&#039;&#039;&#039;: kuvatakse kehtivad kasutaja grupid, meetod ka kustutamiseks&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Pildid&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/rakendus_login.png Login Aken]&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/klient_ba.png BackEnd]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Klient&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/VR2__Menyy.rar Source]&lt;br /&gt;
&lt;br /&gt;
== 3. Flickr API ==&lt;br /&gt;
[http://i40.tinypic.com/k3r90i.png Pilt]&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:&lt;br /&gt;
*&#039;&#039;&#039;Pildiotsing&#039;&#039;&#039;: Kasutajal on võimalus otsida otsingusõna järgi pilte Flickri pildibaasist. Pilte otsitakse kasutajate galeriidest, pildikomplektidest ja niisama üles laetud piltidest, mis on &#039;&#039;publicud&#039;&#039; ehk avalikud. Kui kasutaja sisestab vähem kui 2 tähte, kuvatakse veateade. See on Flickri poolt samuti kinni keeratud, et ühetähe otsinguid ei teostataks. Üldjoontes ei oleks sellel ka mingisugust mõtet. Otsingusõna sisestamisel kuvatakse paremale aknasse 5 pildi &#039;&#039;thumbnaili&#039;&#039;, mis on kõige värskemad. &#039;&#039;Thumbnailidest&#039;&#039; vasakul all nurgas kuvatakse, mitu lehekülge pilte leiti ja mitmendal leheküljel parasjagu ollakse. Olles esimesel lehel ja/või teostades esimest otsingut, nuppu &amp;quot;eelmine&amp;quot; ei kuvata. Seejärel saab kasutaja hakata navigeerima lehekülgedel &amp;quot;eelmine&amp;quot; ja &amp;quot;järgmine&amp;quot; nuppudega. Valides thumbnaili välja ja klikkides selle peale, kuvatakse pilt suurena, laiusega 380 pikslit ja kõrgusega 380 pikslit. Kui suur pilt on kuvatud, avaneb ka võimalus vajutada nuppu &amp;quot;Ava kasutaja profiil&amp;quot;. Sellega pääseb API kasutaja ligi suure pildi kasutaja profiilile. See on sobilik näiteks kui API kasutajale hakkas huvi pakkuma pildi üles laadinud kasutaja, ning soovib tema teisigi pilte sirvida.&lt;br /&gt;
*&#039;&#039;&#039;Inimese otsing&#039;&#039;&#039;: Kasutajal on võimalus otsida emaili järgi Flickri kasutajaid. Otsingulahtrisse mitte millegi sisestamisel või jättes sisestamata &amp;quot;@&amp;quot; sümbol, kuvatakse veateade. Vastasel korral kuvatakse kas kasutaja Flickri kasutajanimi, pärisnimi (kui see on tal määratud) ja tema profiili URL. Kui kasutaja on leitud, kuvatakse ka nuppu &amp;quot;Ava veebisait&amp;quot;, millega pääseb kasutaja ligi ka tema profiilile, kirjutamata ise midagi veebibrauseri aknasse. Kui kasutajat ei leitud, antakse ka vastav veateade.&lt;br /&gt;
*&#039;&#039;&#039;Fotokomplektide kuvamine&#039;&#039;&#039;: Kasutaja saab vaadata oma fotokomplekte. Selleks tuleb kõigepealt vastava nupuga omandad &#039;&#039;frob&#039;&#039;, mis on Flickri API ajutine kood (kehtib ühe tunni). Kui &#039;&#039;frob&#039;&#039; on omandatud, avaneb kasutajale nupp &amp;quot;omanda token&amp;quot;. &#039;&#039;Tokeniga&#039;&#039; on Flickri poolne frobi teisendus &#039;&#039;tokeniks&#039;&#039;, mida kasutatakse edaspidi kasutaja identifitseerimiseks. Kui &#039;&#039;token&#039;&#039; on omandatud, kuvatakse teade &amp;quot;token omandatud&amp;quot; või vastasel juhul &amp;quot;token omandamata&amp;quot;. Seejärel ilmub nähtavale nupp &amp;quot;tiri fotosetid&amp;quot;. Sellele klikkides kuvatakse thumbnailidena kasutaja fotokomplektid.&lt;br /&gt;
*&#039;&#039;&#039;Piltide üleslaadimine&#039;&#039;&#039;: Kõigepealt tuleb omandada &#039;&#039;frob&#039;&#039; ja &#039;&#039;token&#039;&#039;, nagu eelnevas punktis kirjeldatud. Seejärel saab kasutaja üles laadida oma pilte arvutist &#039;&#039;OpenFileDialogi&#039;&#039; abil. Seejärel saab sisestada pildile tiitli ehk nime, kirjelduse ja &#039;&#039;tagi&#039;&#039;, mida aga ei pea tegema (Flickr samuti ei nõua nende atribuutide olemasolu). Olles salvestanud atribuudid ilmneb nupp &amp;quot;lae üles&amp;quot;. Sellele vajutades laetakse pilt kasutaja üldpiltide sekka üles.&lt;br /&gt;
&lt;br /&gt;
Klient, installer ja lähtekood:&lt;br /&gt;
[http://enos.itcollege.ee/~jhannus/VRII/FlickrWPF.zip Download]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;menyy xmlns:xsi =&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
       xsi:noNamespaceSchemaLocation=&amp;quot;menyy_schema.xsd&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;pearoad&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Seapraad&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kotlett&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;42&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
  &amp;lt;/pearoad&amp;gt;&lt;br /&gt;
  &amp;lt;lisandid&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Riis&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;7&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;kartul&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
  &amp;lt;/lisandid&amp;gt;&lt;br /&gt;
  &amp;lt;joogid&amp;gt;&lt;br /&gt;
    &amp;lt;soojad&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Kohv&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Tee&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;15&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
    &amp;lt;/soojad&amp;gt;&lt;br /&gt;
    &amp;lt;kylmad&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Morss&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Vesi&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;3&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
    &amp;lt;/kylmad&amp;gt;&lt;br /&gt;
  &amp;lt;/joogid&amp;gt;&lt;br /&gt;
  &amp;lt;magustoidud&amp;gt;&lt;br /&gt;
    &amp;lt;magustoit&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kisell&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;14&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/magustoit&amp;gt;&lt;br /&gt;
  &amp;lt;/magustoidud&amp;gt;&lt;br /&gt;
&amp;lt;/menyy&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT andmete kuvamiseks html-ina ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;!--&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;style.css&amp;quot; /&amp;gt;--&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;font-color: #D0D0D0;font-family:verdana;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Menüü&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#77a1af;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Pearoad&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;                 &lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/pearoad/pearoog&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c08e1d;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Lisandid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/lisandid/lisand&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c47121;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Kuumad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/soojad/soe&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#b03428;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Külmad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/kylmad/kylm&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#862419;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Magustoidud&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/magustoidud/magustoit&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT atribuutide tegemiseks elementidest ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot; version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;*[*]&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:when test=&amp;quot;not(@*)&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;not(*) and not(@*) &amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;{local-name(.)}&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML schema ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- definition of simple elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;nimi&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;hind&amp;quot; type=&amp;quot;xs:decimal&amp;quot;/&amp;gt;    &lt;br /&gt;
  &amp;lt;!-- definition of complex elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;menyy&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;pearoad&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;lisandid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;joogid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;magustoidud&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoog&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisandid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
	         &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisand&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;joogid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soojad&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylmad&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soojad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
	        &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylmad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylm&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soe&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoidud&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;magustoit&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoit&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10317</id>
		<title>Meeskond &quot;näljased&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10317"/>
		<updated>2010-05-18T13:05:25Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: /* XML */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1. XML ==&lt;br /&gt;
XML-i tegime menüü kohta. XSLT faile on kaks: üks teeb XML-i HTML-i ning teine vahetab elementide ja atribuutide kohtad. XML faili kohta on olemas ka kirjeldav schema. Raskeimaks osaks oli elementidest atribuutide tegemine, asi küll toimis, kuid vormistus oli kole ning auklik. Schema vajas ka veidi harjumist, kuid kui asi käppa sai, siis läks imelihtsaks. &lt;br /&gt;
[[Media:XML]]&lt;br /&gt;
&lt;br /&gt;
== 2. Teenus ==&lt;br /&gt;
2.1&lt;br /&gt;
&#039;&#039;&#039;Teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:   &lt;br /&gt;
*Kasutajagrupid:Hetkel on 3 kasutajagruppi: admin (saab teha kõike), müüja (saab teha kõike peale kasutajate ja kasutajagruppide loomise) ning tavakasutajad. On olemas eraldi funktsioon ka kasutajagruppide loomiseks. Iga meetodi käivitamisel kontrollitakse kasutajaõigusi. Ühel kasutajal saab olla mitu kasutajagruppi.           &lt;br /&gt;
*Kasutajad. Kasutajate loomiseks on 2 funktsiooni: üks tavakasutajate tegemiseks, mis ei eelda sisselogimist ning teine, mida saab teostada vaid administraator (ja lisada müüjaid või teisi administraatoreid). Kasutajate loomisel kontrollitakse seda, kas kasutajanimi on juba kasutusel. Kasutaja id ning roll sisestatakse ka tabelisse kasutajaRollis, mis näitab kasutajatel olevaid rolle. Kasutajate kustutamine käib otse andmebaasist. Kasutaja loomisel salvestatakse andmebaasi kasutaja parool hashitud kujul (algoritmiks sha1)        &lt;br /&gt;
*Tooted. Kasutajatel (hetkel müüjal) on võimalus lisada ja kustutada tooteid toodete kategooriaid, hindu jms.          &lt;br /&gt;
*Sessioonid. Kasutaja edukal sisselogimisel luuakse unikaalne juhuslik sessiooni võti, mille olemasolu kontrollitakse iga sisselogimist eeldava meetodi käivitamisel. Session_key salvestatakse andmebaasis vastavas väljas. Eraldi on funktsioonid sessiooni olemasolu kontrollimiseks ning uuendamiseks. Hetkel on timeoudiks 10 minutit. Sessiooni kehtivust kontrollitakse ka kasutajaõiguste kontrollimisel.       &lt;br /&gt;
* Logimine. Võrreldakse sisestatud kasjutajanime ning sisestatud parooli hashi andmebaasis olevatega. Kui need ühtivad, siis sisselogimine on edukas ning luuakse unikaalne session key, mis salvestatakse andmebaasi. Sisselogimine ning sessiooni olemasolu on eelduseks meetodite käivitamiseks. Kui sessioon aegub, siis toimub kasutaja väljalogimine. Väljalogimisfunktsioon kirjutab üle sessiooni aegumise aja, pannes selleks hetkelise kellaaja.  &lt;br /&gt;
Lisaks on veel hunnik abifunktsioone, näiteks parooli hashimine, väärtuste tagastamine jms. &lt;br /&gt;
   &lt;br /&gt;
Klient on kirjutatud WPF-is ning hetkel on võimalik kuvada tooteid, kasutajaid, gruppe ning kasutajagruppe.&lt;br /&gt;
&lt;br /&gt;
2.2&lt;br /&gt;
&#039;&#039;&#039;Menüü teenuse klient&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et meie tore teenus oleks veidi rohkem käega katsutavam, sai külge tehtud ka klient, mis realiseeriks põhifunktsioone. Kliendiks on WPF rakendus ning funktsionaalsus on järgmine:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sisse logimine&#039;&#039;&#039;: rakenduse käivitamisel ahistatakse kasutajat sisselogimisaknaga, valede andmete korral saab kasutaja ilusa punase veateate. Õnnestumise korral genereeritakse sessioonivõti, ning kantakse teda pidevalt edasi.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Toodete kuvamine,lisamine, kustutamine&#039;&#039;&#039;: kuvatakse väike popup, kus hunnik lahtreid ning kasutaja saab neid täites lisada toote. ID alusel saab kustutada ebasoovitava toote. Õnnestumisel või ebaõnnestumisel kuvatakse muidugi veateade.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kategooriate kuvamine, lisamine, kustutamine&#039;&#039;&#039;: iga toit tuleb paigutada kategooriasse, siin on koht kus neid luua saab. ID alusel jällegi kustutamine.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutajate kuvamine, lisamine&#039;&#039;&#039;: siin kuvatakse kõik süsteemis olevad kasutajad, ning toimub ka lisamine&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutaja gruppide kuvamine (kustutamine)&#039;&#039;&#039;: kuvatakse kehtivad kasutaja grupid, meetod ka kustutamiseks&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Pildid&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/rakendus_login.png Login Aken]&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/klient_ba.png BackEnd]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Klient&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/VR2__Menyy.rar Source]&lt;br /&gt;
&lt;br /&gt;
== 3. Flickr API ==&lt;br /&gt;
[http://i40.tinypic.com/k3r90i.png Pilt]&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:&lt;br /&gt;
*&#039;&#039;&#039;Pildiotsing&#039;&#039;&#039;: Kasutajal on võimalus otsida otsingusõna järgi pilte Flickri pildibaasist. Pilte otsitakse kasutajate galeriidest, pildikomplektidest ja niisama üles laetud piltidest, mis on &#039;&#039;publicud&#039;&#039; ehk avalikud. Kui kasutaja sisestab vähem kui 2 tähte, kuvatakse veateade. See on Flickri poolt samuti kinni keeratud, et ühetähe otsinguid ei teostataks. Üldjoontes ei oleks sellel ka mingisugust mõtet. Otsingusõna sisestamisel kuvatakse paremale aknasse 5 pildi &#039;&#039;thumbnaili&#039;&#039;, mis on kõige värskemad. &#039;&#039;Thumbnailidest&#039;&#039; vasakul all nurgas kuvatakse, mitu lehekülge pilte leiti ja mitmendal leheküljel parasjagu ollakse. Olles esimesel lehel ja/või teostades esimest otsingut, nuppu &amp;quot;eelmine&amp;quot; ei kuvata. Seejärel saab kasutaja hakata navigeerima lehekülgedel &amp;quot;eelmine&amp;quot; ja &amp;quot;järgmine&amp;quot; nuppudega. Valides thumbnaili välja ja klikkides selle peale, kuvatakse pilt suurena, laiusega 380 pikslit ja kõrgusega 380 pikslit. Kui suur pilt on kuvatud, avaneb ka võimalus vajutada nuppu &amp;quot;Ava kasutaja profiil&amp;quot;. Sellega pääseb API kasutaja ligi suure pildi kasutaja profiilile. See on sobilik näiteks kui API kasutajale hakkas huvi pakkuma pildi üles laadinud kasutaja, ning soovib tema teisigi pilte sirvida.&lt;br /&gt;
*&#039;&#039;&#039;Inimese otsing&#039;&#039;&#039;: Kasutajal on võimalus otsida emaili järgi Flickri kasutajaid. Otsingulahtrisse mitte millegi sisestamisel või jättes sisestamata &amp;quot;@&amp;quot; sümbol, kuvatakse veateade. Vastasel korral kuvatakse kas kasutaja Flickri kasutajanimi, pärisnimi (kui see on tal määratud) ja tema profiili URL. Kui kasutaja on leitud, kuvatakse ka nuppu &amp;quot;Ava veebisait&amp;quot;, millega pääseb kasutaja ligi ka tema profiilile, kirjutamata ise midagi veebibrauseri aknasse. Kui kasutajat ei leitud, antakse ka vastav veateade.&lt;br /&gt;
*&#039;&#039;&#039;Fotokomplektide kuvamine&#039;&#039;&#039;: Kasutaja saab vaadata oma fotokomplekte. Selleks tuleb kõigepealt vastava nupuga omandad &#039;&#039;frob&#039;&#039;, mis on Flickri API ajutine kood (kehtib ühe tunni). Kui &#039;&#039;frob&#039;&#039; on omandatud, avaneb kasutajale nupp &amp;quot;omanda token&amp;quot;. &#039;&#039;Tokeniga&#039;&#039; on Flickri poolne frobi teisendus &#039;&#039;tokeniks&#039;&#039;, mida kasutatakse edaspidi kasutaja identifitseerimiseks. Kui &#039;&#039;token&#039;&#039; on omandatud, kuvatakse teade &amp;quot;token omandatud&amp;quot; või vastasel juhul &amp;quot;token omandamata&amp;quot;. Seejärel ilmub nähtavale nupp &amp;quot;tiri fotosetid&amp;quot;. Sellele klikkides kuvatakse thumbnailidena kasutaja fotokomplektid.&lt;br /&gt;
*&#039;&#039;&#039;Piltide üleslaadimine&#039;&#039;&#039;: Kõigepealt tuleb omandada &#039;&#039;frob&#039;&#039; ja &#039;&#039;token&#039;&#039;, nagu eelnevas punktis kirjeldatud. Seejärel saab kasutaja üles laadida oma pilte arvutist &#039;&#039;OpenFileDialogi&#039;&#039; abil. Seejärel saab sisestada pildile tiitli ehk nime, kirjelduse ja &#039;&#039;tagi&#039;&#039;, mida aga ei pea tegema (Flickr samuti ei nõua nende atribuutide olemasolu). Olles salvestanud atribuudid ilmneb nupp &amp;quot;lae üles&amp;quot;. Sellele vajutades laetakse pilt kasutaja üldpiltide sekka üles.&lt;br /&gt;
&lt;br /&gt;
Klient, installer ja lähtekood:&lt;br /&gt;
[http://enos.itcollege.ee/~jhannus/VRII/FlickrWPF.zip Download]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;menyy xmlns:xsi =&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
       xsi:noNamespaceSchemaLocation=&amp;quot;menyy_schema.xsd&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;pearoad&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Seapraad&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kotlett&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;42&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
  &amp;lt;/pearoad&amp;gt;&lt;br /&gt;
  &amp;lt;lisandid&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Riis&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;7&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;kartul&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
  &amp;lt;/lisandid&amp;gt;&lt;br /&gt;
  &amp;lt;joogid&amp;gt;&lt;br /&gt;
    &amp;lt;soojad&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Kohv&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Tee&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;15&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
    &amp;lt;/soojad&amp;gt;&lt;br /&gt;
    &amp;lt;kylmad&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Morss&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Vesi&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;3&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
    &amp;lt;/kylmad&amp;gt;&lt;br /&gt;
  &amp;lt;/joogid&amp;gt;&lt;br /&gt;
  &amp;lt;magustoidud&amp;gt;&lt;br /&gt;
    &amp;lt;magustoit&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kisell&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;14&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/magustoit&amp;gt;&lt;br /&gt;
  &amp;lt;/magustoidud&amp;gt;&lt;br /&gt;
&amp;lt;/menyy&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT andmete kuvamiseks html-ina ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;!--&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;style.css&amp;quot; /&amp;gt;--&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;font-color: #D0D0D0;font-family:verdana;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Menüü&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#77a1af;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Pearoad&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;                 &lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/pearoad/pearoog&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c08e1d;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Lisandid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/lisandid/lisand&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c47121;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Kuumad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/soojad/soe&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#b03428;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Külmad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/kylmad/kylm&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#862419;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Magustoidud&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/magustoidud/magustoit&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT atribuutide tegemiseks elementidest ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot; version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;*[*]&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:when test=&amp;quot;not(@*)&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;not(*) and not(@*) &amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;{local-name(.)}&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML schema ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- definition of simple elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;nimi&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;hind&amp;quot; type=&amp;quot;xs:decimal&amp;quot;/&amp;gt;    &lt;br /&gt;
  &amp;lt;!-- definition of complex elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;menyy&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;pearoad&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;lisandid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;joogid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;magustoidud&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoog&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisandid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
	         &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisand&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;joogid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soojad&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylmad&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soojad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
	        &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylmad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylm&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soe&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoidud&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;magustoit&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoit&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10316</id>
		<title>Meeskond &quot;näljased&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10316"/>
		<updated>2010-05-18T13:04:22Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: /* XSLT andmete kuvamiseks html-ina */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1. XML ==&lt;br /&gt;
XML-i tegime menüü kohta. XSLT faile on kaks: üks teeb XML-i HTML-i ning teine vahetab elementide ja atribuutide kohtad. XML faili kohta on olemas ka kirjeldav schema. Raskeimaks osaks oli elementidest atribuutide tegemine, asi küll toimis, kuid vormistus oli kole ning auklik. Schema vajas ka veidi harjumist, kuid kui asi käppa sai, siis läks imelihtsaks. &lt;br /&gt;
[[Media:XML]]&lt;br /&gt;
&lt;br /&gt;
== 2. Teenus ==&lt;br /&gt;
2.1&lt;br /&gt;
&#039;&#039;&#039;Teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:   &lt;br /&gt;
*Kasutajagrupid:Hetkel on 3 kasutajagruppi: admin (saab teha kõike), müüja (saab teha kõike peale kasutajate ja kasutajagruppide loomise) ning tavakasutajad. On olemas eraldi funktsioon ka kasutajagruppide loomiseks. Iga meetodi käivitamisel kontrollitakse kasutajaõigusi. Ühel kasutajal saab olla mitu kasutajagruppi.           &lt;br /&gt;
*Kasutajad. Kasutajate loomiseks on 2 funktsiooni: üks tavakasutajate tegemiseks, mis ei eelda sisselogimist ning teine, mida saab teostada vaid administraator (ja lisada müüjaid või teisi administraatoreid). Kasutajate loomisel kontrollitakse seda, kas kasutajanimi on juba kasutusel. Kasutaja id ning roll sisestatakse ka tabelisse kasutajaRollis, mis näitab kasutajatel olevaid rolle. Kasutajate kustutamine käib otse andmebaasist. Kasutaja loomisel salvestatakse andmebaasi kasutaja parool hashitud kujul (algoritmiks sha1)        &lt;br /&gt;
*Tooted. Kasutajatel (hetkel müüjal) on võimalus lisada ja kustutada tooteid toodete kategooriaid, hindu jms.          &lt;br /&gt;
*Sessioonid. Kasutaja edukal sisselogimisel luuakse unikaalne juhuslik sessiooni võti, mille olemasolu kontrollitakse iga sisselogimist eeldava meetodi käivitamisel. Session_key salvestatakse andmebaasis vastavas väljas. Eraldi on funktsioonid sessiooni olemasolu kontrollimiseks ning uuendamiseks. Hetkel on timeoudiks 10 minutit. Sessiooni kehtivust kontrollitakse ka kasutajaõiguste kontrollimisel.       &lt;br /&gt;
* Logimine. Võrreldakse sisestatud kasjutajanime ning sisestatud parooli hashi andmebaasis olevatega. Kui need ühtivad, siis sisselogimine on edukas ning luuakse unikaalne session key, mis salvestatakse andmebaasi. Sisselogimine ning sessiooni olemasolu on eelduseks meetodite käivitamiseks. Kui sessioon aegub, siis toimub kasutaja väljalogimine. Väljalogimisfunktsioon kirjutab üle sessiooni aegumise aja, pannes selleks hetkelise kellaaja.  &lt;br /&gt;
Lisaks on veel hunnik abifunktsioone, näiteks parooli hashimine, väärtuste tagastamine jms. &lt;br /&gt;
   &lt;br /&gt;
Klient on kirjutatud WPF-is ning hetkel on võimalik kuvada tooteid, kasutajaid, gruppe ning kasutajagruppe.&lt;br /&gt;
&lt;br /&gt;
2.2&lt;br /&gt;
&#039;&#039;&#039;Menüü teenuse klient&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et meie tore teenus oleks veidi rohkem käega katsutavam, sai külge tehtud ka klient, mis realiseeriks põhifunktsioone. Kliendiks on WPF rakendus ning funktsionaalsus on järgmine:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sisse logimine&#039;&#039;&#039;: rakenduse käivitamisel ahistatakse kasutajat sisselogimisaknaga, valede andmete korral saab kasutaja ilusa punase veateate. Õnnestumise korral genereeritakse sessioonivõti, ning kantakse teda pidevalt edasi.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Toodete kuvamine,lisamine, kustutamine&#039;&#039;&#039;: kuvatakse väike popup, kus hunnik lahtreid ning kasutaja saab neid täites lisada toote. ID alusel saab kustutada ebasoovitava toote. Õnnestumisel või ebaõnnestumisel kuvatakse muidugi veateade.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kategooriate kuvamine, lisamine, kustutamine&#039;&#039;&#039;: iga toit tuleb paigutada kategooriasse, siin on koht kus neid luua saab. ID alusel jällegi kustutamine.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutajate kuvamine, lisamine&#039;&#039;&#039;: siin kuvatakse kõik süsteemis olevad kasutajad, ning toimub ka lisamine&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutaja gruppide kuvamine (kustutamine)&#039;&#039;&#039;: kuvatakse kehtivad kasutaja grupid, meetod ka kustutamiseks&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Pildid&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/rakendus_login.png Login Aken]&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/klient_ba.png BackEnd]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Klient&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/VR2__Menyy.rar Source]&lt;br /&gt;
&lt;br /&gt;
== 3. Flickr API ==&lt;br /&gt;
[http://i40.tinypic.com/k3r90i.png Pilt]&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:&lt;br /&gt;
*&#039;&#039;&#039;Pildiotsing&#039;&#039;&#039;: Kasutajal on võimalus otsida otsingusõna järgi pilte Flickri pildibaasist. Pilte otsitakse kasutajate galeriidest, pildikomplektidest ja niisama üles laetud piltidest, mis on &#039;&#039;publicud&#039;&#039; ehk avalikud. Kui kasutaja sisestab vähem kui 2 tähte, kuvatakse veateade. See on Flickri poolt samuti kinni keeratud, et ühetähe otsinguid ei teostataks. Üldjoontes ei oleks sellel ka mingisugust mõtet. Otsingusõna sisestamisel kuvatakse paremale aknasse 5 pildi &#039;&#039;thumbnaili&#039;&#039;, mis on kõige värskemad. &#039;&#039;Thumbnailidest&#039;&#039; vasakul all nurgas kuvatakse, mitu lehekülge pilte leiti ja mitmendal leheküljel parasjagu ollakse. Olles esimesel lehel ja/või teostades esimest otsingut, nuppu &amp;quot;eelmine&amp;quot; ei kuvata. Seejärel saab kasutaja hakata navigeerima lehekülgedel &amp;quot;eelmine&amp;quot; ja &amp;quot;järgmine&amp;quot; nuppudega. Valides thumbnaili välja ja klikkides selle peale, kuvatakse pilt suurena, laiusega 380 pikslit ja kõrgusega 380 pikslit. Kui suur pilt on kuvatud, avaneb ka võimalus vajutada nuppu &amp;quot;Ava kasutaja profiil&amp;quot;. Sellega pääseb API kasutaja ligi suure pildi kasutaja profiilile. See on sobilik näiteks kui API kasutajale hakkas huvi pakkuma pildi üles laadinud kasutaja, ning soovib tema teisigi pilte sirvida.&lt;br /&gt;
*&#039;&#039;&#039;Inimese otsing&#039;&#039;&#039;: Kasutajal on võimalus otsida emaili järgi Flickri kasutajaid. Otsingulahtrisse mitte millegi sisestamisel või jättes sisestamata &amp;quot;@&amp;quot; sümbol, kuvatakse veateade. Vastasel korral kuvatakse kas kasutaja Flickri kasutajanimi, pärisnimi (kui see on tal määratud) ja tema profiili URL. Kui kasutaja on leitud, kuvatakse ka nuppu &amp;quot;Ava veebisait&amp;quot;, millega pääseb kasutaja ligi ka tema profiilile, kirjutamata ise midagi veebibrauseri aknasse. Kui kasutajat ei leitud, antakse ka vastav veateade.&lt;br /&gt;
*&#039;&#039;&#039;Fotokomplektide kuvamine&#039;&#039;&#039;: Kasutaja saab vaadata oma fotokomplekte. Selleks tuleb kõigepealt vastava nupuga omandad &#039;&#039;frob&#039;&#039;, mis on Flickri API ajutine kood (kehtib ühe tunni). Kui &#039;&#039;frob&#039;&#039; on omandatud, avaneb kasutajale nupp &amp;quot;omanda token&amp;quot;. &#039;&#039;Tokeniga&#039;&#039; on Flickri poolne frobi teisendus &#039;&#039;tokeniks&#039;&#039;, mida kasutatakse edaspidi kasutaja identifitseerimiseks. Kui &#039;&#039;token&#039;&#039; on omandatud, kuvatakse teade &amp;quot;token omandatud&amp;quot; või vastasel juhul &amp;quot;token omandamata&amp;quot;. Seejärel ilmub nähtavale nupp &amp;quot;tiri fotosetid&amp;quot;. Sellele klikkides kuvatakse thumbnailidena kasutaja fotokomplektid.&lt;br /&gt;
*&#039;&#039;&#039;Piltide üleslaadimine&#039;&#039;&#039;: Kõigepealt tuleb omandada &#039;&#039;frob&#039;&#039; ja &#039;&#039;token&#039;&#039;, nagu eelnevas punktis kirjeldatud. Seejärel saab kasutaja üles laadida oma pilte arvutist &#039;&#039;OpenFileDialogi&#039;&#039; abil. Seejärel saab sisestada pildile tiitli ehk nime, kirjelduse ja &#039;&#039;tagi&#039;&#039;, mida aga ei pea tegema (Flickr samuti ei nõua nende atribuutide olemasolu). Olles salvestanud atribuudid ilmneb nupp &amp;quot;lae üles&amp;quot;. Sellele vajutades laetakse pilt kasutaja üldpiltide sekka üles.&lt;br /&gt;
&lt;br /&gt;
Klient, installer ja lähtekood:&lt;br /&gt;
[http://enos.itcollege.ee/~jhannus/VRII/FlickrWPF.zip Download]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
//&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;XSLTFile1.xslt&amp;quot;?&amp;gt;&lt;br /&gt;
//&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;toAttribute2.xslt&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;menyy xmlns:xsi =&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
       xsi:noNamespaceSchemaLocation=&amp;quot;menyy_schema.xsd&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;pearoad&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Seapraad&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kotlett&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;42&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
  &amp;lt;/pearoad&amp;gt;&lt;br /&gt;
  &amp;lt;lisandid&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Riis&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;7&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;kartul&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
  &amp;lt;/lisandid&amp;gt;&lt;br /&gt;
  &amp;lt;joogid&amp;gt;&lt;br /&gt;
    &amp;lt;soojad&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Kohv&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Tee&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;15&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
    &amp;lt;/soojad&amp;gt;&lt;br /&gt;
    &amp;lt;kylmad&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Morss&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Vesi&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;3&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
    &amp;lt;/kylmad&amp;gt;&lt;br /&gt;
  &amp;lt;/joogid&amp;gt;&lt;br /&gt;
  &amp;lt;magustoidud&amp;gt;&lt;br /&gt;
    &amp;lt;magustoit&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kisell&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;14&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/magustoit&amp;gt;&lt;br /&gt;
  &amp;lt;/magustoidud&amp;gt;&lt;br /&gt;
&amp;lt;/menyy&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT andmete kuvamiseks html-ina ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;!--&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;style.css&amp;quot; /&amp;gt;--&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;font-color: #D0D0D0;font-family:verdana;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Menüü&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#77a1af;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Pearoad&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;                 &lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/pearoad/pearoog&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c08e1d;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Lisandid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/lisandid/lisand&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c47121;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Kuumad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/soojad/soe&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#b03428;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Külmad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/kylmad/kylm&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#862419;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Magustoidud&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/magustoidud/magustoit&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT atribuutide tegemiseks elementidest ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot; version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;*[*]&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:when test=&amp;quot;not(@*)&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;not(*) and not(@*) &amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;{local-name(.)}&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML schema ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- definition of simple elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;nimi&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;hind&amp;quot; type=&amp;quot;xs:decimal&amp;quot;/&amp;gt;    &lt;br /&gt;
  &amp;lt;!-- definition of complex elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;menyy&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;pearoad&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;lisandid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;joogid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;magustoidud&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoog&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisandid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
	         &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisand&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;joogid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soojad&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylmad&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soojad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
	        &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylmad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylm&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soe&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoidud&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;magustoit&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoit&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10315</id>
		<title>Meeskond &quot;näljased&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10315"/>
		<updated>2010-05-18T13:03:46Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: /* XML */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1. XML ==&lt;br /&gt;
XML-i tegime menüü kohta. XSLT faile on kaks: üks teeb XML-i HTML-i ning teine vahetab elementide ja atribuutide kohtad. XML faili kohta on olemas ka kirjeldav schema. Raskeimaks osaks oli elementidest atribuutide tegemine, asi küll toimis, kuid vormistus oli kole ning auklik. Schema vajas ka veidi harjumist, kuid kui asi käppa sai, siis läks imelihtsaks. &lt;br /&gt;
[[Media:XML]]&lt;br /&gt;
&lt;br /&gt;
== 2. Teenus ==&lt;br /&gt;
2.1&lt;br /&gt;
&#039;&#039;&#039;Teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:   &lt;br /&gt;
*Kasutajagrupid:Hetkel on 3 kasutajagruppi: admin (saab teha kõike), müüja (saab teha kõike peale kasutajate ja kasutajagruppide loomise) ning tavakasutajad. On olemas eraldi funktsioon ka kasutajagruppide loomiseks. Iga meetodi käivitamisel kontrollitakse kasutajaõigusi. Ühel kasutajal saab olla mitu kasutajagruppi.           &lt;br /&gt;
*Kasutajad. Kasutajate loomiseks on 2 funktsiooni: üks tavakasutajate tegemiseks, mis ei eelda sisselogimist ning teine, mida saab teostada vaid administraator (ja lisada müüjaid või teisi administraatoreid). Kasutajate loomisel kontrollitakse seda, kas kasutajanimi on juba kasutusel. Kasutaja id ning roll sisestatakse ka tabelisse kasutajaRollis, mis näitab kasutajatel olevaid rolle. Kasutajate kustutamine käib otse andmebaasist. Kasutaja loomisel salvestatakse andmebaasi kasutaja parool hashitud kujul (algoritmiks sha1)        &lt;br /&gt;
*Tooted. Kasutajatel (hetkel müüjal) on võimalus lisada ja kustutada tooteid toodete kategooriaid, hindu jms.          &lt;br /&gt;
*Sessioonid. Kasutaja edukal sisselogimisel luuakse unikaalne juhuslik sessiooni võti, mille olemasolu kontrollitakse iga sisselogimist eeldava meetodi käivitamisel. Session_key salvestatakse andmebaasis vastavas väljas. Eraldi on funktsioonid sessiooni olemasolu kontrollimiseks ning uuendamiseks. Hetkel on timeoudiks 10 minutit. Sessiooni kehtivust kontrollitakse ka kasutajaõiguste kontrollimisel.       &lt;br /&gt;
* Logimine. Võrreldakse sisestatud kasjutajanime ning sisestatud parooli hashi andmebaasis olevatega. Kui need ühtivad, siis sisselogimine on edukas ning luuakse unikaalne session key, mis salvestatakse andmebaasi. Sisselogimine ning sessiooni olemasolu on eelduseks meetodite käivitamiseks. Kui sessioon aegub, siis toimub kasutaja väljalogimine. Väljalogimisfunktsioon kirjutab üle sessiooni aegumise aja, pannes selleks hetkelise kellaaja.  &lt;br /&gt;
Lisaks on veel hunnik abifunktsioone, näiteks parooli hashimine, väärtuste tagastamine jms. &lt;br /&gt;
   &lt;br /&gt;
Klient on kirjutatud WPF-is ning hetkel on võimalik kuvada tooteid, kasutajaid, gruppe ning kasutajagruppe.&lt;br /&gt;
&lt;br /&gt;
2.2&lt;br /&gt;
&#039;&#039;&#039;Menüü teenuse klient&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et meie tore teenus oleks veidi rohkem käega katsutavam, sai külge tehtud ka klient, mis realiseeriks põhifunktsioone. Kliendiks on WPF rakendus ning funktsionaalsus on järgmine:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sisse logimine&#039;&#039;&#039;: rakenduse käivitamisel ahistatakse kasutajat sisselogimisaknaga, valede andmete korral saab kasutaja ilusa punase veateate. Õnnestumise korral genereeritakse sessioonivõti, ning kantakse teda pidevalt edasi.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Toodete kuvamine,lisamine, kustutamine&#039;&#039;&#039;: kuvatakse väike popup, kus hunnik lahtreid ning kasutaja saab neid täites lisada toote. ID alusel saab kustutada ebasoovitava toote. Õnnestumisel või ebaõnnestumisel kuvatakse muidugi veateade.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kategooriate kuvamine, lisamine, kustutamine&#039;&#039;&#039;: iga toit tuleb paigutada kategooriasse, siin on koht kus neid luua saab. ID alusel jällegi kustutamine.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutajate kuvamine, lisamine&#039;&#039;&#039;: siin kuvatakse kõik süsteemis olevad kasutajad, ning toimub ka lisamine&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutaja gruppide kuvamine (kustutamine)&#039;&#039;&#039;: kuvatakse kehtivad kasutaja grupid, meetod ka kustutamiseks&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Pildid&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/rakendus_login.png Login Aken]&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/klient_ba.png BackEnd]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Klient&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/VR2__Menyy.rar Source]&lt;br /&gt;
&lt;br /&gt;
== 3. Flickr API ==&lt;br /&gt;
[http://i40.tinypic.com/k3r90i.png Pilt]&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:&lt;br /&gt;
*&#039;&#039;&#039;Pildiotsing&#039;&#039;&#039;: Kasutajal on võimalus otsida otsingusõna järgi pilte Flickri pildibaasist. Pilte otsitakse kasutajate galeriidest, pildikomplektidest ja niisama üles laetud piltidest, mis on &#039;&#039;publicud&#039;&#039; ehk avalikud. Kui kasutaja sisestab vähem kui 2 tähte, kuvatakse veateade. See on Flickri poolt samuti kinni keeratud, et ühetähe otsinguid ei teostataks. Üldjoontes ei oleks sellel ka mingisugust mõtet. Otsingusõna sisestamisel kuvatakse paremale aknasse 5 pildi &#039;&#039;thumbnaili&#039;&#039;, mis on kõige värskemad. &#039;&#039;Thumbnailidest&#039;&#039; vasakul all nurgas kuvatakse, mitu lehekülge pilte leiti ja mitmendal leheküljel parasjagu ollakse. Olles esimesel lehel ja/või teostades esimest otsingut, nuppu &amp;quot;eelmine&amp;quot; ei kuvata. Seejärel saab kasutaja hakata navigeerima lehekülgedel &amp;quot;eelmine&amp;quot; ja &amp;quot;järgmine&amp;quot; nuppudega. Valides thumbnaili välja ja klikkides selle peale, kuvatakse pilt suurena, laiusega 380 pikslit ja kõrgusega 380 pikslit. Kui suur pilt on kuvatud, avaneb ka võimalus vajutada nuppu &amp;quot;Ava kasutaja profiil&amp;quot;. Sellega pääseb API kasutaja ligi suure pildi kasutaja profiilile. See on sobilik näiteks kui API kasutajale hakkas huvi pakkuma pildi üles laadinud kasutaja, ning soovib tema teisigi pilte sirvida.&lt;br /&gt;
*&#039;&#039;&#039;Inimese otsing&#039;&#039;&#039;: Kasutajal on võimalus otsida emaili järgi Flickri kasutajaid. Otsingulahtrisse mitte millegi sisestamisel või jättes sisestamata &amp;quot;@&amp;quot; sümbol, kuvatakse veateade. Vastasel korral kuvatakse kas kasutaja Flickri kasutajanimi, pärisnimi (kui see on tal määratud) ja tema profiili URL. Kui kasutaja on leitud, kuvatakse ka nuppu &amp;quot;Ava veebisait&amp;quot;, millega pääseb kasutaja ligi ka tema profiilile, kirjutamata ise midagi veebibrauseri aknasse. Kui kasutajat ei leitud, antakse ka vastav veateade.&lt;br /&gt;
*&#039;&#039;&#039;Fotokomplektide kuvamine&#039;&#039;&#039;: Kasutaja saab vaadata oma fotokomplekte. Selleks tuleb kõigepealt vastava nupuga omandad &#039;&#039;frob&#039;&#039;, mis on Flickri API ajutine kood (kehtib ühe tunni). Kui &#039;&#039;frob&#039;&#039; on omandatud, avaneb kasutajale nupp &amp;quot;omanda token&amp;quot;. &#039;&#039;Tokeniga&#039;&#039; on Flickri poolne frobi teisendus &#039;&#039;tokeniks&#039;&#039;, mida kasutatakse edaspidi kasutaja identifitseerimiseks. Kui &#039;&#039;token&#039;&#039; on omandatud, kuvatakse teade &amp;quot;token omandatud&amp;quot; või vastasel juhul &amp;quot;token omandamata&amp;quot;. Seejärel ilmub nähtavale nupp &amp;quot;tiri fotosetid&amp;quot;. Sellele klikkides kuvatakse thumbnailidena kasutaja fotokomplektid.&lt;br /&gt;
*&#039;&#039;&#039;Piltide üleslaadimine&#039;&#039;&#039;: Kõigepealt tuleb omandada &#039;&#039;frob&#039;&#039; ja &#039;&#039;token&#039;&#039;, nagu eelnevas punktis kirjeldatud. Seejärel saab kasutaja üles laadida oma pilte arvutist &#039;&#039;OpenFileDialogi&#039;&#039; abil. Seejärel saab sisestada pildile tiitli ehk nime, kirjelduse ja &#039;&#039;tagi&#039;&#039;, mida aga ei pea tegema (Flickr samuti ei nõua nende atribuutide olemasolu). Olles salvestanud atribuudid ilmneb nupp &amp;quot;lae üles&amp;quot;. Sellele vajutades laetakse pilt kasutaja üldpiltide sekka üles.&lt;br /&gt;
&lt;br /&gt;
Klient, installer ja lähtekood:&lt;br /&gt;
[http://enos.itcollege.ee/~jhannus/VRII/FlickrWPF.zip Download]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
//&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;XSLTFile1.xslt&amp;quot;?&amp;gt;&lt;br /&gt;
//&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;toAttribute2.xslt&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;menyy xmlns:xsi =&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
       xsi:noNamespaceSchemaLocation=&amp;quot;menyy_schema.xsd&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;pearoad&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Seapraad&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kotlett&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;42&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
  &amp;lt;/pearoad&amp;gt;&lt;br /&gt;
  &amp;lt;lisandid&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Riis&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;7&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;kartul&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
  &amp;lt;/lisandid&amp;gt;&lt;br /&gt;
  &amp;lt;joogid&amp;gt;&lt;br /&gt;
    &amp;lt;soojad&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Kohv&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Tee&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;15&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
    &amp;lt;/soojad&amp;gt;&lt;br /&gt;
    &amp;lt;kylmad&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Morss&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Vesi&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;3&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
    &amp;lt;/kylmad&amp;gt;&lt;br /&gt;
  &amp;lt;/joogid&amp;gt;&lt;br /&gt;
  &amp;lt;magustoidud&amp;gt;&lt;br /&gt;
    &amp;lt;magustoit&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kisell&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;14&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/magustoit&amp;gt;&lt;br /&gt;
  &amp;lt;/magustoidud&amp;gt;&lt;br /&gt;
&amp;lt;/menyy&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT andmete kuvamiseks html-ina ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;!--&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;style.css&amp;quot; /&amp;gt;--&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;font-color: #D0D0D0;font-family:verdana;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Menüü&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#77a1af;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Pearoad&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;                 &lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/pearoad/pearoog&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c08e1d;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Lisandid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/lisandid/lisand&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c47121;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Kuumad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/soojad/soe&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#b03428;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Külmad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/kylmad/kylm&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#862419;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Magustoidud&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/magustoidud/magustoit&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT atribuutide tegemiseks elementidest ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot; version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;*[*]&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:when test=&amp;quot;not(@*)&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;not(*) and not(@*) &amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;{local-name(.)}&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML schema ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- definition of simple elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;nimi&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;hind&amp;quot; type=&amp;quot;xs:decimal&amp;quot;/&amp;gt;    &lt;br /&gt;
  &amp;lt;!-- definition of complex elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;menyy&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;pearoad&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;lisandid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;joogid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;magustoidud&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoog&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisandid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
	         &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisand&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;joogid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soojad&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylmad&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soojad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
	        &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylmad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylm&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soe&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoidud&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;magustoit&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoit&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10314</id>
		<title>Meeskond &quot;näljased&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10314"/>
		<updated>2010-05-18T13:01:44Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: /* XML schema */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1. XML ==&lt;br /&gt;
XML-i tegime menüü kohta. XSLT faile on kaks: üks teeb XML-i HTML-i ning teine vahetab elementide ja atribuutide kohtad. XML faili kohta on olemas ka kirjeldav schema. Raskeimaks osaks oli elementidest atribuutide tegemine, asi küll toimis, kuid vormistus oli kole ning auklik. Schema vajas ka veidi harjumist, kuid kui asi käppa sai, siis läks imelihtsaks. &lt;br /&gt;
[[Media:XML]]&lt;br /&gt;
&lt;br /&gt;
== 2. Teenus ==&lt;br /&gt;
2.1&lt;br /&gt;
&#039;&#039;&#039;Teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:   &lt;br /&gt;
*Kasutajagrupid:Hetkel on 3 kasutajagruppi: admin (saab teha kõike), müüja (saab teha kõike peale kasutajate ja kasutajagruppide loomise) ning tavakasutajad. On olemas eraldi funktsioon ka kasutajagruppide loomiseks. Iga meetodi käivitamisel kontrollitakse kasutajaõigusi. Ühel kasutajal saab olla mitu kasutajagruppi.           &lt;br /&gt;
*Kasutajad. Kasutajate loomiseks on 2 funktsiooni: üks tavakasutajate tegemiseks, mis ei eelda sisselogimist ning teine, mida saab teostada vaid administraator (ja lisada müüjaid või teisi administraatoreid). Kasutajate loomisel kontrollitakse seda, kas kasutajanimi on juba kasutusel. Kasutaja id ning roll sisestatakse ka tabelisse kasutajaRollis, mis näitab kasutajatel olevaid rolle. Kasutajate kustutamine käib otse andmebaasist. Kasutaja loomisel salvestatakse andmebaasi kasutaja parool hashitud kujul (algoritmiks sha1)        &lt;br /&gt;
*Tooted. Kasutajatel (hetkel müüjal) on võimalus lisada ja kustutada tooteid toodete kategooriaid, hindu jms.          &lt;br /&gt;
*Sessioonid. Kasutaja edukal sisselogimisel luuakse unikaalne juhuslik sessiooni võti, mille olemasolu kontrollitakse iga sisselogimist eeldava meetodi käivitamisel. Session_key salvestatakse andmebaasis vastavas väljas. Eraldi on funktsioonid sessiooni olemasolu kontrollimiseks ning uuendamiseks. Hetkel on timeoudiks 10 minutit. Sessiooni kehtivust kontrollitakse ka kasutajaõiguste kontrollimisel.       &lt;br /&gt;
* Logimine. Võrreldakse sisestatud kasjutajanime ning sisestatud parooli hashi andmebaasis olevatega. Kui need ühtivad, siis sisselogimine on edukas ning luuakse unikaalne session key, mis salvestatakse andmebaasi. Sisselogimine ning sessiooni olemasolu on eelduseks meetodite käivitamiseks. Kui sessioon aegub, siis toimub kasutaja väljalogimine. Väljalogimisfunktsioon kirjutab üle sessiooni aegumise aja, pannes selleks hetkelise kellaaja.  &lt;br /&gt;
Lisaks on veel hunnik abifunktsioone, näiteks parooli hashimine, väärtuste tagastamine jms. &lt;br /&gt;
   &lt;br /&gt;
Klient on kirjutatud WPF-is ning hetkel on võimalik kuvada tooteid, kasutajaid, gruppe ning kasutajagruppe.&lt;br /&gt;
&lt;br /&gt;
2.2&lt;br /&gt;
&#039;&#039;&#039;Menüü teenuse klient&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et meie tore teenus oleks veidi rohkem käega katsutavam, sai külge tehtud ka klient, mis realiseeriks põhifunktsioone. Kliendiks on WPF rakendus ning funktsionaalsus on järgmine:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sisse logimine&#039;&#039;&#039;: rakenduse käivitamisel ahistatakse kasutajat sisselogimisaknaga, valede andmete korral saab kasutaja ilusa punase veateate. Õnnestumise korral genereeritakse sessioonivõti, ning kantakse teda pidevalt edasi.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Toodete kuvamine,lisamine, kustutamine&#039;&#039;&#039;: kuvatakse väike popup, kus hunnik lahtreid ning kasutaja saab neid täites lisada toote. ID alusel saab kustutada ebasoovitava toote. Õnnestumisel või ebaõnnestumisel kuvatakse muidugi veateade.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kategooriate kuvamine, lisamine, kustutamine&#039;&#039;&#039;: iga toit tuleb paigutada kategooriasse, siin on koht kus neid luua saab. ID alusel jällegi kustutamine.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutajate kuvamine, lisamine&#039;&#039;&#039;: siin kuvatakse kõik süsteemis olevad kasutajad, ning toimub ka lisamine&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutaja gruppide kuvamine (kustutamine)&#039;&#039;&#039;: kuvatakse kehtivad kasutaja grupid, meetod ka kustutamiseks&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Pildid&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/rakendus_login.png Login Aken]&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/klient_ba.png BackEnd]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Klient&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/VR2__Menyy.rar Source]&lt;br /&gt;
&lt;br /&gt;
== 3. Flickr API ==&lt;br /&gt;
[http://i40.tinypic.com/k3r90i.png Pilt]&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:&lt;br /&gt;
*&#039;&#039;&#039;Pildiotsing&#039;&#039;&#039;: Kasutajal on võimalus otsida otsingusõna järgi pilte Flickri pildibaasist. Pilte otsitakse kasutajate galeriidest, pildikomplektidest ja niisama üles laetud piltidest, mis on &#039;&#039;publicud&#039;&#039; ehk avalikud. Kui kasutaja sisestab vähem kui 2 tähte, kuvatakse veateade. See on Flickri poolt samuti kinni keeratud, et ühetähe otsinguid ei teostataks. Üldjoontes ei oleks sellel ka mingisugust mõtet. Otsingusõna sisestamisel kuvatakse paremale aknasse 5 pildi &#039;&#039;thumbnaili&#039;&#039;, mis on kõige värskemad. &#039;&#039;Thumbnailidest&#039;&#039; vasakul all nurgas kuvatakse, mitu lehekülge pilte leiti ja mitmendal leheküljel parasjagu ollakse. Olles esimesel lehel ja/või teostades esimest otsingut, nuppu &amp;quot;eelmine&amp;quot; ei kuvata. Seejärel saab kasutaja hakata navigeerima lehekülgedel &amp;quot;eelmine&amp;quot; ja &amp;quot;järgmine&amp;quot; nuppudega. Valides thumbnaili välja ja klikkides selle peale, kuvatakse pilt suurena, laiusega 380 pikslit ja kõrgusega 380 pikslit. Kui suur pilt on kuvatud, avaneb ka võimalus vajutada nuppu &amp;quot;Ava kasutaja profiil&amp;quot;. Sellega pääseb API kasutaja ligi suure pildi kasutaja profiilile. See on sobilik näiteks kui API kasutajale hakkas huvi pakkuma pildi üles laadinud kasutaja, ning soovib tema teisigi pilte sirvida.&lt;br /&gt;
*&#039;&#039;&#039;Inimese otsing&#039;&#039;&#039;: Kasutajal on võimalus otsida emaili järgi Flickri kasutajaid. Otsingulahtrisse mitte millegi sisestamisel või jättes sisestamata &amp;quot;@&amp;quot; sümbol, kuvatakse veateade. Vastasel korral kuvatakse kas kasutaja Flickri kasutajanimi, pärisnimi (kui see on tal määratud) ja tema profiili URL. Kui kasutaja on leitud, kuvatakse ka nuppu &amp;quot;Ava veebisait&amp;quot;, millega pääseb kasutaja ligi ka tema profiilile, kirjutamata ise midagi veebibrauseri aknasse. Kui kasutajat ei leitud, antakse ka vastav veateade.&lt;br /&gt;
*&#039;&#039;&#039;Fotokomplektide kuvamine&#039;&#039;&#039;: Kasutaja saab vaadata oma fotokomplekte. Selleks tuleb kõigepealt vastava nupuga omandad &#039;&#039;frob&#039;&#039;, mis on Flickri API ajutine kood (kehtib ühe tunni). Kui &#039;&#039;frob&#039;&#039; on omandatud, avaneb kasutajale nupp &amp;quot;omanda token&amp;quot;. &#039;&#039;Tokeniga&#039;&#039; on Flickri poolne frobi teisendus &#039;&#039;tokeniks&#039;&#039;, mida kasutatakse edaspidi kasutaja identifitseerimiseks. Kui &#039;&#039;token&#039;&#039; on omandatud, kuvatakse teade &amp;quot;token omandatud&amp;quot; või vastasel juhul &amp;quot;token omandamata&amp;quot;. Seejärel ilmub nähtavale nupp &amp;quot;tiri fotosetid&amp;quot;. Sellele klikkides kuvatakse thumbnailidena kasutaja fotokomplektid.&lt;br /&gt;
*&#039;&#039;&#039;Piltide üleslaadimine&#039;&#039;&#039;: Kõigepealt tuleb omandada &#039;&#039;frob&#039;&#039; ja &#039;&#039;token&#039;&#039;, nagu eelnevas punktis kirjeldatud. Seejärel saab kasutaja üles laadida oma pilte arvutist &#039;&#039;OpenFileDialogi&#039;&#039; abil. Seejärel saab sisestada pildile tiitli ehk nime, kirjelduse ja &#039;&#039;tagi&#039;&#039;, mida aga ei pea tegema (Flickr samuti ei nõua nende atribuutide olemasolu). Olles salvestanud atribuudid ilmneb nupp &amp;quot;lae üles&amp;quot;. Sellele vajutades laetakse pilt kasutaja üldpiltide sekka üles.&lt;br /&gt;
&lt;br /&gt;
Klient, installer ja lähtekood:&lt;br /&gt;
[http://enos.itcollege.ee/~jhannus/VRII/FlickrWPF.zip Download]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;XSLTFile1.xslt&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;toAttribute2.xslt&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;menyy xmlns:xsi =&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
       xsi:noNamespaceSchemaLocation=&amp;quot;menyy_schema.xsd&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;pearoad&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Seapraad&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kotlett&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;42&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
  &amp;lt;/pearoad&amp;gt;&lt;br /&gt;
  &amp;lt;lisandid&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Riis&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;7&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;kartul&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
  &amp;lt;/lisandid&amp;gt;&lt;br /&gt;
  &amp;lt;joogid&amp;gt;&lt;br /&gt;
    &amp;lt;soojad&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Kohv&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Tee&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;15&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
    &amp;lt;/soojad&amp;gt;&lt;br /&gt;
    &amp;lt;kylmad&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Morss&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Vesi&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;3&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
    &amp;lt;/kylmad&amp;gt;&lt;br /&gt;
  &amp;lt;/joogid&amp;gt;&lt;br /&gt;
  &amp;lt;magustoidud&amp;gt;&lt;br /&gt;
    &amp;lt;magustoit&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kisell&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;14&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/magustoit&amp;gt;&lt;br /&gt;
  &amp;lt;/magustoidud&amp;gt;&lt;br /&gt;
&amp;lt;/menyy&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XSLT andmete kuvamiseks html-ina ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;!--&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;style.css&amp;quot; /&amp;gt;--&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;font-color: #D0D0D0;font-family:verdana;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Menüü&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#77a1af;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Pearoad&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;                 &lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/pearoad/pearoog&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c08e1d;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Lisandid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/lisandid/lisand&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c47121;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Kuumad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/soojad/soe&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#b03428;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Külmad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/kylmad/kylm&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#862419;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Magustoidud&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/magustoidud/magustoit&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT atribuutide tegemiseks elementidest ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot; version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;*[*]&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:when test=&amp;quot;not(@*)&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;not(*) and not(@*) &amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;{local-name(.)}&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML schema ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- definition of simple elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;nimi&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;hind&amp;quot; type=&amp;quot;xs:decimal&amp;quot;/&amp;gt;    &lt;br /&gt;
  &amp;lt;!-- definition of complex elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;menyy&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;pearoad&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;lisandid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;joogid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;magustoidud&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoog&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisandid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
	         &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisand&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;joogid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soojad&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylmad&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soojad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
	        &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylmad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylm&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soe&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoidud&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;magustoit&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoit&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;    &lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10313</id>
		<title>Meeskond &quot;näljased&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10313"/>
		<updated>2010-05-18T13:00:00Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: /* XSLT andmete kuvamiseks html-ina */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1. XML ==&lt;br /&gt;
XML-i tegime menüü kohta. XSLT faile on kaks: üks teeb XML-i HTML-i ning teine vahetab elementide ja atribuutide kohtad. XML faili kohta on olemas ka kirjeldav schema. Raskeimaks osaks oli elementidest atribuutide tegemine, asi küll toimis, kuid vormistus oli kole ning auklik. Schema vajas ka veidi harjumist, kuid kui asi käppa sai, siis läks imelihtsaks. &lt;br /&gt;
[[Media:XML]]&lt;br /&gt;
&lt;br /&gt;
== 2. Teenus ==&lt;br /&gt;
2.1&lt;br /&gt;
&#039;&#039;&#039;Teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:   &lt;br /&gt;
*Kasutajagrupid:Hetkel on 3 kasutajagruppi: admin (saab teha kõike), müüja (saab teha kõike peale kasutajate ja kasutajagruppide loomise) ning tavakasutajad. On olemas eraldi funktsioon ka kasutajagruppide loomiseks. Iga meetodi käivitamisel kontrollitakse kasutajaõigusi. Ühel kasutajal saab olla mitu kasutajagruppi.           &lt;br /&gt;
*Kasutajad. Kasutajate loomiseks on 2 funktsiooni: üks tavakasutajate tegemiseks, mis ei eelda sisselogimist ning teine, mida saab teostada vaid administraator (ja lisada müüjaid või teisi administraatoreid). Kasutajate loomisel kontrollitakse seda, kas kasutajanimi on juba kasutusel. Kasutaja id ning roll sisestatakse ka tabelisse kasutajaRollis, mis näitab kasutajatel olevaid rolle. Kasutajate kustutamine käib otse andmebaasist. Kasutaja loomisel salvestatakse andmebaasi kasutaja parool hashitud kujul (algoritmiks sha1)        &lt;br /&gt;
*Tooted. Kasutajatel (hetkel müüjal) on võimalus lisada ja kustutada tooteid toodete kategooriaid, hindu jms.          &lt;br /&gt;
*Sessioonid. Kasutaja edukal sisselogimisel luuakse unikaalne juhuslik sessiooni võti, mille olemasolu kontrollitakse iga sisselogimist eeldava meetodi käivitamisel. Session_key salvestatakse andmebaasis vastavas väljas. Eraldi on funktsioonid sessiooni olemasolu kontrollimiseks ning uuendamiseks. Hetkel on timeoudiks 10 minutit. Sessiooni kehtivust kontrollitakse ka kasutajaõiguste kontrollimisel.       &lt;br /&gt;
* Logimine. Võrreldakse sisestatud kasjutajanime ning sisestatud parooli hashi andmebaasis olevatega. Kui need ühtivad, siis sisselogimine on edukas ning luuakse unikaalne session key, mis salvestatakse andmebaasi. Sisselogimine ning sessiooni olemasolu on eelduseks meetodite käivitamiseks. Kui sessioon aegub, siis toimub kasutaja väljalogimine. Väljalogimisfunktsioon kirjutab üle sessiooni aegumise aja, pannes selleks hetkelise kellaaja.  &lt;br /&gt;
Lisaks on veel hunnik abifunktsioone, näiteks parooli hashimine, väärtuste tagastamine jms. &lt;br /&gt;
   &lt;br /&gt;
Klient on kirjutatud WPF-is ning hetkel on võimalik kuvada tooteid, kasutajaid, gruppe ning kasutajagruppe.&lt;br /&gt;
&lt;br /&gt;
2.2&lt;br /&gt;
&#039;&#039;&#039;Menüü teenuse klient&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et meie tore teenus oleks veidi rohkem käega katsutavam, sai külge tehtud ka klient, mis realiseeriks põhifunktsioone. Kliendiks on WPF rakendus ning funktsionaalsus on järgmine:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sisse logimine&#039;&#039;&#039;: rakenduse käivitamisel ahistatakse kasutajat sisselogimisaknaga, valede andmete korral saab kasutaja ilusa punase veateate. Õnnestumise korral genereeritakse sessioonivõti, ning kantakse teda pidevalt edasi.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Toodete kuvamine,lisamine, kustutamine&#039;&#039;&#039;: kuvatakse väike popup, kus hunnik lahtreid ning kasutaja saab neid täites lisada toote. ID alusel saab kustutada ebasoovitava toote. Õnnestumisel või ebaõnnestumisel kuvatakse muidugi veateade.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kategooriate kuvamine, lisamine, kustutamine&#039;&#039;&#039;: iga toit tuleb paigutada kategooriasse, siin on koht kus neid luua saab. ID alusel jällegi kustutamine.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutajate kuvamine, lisamine&#039;&#039;&#039;: siin kuvatakse kõik süsteemis olevad kasutajad, ning toimub ka lisamine&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutaja gruppide kuvamine (kustutamine)&#039;&#039;&#039;: kuvatakse kehtivad kasutaja grupid, meetod ka kustutamiseks&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Pildid&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/rakendus_login.png Login Aken]&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/klient_ba.png BackEnd]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Klient&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/VR2__Menyy.rar Source]&lt;br /&gt;
&lt;br /&gt;
== 3. Flickr API ==&lt;br /&gt;
[http://i40.tinypic.com/k3r90i.png Pilt]&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:&lt;br /&gt;
*&#039;&#039;&#039;Pildiotsing&#039;&#039;&#039;: Kasutajal on võimalus otsida otsingusõna järgi pilte Flickri pildibaasist. Pilte otsitakse kasutajate galeriidest, pildikomplektidest ja niisama üles laetud piltidest, mis on &#039;&#039;publicud&#039;&#039; ehk avalikud. Kui kasutaja sisestab vähem kui 2 tähte, kuvatakse veateade. See on Flickri poolt samuti kinni keeratud, et ühetähe otsinguid ei teostataks. Üldjoontes ei oleks sellel ka mingisugust mõtet. Otsingusõna sisestamisel kuvatakse paremale aknasse 5 pildi &#039;&#039;thumbnaili&#039;&#039;, mis on kõige värskemad. &#039;&#039;Thumbnailidest&#039;&#039; vasakul all nurgas kuvatakse, mitu lehekülge pilte leiti ja mitmendal leheküljel parasjagu ollakse. Olles esimesel lehel ja/või teostades esimest otsingut, nuppu &amp;quot;eelmine&amp;quot; ei kuvata. Seejärel saab kasutaja hakata navigeerima lehekülgedel &amp;quot;eelmine&amp;quot; ja &amp;quot;järgmine&amp;quot; nuppudega. Valides thumbnaili välja ja klikkides selle peale, kuvatakse pilt suurena, laiusega 380 pikslit ja kõrgusega 380 pikslit. Kui suur pilt on kuvatud, avaneb ka võimalus vajutada nuppu &amp;quot;Ava kasutaja profiil&amp;quot;. Sellega pääseb API kasutaja ligi suure pildi kasutaja profiilile. See on sobilik näiteks kui API kasutajale hakkas huvi pakkuma pildi üles laadinud kasutaja, ning soovib tema teisigi pilte sirvida.&lt;br /&gt;
*&#039;&#039;&#039;Inimese otsing&#039;&#039;&#039;: Kasutajal on võimalus otsida emaili järgi Flickri kasutajaid. Otsingulahtrisse mitte millegi sisestamisel või jättes sisestamata &amp;quot;@&amp;quot; sümbol, kuvatakse veateade. Vastasel korral kuvatakse kas kasutaja Flickri kasutajanimi, pärisnimi (kui see on tal määratud) ja tema profiili URL. Kui kasutaja on leitud, kuvatakse ka nuppu &amp;quot;Ava veebisait&amp;quot;, millega pääseb kasutaja ligi ka tema profiilile, kirjutamata ise midagi veebibrauseri aknasse. Kui kasutajat ei leitud, antakse ka vastav veateade.&lt;br /&gt;
*&#039;&#039;&#039;Fotokomplektide kuvamine&#039;&#039;&#039;: Kasutaja saab vaadata oma fotokomplekte. Selleks tuleb kõigepealt vastava nupuga omandad &#039;&#039;frob&#039;&#039;, mis on Flickri API ajutine kood (kehtib ühe tunni). Kui &#039;&#039;frob&#039;&#039; on omandatud, avaneb kasutajale nupp &amp;quot;omanda token&amp;quot;. &#039;&#039;Tokeniga&#039;&#039; on Flickri poolne frobi teisendus &#039;&#039;tokeniks&#039;&#039;, mida kasutatakse edaspidi kasutaja identifitseerimiseks. Kui &#039;&#039;token&#039;&#039; on omandatud, kuvatakse teade &amp;quot;token omandatud&amp;quot; või vastasel juhul &amp;quot;token omandamata&amp;quot;. Seejärel ilmub nähtavale nupp &amp;quot;tiri fotosetid&amp;quot;. Sellele klikkides kuvatakse thumbnailidena kasutaja fotokomplektid.&lt;br /&gt;
*&#039;&#039;&#039;Piltide üleslaadimine&#039;&#039;&#039;: Kõigepealt tuleb omandada &#039;&#039;frob&#039;&#039; ja &#039;&#039;token&#039;&#039;, nagu eelnevas punktis kirjeldatud. Seejärel saab kasutaja üles laadida oma pilte arvutist &#039;&#039;OpenFileDialogi&#039;&#039; abil. Seejärel saab sisestada pildile tiitli ehk nime, kirjelduse ja &#039;&#039;tagi&#039;&#039;, mida aga ei pea tegema (Flickr samuti ei nõua nende atribuutide olemasolu). Olles salvestanud atribuudid ilmneb nupp &amp;quot;lae üles&amp;quot;. Sellele vajutades laetakse pilt kasutaja üldpiltide sekka üles.&lt;br /&gt;
&lt;br /&gt;
Klient, installer ja lähtekood:&lt;br /&gt;
[http://enos.itcollege.ee/~jhannus/VRII/FlickrWPF.zip Download]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;XSLTFile1.xslt&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;toAttribute2.xslt&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;menyy xmlns:xsi =&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
       xsi:noNamespaceSchemaLocation=&amp;quot;menyy_schema.xsd&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;pearoad&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Seapraad&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kotlett&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;42&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
  &amp;lt;/pearoad&amp;gt;&lt;br /&gt;
  &amp;lt;lisandid&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Riis&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;7&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;kartul&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
  &amp;lt;/lisandid&amp;gt;&lt;br /&gt;
  &amp;lt;joogid&amp;gt;&lt;br /&gt;
    &amp;lt;soojad&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Kohv&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Tee&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;15&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
    &amp;lt;/soojad&amp;gt;&lt;br /&gt;
    &amp;lt;kylmad&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Morss&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Vesi&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;3&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
    &amp;lt;/kylmad&amp;gt;&lt;br /&gt;
  &amp;lt;/joogid&amp;gt;&lt;br /&gt;
  &amp;lt;magustoidud&amp;gt;&lt;br /&gt;
    &amp;lt;magustoit&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kisell&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;14&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/magustoit&amp;gt;&lt;br /&gt;
  &amp;lt;/magustoidud&amp;gt;&lt;br /&gt;
&amp;lt;/menyy&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XSLT andmete kuvamiseks html-ina ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;!--&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;style.css&amp;quot; /&amp;gt;--&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;font-color: #D0D0D0;font-family:verdana;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Menüü&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#77a1af;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Pearoad&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;                 &lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/pearoad/pearoog&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c08e1d;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Lisandid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/lisandid/lisand&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c47121;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Kuumad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/soojad/soe&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#b03428;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Külmad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/kylmad/kylm&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#862419;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Magustoidud&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/magustoidud/magustoit&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT atribuutide tegemiseks elementidest ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot; version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;*[*]&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:when test=&amp;quot;not(@*)&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;not(*) and not(@*) &amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;{local-name(.)}&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML schema ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;!-- definition of simple elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;nimi&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;hind&amp;quot; type=&amp;quot;xs:decimal&amp;quot;/&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;!-- definition of complex elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;menyy&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;pearoad&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;lisandid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;joogid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;magustoidud&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoog&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisandid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
				  &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisand&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;joogid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soojad&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylmad&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soojad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylmad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylm&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soe&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoidud&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;magustoit&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoit&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10312</id>
		<title>Meeskond &quot;näljased&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10312"/>
		<updated>2010-05-18T12:58:15Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1. XML ==&lt;br /&gt;
XML-i tegime menüü kohta. XSLT faile on kaks: üks teeb XML-i HTML-i ning teine vahetab elementide ja atribuutide kohtad. XML faili kohta on olemas ka kirjeldav schema. Raskeimaks osaks oli elementidest atribuutide tegemine, asi küll toimis, kuid vormistus oli kole ning auklik. Schema vajas ka veidi harjumist, kuid kui asi käppa sai, siis läks imelihtsaks. &lt;br /&gt;
[[Media:XML]]&lt;br /&gt;
&lt;br /&gt;
== 2. Teenus ==&lt;br /&gt;
2.1&lt;br /&gt;
&#039;&#039;&#039;Teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:   &lt;br /&gt;
*Kasutajagrupid:Hetkel on 3 kasutajagruppi: admin (saab teha kõike), müüja (saab teha kõike peale kasutajate ja kasutajagruppide loomise) ning tavakasutajad. On olemas eraldi funktsioon ka kasutajagruppide loomiseks. Iga meetodi käivitamisel kontrollitakse kasutajaõigusi. Ühel kasutajal saab olla mitu kasutajagruppi.           &lt;br /&gt;
*Kasutajad. Kasutajate loomiseks on 2 funktsiooni: üks tavakasutajate tegemiseks, mis ei eelda sisselogimist ning teine, mida saab teostada vaid administraator (ja lisada müüjaid või teisi administraatoreid). Kasutajate loomisel kontrollitakse seda, kas kasutajanimi on juba kasutusel. Kasutaja id ning roll sisestatakse ka tabelisse kasutajaRollis, mis näitab kasutajatel olevaid rolle. Kasutajate kustutamine käib otse andmebaasist. Kasutaja loomisel salvestatakse andmebaasi kasutaja parool hashitud kujul (algoritmiks sha1)        &lt;br /&gt;
*Tooted. Kasutajatel (hetkel müüjal) on võimalus lisada ja kustutada tooteid toodete kategooriaid, hindu jms.          &lt;br /&gt;
*Sessioonid. Kasutaja edukal sisselogimisel luuakse unikaalne juhuslik sessiooni võti, mille olemasolu kontrollitakse iga sisselogimist eeldava meetodi käivitamisel. Session_key salvestatakse andmebaasis vastavas väljas. Eraldi on funktsioonid sessiooni olemasolu kontrollimiseks ning uuendamiseks. Hetkel on timeoudiks 10 minutit. Sessiooni kehtivust kontrollitakse ka kasutajaõiguste kontrollimisel.       &lt;br /&gt;
* Logimine. Võrreldakse sisestatud kasjutajanime ning sisestatud parooli hashi andmebaasis olevatega. Kui need ühtivad, siis sisselogimine on edukas ning luuakse unikaalne session key, mis salvestatakse andmebaasi. Sisselogimine ning sessiooni olemasolu on eelduseks meetodite käivitamiseks. Kui sessioon aegub, siis toimub kasutaja väljalogimine. Väljalogimisfunktsioon kirjutab üle sessiooni aegumise aja, pannes selleks hetkelise kellaaja.  &lt;br /&gt;
Lisaks on veel hunnik abifunktsioone, näiteks parooli hashimine, väärtuste tagastamine jms. &lt;br /&gt;
   &lt;br /&gt;
Klient on kirjutatud WPF-is ning hetkel on võimalik kuvada tooteid, kasutajaid, gruppe ning kasutajagruppe.&lt;br /&gt;
&lt;br /&gt;
2.2&lt;br /&gt;
&#039;&#039;&#039;Menüü teenuse klient&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et meie tore teenus oleks veidi rohkem käega katsutavam, sai külge tehtud ka klient, mis realiseeriks põhifunktsioone. Kliendiks on WPF rakendus ning funktsionaalsus on järgmine:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sisse logimine&#039;&#039;&#039;: rakenduse käivitamisel ahistatakse kasutajat sisselogimisaknaga, valede andmete korral saab kasutaja ilusa punase veateate. Õnnestumise korral genereeritakse sessioonivõti, ning kantakse teda pidevalt edasi.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Toodete kuvamine,lisamine, kustutamine&#039;&#039;&#039;: kuvatakse väike popup, kus hunnik lahtreid ning kasutaja saab neid täites lisada toote. ID alusel saab kustutada ebasoovitava toote. Õnnestumisel või ebaõnnestumisel kuvatakse muidugi veateade.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kategooriate kuvamine, lisamine, kustutamine&#039;&#039;&#039;: iga toit tuleb paigutada kategooriasse, siin on koht kus neid luua saab. ID alusel jällegi kustutamine.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutajate kuvamine, lisamine&#039;&#039;&#039;: siin kuvatakse kõik süsteemis olevad kasutajad, ning toimub ka lisamine&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kasutaja gruppide kuvamine (kustutamine)&#039;&#039;&#039;: kuvatakse kehtivad kasutaja grupid, meetod ka kustutamiseks&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Pildid&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/rakendus_login.png Login Aken]&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/klient_ba.png BackEnd]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Klient&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~hkarask/VR2/VR2__Menyy.rar Source]&lt;br /&gt;
&lt;br /&gt;
== 3. Flickr API ==&lt;br /&gt;
[http://i40.tinypic.com/k3r90i.png Pilt]&lt;br /&gt;
&lt;br /&gt;
Võimalused alajaotuste kaupa:&lt;br /&gt;
*&#039;&#039;&#039;Pildiotsing&#039;&#039;&#039;: Kasutajal on võimalus otsida otsingusõna järgi pilte Flickri pildibaasist. Pilte otsitakse kasutajate galeriidest, pildikomplektidest ja niisama üles laetud piltidest, mis on &#039;&#039;publicud&#039;&#039; ehk avalikud. Kui kasutaja sisestab vähem kui 2 tähte, kuvatakse veateade. See on Flickri poolt samuti kinni keeratud, et ühetähe otsinguid ei teostataks. Üldjoontes ei oleks sellel ka mingisugust mõtet. Otsingusõna sisestamisel kuvatakse paremale aknasse 5 pildi &#039;&#039;thumbnaili&#039;&#039;, mis on kõige värskemad. &#039;&#039;Thumbnailidest&#039;&#039; vasakul all nurgas kuvatakse, mitu lehekülge pilte leiti ja mitmendal leheküljel parasjagu ollakse. Olles esimesel lehel ja/või teostades esimest otsingut, nuppu &amp;quot;eelmine&amp;quot; ei kuvata. Seejärel saab kasutaja hakata navigeerima lehekülgedel &amp;quot;eelmine&amp;quot; ja &amp;quot;järgmine&amp;quot; nuppudega. Valides thumbnaili välja ja klikkides selle peale, kuvatakse pilt suurena, laiusega 380 pikslit ja kõrgusega 380 pikslit. Kui suur pilt on kuvatud, avaneb ka võimalus vajutada nuppu &amp;quot;Ava kasutaja profiil&amp;quot;. Sellega pääseb API kasutaja ligi suure pildi kasutaja profiilile. See on sobilik näiteks kui API kasutajale hakkas huvi pakkuma pildi üles laadinud kasutaja, ning soovib tema teisigi pilte sirvida.&lt;br /&gt;
*&#039;&#039;&#039;Inimese otsing&#039;&#039;&#039;: Kasutajal on võimalus otsida emaili järgi Flickri kasutajaid. Otsingulahtrisse mitte millegi sisestamisel või jättes sisestamata &amp;quot;@&amp;quot; sümbol, kuvatakse veateade. Vastasel korral kuvatakse kas kasutaja Flickri kasutajanimi, pärisnimi (kui see on tal määratud) ja tema profiili URL. Kui kasutaja on leitud, kuvatakse ka nuppu &amp;quot;Ava veebisait&amp;quot;, millega pääseb kasutaja ligi ka tema profiilile, kirjutamata ise midagi veebibrauseri aknasse. Kui kasutajat ei leitud, antakse ka vastav veateade.&lt;br /&gt;
*&#039;&#039;&#039;Fotokomplektide kuvamine&#039;&#039;&#039;: Kasutaja saab vaadata oma fotokomplekte. Selleks tuleb kõigepealt vastava nupuga omandad &#039;&#039;frob&#039;&#039;, mis on Flickri API ajutine kood (kehtib ühe tunni). Kui &#039;&#039;frob&#039;&#039; on omandatud, avaneb kasutajale nupp &amp;quot;omanda token&amp;quot;. &#039;&#039;Tokeniga&#039;&#039; on Flickri poolne frobi teisendus &#039;&#039;tokeniks&#039;&#039;, mida kasutatakse edaspidi kasutaja identifitseerimiseks. Kui &#039;&#039;token&#039;&#039; on omandatud, kuvatakse teade &amp;quot;token omandatud&amp;quot; või vastasel juhul &amp;quot;token omandamata&amp;quot;. Seejärel ilmub nähtavale nupp &amp;quot;tiri fotosetid&amp;quot;. Sellele klikkides kuvatakse thumbnailidena kasutaja fotokomplektid.&lt;br /&gt;
*&#039;&#039;&#039;Piltide üleslaadimine&#039;&#039;&#039;: Kõigepealt tuleb omandada &#039;&#039;frob&#039;&#039; ja &#039;&#039;token&#039;&#039;, nagu eelnevas punktis kirjeldatud. Seejärel saab kasutaja üles laadida oma pilte arvutist &#039;&#039;OpenFileDialogi&#039;&#039; abil. Seejärel saab sisestada pildile tiitli ehk nime, kirjelduse ja &#039;&#039;tagi&#039;&#039;, mida aga ei pea tegema (Flickr samuti ei nõua nende atribuutide olemasolu). Olles salvestanud atribuudid ilmneb nupp &amp;quot;lae üles&amp;quot;. Sellele vajutades laetakse pilt kasutaja üldpiltide sekka üles.&lt;br /&gt;
&lt;br /&gt;
Klient, installer ja lähtekood:&lt;br /&gt;
[http://enos.itcollege.ee/~jhannus/VRII/FlickrWPF.zip Download]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;XSLTFile1.xslt&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;toAttribute2.xslt&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;menyy xmlns:xsi =&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
       xsi:noNamespaceSchemaLocation=&amp;quot;menyy_schema.xsd&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;pearoad&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Seapraad&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
    &amp;lt;pearoog&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kotlett&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;42&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/pearoog&amp;gt;&lt;br /&gt;
  &amp;lt;/pearoad&amp;gt;&lt;br /&gt;
  &amp;lt;lisandid&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Riis&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;7&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
    &amp;lt;lisand&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;kartul&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/lisand&amp;gt;&lt;br /&gt;
  &amp;lt;/lisandid&amp;gt;&lt;br /&gt;
  &amp;lt;joogid&amp;gt;&lt;br /&gt;
    &amp;lt;soojad&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Kohv&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;10&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
      &amp;lt;soe&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Tee&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;15&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/soe&amp;gt;&lt;br /&gt;
    &amp;lt;/soojad&amp;gt;&lt;br /&gt;
    &amp;lt;kylmad&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Morss&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;23&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
      &amp;lt;kylm&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Vesi&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;hind&amp;gt;3&amp;lt;/hind&amp;gt;&lt;br /&gt;
      &amp;lt;/kylm&amp;gt;&lt;br /&gt;
    &amp;lt;/kylmad&amp;gt;&lt;br /&gt;
  &amp;lt;/joogid&amp;gt;&lt;br /&gt;
  &amp;lt;magustoidud&amp;gt;&lt;br /&gt;
    &amp;lt;magustoit&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Kisell&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;hind&amp;gt;14&amp;lt;/hind&amp;gt;&lt;br /&gt;
    &amp;lt;/magustoit&amp;gt;&lt;br /&gt;
  &amp;lt;/magustoidud&amp;gt;&lt;br /&gt;
&amp;lt;/menyy&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XSLT andmete kuvamiseks html-ina ==&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;!--&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;style.css&amp;quot; /&amp;gt;--&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;font-color: #D0D0D0;font-family:verdana;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Menüü&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#77a1af;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Pearoad&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;                 &lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/pearoad/pearoog&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c08e1d;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Lisandid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/lisandid/lisand&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#c47121;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Kuumad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/soojad/soe&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#b03428;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Külmad joogid&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/joogid/kylmad/kylm&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;background-color:#862419;&lt;br /&gt;
              color: white;&lt;br /&gt;
              margin: 7px;&amp;quot;&amp;gt;Magustoidud&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;400px&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;menyy/magustoidud/magustoit&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;tr &amp;gt;&lt;br /&gt;
              &amp;lt;td width=&amp;quot;250px&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:element name=&amp;quot;br&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XSLT atribuutide tegemiseks elementidest ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot; version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;*[*]&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:when test=&amp;quot;not(@*)&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;not(*) and not(@*) &amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;{local-name(.)}&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML schema ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;!-- definition of simple elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;nimi&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;hind&amp;quot; type=&amp;quot;xs:decimal&amp;quot;/&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;!-- definition of complex elements --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;menyy&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;pearoad&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;lisandid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;joogid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element ref=&amp;quot;magustoidud&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;pearoog&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pearoog&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisandid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
				  &amp;lt;xs:element ref=&amp;quot;lisand&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;lisand&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;joogid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soojad&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylmad&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soojad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;xs:element ref=&amp;quot;soe&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylmad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;xs:element ref=&amp;quot;kylm&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kylm&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;soe&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoidud&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;magustoit&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;magustoit&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xs:element ref=&amp;quot;hind&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10232</id>
		<title>Meeskond &quot;näljased&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22n%C3%A4ljased%22&amp;diff=10232"/>
		<updated>2010-05-17T12:09:48Z</updated>

		<summary type="html">&lt;p&gt;Ljogiste: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;kokkuvõte meie tööst (täpsem kirjeldus kõige kohta on olemas meie blogis):&lt;br /&gt;
&lt;br /&gt;
1. XML-i tegime menüü kohta. XSLT faile on kaks: üks teeb XML-i HTML-i ning teine vahetab elementide ja atribuutide kohtad. XML faili kohta on olemas ka kirjeldav schema. Raskeimaks osaks oli elementidest atribuutide tegemine, asi küll toimis, kuid vormistus oli kole ning auklik. Schema vajas ka veidi harjumist, kuid kui asi käppa sai, siis läks imelihtsaks. &lt;br /&gt;
[[Media:XML]]&lt;br /&gt;
&lt;br /&gt;
2. Teenuseks on menüü. Võimalused alajaotuste kaupa:   &lt;br /&gt;
*Kasutajagrupid:Hetkel on 3 kasutajagruppi: admin (saab teha kõike), müüja (saab teha kõike peale kasutajate ja kasutajagruppide loomise) ning tavakasutajad. On olemas eraldi funktsioon ka kasutajagruppide loomiseks. Iga meetodi käivitamisel kontrollitakse kasutajaõigusi. Ühel kasutajal saab olla mitu kasutajagruppi.           &lt;br /&gt;
*Kasutajad. Kasutajate loomiseks on 2 funktsiooni: üks tavakasutajate tegemiseks, mis ei eelda sisselogimist ning teine, mida saab teostada vaid administraator (ja lisada müüjaid või teisi administraatoreid). Kasutajate loomisel kontrollitakse seda, kas kasutajanimi on juba kasutusel. Kasutaja id ning roll sisestatakse ka tabelisse kasutajaRollis, mis näitab kasutajatel olevaid rolle. Kasutajate kustutamine käib otse andmebaasist. Kasutaja loomisel salvestatakse andmebaasi kasutaja parool hashitud kujul (algoritmiks sha1)        &lt;br /&gt;
*Tooted. Kasutajatel (hetkel müüjal) on võimalus lisada ja kustutada tooteid toodete kategooriaid, hindu jms.          &lt;br /&gt;
*Sessioonid. Kasutaja edukal sisselogimisel luuakse unikaalne juhuslik sessiooni võti, mille olemasolu kontrollitakse iga sisselogimist eeldava meetodi käivitamisel. Session_key salvestatakse andmebaasis vastavas väljas. Eraldi on funktsioonid sessiooni olemasolu kontrollimiseks ning uuendamiseks. Hetkel on timeoudiks 10 minutit. Sessiooni kehtivust kontrollitakse ka kasutajaõiguste kontrollimisel.       &lt;br /&gt;
* Logimine. Võrreldakse sisestatud kasjutajanime ning sisestatud parooli hashi andmebaasis olevatega. Kui need ühtivad, siis sisselogimine on edukas ning luuakse unikaalne session key, mis salvestatakse andmebaasi. Sisselogimine ning sessiooni olemasolu on eelduseks meetodite käivitamiseks. Kui sessioon aegub, siis toimub kasutaja väljalogimine. Väljalogimisfunktsioon kirjutab üle sessiooni aegumise aja, pannes selleks hetkelise kellaaja.  &lt;br /&gt;
Lisaks on veel hunnik abifunktsioone, näiteks parooli hashimine, väärtuste tagastamine jms. &lt;br /&gt;
   &lt;br /&gt;
Klient on kirjutatud WPF-is ning hetkel on võimalik kuvada tooteid, kasutajaid, gruppe ning kasutajagruppe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. API-iks tegi Jürgen Flickri API, mis võimaldab otsida kasutajad emaili järgi, otsida suvalisi pilte, uploadida pilte ja vaadata oma pildisette. Rakendusel on olemas ka oma installer.&lt;/div&gt;</summary>
		<author><name>Ljogiste</name></author>
	</entry>
</feed>