<?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=Jeerik</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=Jeerik"/>
	<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php/Special:Contributions/Jeerik"/>
	<updated>2026-05-05T08:57:31Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017&amp;diff=123660</id>
		<title>Kodutöö aines &quot;Võrgurakendused II: hajussüsteemide ehitamine&quot; 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017&amp;diff=123660"/>
		<updated>2017-06-14T19:54:35Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Meeskond: PC KartKicker */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
__NOINDEX__&lt;br /&gt;
&lt;br /&gt;
=Kodutöö aines &amp;quot;Võrgurakendused II: hajussüsteemide ehitamine&amp;quot; 2017=&lt;br /&gt;
==Eesmärk==&lt;br /&gt;
Saada praktiline kogemus hajussüsteemide ehitamisest XML(SOAP) või Rest veebiteenusel ja sellele klientrakenduse loomise abil ning süvendada meeskonnatööoskust. &lt;br /&gt;
*SOAP veebiteenuse puhul eeldatakse WCF tehnoloogia kasutamist. Vanema põlvkonna ASP.NET veebiteenuse loomine ei ole lubatud, kuna seda ei toeta ka Microsoft enam tänasel päeval.&lt;br /&gt;
*REST teenuste loomisel tuleks kasutada ASP.NET Web API võimalusi.&lt;br /&gt;
&lt;br /&gt;
Kaugem eesmärk on loomulikult hinne :).&lt;br /&gt;
&lt;br /&gt;
==Reeglid==&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus&lt;br /&gt;
&lt;br /&gt;
Ühte projektimeeskonda kuulub 3..4 tudengit ning ühel teemal teostab projekti üks või mitu meeskonda. 1,2 ja viie liikmelised meeskonnad tuleks õppejõuga eraldi kooskõlastada.&lt;br /&gt;
&lt;br /&gt;
Töö käiku kajastatakse  http://wiki.itcollege.ee keskkonnas. Wikilehe täitmise eesmärke on kaks: nii on võimalik kirja panna kõik mõtted ja ideed (ning nendest jääb jälg) ning õppejõul on hiljem võimalik saada ülevaade iga projektimeeskonna liikme panusest.&lt;br /&gt;
&lt;br /&gt;
==Tähtajad==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;XML fail&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#XML_andmefail NB! Täpsem info]&lt;br /&gt;
** XML fail, stiilifail ja skeemifail peavad olema valmis ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;20. märts 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid XML-failide kohta peavad tehtud olema &#039;&#039;&#039;27. märts 2017&#039;&#039;&#039;.&lt;br /&gt;
** &#039;&#039;&#039;Meeskonnad on loonud omale enda wiki lehe, kuhu kirjeldavad meeskonna ja panevad nad üles oma tööd. Lisaks hakkavad kogunema ka sinna teiste gruppide poolt kirjutatavad retsensioonid. &amp;lt;ins&amp;gt;Meeskonnalehed lingitakse selle lehe lõppu Meeskonna pealkirja alla.&amp;lt;/ins&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Veebiteenus&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#Veebiteenus NB! Täpsem info]&lt;br /&gt;
** Veebiteenuse analüüs peab olema valmis, esitatud ja wikilehel kirjeldatud hiljemalt: &#039;&#039;&#039;17.aprill 2017&#039;&#039;&#039;&lt;br /&gt;
** Veebiteenus peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;29. mai 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid veebiteenuste kohta peavad tehtud olema &#039;&#039;&#039;08. juuni 2017&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--** Veebiteenus tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Klientrakendused&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#Klientrakendus NB! Täpsem info]&lt;br /&gt;
** Klientrakendused peavad olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;29. mai 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid klientrakenduste kohta peavad tehtud olema &#039;&#039;&#039;08. juuni 2017&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--** Klientrakendused tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--* &#039;&#039;&#039;Meeskonna kokkuvõttev aruanne&#039;&#039;&#039;&lt;br /&gt;
** Meeskonnatöö kokkuvõttev aruanne peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt 8.mai 2011&lt;br /&gt;
** Arvamused Meeskonnatöö kokkuvõtva aruande ja esitluse kohta tuleb esitada hiljemalt päev enne eksamit&lt;br /&gt;
** &#039;&#039;&#039;Meeskonna kokkuvõttev aruanne ja töö lõplik tulemus&#039;&#039;&#039; tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hindamine==&lt;br /&gt;
===Üldised kriteeriumid===&lt;br /&gt;
&lt;br /&gt;
Teostatuks loetakse projekt juhul, kui lähteülesanne on realiseeritud, lahendus on töötav, kuid esineb suuremaid vigu ning piirsituatsioonidega ei ole arvestatud.&lt;br /&gt;
&lt;br /&gt;
Maksimumtulemuse saavutamiseks peab projekt olema teostatud tehniliselt veatult ning varustatud dokumentatsiooniga, milles sisaldub  arendusprotsessi kirjeldus (peab selguma ka iga rühmaliikme panus projekti teostamisel), kasutajajuhend ning lahenduse kirjeldus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Maksimumtulemuse annab (vähemalt 4/6):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Majanduslik mõtlemine (kas loodav teenus ja rakendused oleks kasutatav ka ärilistel eesmärkidel)&lt;br /&gt;
* Mobiilrakendused &lt;br /&gt;
* AngularJS klientrakendus&lt;br /&gt;
* Kogukondade kaasamine&lt;br /&gt;
* Kasutajamugavus&lt;br /&gt;
* Läbimõeldud töökorraldus&lt;br /&gt;
* Lisavõimaluste realiseerimine (vt näidisteemad)&lt;br /&gt;
&lt;br /&gt;
===XML andmefail===&lt;br /&gt;
Ülesande täitmiseks tuleb luua XML fail andmete edastamiseks, selle XML faili skeemifail ning minimaalselt kaks sobivat XSL transformatsiooni faili loodud XML failis olevate andmete transformeerimiseks HTML formaati ja XML faili formaadi muutmiseks. Transformatsioonid peavad sisaldama midagi enamat, kui ainult üks for-each klausel. Transformatsiooni käigus peaks kasutama vajadusel parameetreid ning kindlasti ka erinevaid tingimuste kontrolle.&lt;br /&gt;
&lt;br /&gt;
XML-il peab olema vähemalt 4 loogilist dimensiooni.&lt;br /&gt;
 &amp;lt;dim1&amp;gt;&lt;br /&gt;
   &amp;lt;dim2&amp;gt;&lt;br /&gt;
     &amp;lt;dim3&amp;gt;&lt;br /&gt;
       &amp;lt;dim4&amp;gt;&lt;br /&gt;
       &amp;lt;/dim4&amp;gt;&lt;br /&gt;
     &amp;lt;/dim3&amp;gt;&lt;br /&gt;
   &amp;lt;/dim2&amp;gt;&lt;br /&gt;
 &amp;lt;/dim1&amp;gt;&lt;br /&gt;
Lisaks tuleb kasutada 3-el dimensioonil attribuute, mis one enamat, kui lihtsalt ID.&lt;br /&gt;
&lt;br /&gt;
Käesoleva ülesande käigus peab looma meeskonna ning selle wiki lehekülje&lt;br /&gt;
&lt;br /&gt;
===Veebiteenus===&lt;br /&gt;
Loodav veebiteenus peab võimaldama:&lt;br /&gt;
* Teenuse pakkumist&lt;br /&gt;
* &#039;&#039;&#039;Teenuse kasutajate tuvastamist ning haldamist&#039;&#039;&#039;&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes&lt;br /&gt;
* Teenuse poole pöördumiste arvu piiramist ja piirangute haldamist.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus peab toetama mitme kasutaja võimalust.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus tuleb luua kasutades &#039;&#039;Windows Communication Foundation&#039;&#039; või ASP.NET MVC  Web API tehnoloogiat&lt;br /&gt;
&lt;br /&gt;
Andmebaasis peab olema vähemalt 9 olemit ehk andmebaas on eeldus,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soovitav on luua teenus (FE) ja teenuse seadistamiseks ning kasutajate haldamiseks mõeldud rakendus (BE).&lt;br /&gt;
&lt;br /&gt;
===Klientrakendus===&lt;br /&gt;
Klientrakendus mõnele olemasolevale veebiteenusele, võib olla teostatud veebirakendusena, Silverlight, WPF või vormirakendusena.&lt;br /&gt;
&lt;br /&gt;
Variant1: teha klientrakendus enda loodud veebiteenusele &lt;br /&gt;
&lt;br /&gt;
Variant2: teha klientrakendus mõnele levinud veebiteenusele.&lt;br /&gt;
Näiteks: &lt;br /&gt;
* http://www.bing.com/developer&lt;br /&gt;
* http://www.flickr.com/services/api/response.soap.html&lt;br /&gt;
* http://developer.ebay.com/developercenter/windows/&lt;br /&gt;
* http://apiwiki.twitter.com/Getting-Started&lt;br /&gt;
&lt;br /&gt;
===Retsensioonid===&lt;br /&gt;
Retsensioon on üliõpilase iseseisva teadustöö kriitilise analüüsi põhjal koostatud argumenteeritud hinnang. Retsensioonis tuleb hinnata töö vastavust esitatud tingimustele, programmikoodi loetavust ning kommenteeritust, dokumentatsiooni ja kirjeldada puudusi. Retsensioonide põhjal on meeskondadel õigus oma projekte parandada enne määratud esitamistähtaja kättejõudmist.&lt;br /&gt;
&lt;br /&gt;
Retsensioon peab sisaldama minimaalselt...&lt;br /&gt;
* XML - ...200 sõna.&lt;br /&gt;
* Veebiteenus - ...600 sõna.&lt;br /&gt;
* Klientrakendus - ...600 sõna.&lt;br /&gt;
&lt;br /&gt;
Mõnelauselisest arvamusest ei piisa, kuna tegemist on grupi loodavate arvustustega, mitte individuaalsete arvustustega.&lt;br /&gt;
&lt;br /&gt;
==Konsultatsioonid==&lt;br /&gt;
 Igal projektimeeskonnal on piiramatu õigus saada õppejõu käest konsultatsiooni ja juhendamist oma&lt;br /&gt;
 töö tegemiseks, kas harjutuste ajal või pärast harjutusi ja loenguid. Eriaegade suhtes saab sõlmida&lt;br /&gt;
 õppejõuga kokkuleppeid kontaktidel&lt;br /&gt;
 mait.poska [ät] itcollege.ee või (+372 53 469 734)&lt;br /&gt;
 (teksti originaalautor Priit Raspel)&lt;br /&gt;
&lt;br /&gt;
==Kaitsmisele registreerumine==&lt;br /&gt;
Kaitsmine toimub ruumis 314 neljapäeval, 8ndal juunil peale konsultatsiooni, mis algab kell 16:00.&lt;br /&gt;
&lt;br /&gt;
*16:30 - Bob&#039;s Burgers&lt;br /&gt;
*16:45 - Redundant Rappers&lt;br /&gt;
*17:00 - ...&lt;br /&gt;
*17:15 - Ott&lt;br /&gt;
*17:30 - ..&lt;br /&gt;
*17:45 - ..&lt;br /&gt;
*18:00 - ..&lt;br /&gt;
*18:15 - ..&lt;br /&gt;
&lt;br /&gt;
kui nendest aegadest ei piisa, siis lisada aegu juurde ise 15 min tsükliga&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Reede&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*16:00 - Meeskond: QView (neljapäeval pole tiimi!)&amp;lt;br&amp;gt;&lt;br /&gt;
*16:15 - Meeskond: HelpOut&amp;lt;br&amp;gt;&lt;br /&gt;
*16:30 - Meeskond: VeebiGurmaanid &amp;lt;br&amp;gt;&lt;br /&gt;
*16:45 - &lt;br /&gt;
*17:00 - Meeskond: Blogify&lt;br /&gt;
*17:15 - Meeskond: Sense Of Direction&lt;br /&gt;
*17.30 - ??? Profit&lt;br /&gt;
*17.45 -&lt;br /&gt;
*18.00 - Meeskond: Echo (Tiimiliikmed jõuavad selleks ajaks)&lt;br /&gt;
&lt;br /&gt;
... kui nendest aegadest ei piisa, siis lisada aegu juurde ise 15 min tsükliga&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Esmaspäev&#039;&#039;&#039;&lt;br /&gt;
*08:45 - &lt;br /&gt;
*09:00 - Unnamed team&lt;br /&gt;
*09:15 - RK&lt;br /&gt;
*09:30 - Kirde sai&lt;br /&gt;
*09:45 - &lt;br /&gt;
*10:00 - ..&lt;br /&gt;
*10:15* - Falador&lt;br /&gt;
* Ott&lt;br /&gt;
* Mjart *&lt;br /&gt;
&lt;br /&gt;
..ülejäänud meeskonnad panevad nime kirja siia ning kaitsmine toimub päeva jooksul jooksvalt. Kaitsta saavad need, kellel on nimi siin kirjas&lt;br /&gt;
&lt;br /&gt;
=Teemad 2017 kevad=&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus mõnele olemasolevale või endaloodud veebiteenusele&lt;br /&gt;
&lt;br /&gt;
NB! XML andmefail ja veebiteenus ei pea olema omavahel seotud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Näidisteemad==&lt;br /&gt;
&lt;br /&gt;
===Nimede pakkumise teenus===&lt;br /&gt;
Mõte selles, et luua nimede baas, mille abil pakkuda rakenduse loojale sobiva algusega nimesid. Reaalne rakendus: &#039;&#039;autocompleter&#039;&#039; tarvis teenuse pakkumine&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua sobiva alguse järgi nimede pakkumise teenus:&lt;br /&gt;
* alates kahetähelisetest algustest pakkuda sobivad nimesid&lt;br /&gt;
* luua võimalus kasutajatel nimesid lisada&lt;br /&gt;
* luua võimalus administraatoril nimesid muuta/kustutada&lt;br /&gt;
* meeste ja naiste nimed peavad olema süsteemis eristatavad&lt;br /&gt;
* luua võimalus, mis võimaldab kuvada populaarseid nimesid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* luua võimalus, et nimi lisatakse baasi alles siis, kui administraatori õigustega inimene on selleks vastava loa andnud&lt;br /&gt;
&lt;br /&gt;
===Külastusstatistika teenus===&lt;br /&gt;
Mõte selles, et pakkuda teenust, kus kasutajal on võimalik registreerida külastused ning küsida oma külastusstatistikat.&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua külastusstatistika teenus:&lt;br /&gt;
* kasutaja saab teenuses registreerida külastusi&lt;br /&gt;
* kasutaja saab küsida külastusstatistikat päevade/kuude/kogu perioodi lõikes&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
&lt;br /&gt;
Lisavõimalused:&lt;br /&gt;
* luua võimalus registreerida alamlehtede külastusstatistikat&lt;br /&gt;
* luua võimalus külastusstatistikale lisaparameetrite lisamiseks (ip aadress, sirviku versioon jne)&lt;br /&gt;
&lt;br /&gt;
===Telefoniraamatu teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada kontakte ja nende seast otsida&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua telefoniraamatu teenus:&lt;br /&gt;
* kasutaja saab teenuses kontakte lisada ja kustutada&lt;br /&gt;
* kasutaja saab kontaktide nime/telefoninumbri jne abil otsida&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutajaid on võimalik lisada gruppidesse&lt;br /&gt;
* kasutajal on võimalik lisada vajalike kontaktandmete liike&lt;br /&gt;
* kasutajatel on võimalik jagada omavahel kontakte ja kontaktide grupper&lt;br /&gt;
&lt;br /&gt;
===RSS voogude kogumise ja uudiste kuvamise teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada talle huvipakkuvaid RSS vooge ja nendelt voogudelt uudiseid lugeda&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua RSS voogude haldusteenus:&lt;br /&gt;
* kasutaja saab teenuses RSS vooge lisada ja kustudada&lt;br /&gt;
* kasutaja saab pärida talle huvipakkuvate voogude viimaseid uudiseid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutaja saab RSS vooge vaadata eraldi või grupeeritult&lt;br /&gt;
* vooge peab puhverdama, kuna voogude lugemine võtab enamasti üsna palju aega &lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
= Meeskonnad 2017=&lt;br /&gt;
==Päevaõpe==&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Helistajad===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kristjan Tõnismäe&lt;br /&gt;
Meeskonna koduleht: [[Helistajad]]&lt;br /&gt;
&lt;br /&gt;
Retsentsioon meeskonnale: &lt;br /&gt;
&lt;br /&gt;
===Meeskond: QView===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Semjon Greef&lt;br /&gt;
* Martin Nigul&lt;br /&gt;
* Martin Nõukas&lt;br /&gt;
* Margus Muru&lt;br /&gt;
* Lisandra Noor&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: QView]]&lt;br /&gt;
&lt;br /&gt;
Retsentsioon meeskonnale: [https://wiki.itcollege.ee/index.php/User_talk:Meeskond:_VeebiGurmaanid#M.C3.A4rkused: VeebiGurmaanid]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Redundant Rappers===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Taavi Kliss&lt;br /&gt;
*Kertu Nurmberg&lt;br /&gt;
*Anneli Asser&lt;br /&gt;
*Mart-Erki Nõumees&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: Redundant Rappers]]&lt;br /&gt;
&lt;br /&gt;
Meeskonna XML/XSD/XSLT : [https://wiki.itcollege.ee/index.php/Meeskond:_Redundant_Rappers#XML_.2F_XSD_.2F_XSLT]&lt;br /&gt;
&lt;br /&gt;
Meeskonna lõpptoode: [http://enos.itcollege.ee/~tkliss/VRII/ RedRap].&lt;br /&gt;
&lt;br /&gt;
Meeskonna retsensioon meeskonnale Sense Of Direction: [https://wiki.itcollege.ee/index.php/Talk:Sense_Of_Direction]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Sense Of Direction===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Ilja Andrejev&lt;br /&gt;
*Aleksandr Babõkin&lt;br /&gt;
*Vladislav Lahtarin&lt;br /&gt;
*Vladislav Kovaltšuk&lt;br /&gt;
Meeskonna koduleht: [[Sense Of Direction]]&amp;lt;br&amp;gt;&lt;br /&gt;
XML/XSD/XSLT osa asub [https://wiki.itcollege.ee/index.php/Sense_Of_Direction#XML siin]&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon XML-failide kohta meeskonnale &amp;quot;Poly&amp;quot; asub [https://wiki.itcollege.ee/index.php/Sense_Of_Direction#Retsensioon_XML-failide_kohta_meeskonnale_.22Poly.22 siin]&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon meeskonna &amp;quot;Bob&#039;s Burgers&amp;quot; veebi- ja klienrakendusele asub [https://wiki.itcollege.ee/index.php/Sense_Of_Direction#.22Bob.27s_Burgers.22_veebiteenuse_ja_klientrakenduse_retsensioon siin]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/RK Meeskond: RK]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Raido Kivinurm&lt;br /&gt;
&lt;br /&gt;
Esimene osa: [https://wiki.itcollege.ee/index.php/RK#XML XML] / [https://wiki.itcollege.ee/index.php/RK#XSD XSD] / [https://wiki.itcollege.ee/index.php/RK#XSLT_HTML XSLT HTML] / [https://wiki.itcollege.ee/index.php/RK#XSLT_XML XSLT XML]&lt;br /&gt;
&amp;lt;BR&amp;gt; [https://wiki.itcollege.ee/index.php/RK#Retsensioonid Retsensioonid]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Team_Echo Meeskond: Echo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Vajak&lt;br /&gt;
* Janno Oolo&lt;br /&gt;
* Mari-Liis Oldja&lt;br /&gt;
* Arti Zirk&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Team_Echo#XML XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Meeskond:_Redundant_Rappers#Retsensioon_Team_Echo_poolt Retsensioon meeskonnale Redundant Rappers]&lt;br /&gt;
&lt;br /&gt;
Kood V1: [https://www.dropbox.com/s/yegi5rn6emdjs4f/VRII_Echo360.zip?dl=0 Echo360]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Bob%27s_Burgers Meeskond: Bob&#039;s Burgers]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Aleksei Kopõlov&lt;br /&gt;
*Sander Perens&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Bob%27s_Burgers#XML_Retsensioon_meeskonnale_VeebiGurmaanid Retsensioon meeskonnale &#039;&#039;&#039;VeebiGurmaanid&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/User:Meeskond:_VeebiGurmaanid Meeskond: VeebiGurmaanid]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Koit Kõrvel&lt;br /&gt;
* Marko Kask&lt;br /&gt;
* Melissa Eenmaa&lt;br /&gt;
* Joosep Koort&lt;br /&gt;
&lt;br /&gt;
Retsentsioon meeskonnale: [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_HelpOut HelpOut]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Muru Meeskond: Muru]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Murdho Savila&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Muru#Retsensioonid Retsensioonid]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Repi Meeskond: Repi]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Renet Pirso&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Blogify Retsensioon: BLOGIFY]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: HelpOut===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mikk Sarapuu&lt;br /&gt;
* Martin Paakspuu&lt;br /&gt;
* Kerdo Kullamäe&lt;br /&gt;
* Marvin Mardiat&lt;br /&gt;
* Piret Pomerants&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Meeskond:_HelpOut Meeskonna koduleht]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
* XML/XSLT/XSD retsensioon meeskonnale &#039;&#039;&#039;Falador&#039;&#039;&#039; asub [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_Falador siin]&lt;br /&gt;
&lt;br /&gt;
Teenuse ja kliendi retsensiooni teeb Bomory. In progress...&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/2017_Meeskond_Poly Meeskond: Poly]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kristian Kalm&lt;br /&gt;
* Roland Kontson&lt;br /&gt;
&lt;br /&gt;
=== Meeskond [https://wiki.itcollege.ee/index.php/Meeskond_%22Nope%22: Nope] ===&lt;br /&gt;
* Raido Vell&lt;br /&gt;
* Taavi Vesinurm&lt;br /&gt;
* Kaspar Kaal&lt;br /&gt;
* Lisette Noor&lt;br /&gt;
* Madis Roosioks&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meeskonna koduleht:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Meeskond_%22Nope%22: Nope]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;XML/XSLT/XSD&#039;&#039;&#039; &amp;lt;br/&amp;gt;&lt;br /&gt;
Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:Bob%27s_Burgers Bob&#039;s Burgers] &amp;lt;br/&amp;gt;&lt;br /&gt;
Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:Blogify Blogify]&lt;br /&gt;
&lt;br /&gt;
===Meeskond [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab Alt + Tab]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Roots&lt;br /&gt;
* Roland Soosaar&lt;br /&gt;
* Krista Norak&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#Esimene_osa Esimene osa:] [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XML XML] | [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XSD XSD] | [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XSLT_HTML XSLT HTML] | [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XSLT_XML XSLT XML]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#Anal.C3.BC.C3.BCs Analüüs]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:Muru Muru]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Kirde_sai Meeskond: Kirde sai]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Taavi Teearu&lt;br /&gt;
*Berit Põldoja&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Kirde_sai#XML.2FXSD.2FXSLT XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Proovitud_abielu XML retsensioon Proovitud abielu]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Unnamed Team===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Andreas Kirotar&lt;br /&gt;
*Jaan Kostõgov&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Unnamed Team]]&lt;br /&gt;
 &lt;br /&gt;
Meeskonna retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:2017_Meeskond_Poly Poly]&lt;br /&gt;
&lt;br /&gt;
=== Meeskond [https://wiki.itcollege.ee/index.php/%3F%3F%3F_Profit ??? Profit] ===&lt;br /&gt;
* Aivar Romandi&lt;br /&gt;
* Frank Karl Koppel&lt;br /&gt;
* Aldin Talve&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Purgis Retsensioon meeskonnale Purgis]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Purgis===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Märt Lõhmus&lt;br /&gt;
* Kelli Lukas &lt;br /&gt;
Meeskonna koduleht: [[Purgis]]&amp;lt;br&amp;gt;&lt;br /&gt;
Esimene osa asub [https://wiki.itcollege.ee/index.php/Purgis#XML siin]&lt;br /&gt;
&lt;br /&gt;
XML Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:Alt_%2B_Tab  Alt + Tab]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Meeskond:_Falador Falador]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Madis Lugus&lt;br /&gt;
* Taavi Metsvahi&lt;br /&gt;
* Elina Kuldkepp&lt;br /&gt;
Meeskonna koguleht: [[Meeskond: Falador]]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Meeskond:_Falador#XML.2FXSD.2FXSLT XML/XSD/XSLT]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Meeskond:_Falador#Veebiteenus Veebiteenuse analüüs]&amp;lt;br&amp;gt;&lt;br /&gt;
XML retsensioon meeskonnale: [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_QView QView]&amp;lt;br&amp;gt;&lt;br /&gt;
Veebiteenuse analüüsi retsensioon meeskonnale: [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_QView QView]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Teenuse repo asub siin: [https://bitbucket.org/ekuldkep/vr2/ Teenus]&amp;lt;br&amp;gt;&lt;br /&gt;
Klientrakenduse repo asub siin: [https://bitbucket.org/ekuldkep/haterclient Klientrakendus]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Blogify Blogify]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Hando Laasmägi&lt;br /&gt;
* Tarvo Tammejuur&lt;br /&gt;
* Cathy Toomast&lt;br /&gt;
* Tõnn Vaher&lt;br /&gt;
&lt;br /&gt;
XML etapi Retsensioon meeskonnale: [https://wiki.itcollege.ee/index.php/Talk:Ott#Retsensioon_XML_kohta_meeskonnalt_Blogify Ott]&lt;br /&gt;
&lt;br /&gt;
LÕPPTOODE:[https://drive.google.com/open?id=0B2jSU1zbUNk8YUxxYlZQMUs3UUU SIIN]&lt;br /&gt;
(teenuse ja kliendi zipid + Käivitusjuhend)&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Proovitud_abielu Proovitud abielu]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Elina Kuldkepp&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Proovitud_abielu#XML.2FXSD.2FXSLT XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
XML Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:Meeskond_%22Nope%22: Nope]&lt;br /&gt;
&lt;br /&gt;
=== Meeskond: [https://wiki.itcollege.ee/index.php/Mjart Mjart] ===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Märt Häkkinen&lt;br /&gt;
XML/XSLT/XSD Retsensioon meeskonnale [Proovitud Abielu https://wiki.itcollege.ee/index.php/Talk:Proovitud_abielu]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Ott Ott]===&lt;br /&gt;
Liige:&lt;br /&gt;
*Ott Sõerumäe&lt;br /&gt;
Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Ott#XML_Retsensioon_meeskonnale_Kirde_sai Kirde sai]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/PageNotFound PageNotFound]===&lt;br /&gt;
&#039;&#039;&#039;Liige:&#039;&#039;&#039;&lt;br /&gt;
*Arvo Paomees&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
*[https://wiki.itcollege.ee/index.php/Talk:Mjart XML-i retsensioon meeskonnale Mjart, meeskond PageNotFound poolt] (kirjutatud 01.05.2017)&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/TahaksLopetada TahaksLopetada]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mart Naris&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/PhoneBookService PhoneBookService]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Indrek Tamm&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Meeskond:_Falador Sulased]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Siim Osa&lt;br /&gt;
* Taavi Kivimaa&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Meeskond:_Sulased Koduleht]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Sense_Of_Direction Restsensioon XML/XSD/XSLT]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Tudengisündroom===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Marko Saluste&lt;br /&gt;
&lt;br /&gt;
==Kaugõpe==&lt;br /&gt;
&lt;br /&gt;
===Meeskond: CoverMe===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Karit Kilgi&lt;br /&gt;
* Sten Kaasik&lt;br /&gt;
* Ragne Auling&lt;br /&gt;
* Silja Kralik&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: CoverMe]]&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon meeskonnale PC KartKicker: [https://wiki.itcollege.ee/index.php/Talk:PC_KartKicker Talk:Team_PC_KartKicker]&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon meeskonnale PC KartKicker: [https://wiki.itcollege.ee/index.php/Talk:Ticketer Talk:Team_Ticketer]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Team_SPOT Meeskond: SPOT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sigrid Pachel&lt;br /&gt;
* Oliver Tiks&lt;br /&gt;
Esitatud tööd leiab meeskonna [https://wiki.itcollege.ee/index.php/Team_SPOT lehelt]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/JRT Meeskond: JRT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Riho Uusjärv&lt;br /&gt;
* Jevgeni Gavrilov&lt;br /&gt;
* Tiit Kuuskmäe&lt;br /&gt;
&lt;br /&gt;
Retsensioon XML-failide kohta meeskonnale &amp;quot;PC KartKicker&amp;quot; [https://wiki.itcollege.ee/index.php/JRT#Retsensioon_JRT]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Retsensioon XML-failide kohta meeskonnale &amp;quot;Ninjas in pyjamas&amp;quot;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/JRT#Retsensioon_meeskonnale_.22Ninjas_in_pyjamas.22] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ticketer Meeskond: Ticketer]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Liina Abner&lt;br /&gt;
* Krista Rüütel&lt;br /&gt;
* Roland Türi&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ninjas_in_pyjamas Meeskond: Ninjas in Pyjamas]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Anna Linskaja&lt;br /&gt;
* Karen Grigorjan&lt;br /&gt;
* Sergei Hristoforov&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Talupood Meeskond: Talutooted]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Matson&lt;br /&gt;
* Taavi Tilk&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talupood#XML XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioon:&#039;&#039;&#039;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:PC_KartKicker Talk:PC_KartKicker]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode:&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~ttilk/VR2/Projekt/ Lõpptoode]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioon lõpptootele:&#039;&#039;&#039; &lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:DevHelpVR Talk:DevHelpVR] [TODO]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/DevHelpVR Meeskond: DevHelp]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Martin Jääger&lt;br /&gt;
* Kristo Leemets&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;XML failide retsensioon tiimile Ticketer, 26.03.2017:&#039;&#039;&#039;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Ticketer Talk:Ticketer]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode:&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~mjaager/VR2/DevHelp2_final/ Lõpptoode]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Projekti TFS:&#039;&#039;&#039; &lt;br /&gt;
[https://devhelp.visualstudio.com/DevHelp2 DevHelp2]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoote retsensioon:&#039;&#039;&#039;&lt;br /&gt;
[TODO]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/PC_KartKicker Meeskond: PC KartKicker]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
* Jan Eerik&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR Talk:DevHelpVR] &amp;lt;br&amp;gt;&lt;br /&gt;
XML failide retsensioon meeskonnale Ninjas in pyjamas, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Talk:Ninjas_in_pyjamas]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/saarmae/VR2_projekt/ Link] lõpptoote Git repositooriumile (ainult teenus).&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:DevHelpVR#L.C3.B5pptoote_retsensioon_meeskonnalt_PC_KartKicker Link] meeskonna DevHelp lõpptoote retsensioonile&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/rent_a_bike Meeskond: rent-A-bike]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Erika Ehmann&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/A$unik Meeskond: A$unik]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Hardi Antsov&lt;br /&gt;
* Juhan Trink&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017&amp;diff=123659</id>
		<title>Kodutöö aines &quot;Võrgurakendused II: hajussüsteemide ehitamine&quot; 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017&amp;diff=123659"/>
		<updated>2017-06-14T19:54:18Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Meeskond: PC KartKicker */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
__NOINDEX__&lt;br /&gt;
&lt;br /&gt;
=Kodutöö aines &amp;quot;Võrgurakendused II: hajussüsteemide ehitamine&amp;quot; 2017=&lt;br /&gt;
==Eesmärk==&lt;br /&gt;
Saada praktiline kogemus hajussüsteemide ehitamisest XML(SOAP) või Rest veebiteenusel ja sellele klientrakenduse loomise abil ning süvendada meeskonnatööoskust. &lt;br /&gt;
*SOAP veebiteenuse puhul eeldatakse WCF tehnoloogia kasutamist. Vanema põlvkonna ASP.NET veebiteenuse loomine ei ole lubatud, kuna seda ei toeta ka Microsoft enam tänasel päeval.&lt;br /&gt;
*REST teenuste loomisel tuleks kasutada ASP.NET Web API võimalusi.&lt;br /&gt;
&lt;br /&gt;
Kaugem eesmärk on loomulikult hinne :).&lt;br /&gt;
&lt;br /&gt;
==Reeglid==&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus&lt;br /&gt;
&lt;br /&gt;
Ühte projektimeeskonda kuulub 3..4 tudengit ning ühel teemal teostab projekti üks või mitu meeskonda. 1,2 ja viie liikmelised meeskonnad tuleks õppejõuga eraldi kooskõlastada.&lt;br /&gt;
&lt;br /&gt;
Töö käiku kajastatakse  http://wiki.itcollege.ee keskkonnas. Wikilehe täitmise eesmärke on kaks: nii on võimalik kirja panna kõik mõtted ja ideed (ning nendest jääb jälg) ning õppejõul on hiljem võimalik saada ülevaade iga projektimeeskonna liikme panusest.&lt;br /&gt;
&lt;br /&gt;
==Tähtajad==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;XML fail&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#XML_andmefail NB! Täpsem info]&lt;br /&gt;
** XML fail, stiilifail ja skeemifail peavad olema valmis ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;20. märts 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid XML-failide kohta peavad tehtud olema &#039;&#039;&#039;27. märts 2017&#039;&#039;&#039;.&lt;br /&gt;
** &#039;&#039;&#039;Meeskonnad on loonud omale enda wiki lehe, kuhu kirjeldavad meeskonna ja panevad nad üles oma tööd. Lisaks hakkavad kogunema ka sinna teiste gruppide poolt kirjutatavad retsensioonid. &amp;lt;ins&amp;gt;Meeskonnalehed lingitakse selle lehe lõppu Meeskonna pealkirja alla.&amp;lt;/ins&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Veebiteenus&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#Veebiteenus NB! Täpsem info]&lt;br /&gt;
** Veebiteenuse analüüs peab olema valmis, esitatud ja wikilehel kirjeldatud hiljemalt: &#039;&#039;&#039;17.aprill 2017&#039;&#039;&#039;&lt;br /&gt;
** Veebiteenus peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;29. mai 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid veebiteenuste kohta peavad tehtud olema &#039;&#039;&#039;08. juuni 2017&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--** Veebiteenus tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Klientrakendused&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#Klientrakendus NB! Täpsem info]&lt;br /&gt;
** Klientrakendused peavad olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;29. mai 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid klientrakenduste kohta peavad tehtud olema &#039;&#039;&#039;08. juuni 2017&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--** Klientrakendused tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--* &#039;&#039;&#039;Meeskonna kokkuvõttev aruanne&#039;&#039;&#039;&lt;br /&gt;
** Meeskonnatöö kokkuvõttev aruanne peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt 8.mai 2011&lt;br /&gt;
** Arvamused Meeskonnatöö kokkuvõtva aruande ja esitluse kohta tuleb esitada hiljemalt päev enne eksamit&lt;br /&gt;
** &#039;&#039;&#039;Meeskonna kokkuvõttev aruanne ja töö lõplik tulemus&#039;&#039;&#039; tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hindamine==&lt;br /&gt;
===Üldised kriteeriumid===&lt;br /&gt;
&lt;br /&gt;
Teostatuks loetakse projekt juhul, kui lähteülesanne on realiseeritud, lahendus on töötav, kuid esineb suuremaid vigu ning piirsituatsioonidega ei ole arvestatud.&lt;br /&gt;
&lt;br /&gt;
Maksimumtulemuse saavutamiseks peab projekt olema teostatud tehniliselt veatult ning varustatud dokumentatsiooniga, milles sisaldub  arendusprotsessi kirjeldus (peab selguma ka iga rühmaliikme panus projekti teostamisel), kasutajajuhend ning lahenduse kirjeldus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Maksimumtulemuse annab (vähemalt 4/6):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Majanduslik mõtlemine (kas loodav teenus ja rakendused oleks kasutatav ka ärilistel eesmärkidel)&lt;br /&gt;
* Mobiilrakendused &lt;br /&gt;
* AngularJS klientrakendus&lt;br /&gt;
* Kogukondade kaasamine&lt;br /&gt;
* Kasutajamugavus&lt;br /&gt;
* Läbimõeldud töökorraldus&lt;br /&gt;
* Lisavõimaluste realiseerimine (vt näidisteemad)&lt;br /&gt;
&lt;br /&gt;
===XML andmefail===&lt;br /&gt;
Ülesande täitmiseks tuleb luua XML fail andmete edastamiseks, selle XML faili skeemifail ning minimaalselt kaks sobivat XSL transformatsiooni faili loodud XML failis olevate andmete transformeerimiseks HTML formaati ja XML faili formaadi muutmiseks. Transformatsioonid peavad sisaldama midagi enamat, kui ainult üks for-each klausel. Transformatsiooni käigus peaks kasutama vajadusel parameetreid ning kindlasti ka erinevaid tingimuste kontrolle.&lt;br /&gt;
&lt;br /&gt;
XML-il peab olema vähemalt 4 loogilist dimensiooni.&lt;br /&gt;
 &amp;lt;dim1&amp;gt;&lt;br /&gt;
   &amp;lt;dim2&amp;gt;&lt;br /&gt;
     &amp;lt;dim3&amp;gt;&lt;br /&gt;
       &amp;lt;dim4&amp;gt;&lt;br /&gt;
       &amp;lt;/dim4&amp;gt;&lt;br /&gt;
     &amp;lt;/dim3&amp;gt;&lt;br /&gt;
   &amp;lt;/dim2&amp;gt;&lt;br /&gt;
 &amp;lt;/dim1&amp;gt;&lt;br /&gt;
Lisaks tuleb kasutada 3-el dimensioonil attribuute, mis one enamat, kui lihtsalt ID.&lt;br /&gt;
&lt;br /&gt;
Käesoleva ülesande käigus peab looma meeskonna ning selle wiki lehekülje&lt;br /&gt;
&lt;br /&gt;
===Veebiteenus===&lt;br /&gt;
Loodav veebiteenus peab võimaldama:&lt;br /&gt;
* Teenuse pakkumist&lt;br /&gt;
* &#039;&#039;&#039;Teenuse kasutajate tuvastamist ning haldamist&#039;&#039;&#039;&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes&lt;br /&gt;
* Teenuse poole pöördumiste arvu piiramist ja piirangute haldamist.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus peab toetama mitme kasutaja võimalust.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus tuleb luua kasutades &#039;&#039;Windows Communication Foundation&#039;&#039; või ASP.NET MVC  Web API tehnoloogiat&lt;br /&gt;
&lt;br /&gt;
Andmebaasis peab olema vähemalt 9 olemit ehk andmebaas on eeldus,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soovitav on luua teenus (FE) ja teenuse seadistamiseks ning kasutajate haldamiseks mõeldud rakendus (BE).&lt;br /&gt;
&lt;br /&gt;
===Klientrakendus===&lt;br /&gt;
Klientrakendus mõnele olemasolevale veebiteenusele, võib olla teostatud veebirakendusena, Silverlight, WPF või vormirakendusena.&lt;br /&gt;
&lt;br /&gt;
Variant1: teha klientrakendus enda loodud veebiteenusele &lt;br /&gt;
&lt;br /&gt;
Variant2: teha klientrakendus mõnele levinud veebiteenusele.&lt;br /&gt;
Näiteks: &lt;br /&gt;
* http://www.bing.com/developer&lt;br /&gt;
* http://www.flickr.com/services/api/response.soap.html&lt;br /&gt;
* http://developer.ebay.com/developercenter/windows/&lt;br /&gt;
* http://apiwiki.twitter.com/Getting-Started&lt;br /&gt;
&lt;br /&gt;
===Retsensioonid===&lt;br /&gt;
Retsensioon on üliõpilase iseseisva teadustöö kriitilise analüüsi põhjal koostatud argumenteeritud hinnang. Retsensioonis tuleb hinnata töö vastavust esitatud tingimustele, programmikoodi loetavust ning kommenteeritust, dokumentatsiooni ja kirjeldada puudusi. Retsensioonide põhjal on meeskondadel õigus oma projekte parandada enne määratud esitamistähtaja kättejõudmist.&lt;br /&gt;
&lt;br /&gt;
Retsensioon peab sisaldama minimaalselt...&lt;br /&gt;
* XML - ...200 sõna.&lt;br /&gt;
* Veebiteenus - ...600 sõna.&lt;br /&gt;
* Klientrakendus - ...600 sõna.&lt;br /&gt;
&lt;br /&gt;
Mõnelauselisest arvamusest ei piisa, kuna tegemist on grupi loodavate arvustustega, mitte individuaalsete arvustustega.&lt;br /&gt;
&lt;br /&gt;
==Konsultatsioonid==&lt;br /&gt;
 Igal projektimeeskonnal on piiramatu õigus saada õppejõu käest konsultatsiooni ja juhendamist oma&lt;br /&gt;
 töö tegemiseks, kas harjutuste ajal või pärast harjutusi ja loenguid. Eriaegade suhtes saab sõlmida&lt;br /&gt;
 õppejõuga kokkuleppeid kontaktidel&lt;br /&gt;
 mait.poska [ät] itcollege.ee või (+372 53 469 734)&lt;br /&gt;
 (teksti originaalautor Priit Raspel)&lt;br /&gt;
&lt;br /&gt;
==Kaitsmisele registreerumine==&lt;br /&gt;
Kaitsmine toimub ruumis 314 neljapäeval, 8ndal juunil peale konsultatsiooni, mis algab kell 16:00.&lt;br /&gt;
&lt;br /&gt;
*16:30 - Bob&#039;s Burgers&lt;br /&gt;
*16:45 - Redundant Rappers&lt;br /&gt;
*17:00 - ...&lt;br /&gt;
*17:15 - Ott&lt;br /&gt;
*17:30 - ..&lt;br /&gt;
*17:45 - ..&lt;br /&gt;
*18:00 - ..&lt;br /&gt;
*18:15 - ..&lt;br /&gt;
&lt;br /&gt;
kui nendest aegadest ei piisa, siis lisada aegu juurde ise 15 min tsükliga&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Reede&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*16:00 - Meeskond: QView (neljapäeval pole tiimi!)&amp;lt;br&amp;gt;&lt;br /&gt;
*16:15 - Meeskond: HelpOut&amp;lt;br&amp;gt;&lt;br /&gt;
*16:30 - Meeskond: VeebiGurmaanid &amp;lt;br&amp;gt;&lt;br /&gt;
*16:45 - &lt;br /&gt;
*17:00 - Meeskond: Blogify&lt;br /&gt;
*17:15 - Meeskond: Sense Of Direction&lt;br /&gt;
*17.30 - ??? Profit&lt;br /&gt;
*17.45 -&lt;br /&gt;
*18.00 - Meeskond: Echo (Tiimiliikmed jõuavad selleks ajaks)&lt;br /&gt;
&lt;br /&gt;
... kui nendest aegadest ei piisa, siis lisada aegu juurde ise 15 min tsükliga&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Esmaspäev&#039;&#039;&#039;&lt;br /&gt;
*08:45 - &lt;br /&gt;
*09:00 - Unnamed team&lt;br /&gt;
*09:15 - RK&lt;br /&gt;
*09:30 - Kirde sai&lt;br /&gt;
*09:45 - &lt;br /&gt;
*10:00 - ..&lt;br /&gt;
*10:15* - Falador&lt;br /&gt;
* Ott&lt;br /&gt;
* Mjart *&lt;br /&gt;
&lt;br /&gt;
..ülejäänud meeskonnad panevad nime kirja siia ning kaitsmine toimub päeva jooksul jooksvalt. Kaitsta saavad need, kellel on nimi siin kirjas&lt;br /&gt;
&lt;br /&gt;
=Teemad 2017 kevad=&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus mõnele olemasolevale või endaloodud veebiteenusele&lt;br /&gt;
&lt;br /&gt;
NB! XML andmefail ja veebiteenus ei pea olema omavahel seotud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Näidisteemad==&lt;br /&gt;
&lt;br /&gt;
===Nimede pakkumise teenus===&lt;br /&gt;
Mõte selles, et luua nimede baas, mille abil pakkuda rakenduse loojale sobiva algusega nimesid. Reaalne rakendus: &#039;&#039;autocompleter&#039;&#039; tarvis teenuse pakkumine&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua sobiva alguse järgi nimede pakkumise teenus:&lt;br /&gt;
* alates kahetähelisetest algustest pakkuda sobivad nimesid&lt;br /&gt;
* luua võimalus kasutajatel nimesid lisada&lt;br /&gt;
* luua võimalus administraatoril nimesid muuta/kustutada&lt;br /&gt;
* meeste ja naiste nimed peavad olema süsteemis eristatavad&lt;br /&gt;
* luua võimalus, mis võimaldab kuvada populaarseid nimesid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* luua võimalus, et nimi lisatakse baasi alles siis, kui administraatori õigustega inimene on selleks vastava loa andnud&lt;br /&gt;
&lt;br /&gt;
===Külastusstatistika teenus===&lt;br /&gt;
Mõte selles, et pakkuda teenust, kus kasutajal on võimalik registreerida külastused ning küsida oma külastusstatistikat.&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua külastusstatistika teenus:&lt;br /&gt;
* kasutaja saab teenuses registreerida külastusi&lt;br /&gt;
* kasutaja saab küsida külastusstatistikat päevade/kuude/kogu perioodi lõikes&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
&lt;br /&gt;
Lisavõimalused:&lt;br /&gt;
* luua võimalus registreerida alamlehtede külastusstatistikat&lt;br /&gt;
* luua võimalus külastusstatistikale lisaparameetrite lisamiseks (ip aadress, sirviku versioon jne)&lt;br /&gt;
&lt;br /&gt;
===Telefoniraamatu teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada kontakte ja nende seast otsida&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua telefoniraamatu teenus:&lt;br /&gt;
* kasutaja saab teenuses kontakte lisada ja kustutada&lt;br /&gt;
* kasutaja saab kontaktide nime/telefoninumbri jne abil otsida&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutajaid on võimalik lisada gruppidesse&lt;br /&gt;
* kasutajal on võimalik lisada vajalike kontaktandmete liike&lt;br /&gt;
* kasutajatel on võimalik jagada omavahel kontakte ja kontaktide grupper&lt;br /&gt;
&lt;br /&gt;
===RSS voogude kogumise ja uudiste kuvamise teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada talle huvipakkuvaid RSS vooge ja nendelt voogudelt uudiseid lugeda&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua RSS voogude haldusteenus:&lt;br /&gt;
* kasutaja saab teenuses RSS vooge lisada ja kustudada&lt;br /&gt;
* kasutaja saab pärida talle huvipakkuvate voogude viimaseid uudiseid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutaja saab RSS vooge vaadata eraldi või grupeeritult&lt;br /&gt;
* vooge peab puhverdama, kuna voogude lugemine võtab enamasti üsna palju aega &lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
= Meeskonnad 2017=&lt;br /&gt;
==Päevaõpe==&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Helistajad===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kristjan Tõnismäe&lt;br /&gt;
Meeskonna koduleht: [[Helistajad]]&lt;br /&gt;
&lt;br /&gt;
Retsentsioon meeskonnale: &lt;br /&gt;
&lt;br /&gt;
===Meeskond: QView===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Semjon Greef&lt;br /&gt;
* Martin Nigul&lt;br /&gt;
* Martin Nõukas&lt;br /&gt;
* Margus Muru&lt;br /&gt;
* Lisandra Noor&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: QView]]&lt;br /&gt;
&lt;br /&gt;
Retsentsioon meeskonnale: [https://wiki.itcollege.ee/index.php/User_talk:Meeskond:_VeebiGurmaanid#M.C3.A4rkused: VeebiGurmaanid]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Redundant Rappers===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Taavi Kliss&lt;br /&gt;
*Kertu Nurmberg&lt;br /&gt;
*Anneli Asser&lt;br /&gt;
*Mart-Erki Nõumees&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: Redundant Rappers]]&lt;br /&gt;
&lt;br /&gt;
Meeskonna XML/XSD/XSLT : [https://wiki.itcollege.ee/index.php/Meeskond:_Redundant_Rappers#XML_.2F_XSD_.2F_XSLT]&lt;br /&gt;
&lt;br /&gt;
Meeskonna lõpptoode: [http://enos.itcollege.ee/~tkliss/VRII/ RedRap].&lt;br /&gt;
&lt;br /&gt;
Meeskonna retsensioon meeskonnale Sense Of Direction: [https://wiki.itcollege.ee/index.php/Talk:Sense_Of_Direction]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Sense Of Direction===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Ilja Andrejev&lt;br /&gt;
*Aleksandr Babõkin&lt;br /&gt;
*Vladislav Lahtarin&lt;br /&gt;
*Vladislav Kovaltšuk&lt;br /&gt;
Meeskonna koduleht: [[Sense Of Direction]]&amp;lt;br&amp;gt;&lt;br /&gt;
XML/XSD/XSLT osa asub [https://wiki.itcollege.ee/index.php/Sense_Of_Direction#XML siin]&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon XML-failide kohta meeskonnale &amp;quot;Poly&amp;quot; asub [https://wiki.itcollege.ee/index.php/Sense_Of_Direction#Retsensioon_XML-failide_kohta_meeskonnale_.22Poly.22 siin]&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon meeskonna &amp;quot;Bob&#039;s Burgers&amp;quot; veebi- ja klienrakendusele asub [https://wiki.itcollege.ee/index.php/Sense_Of_Direction#.22Bob.27s_Burgers.22_veebiteenuse_ja_klientrakenduse_retsensioon siin]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/RK Meeskond: RK]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Raido Kivinurm&lt;br /&gt;
&lt;br /&gt;
Esimene osa: [https://wiki.itcollege.ee/index.php/RK#XML XML] / [https://wiki.itcollege.ee/index.php/RK#XSD XSD] / [https://wiki.itcollege.ee/index.php/RK#XSLT_HTML XSLT HTML] / [https://wiki.itcollege.ee/index.php/RK#XSLT_XML XSLT XML]&lt;br /&gt;
&amp;lt;BR&amp;gt; [https://wiki.itcollege.ee/index.php/RK#Retsensioonid Retsensioonid]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Team_Echo Meeskond: Echo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Vajak&lt;br /&gt;
* Janno Oolo&lt;br /&gt;
* Mari-Liis Oldja&lt;br /&gt;
* Arti Zirk&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Team_Echo#XML XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Meeskond:_Redundant_Rappers#Retsensioon_Team_Echo_poolt Retsensioon meeskonnale Redundant Rappers]&lt;br /&gt;
&lt;br /&gt;
Kood V1: [https://www.dropbox.com/s/yegi5rn6emdjs4f/VRII_Echo360.zip?dl=0 Echo360]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Bob%27s_Burgers Meeskond: Bob&#039;s Burgers]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Aleksei Kopõlov&lt;br /&gt;
*Sander Perens&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Bob%27s_Burgers#XML_Retsensioon_meeskonnale_VeebiGurmaanid Retsensioon meeskonnale &#039;&#039;&#039;VeebiGurmaanid&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/User:Meeskond:_VeebiGurmaanid Meeskond: VeebiGurmaanid]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Koit Kõrvel&lt;br /&gt;
* Marko Kask&lt;br /&gt;
* Melissa Eenmaa&lt;br /&gt;
* Joosep Koort&lt;br /&gt;
&lt;br /&gt;
Retsentsioon meeskonnale: [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_HelpOut HelpOut]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Muru Meeskond: Muru]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Murdho Savila&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Muru#Retsensioonid Retsensioonid]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Repi Meeskond: Repi]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Renet Pirso&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Blogify Retsensioon: BLOGIFY]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: HelpOut===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mikk Sarapuu&lt;br /&gt;
* Martin Paakspuu&lt;br /&gt;
* Kerdo Kullamäe&lt;br /&gt;
* Marvin Mardiat&lt;br /&gt;
* Piret Pomerants&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Meeskond:_HelpOut Meeskonna koduleht]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
* XML/XSLT/XSD retsensioon meeskonnale &#039;&#039;&#039;Falador&#039;&#039;&#039; asub [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_Falador siin]&lt;br /&gt;
&lt;br /&gt;
Teenuse ja kliendi retsensiooni teeb Bomory. In progress...&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/2017_Meeskond_Poly Meeskond: Poly]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kristian Kalm&lt;br /&gt;
* Roland Kontson&lt;br /&gt;
&lt;br /&gt;
=== Meeskond [https://wiki.itcollege.ee/index.php/Meeskond_%22Nope%22: Nope] ===&lt;br /&gt;
* Raido Vell&lt;br /&gt;
* Taavi Vesinurm&lt;br /&gt;
* Kaspar Kaal&lt;br /&gt;
* Lisette Noor&lt;br /&gt;
* Madis Roosioks&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meeskonna koduleht:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Meeskond_%22Nope%22: Nope]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;XML/XSLT/XSD&#039;&#039;&#039; &amp;lt;br/&amp;gt;&lt;br /&gt;
Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:Bob%27s_Burgers Bob&#039;s Burgers] &amp;lt;br/&amp;gt;&lt;br /&gt;
Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:Blogify Blogify]&lt;br /&gt;
&lt;br /&gt;
===Meeskond [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab Alt + Tab]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Roots&lt;br /&gt;
* Roland Soosaar&lt;br /&gt;
* Krista Norak&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#Esimene_osa Esimene osa:] [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XML XML] | [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XSD XSD] | [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XSLT_HTML XSLT HTML] | [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XSLT_XML XSLT XML]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#Anal.C3.BC.C3.BCs Analüüs]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:Muru Muru]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Kirde_sai Meeskond: Kirde sai]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Taavi Teearu&lt;br /&gt;
*Berit Põldoja&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Kirde_sai#XML.2FXSD.2FXSLT XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Proovitud_abielu XML retsensioon Proovitud abielu]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Unnamed Team===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Andreas Kirotar&lt;br /&gt;
*Jaan Kostõgov&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Unnamed Team]]&lt;br /&gt;
 &lt;br /&gt;
Meeskonna retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:2017_Meeskond_Poly Poly]&lt;br /&gt;
&lt;br /&gt;
=== Meeskond [https://wiki.itcollege.ee/index.php/%3F%3F%3F_Profit ??? Profit] ===&lt;br /&gt;
* Aivar Romandi&lt;br /&gt;
* Frank Karl Koppel&lt;br /&gt;
* Aldin Talve&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Purgis Retsensioon meeskonnale Purgis]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Purgis===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Märt Lõhmus&lt;br /&gt;
* Kelli Lukas &lt;br /&gt;
Meeskonna koduleht: [[Purgis]]&amp;lt;br&amp;gt;&lt;br /&gt;
Esimene osa asub [https://wiki.itcollege.ee/index.php/Purgis#XML siin]&lt;br /&gt;
&lt;br /&gt;
XML Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:Alt_%2B_Tab  Alt + Tab]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Meeskond:_Falador Falador]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Madis Lugus&lt;br /&gt;
* Taavi Metsvahi&lt;br /&gt;
* Elina Kuldkepp&lt;br /&gt;
Meeskonna koguleht: [[Meeskond: Falador]]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Meeskond:_Falador#XML.2FXSD.2FXSLT XML/XSD/XSLT]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Meeskond:_Falador#Veebiteenus Veebiteenuse analüüs]&amp;lt;br&amp;gt;&lt;br /&gt;
XML retsensioon meeskonnale: [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_QView QView]&amp;lt;br&amp;gt;&lt;br /&gt;
Veebiteenuse analüüsi retsensioon meeskonnale: [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_QView QView]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Teenuse repo asub siin: [https://bitbucket.org/ekuldkep/vr2/ Teenus]&amp;lt;br&amp;gt;&lt;br /&gt;
Klientrakenduse repo asub siin: [https://bitbucket.org/ekuldkep/haterclient Klientrakendus]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Blogify Blogify]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Hando Laasmägi&lt;br /&gt;
* Tarvo Tammejuur&lt;br /&gt;
* Cathy Toomast&lt;br /&gt;
* Tõnn Vaher&lt;br /&gt;
&lt;br /&gt;
XML etapi Retsensioon meeskonnale: [https://wiki.itcollege.ee/index.php/Talk:Ott#Retsensioon_XML_kohta_meeskonnalt_Blogify Ott]&lt;br /&gt;
&lt;br /&gt;
LÕPPTOODE:[https://drive.google.com/open?id=0B2jSU1zbUNk8YUxxYlZQMUs3UUU SIIN]&lt;br /&gt;
(teenuse ja kliendi zipid + Käivitusjuhend)&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Proovitud_abielu Proovitud abielu]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Elina Kuldkepp&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Proovitud_abielu#XML.2FXSD.2FXSLT XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
XML Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:Meeskond_%22Nope%22: Nope]&lt;br /&gt;
&lt;br /&gt;
=== Meeskond: [https://wiki.itcollege.ee/index.php/Mjart Mjart] ===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Märt Häkkinen&lt;br /&gt;
XML/XSLT/XSD Retsensioon meeskonnale [Proovitud Abielu https://wiki.itcollege.ee/index.php/Talk:Proovitud_abielu]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Ott Ott]===&lt;br /&gt;
Liige:&lt;br /&gt;
*Ott Sõerumäe&lt;br /&gt;
Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Ott#XML_Retsensioon_meeskonnale_Kirde_sai Kirde sai]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/PageNotFound PageNotFound]===&lt;br /&gt;
&#039;&#039;&#039;Liige:&#039;&#039;&#039;&lt;br /&gt;
*Arvo Paomees&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
*[https://wiki.itcollege.ee/index.php/Talk:Mjart XML-i retsensioon meeskonnale Mjart, meeskond PageNotFound poolt] (kirjutatud 01.05.2017)&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/TahaksLopetada TahaksLopetada]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mart Naris&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/PhoneBookService PhoneBookService]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Indrek Tamm&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Meeskond:_Falador Sulased]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Siim Osa&lt;br /&gt;
* Taavi Kivimaa&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Meeskond:_Sulased Koduleht]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Sense_Of_Direction Restsensioon XML/XSD/XSLT]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Tudengisündroom===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Marko Saluste&lt;br /&gt;
&lt;br /&gt;
==Kaugõpe==&lt;br /&gt;
&lt;br /&gt;
===Meeskond: CoverMe===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Karit Kilgi&lt;br /&gt;
* Sten Kaasik&lt;br /&gt;
* Ragne Auling&lt;br /&gt;
* Silja Kralik&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: CoverMe]]&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon meeskonnale PC KartKicker: [https://wiki.itcollege.ee/index.php/Talk:PC_KartKicker Talk:Team_PC_KartKicker]&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon meeskonnale PC KartKicker: [https://wiki.itcollege.ee/index.php/Talk:Ticketer Talk:Team_Ticketer]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Team_SPOT Meeskond: SPOT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sigrid Pachel&lt;br /&gt;
* Oliver Tiks&lt;br /&gt;
Esitatud tööd leiab meeskonna [https://wiki.itcollege.ee/index.php/Team_SPOT lehelt]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/JRT Meeskond: JRT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Riho Uusjärv&lt;br /&gt;
* Jevgeni Gavrilov&lt;br /&gt;
* Tiit Kuuskmäe&lt;br /&gt;
&lt;br /&gt;
Retsensioon XML-failide kohta meeskonnale &amp;quot;PC KartKicker&amp;quot; [https://wiki.itcollege.ee/index.php/JRT#Retsensioon_JRT]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Retsensioon XML-failide kohta meeskonnale &amp;quot;Ninjas in pyjamas&amp;quot;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/JRT#Retsensioon_meeskonnale_.22Ninjas_in_pyjamas.22] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ticketer Meeskond: Ticketer]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Liina Abner&lt;br /&gt;
* Krista Rüütel&lt;br /&gt;
* Roland Türi&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ninjas_in_pyjamas Meeskond: Ninjas in Pyjamas]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Anna Linskaja&lt;br /&gt;
* Karen Grigorjan&lt;br /&gt;
* Sergei Hristoforov&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Talupood Meeskond: Talutooted]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Matson&lt;br /&gt;
* Taavi Tilk&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talupood#XML XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioon:&#039;&#039;&#039;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:PC_KartKicker Talk:PC_KartKicker]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode:&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~ttilk/VR2/Projekt/ Lõpptoode]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioon lõpptootele:&#039;&#039;&#039; &lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:DevHelpVR Talk:DevHelpVR] [TODO]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/DevHelpVR Meeskond: DevHelp]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Martin Jääger&lt;br /&gt;
* Kristo Leemets&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;XML failide retsensioon tiimile Ticketer, 26.03.2017:&#039;&#039;&#039;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Ticketer Talk:Ticketer]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode:&#039;&#039;&#039;&lt;br /&gt;
[http://enos.itcollege.ee/~mjaager/VR2/DevHelp2_final/ Lõpptoode]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Projekti TFS:&#039;&#039;&#039; &lt;br /&gt;
[https://devhelp.visualstudio.com/DevHelp2 DevHelp2]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoote retsensioon:&#039;&#039;&#039;&lt;br /&gt;
[TODO]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/PC_KartKicker Meeskond: PC KartKicker]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
* Jan Eerik&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR Talk:DevHelpVR] &amp;lt;br&amp;gt;&lt;br /&gt;
XML failide retsensioon meeskonnale Ninjas in pyjamas, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Talk:Ninjas_in_pyjamas]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/saarmae/VR2_projekt/ Link] lõpptoote Git repositooriumile (ainult teenus).&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:DevHelpVR#L.C3.B5pptoote_retsensioon_meeskonnalt_PC_KartKicker link] meeskonna DevHelp lõpptoote retsensioonile&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/rent_a_bike Meeskond: rent-A-bike]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Erika Ehmann&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/A$unik Meeskond: A$unik]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Hardi Antsov&lt;br /&gt;
* Juhan Trink&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Talk:DevHelpVR&amp;diff=123658</id>
		<title>Talk:DevHelpVR</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Talk:DevHelpVR&amp;diff=123658"/>
		<updated>2017-06-14T19:52:24Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Lõpptoote retsensioon meeskonnalt PC KartKicker */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Retsensioon projektile DevHelpVR=&lt;br /&gt;
&lt;br /&gt;
==Sissejuhatus==&lt;br /&gt;
Retsensiooni eesmärgiks oli võrrelda püstitatud ülesannet lõpptulemusega ning analüüsida esmalt veebiteenuse poolt, kasutatud andmemudeleid, mustreid ning koodi jälgitavust ehk visuaalset poolt. Teiseks tuli analüüsida ka kliendirakendust, mis eesmärgipäraselt peaks suhtlema loodud veebiteenusega. &lt;br /&gt;
Retsensiooni käigus hindasime veebiteenuse ja klientrakenduse osas vastavalt järgmiseid nüansse:&lt;br /&gt;
&lt;br /&gt;
1. Andmebaasi olemite arv&lt;br /&gt;
&lt;br /&gt;
2. Kastutatav tehnoloogia (WCF või ASP.NET MVC Web API)&lt;br /&gt;
&lt;br /&gt;
3. Veebiteenuse olemasolu&lt;br /&gt;
&lt;br /&gt;
4. Mitmekasutaja funktsionaalsuse olemasolu&lt;br /&gt;
&lt;br /&gt;
5. Kasutajate tuvastamist ja haldamist&lt;br /&gt;
&lt;br /&gt;
6. Kasutusstatistika üle arve pidamist&lt;br /&gt;
&lt;br /&gt;
7. Piirangute olemasolu pöördumiste arvu osas ning nende haldust&lt;br /&gt;
&lt;br /&gt;
8. Kasutusjuhendi olemasolu&lt;br /&gt;
&lt;br /&gt;
9. Klientrakenduse tehnoloogia, ülesehitus ja kasutusmugavus&lt;br /&gt;
&lt;br /&gt;
==Andmemudel, olemid==&lt;br /&gt;
Projekti eesmärgiks oli luua rakendus, mis aitaks arendajal oma töid paremini planeerida ja omada ülevaadet käimasolevatest ning järgmisena algavatest ülesannetest.&lt;br /&gt;
Projekti andmemudel on ilusti üles ehitatud, kuid võrreldes esialgu planeerituga esineb erinevus olemite koguarvus, samas on põhifunktsionaalsus kenasti olemas. Andmebaasi olemite arv, ilma Identity olemiteta, on 10 (esialgses analüüsidokumendis saime neid kokku 16). &lt;br /&gt;
Analüüsi käigus ei suutnud tuvastada ühtegi suurt viga, küll aga saaksime teha mõned soovitused. Nimelt enamik olemeid, milles esineb nn algus ja lõppaeg, võiks lõppaja väli olla pigem valikuline, kuna alati ei pruugi projektil, meeskonnal või muul olemil olla teada lõppaeg selle objekti sisestamisel - ehk et see võib selguda alles peale mõningast analüüsi. Lisaks, tõenäoliselt tähelepanuta jäänud, on UserStory olemi Storypoints attribuudil annotatsioon [Required]. Seda aga tegelikult vaja pole, kuna int on väärtustüüpi muutuja ja nõuab vaikimisi väärtust.&lt;br /&gt;
Kolmanda soovitusena võiks mainida ka seda, et tegelikult saaks edukalt ära kasutada ka Identity-ga kaasa tulevaid olemeid näiteks rollide ja kasutajate kirjeldamiseks.&lt;br /&gt;
&lt;br /&gt;
Välja võib tuua seda, et kõik olemid ja seosed on hästi läbimõeldud, kasutatud on piisavalt annotatsioone ja kõik viitetüüpi olemi atribuudid on sobivalt piiratud (eelkõige string muutujad).&lt;br /&gt;
&lt;br /&gt;
==Kasutatav tehnoloogia ja veebiteenuse olemasolu==&lt;br /&gt;
Projekt on ülesehitatud kasutades ASP.NET MVC Web API tehnoloogiat nii, nagu kirjas ka õppejõu poolt antud projekti nõuetes. Rakenduse ülesehitus on hajutatud, mis tähendab, et andmekihid on üksteisest eraldatud ja kogu andmevoog on hästi jälgitav ning lihtsasti muudetav. Eraldi asuvad mudelid, äriloogika kiht, teenused ning kontrollerid ja klientrakendus.&lt;br /&gt;
Kontrollerite ülesehitus on loogiline - iga ärilise funktsionaalsuse kohta on oma kontroller - eriti jääb silma ja peab siin ära märkima kommentaarid, mis aitavad selgemalt aru saada kontrolleri taustast.&lt;br /&gt;
Andmevoog liigub nagu raamatus :), kontrollerist teenusesse ja sealt edasi kasutatakse Unit of Work ja Repository mustreid, mis aitab kindlasti jõudlusele kaasa.&lt;br /&gt;
Kokkuvõtvalt on veebiteenus hästi ülesehitatud, kuid silma jäi ja välja võiks tuua ehk selle, et mitte kõik kontrollerid ei tagasta vea korral 404 veateadet. &lt;br /&gt;
&lt;br /&gt;
==Kasutajate tuvastamine, haldus, mitmekasutaja funktsionaalsus, statistika==&lt;br /&gt;
Teenus on ülesehtitatud kasutades Asp.Net enda Identity moodulit, mistõttu toetab see mitmekasutaja funktsionaalsust ja kasutajate hallatavust. Võib näha, et esialgne andmemudel oli planeeritud kasutama iseseisvat kasutajate andmemudelit ja nii on see ka teostatud. Küll aga on lisandunud seos AspNetUsers tabelile, kui kasutaja registreeritakse ja hilisemate mõningate teenuste puhul. Parendusettepanekuna, nagu eelpool mainitud, võiks selle tulevikus viia ühtse mudeli peale, oleks kokkuvõttes lihtsam koodi hallata. Kontrolleris kasutatakse teenusetarbijate autentimist, mistõttu on raskendatud juurdepääsu mitteomavate kasutajate süsteemi sisenemine. Lisaks on rakendatud ka autoriseerimist, mis omakorda piirab juurdepääsu omavatel süsteemi kasutajatel üksteise sessioonide kuulamise ja andmelekke tekkimist. Iga päringu tegemiseks kasutatakse sisselogimisel saadud tokenit, mis võimaldab eelpool toodut rakendada.&lt;br /&gt;
Nõuetekohaselt salvestatakse statistikat kasutaja tegevuste kohta, mis kokkuvõttes on kindlasti hea nii kasutajale endale oma protsesside optimeerimiseks kui ka eelkõige rakenduse arendusmeeskonnale erinevate tegevuste optimiseerimiseks.&lt;br /&gt;
Küll aga leidsime ühe vea, kus kõigil kasutajatel on võimalik näha kõiki sisestatud projekte, see aga ei oleks ka ettevõttesiseselt ehk alati otstarbekas, ja tasuks kindlasti üle vaadata ning muuta  kui soovitakse rakendust ka SaaS mudeli alusel müüja.&lt;br /&gt;
&lt;br /&gt;
==Piirangute olemasolu pöördumiste arvu osas ning nende haldust==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Kasutusjuhendi olemasolu==&lt;br /&gt;
&lt;br /&gt;
==Klientrakenduse tehnoloogia, ülesehitus ja kasutusmugavus==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pealkiri 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Lõpptoote retsensioon meeskonnalt [https://wiki.itcollege.ee/index.php/PC_KartKicker PC KartKicker]=&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
 &lt;br /&gt;
=== Domeenimudelid ===&lt;br /&gt;
 &lt;br /&gt;
Veebiteenuse domeenimudelid on kirjeldatud üsna põhjalikult ja meeldib, et mõistlikes kohtades on kasutatud annotatsioone – näiteks piiratud stringi pikkused ja lisatud required väljad kuhu vaja. Mudeleid on kokku kümne ringis, mis viitab sellele, et projekt tundub nõudeid arvestades paraja suurusega. Lisaks on leidub eraldi kaust, kus on realiseeritud Enum’itena erinevad fikseeritud skaalaga väljad. Veel torkab silma, et kasutatakse Lazy Loading’ut, mis antud rakenduse suuruse juures pole võib-olla kõige vajalikum. Samuti võib see tulevikus raskendada rakenduse üle viimist ASP.NET Core’i peale, mis seda ei toeta. Natukene häirivad mõned mitu-mitmele seoste tulemusel tekkivate olemite nimetused – näiteks User_DevTeam või User_Project. Võib-olla oleks silmale veidi ilusam neid ilma alakriipsuta kirjutada, kuid see on paljuski isiklik eelistus. Kokkuvõtvalt aga peab mainima, et mudelid tunduvad hästi läbi mõeldud ning siinkohal on etteheiteid teha raske.&lt;br /&gt;
 &lt;br /&gt;
=== Andmebaas ja repositooriumid ===&lt;br /&gt;
 &lt;br /&gt;
Arhitektuuri osas on kasutatud Repository pattern’it db-contexti vastu, samuti Unit of Work pattern’it, mis koondab enda alla repositooriumid. Kiita saab seda, et Helpers kataloogis on DbInitializer, mis teeb konkreetset koodi mittetundvale inimesele rakenduse järgiproovimise lihtsaks (ei pea ise dummy data’t genereerima, vaid saab kohemaid sisusse süveneda). Repositooriumite osas torkab silma, et need on enamjaolt tühjad (peale UserRepository), kuid UOW-s registreeritakse need custom repositooriumitena. Loomulikult võib need tuleviku arendusi silmas pidades valmis ära teha, kuid siis pole suurt mõtet neid veel eraldi Dictionary-sse registreerida vaid kasutada UOW-s standardsetena. Iga repositooriumi vastu on kirjutatud eraldi Interface, nii repositooriumid, kui Interface’id kasutavad baasmudelit (vastavalt EFRepository ja IRepository), millest nad pärinevad. &lt;br /&gt;
  &lt;br /&gt;
=== Äriloogika ===&lt;br /&gt;
 &lt;br /&gt;
Kontrollerid suhtlevad antud juhul service layer’iga ja kasutatakse DTO-sid koos factory pattern’iga. DTO-d tunduvad kõik domeenimudelitega identsed ja on seega ilmselt valmis tehtud just tulevikku silmas pidades. Kontrollerites on realiseeritud enamjaolt CRUD meetodid, mis kasutavad DTO-sid, kuid väga palju spetsiifilisi lahendusi realiseeritud ei ole. Kontrolleritele võiks vaid nii palju ette heita, et ei kasutata asünkroonset lähenemist, mis teeks rakenduse tulevikus veelgi skaleeritavamaks. Samas, nii repositooriumid kui kontrollerid on õiges kohas ja õigesti üles ehitatud ning kõik tundub ilusasti töötavat. Kasutajate haldus kasutab Entity Framework-i enda ApplicationUser’it, seega aine baas-repositooriumis välja pakutud custom Identity lahendust ei ole siinkohal realiseeritud (mis ei olnud ka ise-enesest eraldi nõue). &lt;br /&gt;
 &lt;br /&gt;
=== Kokkuvõte ===&lt;br /&gt;
 &lt;br /&gt;
Teenuse juures torkab silma, et meeskond tunneb hästi arhitektuurilisi võtteid, kuidas veebirakendusi loogiliselt üles ehitada. Kuigi rakendus praeguses mahus kõiki neid kihte veel ei vaja, annab see võimaluse tulevikus teenust lihtsasti skaleerida, kuna kihid on juba algusest saati ilusasti paigas. Sellest annab ka tunnistust see, et näiteks DTO-de ja domeenimudelite väljad hetkel kattuvad, kuid tulevikus on lihtsasti võimalik teha andmebaasis muudatusi ja täiendusi ilma neid kliendile kohe välja näitamata. Kood on enam-vähem korralikult kommenteeritud, kuid mõndades kohtades jäi silma pikk doctype kommentaaride rida, mis oli kirjutatud Eesti keeles. Kuna Visual Studio genereerib uut rakendust tehes ka palju ingliskeelseid kommentaare, võiks kaaluda ühtse stiili kasutamist ning vältida eestikeelset teksti koodi vahel. Kokkuvõtvalt tuleb meeskonda kiita tubli töö eest. Teenus on väga korralikult üles ehitatud ning järgib paljusid mustreid, mis on täna tõsiseltvõetavate rakenduste tunnuseks. Kuigi sellise mahuga rakenduse võiks kirjutada vabalt ka ilma UOW vahekihita, näitab selle kasutamine teatavat vilumust ning teeb teenuse juures tulevikus muudatuste tegemise lihtsamaks. Arvestades, et meeskonnas oli vaid kaks liiget, väärib see projekt kindlalt maksimumpunkte!&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
=== Arhitektuur === &lt;br /&gt;
&lt;br /&gt;
Klientrakendus on realiseeritud Windows Application’ina ning asub samas solution’is. Klientrakendus kasutab samu domeenimudeleid ning samuti on olemas Enum’ite kaust fikseeritud skaalaga väljade jaoks. Nii nagu teenuse osas, häirivad veidi silma alakriipsuga deklareeritud väljad (nt. User_UserStoryStart), kuid see on jällegi puhtalt stiili küsimus. Domeenimudelid suhtlevad API-ga tokenite abil, mis initsialiseeritakse konstruktoris. Samuti on olemas vaatemudelid, mis pärinevad baas vaatemudelist BaseVM, mis on põhimõtteliselt event handler. Vaated näevad välja nagu nad out of the box on - eristuvat disaini ei ole siinkohal märgata. Samas on see arusaadav, kuna projekti maht oli niigi suur ja põhifookus lasus funktsionaalsuse realiseerimisel. Eraldi on olemas service layer, mille ülesandeks on andmete edastamine API vastu. Iga domeenimudeli jaoks on eraldi service, mis pärineb baas service’ist. Mõne viewmodel’i puhul jäi silma, et see kasutab väga palju service klasse (näiteks DevTeamVM kasutab viite service’it). Siinkohal oleks võinud kaaluda teha lisaabstraktsioon, mis koondaks enda alla service-id. Idee poolest võiks see olla nagu UOW (Unit of Work), mida saaks süstida vaatemudelitesse, et need võiksid kasutada kõiki vajaminevaid service klasse. Teisalt ei ole projekti maht niivõrd suur ja see võib vabalt jääda ka tulevikuks.&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsus ===&lt;br /&gt;
 &lt;br /&gt;
Rakendust avades kuvatakse kõigepealt sisselogimise aken, kust on konto puudumisel võimalik kohe ka uus kasutaja registreerida. Peale registreerimist võiks kuvada lisaakna, millega kinnitada kasutajale, et registreerimine tõepoolest õnnestus. Praegu suunatakse lihtsalt tagasi sisselogimise aknasse. Peale sisselogimist avaneb “põhiaken”, kus saab kasutada juba põhifunktsionaalsust - siduda kasutajat projektide ja arendusmeeskondadega, projektidele lisada iteratsiooni ning iteratsioonidele kasutajalugusid. Nii projekte, kasutajalugusid kui iteratsioone saab sealjuures eraldiseisvalt kustutada ning ülemkategooria kustutamisel kaovad ka alamüksused (cascade delete). Siin tuleb selgelt välja, et domeenimudelid on läbimõeldud ning lisatud vajalikud väljad. Samas ei ole “surnud” välju, mida kuskil ei kasutata ja mis niisama objekti küljes on. Lisaks on võimalik vaadata statistikat ning muuhulgas jälgitakse ka kasutajate sisselogimiste arvu (teatavasti oli sisselogimiste arvu piiramine ka üks projekti nõuetest).&lt;br /&gt;
 &lt;br /&gt;
=== Kokkuvõte ===&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on korralikult kirjutatud ning arvestades tervet projektimahtu ei ole sellele palju ette heita. Disaini osas oleks võinud mõelda klienti realiseerida siiski veebirakendusena, kasutades näiteks AngularJS-i veebiraamistikuna. Samas võib omast kogemusest öelda, et kindlasti ei ole see ajasäästlikum tee, kui tehnoloogiad hästi ei valda (arvestades, et aine raames Angularist väga mida rääkida ei jõutud). Selle tulemusena oleks saanud disaini ka veidi parema teha, kuid kõige tähtsam on siiski funktsionaalsuse realiseerimine, mis õnnestus väga hästi ja mille eest tuleb meeskonda kiita. Ükski lahendus ei tundu poolik, ning kõik on suures plaanis läbi mõeldud. Siit jääb kuvama ka tõsiasi, et see projekt on tegelikult edasiarendus C# aines kirjutatud projektile ning võib arvata, et seetõttu oli ka andmebaasi struktuuri ülesehitamine selle võrra lihtsam. Mõte ise on samuti hea. Kui meeskonnal tekiks tahtmine asja päriselt realiseerida, oleks nüüd lihtne võtta teenus ning teha sellele lisaks otsa korralik veebirakendus, mis näeb ilus välja.&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Talk:DevHelpVR&amp;diff=123657</id>
		<title>Talk:DevHelpVR</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Talk:DevHelpVR&amp;diff=123657"/>
		<updated>2017-06-14T19:50:51Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Lõpptoote retsensioon meeskonnalt PC KartKicker (Broneering) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Retsensioon projektile DevHelpVR=&lt;br /&gt;
&lt;br /&gt;
==Sissejuhatus==&lt;br /&gt;
Retsensiooni eesmärgiks oli võrrelda püstitatud ülesannet lõpptulemusega ning analüüsida esmalt veebiteenuse poolt, kasutatud andmemudeleid, mustreid ning koodi jälgitavust ehk visuaalset poolt. Teiseks tuli analüüsida ka kliendirakendust, mis eesmärgipäraselt peaks suhtlema loodud veebiteenusega. &lt;br /&gt;
Retsensiooni käigus hindasime veebiteenuse ja klientrakenduse osas vastavalt järgmiseid nüansse:&lt;br /&gt;
&lt;br /&gt;
1. Andmebaasi olemite arv&lt;br /&gt;
&lt;br /&gt;
2. Kastutatav tehnoloogia (WCF või ASP.NET MVC Web API)&lt;br /&gt;
&lt;br /&gt;
3. Veebiteenuse olemasolu&lt;br /&gt;
&lt;br /&gt;
4. Mitmekasutaja funktsionaalsuse olemasolu&lt;br /&gt;
&lt;br /&gt;
5. Kasutajate tuvastamist ja haldamist&lt;br /&gt;
&lt;br /&gt;
6. Kasutusstatistika üle arve pidamist&lt;br /&gt;
&lt;br /&gt;
7. Piirangute olemasolu pöördumiste arvu osas ning nende haldust&lt;br /&gt;
&lt;br /&gt;
8. Kasutusjuhendi olemasolu&lt;br /&gt;
&lt;br /&gt;
9. Klientrakenduse tehnoloogia, ülesehitus ja kasutusmugavus&lt;br /&gt;
&lt;br /&gt;
==Andmemudel, olemid==&lt;br /&gt;
Projekti eesmärgiks oli luua rakendus, mis aitaks arendajal oma töid paremini planeerida ja omada ülevaadet käimasolevatest ning järgmisena algavatest ülesannetest.&lt;br /&gt;
Projekti andmemudel on ilusti üles ehitatud, kuid võrreldes esialgu planeerituga esineb erinevus olemite koguarvus, samas on põhifunktsionaalsus kenasti olemas. Andmebaasi olemite arv, ilma Identity olemiteta, on 10 (esialgses analüüsidokumendis saime neid kokku 16). &lt;br /&gt;
Analüüsi käigus ei suutnud tuvastada ühtegi suurt viga, küll aga saaksime teha mõned soovitused. Nimelt enamik olemeid, milles esineb nn algus ja lõppaeg, võiks lõppaja väli olla pigem valikuline, kuna alati ei pruugi projektil, meeskonnal või muul olemil olla teada lõppaeg selle objekti sisestamisel - ehk et see võib selguda alles peale mõningast analüüsi. Lisaks, tõenäoliselt tähelepanuta jäänud, on UserStory olemi Storypoints attribuudil annotatsioon [Required]. Seda aga tegelikult vaja pole, kuna int on väärtustüüpi muutuja ja nõuab vaikimisi väärtust.&lt;br /&gt;
Kolmanda soovitusena võiks mainida ka seda, et tegelikult saaks edukalt ära kasutada ka Identity-ga kaasa tulevaid olemeid näiteks rollide ja kasutajate kirjeldamiseks.&lt;br /&gt;
&lt;br /&gt;
Välja võib tuua seda, et kõik olemid ja seosed on hästi läbimõeldud, kasutatud on piisavalt annotatsioone ja kõik viitetüüpi olemi atribuudid on sobivalt piiratud (eelkõige string muutujad).&lt;br /&gt;
&lt;br /&gt;
==Kasutatav tehnoloogia ja veebiteenuse olemasolu==&lt;br /&gt;
Projekt on ülesehitatud kasutades ASP.NET MVC Web API tehnoloogiat nii, nagu kirjas ka õppejõu poolt antud projekti nõuetes. Rakenduse ülesehitus on hajutatud, mis tähendab, et andmekihid on üksteisest eraldatud ja kogu andmevoog on hästi jälgitav ning lihtsasti muudetav. Eraldi asuvad mudelid, äriloogika kiht, teenused ning kontrollerid ja klientrakendus.&lt;br /&gt;
Kontrollerite ülesehitus on loogiline - iga ärilise funktsionaalsuse kohta on oma kontroller - eriti jääb silma ja peab siin ära märkima kommentaarid, mis aitavad selgemalt aru saada kontrolleri taustast.&lt;br /&gt;
Andmevoog liigub nagu raamatus :), kontrollerist teenusesse ja sealt edasi kasutatakse Unit of Work ja Repository mustreid, mis aitab kindlasti jõudlusele kaasa.&lt;br /&gt;
Kokkuvõtvalt on veebiteenus hästi ülesehitatud, kuid silma jäi ja välja võiks tuua ehk selle, et mitte kõik kontrollerid ei tagasta vea korral 404 veateadet. &lt;br /&gt;
&lt;br /&gt;
==Kasutajate tuvastamine, haldus, mitmekasutaja funktsionaalsus, statistika==&lt;br /&gt;
Teenus on ülesehtitatud kasutades Asp.Net enda Identity moodulit, mistõttu toetab see mitmekasutaja funktsionaalsust ja kasutajate hallatavust. Võib näha, et esialgne andmemudel oli planeeritud kasutama iseseisvat kasutajate andmemudelit ja nii on see ka teostatud. Küll aga on lisandunud seos AspNetUsers tabelile, kui kasutaja registreeritakse ja hilisemate mõningate teenuste puhul. Parendusettepanekuna, nagu eelpool mainitud, võiks selle tulevikus viia ühtse mudeli peale, oleks kokkuvõttes lihtsam koodi hallata. Kontrolleris kasutatakse teenusetarbijate autentimist, mistõttu on raskendatud juurdepääsu mitteomavate kasutajate süsteemi sisenemine. Lisaks on rakendatud ka autoriseerimist, mis omakorda piirab juurdepääsu omavatel süsteemi kasutajatel üksteise sessioonide kuulamise ja andmelekke tekkimist. Iga päringu tegemiseks kasutatakse sisselogimisel saadud tokenit, mis võimaldab eelpool toodut rakendada.&lt;br /&gt;
Nõuetekohaselt salvestatakse statistikat kasutaja tegevuste kohta, mis kokkuvõttes on kindlasti hea nii kasutajale endale oma protsesside optimeerimiseks kui ka eelkõige rakenduse arendusmeeskonnale erinevate tegevuste optimiseerimiseks.&lt;br /&gt;
Küll aga leidsime ühe vea, kus kõigil kasutajatel on võimalik näha kõiki sisestatud projekte, see aga ei oleks ka ettevõttesiseselt ehk alati otstarbekas, ja tasuks kindlasti üle vaadata ning muuta  kui soovitakse rakendust ka SaaS mudeli alusel müüja.&lt;br /&gt;
&lt;br /&gt;
==Piirangute olemasolu pöördumiste arvu osas ning nende haldust==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Kasutusjuhendi olemasolu==&lt;br /&gt;
&lt;br /&gt;
==Klientrakenduse tehnoloogia, ülesehitus ja kasutusmugavus==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pealkiri 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Lõpptoote retsensioon meeskonnalt [https://wiki.itcollege.ee/index.php/PC_KartKicker PC KartKicker]=&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
 &lt;br /&gt;
=== Domeenimudelid ===&lt;br /&gt;
 &lt;br /&gt;
Veebiteenuse domeenimudelid on kirjeldatud üsna põhjalikult ja meeldib, et mõistlikes kohtades on kasutatud annotatsioone – näiteks piiratud stringi pikkused ja lisatud required väljad kuhu vaja. Mudeleid on kokku kümne ringis, mis viitab sellele, et projekt tundub nõudeid arvestades paraja suurusega. Lisaks on leidub eraldi kaust, kus on realiseeritud Enum’itena erinevad fikseeritud skaalaga väljad. Veel torkab silma, et kasutatakse Lazy Loading’ut, mis antud rakenduse suuruse juures pole võib-olla kõige vajalikum. Samuti võib see tulevikus raskendada rakenduse üle viimist ASP.NET Core’i peale, mis seda ei toeta. Natukene häirivad mõned mitu-mitmele seoste tulemusel tekkivate olemite nimetused – näiteks User_DevTeam või User_Project. Võib-olla oleks silmale veidi ilusam neid ilma alakriipsuta kirjutada, kuid see on paljuski isiklik eelistus. Kokkuvõtvalt aga peab mainima, et mudelid tunduvad hästi läbi mõeldud ning siinkohal on etteheiteid teha raske.&lt;br /&gt;
 &lt;br /&gt;
=== Andmebaas ja repositooriumid ===&lt;br /&gt;
 &lt;br /&gt;
Arhitektuuri osas on kasutatud Repository pattern’it db-contexti vastu, samuti Unit of Work pattern’it, mis koondab enda alla repositooriumid. Kiita saab seda, et Helpers kataloogis on DbInitializer, mis teeb konkreetset koodi mittetundvale inimesele rakenduse järgiproovimise lihtsaks (ei pea ise dummy data’t genereerima, vaid saab kohemaid sisusse süveneda). Repositooriumite osas torkab silma, et need on enamjaolt tühjad (peale UserRepository), kuid UOW-s registreeritakse need custom repositooriumitena. Loomulikult võib need tuleviku arendusi silmas pidades valmis ära teha, kuid siis pole suurt mõtet neid veel eraldi Dictionary-sse registreerida vaid kasutada UOW-s standardsetena. Iga repositooriumi vastu on kirjutatud eraldi Interface, nii repositooriumid, kui Interface’id kasutavad baasmudelit (vastavalt EFRepository ja IRepository), millest nad pärinevad. &lt;br /&gt;
  &lt;br /&gt;
=== Äriloogika ===&lt;br /&gt;
 &lt;br /&gt;
Kontrollerid suhtlevad antud juhul service layer’iga ja kasutatakse DTO-sid koos factory pattern’iga. DTO-d tunduvad kõik domeenimudelitega identsed ja on seega ilmselt valmis tehtud just tulevikku silmas pidades. Kontrollerites on realiseeritud enamjaolt CRUD meetodid, mis kasutavad DTO-sid, kuid väga palju spetsiifilisi lahendusi realiseeritud ei ole. Kontrolleritele võiks vaid nii palju ette heita, et ei kasutata asünkroonset lähenemist, mis teeks rakenduse tulevikus veelgi skaleeritavamaks. Samas, nii repositooriumid kui kontrollerid on õiges kohas ja õigesti üles ehitatud ning kõik tundub ilusasti töötavat. Kasutajate haldus kasutab Entity Framework-i enda ApplicationUser’it, seega aine baas-repositooriumis välja pakutud custom Identity lahendust ei ole siinkohal realiseeritud (mis ei olnud ka ise-enesest eraldi nõue). &lt;br /&gt;
 &lt;br /&gt;
=== Kokkuvõte ===&lt;br /&gt;
 &lt;br /&gt;
Teenuse juures torkab silma, et meeskond tunneb hästi arhitektuurilisi võtteid, kuidas veebirakendusi loogiliselt üles ehitada. Kuigi rakendus praeguses mahus kõiki neid kihte veel ei vaja, annab see võimaluse tulevikus teenust lihtsasti skaleerida, kuna kihid on juba algusest saati ilusasti paigas. Sellest annab ka tunnistust see, et näiteks DTO-de ja domeenimudelite väljad hetkel kattuvad, kuid tulevikus on lihtsasti võimalik teha andmebaasis muudatusi ja täiendusi ilma neid kliendile kohe välja näitamata. Kood on enam-vähem korralikult kommenteeritud, kuid mõndades kohtades jäi silma pikk doctype kommentaaride rida, mis oli kirjutatud Eesti keeles. Kuna Visual Studio genereerib uut rakendust tehes ka palju ingliskeelseid kommentaare, võiks kaaluda ühtse stiili kasutamist ning vältida eestikeelset teksti koodi vahel. Kokkuvõtvalt tuleb meeskonda kiita tubli töö eest. Teenus on väga korralikult üles ehitatud ning järgib paljusid mustreid, mis on täna tõsiseltvõetavate rakenduste tunnuseks. Kuigi sellise mahuga rakenduse võiks kirjutada vabalt ka ilma UOW vahekihita, näitab selle kasutamine teatavat vilumust ning teeb teenuse juures tulevikus muudatuste tegemise lihtsamaks. Arvestades, et meeskonnas oli vaid kaks liiget, väärib see projekt kindlalt maksimumpunkte!&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Talk:DevHelpVR&amp;diff=123656</id>
		<title>Talk:DevHelpVR</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Talk:DevHelpVR&amp;diff=123656"/>
		<updated>2017-06-14T19:50:39Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Lõpptoote retsensioon meeskonnalt PC KartKicker (Broneering) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Retsensioon projektile DevHelpVR=&lt;br /&gt;
&lt;br /&gt;
==Sissejuhatus==&lt;br /&gt;
Retsensiooni eesmärgiks oli võrrelda püstitatud ülesannet lõpptulemusega ning analüüsida esmalt veebiteenuse poolt, kasutatud andmemudeleid, mustreid ning koodi jälgitavust ehk visuaalset poolt. Teiseks tuli analüüsida ka kliendirakendust, mis eesmärgipäraselt peaks suhtlema loodud veebiteenusega. &lt;br /&gt;
Retsensiooni käigus hindasime veebiteenuse ja klientrakenduse osas vastavalt järgmiseid nüansse:&lt;br /&gt;
&lt;br /&gt;
1. Andmebaasi olemite arv&lt;br /&gt;
&lt;br /&gt;
2. Kastutatav tehnoloogia (WCF või ASP.NET MVC Web API)&lt;br /&gt;
&lt;br /&gt;
3. Veebiteenuse olemasolu&lt;br /&gt;
&lt;br /&gt;
4. Mitmekasutaja funktsionaalsuse olemasolu&lt;br /&gt;
&lt;br /&gt;
5. Kasutajate tuvastamist ja haldamist&lt;br /&gt;
&lt;br /&gt;
6. Kasutusstatistika üle arve pidamist&lt;br /&gt;
&lt;br /&gt;
7. Piirangute olemasolu pöördumiste arvu osas ning nende haldust&lt;br /&gt;
&lt;br /&gt;
8. Kasutusjuhendi olemasolu&lt;br /&gt;
&lt;br /&gt;
9. Klientrakenduse tehnoloogia, ülesehitus ja kasutusmugavus&lt;br /&gt;
&lt;br /&gt;
==Andmemudel, olemid==&lt;br /&gt;
Projekti eesmärgiks oli luua rakendus, mis aitaks arendajal oma töid paremini planeerida ja omada ülevaadet käimasolevatest ning järgmisena algavatest ülesannetest.&lt;br /&gt;
Projekti andmemudel on ilusti üles ehitatud, kuid võrreldes esialgu planeerituga esineb erinevus olemite koguarvus, samas on põhifunktsionaalsus kenasti olemas. Andmebaasi olemite arv, ilma Identity olemiteta, on 10 (esialgses analüüsidokumendis saime neid kokku 16). &lt;br /&gt;
Analüüsi käigus ei suutnud tuvastada ühtegi suurt viga, küll aga saaksime teha mõned soovitused. Nimelt enamik olemeid, milles esineb nn algus ja lõppaeg, võiks lõppaja väli olla pigem valikuline, kuna alati ei pruugi projektil, meeskonnal või muul olemil olla teada lõppaeg selle objekti sisestamisel - ehk et see võib selguda alles peale mõningast analüüsi. Lisaks, tõenäoliselt tähelepanuta jäänud, on UserStory olemi Storypoints attribuudil annotatsioon [Required]. Seda aga tegelikult vaja pole, kuna int on väärtustüüpi muutuja ja nõuab vaikimisi väärtust.&lt;br /&gt;
Kolmanda soovitusena võiks mainida ka seda, et tegelikult saaks edukalt ära kasutada ka Identity-ga kaasa tulevaid olemeid näiteks rollide ja kasutajate kirjeldamiseks.&lt;br /&gt;
&lt;br /&gt;
Välja võib tuua seda, et kõik olemid ja seosed on hästi läbimõeldud, kasutatud on piisavalt annotatsioone ja kõik viitetüüpi olemi atribuudid on sobivalt piiratud (eelkõige string muutujad).&lt;br /&gt;
&lt;br /&gt;
==Kasutatav tehnoloogia ja veebiteenuse olemasolu==&lt;br /&gt;
Projekt on ülesehitatud kasutades ASP.NET MVC Web API tehnoloogiat nii, nagu kirjas ka õppejõu poolt antud projekti nõuetes. Rakenduse ülesehitus on hajutatud, mis tähendab, et andmekihid on üksteisest eraldatud ja kogu andmevoog on hästi jälgitav ning lihtsasti muudetav. Eraldi asuvad mudelid, äriloogika kiht, teenused ning kontrollerid ja klientrakendus.&lt;br /&gt;
Kontrollerite ülesehitus on loogiline - iga ärilise funktsionaalsuse kohta on oma kontroller - eriti jääb silma ja peab siin ära märkima kommentaarid, mis aitavad selgemalt aru saada kontrolleri taustast.&lt;br /&gt;
Andmevoog liigub nagu raamatus :), kontrollerist teenusesse ja sealt edasi kasutatakse Unit of Work ja Repository mustreid, mis aitab kindlasti jõudlusele kaasa.&lt;br /&gt;
Kokkuvõtvalt on veebiteenus hästi ülesehitatud, kuid silma jäi ja välja võiks tuua ehk selle, et mitte kõik kontrollerid ei tagasta vea korral 404 veateadet. &lt;br /&gt;
&lt;br /&gt;
==Kasutajate tuvastamine, haldus, mitmekasutaja funktsionaalsus, statistika==&lt;br /&gt;
Teenus on ülesehtitatud kasutades Asp.Net enda Identity moodulit, mistõttu toetab see mitmekasutaja funktsionaalsust ja kasutajate hallatavust. Võib näha, et esialgne andmemudel oli planeeritud kasutama iseseisvat kasutajate andmemudelit ja nii on see ka teostatud. Küll aga on lisandunud seos AspNetUsers tabelile, kui kasutaja registreeritakse ja hilisemate mõningate teenuste puhul. Parendusettepanekuna, nagu eelpool mainitud, võiks selle tulevikus viia ühtse mudeli peale, oleks kokkuvõttes lihtsam koodi hallata. Kontrolleris kasutatakse teenusetarbijate autentimist, mistõttu on raskendatud juurdepääsu mitteomavate kasutajate süsteemi sisenemine. Lisaks on rakendatud ka autoriseerimist, mis omakorda piirab juurdepääsu omavatel süsteemi kasutajatel üksteise sessioonide kuulamise ja andmelekke tekkimist. Iga päringu tegemiseks kasutatakse sisselogimisel saadud tokenit, mis võimaldab eelpool toodut rakendada.&lt;br /&gt;
Nõuetekohaselt salvestatakse statistikat kasutaja tegevuste kohta, mis kokkuvõttes on kindlasti hea nii kasutajale endale oma protsesside optimeerimiseks kui ka eelkõige rakenduse arendusmeeskonnale erinevate tegevuste optimiseerimiseks.&lt;br /&gt;
Küll aga leidsime ühe vea, kus kõigil kasutajatel on võimalik näha kõiki sisestatud projekte, see aga ei oleks ka ettevõttesiseselt ehk alati otstarbekas, ja tasuks kindlasti üle vaadata ning muuta  kui soovitakse rakendust ka SaaS mudeli alusel müüja.&lt;br /&gt;
&lt;br /&gt;
==Piirangute olemasolu pöördumiste arvu osas ning nende haldust==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Kasutusjuhendi olemasolu==&lt;br /&gt;
&lt;br /&gt;
==Klientrakenduse tehnoloogia, ülesehitus ja kasutusmugavus==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pealkiri 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Lõpptoote retsensioon meeskonnalt [https://wiki.itcollege.ee/index.php/PC_KartKicker PC KartKicker] (Broneering)=&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
 &lt;br /&gt;
=== Domeenimudelid ===&lt;br /&gt;
 &lt;br /&gt;
Veebiteenuse domeenimudelid on kirjeldatud üsna põhjalikult ja meeldib, et mõistlikes kohtades on kasutatud annotatsioone – näiteks piiratud stringi pikkused ja lisatud required väljad kuhu vaja. Mudeleid on kokku kümne ringis, mis viitab sellele, et projekt tundub nõudeid arvestades paraja suurusega. Lisaks on leidub eraldi kaust, kus on realiseeritud Enum’itena erinevad fikseeritud skaalaga väljad. Veel torkab silma, et kasutatakse Lazy Loading’ut, mis antud rakenduse suuruse juures pole võib-olla kõige vajalikum. Samuti võib see tulevikus raskendada rakenduse üle viimist ASP.NET Core’i peale, mis seda ei toeta. Natukene häirivad mõned mitu-mitmele seoste tulemusel tekkivate olemite nimetused – näiteks User_DevTeam või User_Project. Võib-olla oleks silmale veidi ilusam neid ilma alakriipsuta kirjutada, kuid see on paljuski isiklik eelistus. Kokkuvõtvalt aga peab mainima, et mudelid tunduvad hästi läbi mõeldud ning siinkohal on etteheiteid teha raske.&lt;br /&gt;
 &lt;br /&gt;
=== Andmebaas ja repositooriumid ===&lt;br /&gt;
 &lt;br /&gt;
Arhitektuuri osas on kasutatud Repository pattern’it db-contexti vastu, samuti Unit of Work pattern’it, mis koondab enda alla repositooriumid. Kiita saab seda, et Helpers kataloogis on DbInitializer, mis teeb konkreetset koodi mittetundvale inimesele rakenduse järgiproovimise lihtsaks (ei pea ise dummy data’t genereerima, vaid saab kohemaid sisusse süveneda). Repositooriumite osas torkab silma, et need on enamjaolt tühjad (peale UserRepository), kuid UOW-s registreeritakse need custom repositooriumitena. Loomulikult võib need tuleviku arendusi silmas pidades valmis ära teha, kuid siis pole suurt mõtet neid veel eraldi Dictionary-sse registreerida vaid kasutada UOW-s standardsetena. Iga repositooriumi vastu on kirjutatud eraldi Interface, nii repositooriumid, kui Interface’id kasutavad baasmudelit (vastavalt EFRepository ja IRepository), millest nad pärinevad. &lt;br /&gt;
  &lt;br /&gt;
=== Äriloogika ===&lt;br /&gt;
 &lt;br /&gt;
Kontrollerid suhtlevad antud juhul service layer’iga ja kasutatakse DTO-sid koos factory pattern’iga. DTO-d tunduvad kõik domeenimudelitega identsed ja on seega ilmselt valmis tehtud just tulevikku silmas pidades. Kontrollerites on realiseeritud enamjaolt CRUD meetodid, mis kasutavad DTO-sid, kuid väga palju spetsiifilisi lahendusi realiseeritud ei ole. Kontrolleritele võiks vaid nii palju ette heita, et ei kasutata asünkroonset lähenemist, mis teeks rakenduse tulevikus veelgi skaleeritavamaks. Samas, nii repositooriumid kui kontrollerid on õiges kohas ja õigesti üles ehitatud ning kõik tundub ilusasti töötavat. Kasutajate haldus kasutab Entity Framework-i enda ApplicationUser’it, seega aine baas-repositooriumis välja pakutud custom Identity lahendust ei ole siinkohal realiseeritud (mis ei olnud ka ise-enesest eraldi nõue). &lt;br /&gt;
 &lt;br /&gt;
=== Kokkuvõte ===&lt;br /&gt;
 &lt;br /&gt;
Teenuse juures torkab silma, et meeskond tunneb hästi arhitektuurilisi võtteid, kuidas veebirakendusi loogiliselt üles ehitada. Kuigi rakendus praeguses mahus kõiki neid kihte veel ei vaja, annab see võimaluse tulevikus teenust lihtsasti skaleerida, kuna kihid on juba algusest saati ilusasti paigas. Sellest annab ka tunnistust see, et näiteks DTO-de ja domeenimudelite väljad hetkel kattuvad, kuid tulevikus on lihtsasti võimalik teha andmebaasis muudatusi ja täiendusi ilma neid kliendile kohe välja näitamata. Kood on enam-vähem korralikult kommenteeritud, kuid mõndades kohtades jäi silma pikk doctype kommentaaride rida, mis oli kirjutatud Eesti keeles. Kuna Visual Studio genereerib uut rakendust tehes ka palju ingliskeelseid kommentaare, võiks kaaluda ühtse stiili kasutamist ning vältida eestikeelset teksti koodi vahel. Kokkuvõtvalt tuleb meeskonda kiita tubli töö eest. Teenus on väga korralikult üles ehitatud ning järgib paljusid mustreid, mis on täna tõsiseltvõetavate rakenduste tunnuseks. Kuigi sellise mahuga rakenduse võiks kirjutada vabalt ka ilma UOW vahekihita, näitab selle kasutamine teatavat vilumust ning teeb teenuse juures tulevikus muudatuste tegemise lihtsamaks. Arvestades, et meeskonnas oli vaid kaks liiget, väärib see projekt kindlalt maksimumpunkte!&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Talk:DevHelpVR&amp;diff=123507</id>
		<title>Talk:DevHelpVR</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Talk:DevHelpVR&amp;diff=123507"/>
		<updated>2017-06-12T11:08:11Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Retsensioon meeskonnalt PC KartKicker */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=XML ülesannete retsensioon meeskonnalt [https://wiki.itcollege.ee/index.php/PC_KartKicker PC KartKicker]=&lt;br /&gt;
==XML fail==&lt;br /&gt;
Näidisfail valideerub ning vastab struktuuri keerukuskriteeriumitele - on vähemalt neli loogilist dimensiooni, kahel dimensioonil (iterations ja userstory) on kasutatud ID-st informatiivsemaid atribuute.&lt;br /&gt;
&lt;br /&gt;
XML fail on loogiliselt struktureeritud ja kergesti arusaadav, seda ka vaatamata kommentaaride puudumisele. Elementide ja atribuutide nimed on loogilised ja järgivad ühtset stiili.&lt;br /&gt;
Andmete paigutus atribuutidesse ja elementidesse tundub üldjoontes mõistlik, aga mina isiklikult oleks erinevates kohtades kasutatud &#039;name&#039; elemendi asemel selle info pannud atribuudiks.&lt;br /&gt;
&lt;br /&gt;
==XML schema==&lt;br /&gt;
Näidisfail vastab schema tingimustele. Andmetüübid vastavad andmete sisule ja eeldatavale kasutusele, aga nt. kuna identifikaatorid on üldjuhul positiivse väärtusega, siis võiks &#039;id&#039; andmetüüp olla integer asemel unsignedInt.&lt;br /&gt;
Üritasin erinevaid kavalaid sigadusi korraldada XML failis ja iga kord oli Visual Studio kohe jaol tänu XSD failile, seega on XSD põhjalikult koostatud. Lisaks oleks olnud hea näha kommentaarides XSD valikute seletust äriloogika vaatepunktist.&lt;br /&gt;
&lt;br /&gt;
==Transformatsioonid==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;XML -&amp;gt; HTML transformatsioon&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Transformatsioonis on kasutatud mitut &#039;foreach&#039; tsüklit. Arvutusi ja tingimuste kontrolli transformatsioon ei sisalda. Transformatsiooni tulemusel tekib funktsionaalse kujundusega ja hea loetavusega HTML fail. XSLT fail valideerub. &lt;br /&gt;
Väljundiks olev HTML annab W3C validaatoris ühe vea ja kolm hoiatust:&lt;br /&gt;
&lt;br /&gt;
1. viga: Line 1, Column 1: no document type declaration; implying &amp;quot;&amp;lt;!DOCTYPE HTML SYSTEM&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
1. hoiatus: Unable to Determine Parse Mode!&lt;br /&gt;
&lt;br /&gt;
2. hoiatus:  No DOCTYPE found! Checking with default HTML 4.01 Transitional Document Type.&lt;br /&gt;
&lt;br /&gt;
3. hoiatus: Byte-Order Mark found in UTF-8 File.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;XML -&amp;gt; XML transformatsioon&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Transformatsioonis on kasutatud parameetreid, ühte &#039;foreach&#039; tsüklit ning sisaldab mitmeid arvutusi ja boonusena ka sorteerimist. XSLT fail valideerub.&lt;br /&gt;
Väljundiks olev XML läbis W3C validaatori vigadeta.&lt;br /&gt;
&lt;br /&gt;
=Lõpptoote retsensioon meeskonnalt [https://wiki.itcollege.ee/index.php/PC_KartKicker PC KartKicker] (Broneering)=&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Talk:DevHelpVR&amp;diff=123506</id>
		<title>Talk:DevHelpVR</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Talk:DevHelpVR&amp;diff=123506"/>
		<updated>2017-06-12T11:03:18Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Retsensioon meeskonnalt [https://wiki.itcollege.ee/index.php/PC_KartKicker PC KartKicker]=&lt;br /&gt;
==XML fail==&lt;br /&gt;
Näidisfail valideerub ning vastab struktuuri keerukuskriteeriumitele - on vähemalt neli loogilist dimensiooni, kahel dimensioonil (iterations ja userstory) on kasutatud ID-st informatiivsemaid atribuute.&lt;br /&gt;
&lt;br /&gt;
XML fail on loogiliselt struktureeritud ja kergesti arusaadav, seda ka vaatamata kommentaaride puudumisele. Elementide ja atribuutide nimed on loogilised ja järgivad ühtset stiili.&lt;br /&gt;
Andmete paigutus atribuutidesse ja elementidesse tundub üldjoontes mõistlik, aga mina isiklikult oleks erinevates kohtades kasutatud &#039;name&#039; elemendi asemel selle info pannud atribuudiks.&lt;br /&gt;
&lt;br /&gt;
==XML schema==&lt;br /&gt;
Näidisfail vastab schema tingimustele. Andmetüübid vastavad andmete sisule ja eeldatavale kasutusele, aga nt. kuna identifikaatorid on üldjuhul positiivse väärtusega, siis võiks &#039;id&#039; andmetüüp olla integer asemel unsignedInt.&lt;br /&gt;
Üritasin erinevaid kavalaid sigadusi korraldada XML failis ja iga kord oli Visual Studio kohe jaol tänu XSD failile, seega on XSD põhjalikult koostatud. Lisaks oleks olnud hea näha kommentaarides XSD valikute seletust äriloogika vaatepunktist.&lt;br /&gt;
&lt;br /&gt;
==Transformatsioonid==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;XML -&amp;gt; HTML transformatsioon&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Transformatsioonis on kasutatud mitut &#039;foreach&#039; tsüklit. Arvutusi ja tingimuste kontrolli transformatsioon ei sisalda. Transformatsiooni tulemusel tekib funktsionaalse kujundusega ja hea loetavusega HTML fail. XSLT fail valideerub. &lt;br /&gt;
Väljundiks olev HTML annab W3C validaatoris ühe vea ja kolm hoiatust:&lt;br /&gt;
&lt;br /&gt;
1. viga: Line 1, Column 1: no document type declaration; implying &amp;quot;&amp;lt;!DOCTYPE HTML SYSTEM&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
1. hoiatus: Unable to Determine Parse Mode!&lt;br /&gt;
&lt;br /&gt;
2. hoiatus:  No DOCTYPE found! Checking with default HTML 4.01 Transitional Document Type.&lt;br /&gt;
&lt;br /&gt;
3. hoiatus: Byte-Order Mark found in UTF-8 File.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;XML -&amp;gt; XML transformatsioon&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Transformatsioonis on kasutatud parameetreid, ühte &#039;foreach&#039; tsüklit ning sisaldab mitmeid arvutusi ja boonusena ka sorteerimist. XSLT fail valideerub.&lt;br /&gt;
Väljundiks olev XML läbis W3C validaatori vigadeta.&lt;br /&gt;
&lt;br /&gt;
=Lõpptoote retsensioon meeskonnalt [https://wiki.itcollege.ee/index.php/PC_KartKicker PC KartKicker] (Broneering)=&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017&amp;diff=122559</id>
		<title>Kodutöö aines &quot;Võrgurakendused II: hajussüsteemide ehitamine&quot; 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017&amp;diff=122559"/>
		<updated>2017-05-17T15:44:40Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Meeskond: PC KartKicker */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
__NOINDEX__&lt;br /&gt;
&lt;br /&gt;
=Kodutöö aines &amp;quot;Võrgurakendused II: hajussüsteemide ehitamine&amp;quot; 2017=&lt;br /&gt;
==Eesmärk==&lt;br /&gt;
Saada praktiline kogemus hajussüsteemide ehitamisest XML(SOAP) või Rest veebiteenusel ja sellele klientrakenduse loomise abil ning süvendada meeskonnatööoskust. &lt;br /&gt;
*SOAP veebiteenuse puhul eeldatakse WCF tehnoloogia kasutamist. Vanema põlvkonna ASP.NET veebiteenuse loomine ei ole lubatud, kuna seda ei toeta ka Microsoft enam tänasel päeval.&lt;br /&gt;
*REST teenuste loomisel tuleks kasutada ASP.NET Web API võimalusi.&lt;br /&gt;
&lt;br /&gt;
Kaugem eesmärk on loomulikult hinne :).&lt;br /&gt;
&lt;br /&gt;
==Reeglid==&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus&lt;br /&gt;
&lt;br /&gt;
Ühte projektimeeskonda kuulub 3..4 tudengit ning ühel teemal teostab projekti üks või mitu meeskonda. 1,2 ja viie liikmelised meeskonnad tuleks õppejõuga eraldi kooskõlastada.&lt;br /&gt;
&lt;br /&gt;
Töö käiku kajastatakse  http://wiki.itcollege.ee keskkonnas. Wikilehe täitmise eesmärke on kaks: nii on võimalik kirja panna kõik mõtted ja ideed (ning nendest jääb jälg) ning õppejõul on hiljem võimalik saada ülevaade iga projektimeeskonna liikme panusest.&lt;br /&gt;
&lt;br /&gt;
==Tähtajad==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;XML fail&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#XML_andmefail NB! Täpsem info]&lt;br /&gt;
** XML fail, stiilifail ja skeemifail peavad olema valmis ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;20. märts 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid XML-failide kohta peavad tehtud olema &#039;&#039;&#039;27. märts 2017&#039;&#039;&#039;.&lt;br /&gt;
** &#039;&#039;&#039;Meeskonnad on loonud omale enda wiki lehe, kuhu kirjeldavad meeskonna ja panevad nad üles oma tööd. Lisaks hakkavad kogunema ka sinna teiste gruppide poolt kirjutatavad retsensioonid. &amp;lt;ins&amp;gt;Meeskonnalehed lingitakse selle lehe lõppu Meeskonna pealkirja alla.&amp;lt;/ins&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Veebiteenus&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#Veebiteenus NB! Täpsem info]&lt;br /&gt;
** Veebiteenuse analüüs peab olema valmis, esitatud ja wikilehel kirjeldatud hiljemalt: &#039;&#039;&#039;17.aprill 2017&#039;&#039;&#039;&lt;br /&gt;
** Veebiteenus peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;29. mai 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid veebiteenuste kohta peavad tehtud olema &#039;&#039;&#039;08. juuni 2017&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--** Veebiteenus tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Klientrakendused&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#Klientrakendus NB! Täpsem info]&lt;br /&gt;
** Klientrakendused peavad olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;29. mai 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid klientrakenduste kohta peavad tehtud olema &#039;&#039;&#039;08. juuni 2017&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--** Klientrakendused tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--* &#039;&#039;&#039;Meeskonna kokkuvõttev aruanne&#039;&#039;&#039;&lt;br /&gt;
** Meeskonnatöö kokkuvõttev aruanne peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt 8.mai 2011&lt;br /&gt;
** Arvamused Meeskonnatöö kokkuvõtva aruande ja esitluse kohta tuleb esitada hiljemalt päev enne eksamit&lt;br /&gt;
** &#039;&#039;&#039;Meeskonna kokkuvõttev aruanne ja töö lõplik tulemus&#039;&#039;&#039; tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hindamine==&lt;br /&gt;
===Üldised kriteeriumid===&lt;br /&gt;
&lt;br /&gt;
Teostatuks loetakse projekt juhul, kui lähteülesanne on realiseeritud, lahendus on töötav, kuid esineb suuremaid vigu ning piirsituatsioonidega ei ole arvestatud.&lt;br /&gt;
&lt;br /&gt;
Maksimumtulemuse saavutamiseks peab projekt olema teostatud tehniliselt veatult ning varustatud dokumentatsiooniga, milles sisaldub  arendusprotsessi kirjeldus (peab selguma ka iga rühmaliikme panus projekti teostamisel), kasutajajuhend ning lahenduse kirjeldus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Maksimumtulemuse annab (vähemalt 4/6):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Majanduslik mõtlemine (kas loodav teenus ja rakendused oleks kasutatav ka ärilistel eesmärkidel)&lt;br /&gt;
* Mobiilrakendused &lt;br /&gt;
* AngularJS klientrakendus&lt;br /&gt;
* Kogukondade kaasamine&lt;br /&gt;
* Kasutajamugavus&lt;br /&gt;
* Läbimõeldud töökorraldus&lt;br /&gt;
* Lisavõimaluste realiseerimine (vt näidisteemad)&lt;br /&gt;
&lt;br /&gt;
===XML andmefail===&lt;br /&gt;
Ülesande täitmiseks tuleb luua XML fail andmete edastamiseks, selle XML faili skeemifail ning minimaalselt kaks sobivat XSL transformatsiooni faili loodud XML failis olevate andmete transformeerimiseks HTML formaati ja XML faili formaadi muutmiseks. Transformatsioonid peavad sisaldama midagi enamat, kui ainult üks for-each klausel. Transformatsiooni käigus peaks kasutama vajadusel parameetreid ning kindlasti ka erinevaid tingimuste kontrolle.&lt;br /&gt;
&lt;br /&gt;
XML-il peab olema vähemalt 4 loogilist dimensiooni.&lt;br /&gt;
 &amp;lt;dim1&amp;gt;&lt;br /&gt;
   &amp;lt;dim2&amp;gt;&lt;br /&gt;
     &amp;lt;dim3&amp;gt;&lt;br /&gt;
       &amp;lt;dim4&amp;gt;&lt;br /&gt;
       &amp;lt;/dim4&amp;gt;&lt;br /&gt;
     &amp;lt;/dim3&amp;gt;&lt;br /&gt;
   &amp;lt;/dim2&amp;gt;&lt;br /&gt;
 &amp;lt;/dim1&amp;gt;&lt;br /&gt;
Lisaks tuleb kasutada 3-el dimensioonil attribuute, mis one enamat, kui lihtsalt ID.&lt;br /&gt;
&lt;br /&gt;
Käesoleva ülesande käigus peab looma meeskonna ning selle wiki lehekülje&lt;br /&gt;
&lt;br /&gt;
===Veebiteenus===&lt;br /&gt;
Loodav veebiteenus peab võimaldama:&lt;br /&gt;
* Teenuse pakkumist&lt;br /&gt;
* &#039;&#039;&#039;Teenuse kasutajate tuvastamist ning haldamist&#039;&#039;&#039;&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes&lt;br /&gt;
* Teenuse poole pöördumiste arvu piiramist ja piirangute haldamist.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus peab toetama mitme kasutaja võimalust.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus tuleb luua kasutades &#039;&#039;Windows Communication Foundation&#039;&#039; või ASP.NET MVC  Web API tehnoloogiat&lt;br /&gt;
&lt;br /&gt;
Andmebaasis peab olema vähemalt 9 olemit ehk andmebaas on eeldus,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soovitav on luua teenus (FE) ja teenuse seadistamiseks ning kasutajate haldamiseks mõeldud rakendus (BE).&lt;br /&gt;
&lt;br /&gt;
===Klientrakendus===&lt;br /&gt;
Klientrakendus mõnele olemasolevale veebiteenusele, võib olla teostatud veebirakendusena, Silverlight, WPF või vormirakendusena.&lt;br /&gt;
&lt;br /&gt;
Variant1: teha klientrakendus enda loodud veebiteenusele &lt;br /&gt;
&lt;br /&gt;
Variant2: teha klientrakendus mõnele levinud veebiteenusele.&lt;br /&gt;
Näiteks: &lt;br /&gt;
* http://www.bing.com/developer&lt;br /&gt;
* http://www.flickr.com/services/api/response.soap.html&lt;br /&gt;
* http://developer.ebay.com/developercenter/windows/&lt;br /&gt;
* http://apiwiki.twitter.com/Getting-Started&lt;br /&gt;
&lt;br /&gt;
===Retsensioonid===&lt;br /&gt;
Retsensioon on üliõpilase iseseisva teadustöö kriitilise analüüsi põhjal koostatud argumenteeritud hinnang. Retsensioonis tuleb hinnata töö vastavust esitatud tingimustele, programmikoodi loetavust ning kommenteeritust, dokumentatsiooni ja kirjeldada puudusi. Retsensioonide põhjal on meeskondadel õigus oma projekte parandada enne määratud esitamistähtaja kättejõudmist.&lt;br /&gt;
&lt;br /&gt;
Retsensioon peab sisaldama minimaalselt...&lt;br /&gt;
* XML - ...200 sõna.&lt;br /&gt;
* Veebiteenus - ...600 sõna.&lt;br /&gt;
* Klientrakendus - ...600 sõna.&lt;br /&gt;
&lt;br /&gt;
Mõnelauselisest arvamusest ei piisa, kuna tegemist on grupi loodavate arvustustega, mitte individuaalsete arvustustega.&lt;br /&gt;
&lt;br /&gt;
==Konsultatsioonid==&lt;br /&gt;
 Igal projektimeeskonnal on piiramatu õigus saada õppejõu käest konsultatsiooni ja juhendamist oma&lt;br /&gt;
 töö tegemiseks, kas harjutuste ajal või pärast harjutusi ja loenguid. Eriaegade suhtes saab sõlmida&lt;br /&gt;
 õppejõuga kokkuleppeid kontaktidel&lt;br /&gt;
 mait.poska [ät] itcollege.ee või (+372 53 469 734)&lt;br /&gt;
 (teksti originaalautor Priit Raspel)&lt;br /&gt;
&lt;br /&gt;
=Teemad 2017 kevad=&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus mõnele olemasolevale või endaloodud veebiteenusele&lt;br /&gt;
&lt;br /&gt;
NB! XML andmefail ja veebiteenus ei pea olema omavahel seotud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Näidisteemad==&lt;br /&gt;
&lt;br /&gt;
===Nimede pakkumise teenus===&lt;br /&gt;
Mõte selles, et luua nimede baas, mille abil pakkuda rakenduse loojale sobiva algusega nimesid. Reaalne rakendus: &#039;&#039;autocompleter&#039;&#039; tarvis teenuse pakkumine&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua sobiva alguse järgi nimede pakkumise teenus:&lt;br /&gt;
* alates kahetähelisetest algustest pakkuda sobivad nimesid&lt;br /&gt;
* luua võimalus kasutajatel nimesid lisada&lt;br /&gt;
* luua võimalus administraatoril nimesid muuta/kustutada&lt;br /&gt;
* meeste ja naiste nimed peavad olema süsteemis eristatavad&lt;br /&gt;
* luua võimalus, mis võimaldab kuvada populaarseid nimesid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* luua võimalus, et nimi lisatakse baasi alles siis, kui administraatori õigustega inimene on selleks vastava loa andnud&lt;br /&gt;
&lt;br /&gt;
===Külastusstatistika teenus===&lt;br /&gt;
Mõte selles, et pakkuda teenust, kus kasutajal on võimalik registreerida külastused ning küsida oma külastusstatistikat.&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua külastusstatistika teenus:&lt;br /&gt;
* kasutaja saab teenuses registreerida külastusi&lt;br /&gt;
* kasutaja saab küsida külastusstatistikat päevade/kuude/kogu perioodi lõikes&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
&lt;br /&gt;
Lisavõimalused:&lt;br /&gt;
* luua võimalus registreerida alamlehtede külastusstatistikat&lt;br /&gt;
* luua võimalus külastusstatistikale lisaparameetrite lisamiseks (ip aadress, sirviku versioon jne)&lt;br /&gt;
&lt;br /&gt;
===Telefoniraamatu teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada kontakte ja nende seast otsida&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua telefoniraamatu teenus:&lt;br /&gt;
* kasutaja saab teenuses kontakte lisada ja kustutada&lt;br /&gt;
* kasutaja saab kontaktide nime/telefoninumbri jne abil otsida&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutajaid on võimalik lisada gruppidesse&lt;br /&gt;
* kasutajal on võimalik lisada vajalike kontaktandmete liike&lt;br /&gt;
* kasutajatel on võimalik jagada omavahel kontakte ja kontaktide grupper&lt;br /&gt;
&lt;br /&gt;
===RSS voogude kogumise ja uudiste kuvamise teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada talle huvipakkuvaid RSS vooge ja nendelt voogudelt uudiseid lugeda&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua RSS voogude haldusteenus:&lt;br /&gt;
* kasutaja saab teenuses RSS vooge lisada ja kustudada&lt;br /&gt;
* kasutaja saab pärida talle huvipakkuvate voogude viimaseid uudiseid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutaja saab RSS vooge vaadata eraldi või grupeeritult&lt;br /&gt;
* vooge peab puhverdama, kuna voogude lugemine võtab enamasti üsna palju aega &lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
= Meeskonnad 2017=&lt;br /&gt;
==Päevaõpe==&lt;br /&gt;
&lt;br /&gt;
===Meeskond: QView===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Semjon Greef&lt;br /&gt;
* Martin Nigul&lt;br /&gt;
* Martin Nõukas&lt;br /&gt;
* Margus Muru&lt;br /&gt;
* Lisandra Noor&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: QView]]&lt;br /&gt;
&lt;br /&gt;
Retsentsioon meeskonnale: [https://wiki.itcollege.ee/index.php/User_talk:Meeskond:_VeebiGurmaanid#M.C3.A4rkused: VeebiGurmaanid]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Redundant Rappers===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Taavi Kliss&lt;br /&gt;
*Kertu Nurmberg&lt;br /&gt;
*Anneli Asser&lt;br /&gt;
*Mart-Erki Nõumees&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: Redundant Rappers]]&lt;br /&gt;
&lt;br /&gt;
Meeskonna XML/XSD/XSLT : [https://wiki.itcollege.ee/index.php/Meeskond:_Redundant_Rappers#XML_.2F_XSD_.2F_XSLT]&lt;br /&gt;
&lt;br /&gt;
Meeskonna retsensioon meeskonnale Sense Of Direction: [https://wiki.itcollege.ee/index.php/Talk:Sense_Of_Direction]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Sense Of Direction===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Ilja Andrejev&lt;br /&gt;
*Aleksandr Babõkin&lt;br /&gt;
*Vladislav Lahtarin&lt;br /&gt;
*Vladislav Kovaltšuk&lt;br /&gt;
Meeskonna koduleht: [[Sense Of Direction]]&amp;lt;br&amp;gt;&lt;br /&gt;
XML/XSD/XSLT osa asub [https://wiki.itcollege.ee/index.php/Sense_Of_Direction#XML siin]&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon XML-failide kohta meeskonnale &amp;quot;Poly&amp;quot; [https://wiki.itcollege.ee/index.php/Sense_Of_Direction#Retsensioon_XML-failide_kohta_meeskonnale_.22Poly.22 siin]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/RK Meeskond: RK]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Raido Kivinurm&lt;br /&gt;
&lt;br /&gt;
Esimene osa: [https://wiki.itcollege.ee/index.php/RK#XML XML] / [https://wiki.itcollege.ee/index.php/RK#XSD XSD] / [https://wiki.itcollege.ee/index.php/RK#XSLT_HTML XSLT HTML] / [https://wiki.itcollege.ee/index.php/RK#XSLT_XML XSLT XML]&lt;br /&gt;
&amp;lt;BR&amp;gt; [https://wiki.itcollege.ee/index.php/RK#Retsensioonid Retsensioonid]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Team_Echo Meeskond: Echo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Vajak&lt;br /&gt;
* Janno Oolo&lt;br /&gt;
* Mari-Liis Oldja&lt;br /&gt;
* Arti Zirk&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Team_Echo#XML XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Meeskond:_Redundant_Rappers#Retsensioon_Team_Echo_poolt Retsensioon meeskonnale Redundant Rappers]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Bob%27s_Burgers Meeskond: Bob&#039;s Burgers]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Aleksei Kopõlov&lt;br /&gt;
*Sander Perens&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Bob%27s_Burgers#XML_Retsensioon_meeskonnale_VeebiGurmaanid Retsensioon meeskonnale &#039;&#039;&#039;VeebiGurmaanid&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/User:Meeskond:_VeebiGurmaanid Meeskond: VeebiGurmaanid]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Koit Kõrvel&lt;br /&gt;
* Marko Kask&lt;br /&gt;
* Melissa Eenmaa&lt;br /&gt;
* Joosep Koort&lt;br /&gt;
&lt;br /&gt;
Retsentsioon meeskonnale: [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_HelpOut HelpOut]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Muru Meeskond: Muru]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Murdho Savila&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Muru#Retsensioonid Retsensioonid]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Repi Meeskond: Repi]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Renet Pirso&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Blogify Retsensioon: BLOGIFY]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: HelpOut===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mikk Sarapuu&lt;br /&gt;
* Martin Paakspuu&lt;br /&gt;
* Kerdo Kullamäe&lt;br /&gt;
* Marvin Mardiat&lt;br /&gt;
* Piret Pomerants&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Meeskond:_HelpOut Meeskonna koduleht]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
* XML/XSLT/XSD retsensioon meeskonnale &#039;&#039;&#039;Falador&#039;&#039;&#039; asub [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_Falador siin]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/2017_Meeskond_Poly Meeskond: Poly]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kristian Kalm&lt;br /&gt;
* Roland Kontson&lt;br /&gt;
&lt;br /&gt;
=== Meeskond [https://wiki.itcollege.ee/index.php/Meeskond_%22Nope%22: Nope] ===&lt;br /&gt;
* Raido Vell&lt;br /&gt;
* Taavi Vesinurm&lt;br /&gt;
* Kaspar Kaal&lt;br /&gt;
* Lisette Noor&lt;br /&gt;
* Madis Roosioks&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meeskonna koduleht:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Meeskond_%22Nope%22: Nope]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;XML/XSLT/XSD&#039;&#039;&#039; &amp;lt;br/&amp;gt;&lt;br /&gt;
Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:Bob%27s_Burgers Bob&#039;s Burgers] &amp;lt;br/&amp;gt;&lt;br /&gt;
Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:Blogify Blogify]&lt;br /&gt;
&lt;br /&gt;
===Meeskond [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab Alt + Tab]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Roots&lt;br /&gt;
* Roland Soosaar&lt;br /&gt;
* Krista Norak&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#Esimene_osa Esimene osa:] [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XML XML] | [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XSD XSD] | [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XSLT_HTML XSLT HTML] | [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XSLT_XML XSLT XML]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#Anal.C3.BC.C3.BCs Analüüs]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:Muru Muru]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Kirde_sai Meeskond: Kirde sai]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Taavi Teearu&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Kirde_sai#XML.2FXSD.2FXSLT XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Unnamed Team===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Andreas Kirotar&lt;br /&gt;
*Jaan Kostõgov&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Unnamed Team]]&lt;br /&gt;
 &lt;br /&gt;
Meeskonna retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:2017_Meeskond_Poly Poly]&lt;br /&gt;
&lt;br /&gt;
=== Meeskond [https://wiki.itcollege.ee/index.php/%3F%3F%3F_Profit ??? Profit] ===&lt;br /&gt;
* Aivar Romandi&lt;br /&gt;
* Frank Karl Koppel&lt;br /&gt;
* Aldin Talve&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Purgis Retsensioon meeskonnale Purgis]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Purgis===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Märt Lõhmus&lt;br /&gt;
* Kelli Lukas &lt;br /&gt;
Meeskonna koduleht: [[Purgis]]&amp;lt;br&amp;gt;&lt;br /&gt;
Esimene osa asub [https://wiki.itcollege.ee/index.php/Purgis#XML siin]&lt;br /&gt;
&lt;br /&gt;
XML Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:Alt_%2B_Tab  Alt + Tab]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Meeskond:_Falador Falador]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Madis Lugus&lt;br /&gt;
* Taavi Metsvahi&lt;br /&gt;
Meeskonna koguleht: [[Meeskond: Falador]]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Meeskond:_Falador#XML.2FXSD.2FXSLT XML/XSD/XSLT]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Meeskond:_Falador#Veebiteenus Veebiteenuse analüüs]&amp;lt;br&amp;gt;&lt;br /&gt;
XML retsensioon meeskonnale: [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_QView QView]&amp;lt;br&amp;gt;&lt;br /&gt;
Veebiteenuse analüüsi retsensioon meeskonnale: [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_QView QView]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Blogify Blogify]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Hando Laasmägi&lt;br /&gt;
* Tarvo Tammejuur&lt;br /&gt;
* Cathy Toomast&lt;br /&gt;
* Tõnn Vaher&lt;br /&gt;
&lt;br /&gt;
XML etapi Retsensioon meeskonnale: [https://wiki.itcollege.ee/index.php/Talk:Ott#Retsensioon_XML_kohta_meeskonnalt_Blogify Ott]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Proovitud_abielu Proovitud abielu]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Berit Põldoja&lt;br /&gt;
*Elina Kuldkepp&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Proovitud_abielu#XML.2FXSD.2FXSLT XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
XML Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:Meeskond_%22Nope%22: Nope]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Meeskond: [https://wiki.itcollege.ee/index.php/Mjart Mjart] ===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Märt Häkkinen&lt;br /&gt;
XML/XSLT/XSD Retsensioon meeskonnale [Proovitud Abielu https://wiki.itcollege.ee/index.php/Talk:Proovitud_abielu]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Ott Ott]===&lt;br /&gt;
Liige:&lt;br /&gt;
*Ott Sõerumäe&lt;br /&gt;
Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Ott#XML_Retsensioon_meeskonnale_Kirde_sai Kirde sai]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/PageNotFound PageNotFound]===&lt;br /&gt;
&#039;&#039;&#039;Liige:&#039;&#039;&#039;&lt;br /&gt;
*Arvo Paomees&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
*[https://wiki.itcollege.ee/index.php/Talk:Mjart XML-i retsensioon meeskonnale Mjart, meeskond PageNotFound poolt] (kirjutatud 01.05.2017)&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/TahaksLopetada TahaksLopetada]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mart Naris&lt;br /&gt;
&lt;br /&gt;
==Kaugõpe==&lt;br /&gt;
&lt;br /&gt;
===Meeskond: CoverMe===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Karit Kilgi&lt;br /&gt;
* Sten Kaasik&lt;br /&gt;
* Ragne Auling&lt;br /&gt;
* Silja Kralik&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: CoverMe]]&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon meeskonnale PC KartKicker: [https://wiki.itcollege.ee/index.php/Talk:PC_KartKicker Talk:Team_PC_KartKicker]&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon meeskonnale PC KartKicker: [https://wiki.itcollege.ee/index.php/Talk:Ticketer Talk:Team_Ticketer]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Team_SPOT Meeskond: SPOT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sigrid Pachel&lt;br /&gt;
* Oliver Tiks&lt;br /&gt;
Esitatud tööd:&lt;br /&gt;
# [https://wiki.itcollege.ee/index.php/Team_SPOT#XML_.2F_XSD_.2F_XSLT XML/XSD/XSLT] + [https://wiki.itcollege.ee/index.php/Talk:JRT retsensioon meeskonnale JRT]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/JRT Meeskond: JRT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Riho Uusjärv&lt;br /&gt;
* Jevgeni Gavrilov&lt;br /&gt;
* Tiit Kuuskmäe&lt;br /&gt;
&lt;br /&gt;
Retsensioon XML-failide kohta meeskonnale &amp;quot;PC KartKicker&amp;quot; [https://wiki.itcollege.ee/index.php/JRT#Retsensioon_JRT]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Retsensioon XML-failide kohta meeskonnale &amp;quot;Ninjas in pyjamas&amp;quot;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/JRT#Retsensioon_meeskonnale_.22Ninjas_in_pyjamas.22] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ticketer Meeskond: Ticketer]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Liina Abner&lt;br /&gt;
* Krista Rüütel&lt;br /&gt;
* Roland Türi&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ninjas_in_pyjamas Meeskond: Ninjas in Pyjamas]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Anna Linskaja&lt;br /&gt;
* Karen Grigorjan&lt;br /&gt;
* Sergei Hristoforov&lt;br /&gt;
* Artyom Likhachev&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Talupood Meeskond: Talutooted]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Matson&lt;br /&gt;
* Taavi Tilk&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talupood#XML XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
Retsensioon: [https://wiki.itcollege.ee/index.php/Talk:PC_KartKicker Talk:PC_KartKicker]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/DevHelpVR Meeskond: DevHelp]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Martin Jääger&lt;br /&gt;
* Kristo Leemets&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon tiimile Ticketer, 26.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ticketer Talk:Ticketer]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/YAWS Meeskond: Yet Another Weather Station]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Andres Kepler&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/PC_KartKicker Meeskond: PC KartKicker]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
* Jan Eerik&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR Talk:DevHelpVR] &amp;lt;br&amp;gt;&lt;br /&gt;
XML failide retsensioon meeskonnale Ninjas in pyjamas, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Talk:Ninjas_in_pyjamas]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/rent_a_bike Meeskond: rent-A-bike]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Erika Ehmann&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017&amp;diff=122558</id>
		<title>Kodutöö aines &quot;Võrgurakendused II: hajussüsteemide ehitamine&quot; 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017&amp;diff=122558"/>
		<updated>2017-05-17T15:44:26Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Meeskond: PC KartKicker */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
__NOINDEX__&lt;br /&gt;
&lt;br /&gt;
=Kodutöö aines &amp;quot;Võrgurakendused II: hajussüsteemide ehitamine&amp;quot; 2017=&lt;br /&gt;
==Eesmärk==&lt;br /&gt;
Saada praktiline kogemus hajussüsteemide ehitamisest XML(SOAP) või Rest veebiteenusel ja sellele klientrakenduse loomise abil ning süvendada meeskonnatööoskust. &lt;br /&gt;
*SOAP veebiteenuse puhul eeldatakse WCF tehnoloogia kasutamist. Vanema põlvkonna ASP.NET veebiteenuse loomine ei ole lubatud, kuna seda ei toeta ka Microsoft enam tänasel päeval.&lt;br /&gt;
*REST teenuste loomisel tuleks kasutada ASP.NET Web API võimalusi.&lt;br /&gt;
&lt;br /&gt;
Kaugem eesmärk on loomulikult hinne :).&lt;br /&gt;
&lt;br /&gt;
==Reeglid==&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus&lt;br /&gt;
&lt;br /&gt;
Ühte projektimeeskonda kuulub 3..4 tudengit ning ühel teemal teostab projekti üks või mitu meeskonda. 1,2 ja viie liikmelised meeskonnad tuleks õppejõuga eraldi kooskõlastada.&lt;br /&gt;
&lt;br /&gt;
Töö käiku kajastatakse  http://wiki.itcollege.ee keskkonnas. Wikilehe täitmise eesmärke on kaks: nii on võimalik kirja panna kõik mõtted ja ideed (ning nendest jääb jälg) ning õppejõul on hiljem võimalik saada ülevaade iga projektimeeskonna liikme panusest.&lt;br /&gt;
&lt;br /&gt;
==Tähtajad==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;XML fail&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#XML_andmefail NB! Täpsem info]&lt;br /&gt;
** XML fail, stiilifail ja skeemifail peavad olema valmis ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;20. märts 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid XML-failide kohta peavad tehtud olema &#039;&#039;&#039;27. märts 2017&#039;&#039;&#039;.&lt;br /&gt;
** &#039;&#039;&#039;Meeskonnad on loonud omale enda wiki lehe, kuhu kirjeldavad meeskonna ja panevad nad üles oma tööd. Lisaks hakkavad kogunema ka sinna teiste gruppide poolt kirjutatavad retsensioonid. &amp;lt;ins&amp;gt;Meeskonnalehed lingitakse selle lehe lõppu Meeskonna pealkirja alla.&amp;lt;/ins&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Veebiteenus&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#Veebiteenus NB! Täpsem info]&lt;br /&gt;
** Veebiteenuse analüüs peab olema valmis, esitatud ja wikilehel kirjeldatud hiljemalt: &#039;&#039;&#039;17.aprill 2017&#039;&#039;&#039;&lt;br /&gt;
** Veebiteenus peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;29. mai 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid veebiteenuste kohta peavad tehtud olema &#039;&#039;&#039;08. juuni 2017&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--** Veebiteenus tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Klientrakendused&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#Klientrakendus NB! Täpsem info]&lt;br /&gt;
** Klientrakendused peavad olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;29. mai 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid klientrakenduste kohta peavad tehtud olema &#039;&#039;&#039;08. juuni 2017&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--** Klientrakendused tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--* &#039;&#039;&#039;Meeskonna kokkuvõttev aruanne&#039;&#039;&#039;&lt;br /&gt;
** Meeskonnatöö kokkuvõttev aruanne peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt 8.mai 2011&lt;br /&gt;
** Arvamused Meeskonnatöö kokkuvõtva aruande ja esitluse kohta tuleb esitada hiljemalt päev enne eksamit&lt;br /&gt;
** &#039;&#039;&#039;Meeskonna kokkuvõttev aruanne ja töö lõplik tulemus&#039;&#039;&#039; tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hindamine==&lt;br /&gt;
===Üldised kriteeriumid===&lt;br /&gt;
&lt;br /&gt;
Teostatuks loetakse projekt juhul, kui lähteülesanne on realiseeritud, lahendus on töötav, kuid esineb suuremaid vigu ning piirsituatsioonidega ei ole arvestatud.&lt;br /&gt;
&lt;br /&gt;
Maksimumtulemuse saavutamiseks peab projekt olema teostatud tehniliselt veatult ning varustatud dokumentatsiooniga, milles sisaldub  arendusprotsessi kirjeldus (peab selguma ka iga rühmaliikme panus projekti teostamisel), kasutajajuhend ning lahenduse kirjeldus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Maksimumtulemuse annab (vähemalt 4/6):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Majanduslik mõtlemine (kas loodav teenus ja rakendused oleks kasutatav ka ärilistel eesmärkidel)&lt;br /&gt;
* Mobiilrakendused &lt;br /&gt;
* AngularJS klientrakendus&lt;br /&gt;
* Kogukondade kaasamine&lt;br /&gt;
* Kasutajamugavus&lt;br /&gt;
* Läbimõeldud töökorraldus&lt;br /&gt;
* Lisavõimaluste realiseerimine (vt näidisteemad)&lt;br /&gt;
&lt;br /&gt;
===XML andmefail===&lt;br /&gt;
Ülesande täitmiseks tuleb luua XML fail andmete edastamiseks, selle XML faili skeemifail ning minimaalselt kaks sobivat XSL transformatsiooni faili loodud XML failis olevate andmete transformeerimiseks HTML formaati ja XML faili formaadi muutmiseks. Transformatsioonid peavad sisaldama midagi enamat, kui ainult üks for-each klausel. Transformatsiooni käigus peaks kasutama vajadusel parameetreid ning kindlasti ka erinevaid tingimuste kontrolle.&lt;br /&gt;
&lt;br /&gt;
XML-il peab olema vähemalt 4 loogilist dimensiooni.&lt;br /&gt;
 &amp;lt;dim1&amp;gt;&lt;br /&gt;
   &amp;lt;dim2&amp;gt;&lt;br /&gt;
     &amp;lt;dim3&amp;gt;&lt;br /&gt;
       &amp;lt;dim4&amp;gt;&lt;br /&gt;
       &amp;lt;/dim4&amp;gt;&lt;br /&gt;
     &amp;lt;/dim3&amp;gt;&lt;br /&gt;
   &amp;lt;/dim2&amp;gt;&lt;br /&gt;
 &amp;lt;/dim1&amp;gt;&lt;br /&gt;
Lisaks tuleb kasutada 3-el dimensioonil attribuute, mis one enamat, kui lihtsalt ID.&lt;br /&gt;
&lt;br /&gt;
Käesoleva ülesande käigus peab looma meeskonna ning selle wiki lehekülje&lt;br /&gt;
&lt;br /&gt;
===Veebiteenus===&lt;br /&gt;
Loodav veebiteenus peab võimaldama:&lt;br /&gt;
* Teenuse pakkumist&lt;br /&gt;
* &#039;&#039;&#039;Teenuse kasutajate tuvastamist ning haldamist&#039;&#039;&#039;&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes&lt;br /&gt;
* Teenuse poole pöördumiste arvu piiramist ja piirangute haldamist.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus peab toetama mitme kasutaja võimalust.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus tuleb luua kasutades &#039;&#039;Windows Communication Foundation&#039;&#039; või ASP.NET MVC  Web API tehnoloogiat&lt;br /&gt;
&lt;br /&gt;
Andmebaasis peab olema vähemalt 9 olemit ehk andmebaas on eeldus,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soovitav on luua teenus (FE) ja teenuse seadistamiseks ning kasutajate haldamiseks mõeldud rakendus (BE).&lt;br /&gt;
&lt;br /&gt;
===Klientrakendus===&lt;br /&gt;
Klientrakendus mõnele olemasolevale veebiteenusele, võib olla teostatud veebirakendusena, Silverlight, WPF või vormirakendusena.&lt;br /&gt;
&lt;br /&gt;
Variant1: teha klientrakendus enda loodud veebiteenusele &lt;br /&gt;
&lt;br /&gt;
Variant2: teha klientrakendus mõnele levinud veebiteenusele.&lt;br /&gt;
Näiteks: &lt;br /&gt;
* http://www.bing.com/developer&lt;br /&gt;
* http://www.flickr.com/services/api/response.soap.html&lt;br /&gt;
* http://developer.ebay.com/developercenter/windows/&lt;br /&gt;
* http://apiwiki.twitter.com/Getting-Started&lt;br /&gt;
&lt;br /&gt;
===Retsensioonid===&lt;br /&gt;
Retsensioon on üliõpilase iseseisva teadustöö kriitilise analüüsi põhjal koostatud argumenteeritud hinnang. Retsensioonis tuleb hinnata töö vastavust esitatud tingimustele, programmikoodi loetavust ning kommenteeritust, dokumentatsiooni ja kirjeldada puudusi. Retsensioonide põhjal on meeskondadel õigus oma projekte parandada enne määratud esitamistähtaja kättejõudmist.&lt;br /&gt;
&lt;br /&gt;
Retsensioon peab sisaldama minimaalselt...&lt;br /&gt;
* XML - ...200 sõna.&lt;br /&gt;
* Veebiteenus - ...600 sõna.&lt;br /&gt;
* Klientrakendus - ...600 sõna.&lt;br /&gt;
&lt;br /&gt;
Mõnelauselisest arvamusest ei piisa, kuna tegemist on grupi loodavate arvustustega, mitte individuaalsete arvustustega.&lt;br /&gt;
&lt;br /&gt;
==Konsultatsioonid==&lt;br /&gt;
 Igal projektimeeskonnal on piiramatu õigus saada õppejõu käest konsultatsiooni ja juhendamist oma&lt;br /&gt;
 töö tegemiseks, kas harjutuste ajal või pärast harjutusi ja loenguid. Eriaegade suhtes saab sõlmida&lt;br /&gt;
 õppejõuga kokkuleppeid kontaktidel&lt;br /&gt;
 mait.poska [ät] itcollege.ee või (+372 53 469 734)&lt;br /&gt;
 (teksti originaalautor Priit Raspel)&lt;br /&gt;
&lt;br /&gt;
=Teemad 2017 kevad=&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus mõnele olemasolevale või endaloodud veebiteenusele&lt;br /&gt;
&lt;br /&gt;
NB! XML andmefail ja veebiteenus ei pea olema omavahel seotud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Näidisteemad==&lt;br /&gt;
&lt;br /&gt;
===Nimede pakkumise teenus===&lt;br /&gt;
Mõte selles, et luua nimede baas, mille abil pakkuda rakenduse loojale sobiva algusega nimesid. Reaalne rakendus: &#039;&#039;autocompleter&#039;&#039; tarvis teenuse pakkumine&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua sobiva alguse järgi nimede pakkumise teenus:&lt;br /&gt;
* alates kahetähelisetest algustest pakkuda sobivad nimesid&lt;br /&gt;
* luua võimalus kasutajatel nimesid lisada&lt;br /&gt;
* luua võimalus administraatoril nimesid muuta/kustutada&lt;br /&gt;
* meeste ja naiste nimed peavad olema süsteemis eristatavad&lt;br /&gt;
* luua võimalus, mis võimaldab kuvada populaarseid nimesid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* luua võimalus, et nimi lisatakse baasi alles siis, kui administraatori õigustega inimene on selleks vastava loa andnud&lt;br /&gt;
&lt;br /&gt;
===Külastusstatistika teenus===&lt;br /&gt;
Mõte selles, et pakkuda teenust, kus kasutajal on võimalik registreerida külastused ning küsida oma külastusstatistikat.&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua külastusstatistika teenus:&lt;br /&gt;
* kasutaja saab teenuses registreerida külastusi&lt;br /&gt;
* kasutaja saab küsida külastusstatistikat päevade/kuude/kogu perioodi lõikes&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
&lt;br /&gt;
Lisavõimalused:&lt;br /&gt;
* luua võimalus registreerida alamlehtede külastusstatistikat&lt;br /&gt;
* luua võimalus külastusstatistikale lisaparameetrite lisamiseks (ip aadress, sirviku versioon jne)&lt;br /&gt;
&lt;br /&gt;
===Telefoniraamatu teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada kontakte ja nende seast otsida&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua telefoniraamatu teenus:&lt;br /&gt;
* kasutaja saab teenuses kontakte lisada ja kustutada&lt;br /&gt;
* kasutaja saab kontaktide nime/telefoninumbri jne abil otsida&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutajaid on võimalik lisada gruppidesse&lt;br /&gt;
* kasutajal on võimalik lisada vajalike kontaktandmete liike&lt;br /&gt;
* kasutajatel on võimalik jagada omavahel kontakte ja kontaktide grupper&lt;br /&gt;
&lt;br /&gt;
===RSS voogude kogumise ja uudiste kuvamise teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada talle huvipakkuvaid RSS vooge ja nendelt voogudelt uudiseid lugeda&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua RSS voogude haldusteenus:&lt;br /&gt;
* kasutaja saab teenuses RSS vooge lisada ja kustudada&lt;br /&gt;
* kasutaja saab pärida talle huvipakkuvate voogude viimaseid uudiseid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutaja saab RSS vooge vaadata eraldi või grupeeritult&lt;br /&gt;
* vooge peab puhverdama, kuna voogude lugemine võtab enamasti üsna palju aega &lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
= Meeskonnad 2017=&lt;br /&gt;
==Päevaõpe==&lt;br /&gt;
&lt;br /&gt;
===Meeskond: QView===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Semjon Greef&lt;br /&gt;
* Martin Nigul&lt;br /&gt;
* Martin Nõukas&lt;br /&gt;
* Margus Muru&lt;br /&gt;
* Lisandra Noor&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: QView]]&lt;br /&gt;
&lt;br /&gt;
Retsentsioon meeskonnale: [https://wiki.itcollege.ee/index.php/User_talk:Meeskond:_VeebiGurmaanid#M.C3.A4rkused: VeebiGurmaanid]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Redundant Rappers===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Taavi Kliss&lt;br /&gt;
*Kertu Nurmberg&lt;br /&gt;
*Anneli Asser&lt;br /&gt;
*Mart-Erki Nõumees&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: Redundant Rappers]]&lt;br /&gt;
&lt;br /&gt;
Meeskonna XML/XSD/XSLT : [https://wiki.itcollege.ee/index.php/Meeskond:_Redundant_Rappers#XML_.2F_XSD_.2F_XSLT]&lt;br /&gt;
&lt;br /&gt;
Meeskonna retsensioon meeskonnale Sense Of Direction: [https://wiki.itcollege.ee/index.php/Talk:Sense_Of_Direction]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Sense Of Direction===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Ilja Andrejev&lt;br /&gt;
*Aleksandr Babõkin&lt;br /&gt;
*Vladislav Lahtarin&lt;br /&gt;
*Vladislav Kovaltšuk&lt;br /&gt;
Meeskonna koduleht: [[Sense Of Direction]]&amp;lt;br&amp;gt;&lt;br /&gt;
XML/XSD/XSLT osa asub [https://wiki.itcollege.ee/index.php/Sense_Of_Direction#XML siin]&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon XML-failide kohta meeskonnale &amp;quot;Poly&amp;quot; [https://wiki.itcollege.ee/index.php/Sense_Of_Direction#Retsensioon_XML-failide_kohta_meeskonnale_.22Poly.22 siin]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/RK Meeskond: RK]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Raido Kivinurm&lt;br /&gt;
&lt;br /&gt;
Esimene osa: [https://wiki.itcollege.ee/index.php/RK#XML XML] / [https://wiki.itcollege.ee/index.php/RK#XSD XSD] / [https://wiki.itcollege.ee/index.php/RK#XSLT_HTML XSLT HTML] / [https://wiki.itcollege.ee/index.php/RK#XSLT_XML XSLT XML]&lt;br /&gt;
&amp;lt;BR&amp;gt; [https://wiki.itcollege.ee/index.php/RK#Retsensioonid Retsensioonid]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Team_Echo Meeskond: Echo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Vajak&lt;br /&gt;
* Janno Oolo&lt;br /&gt;
* Mari-Liis Oldja&lt;br /&gt;
* Arti Zirk&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Team_Echo#XML XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Meeskond:_Redundant_Rappers#Retsensioon_Team_Echo_poolt Retsensioon meeskonnale Redundant Rappers]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Bob%27s_Burgers Meeskond: Bob&#039;s Burgers]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Aleksei Kopõlov&lt;br /&gt;
*Sander Perens&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Bob%27s_Burgers#XML_Retsensioon_meeskonnale_VeebiGurmaanid Retsensioon meeskonnale &#039;&#039;&#039;VeebiGurmaanid&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/User:Meeskond:_VeebiGurmaanid Meeskond: VeebiGurmaanid]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Koit Kõrvel&lt;br /&gt;
* Marko Kask&lt;br /&gt;
* Melissa Eenmaa&lt;br /&gt;
* Joosep Koort&lt;br /&gt;
&lt;br /&gt;
Retsentsioon meeskonnale: [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_HelpOut HelpOut]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Muru Meeskond: Muru]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Murdho Savila&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Muru#Retsensioonid Retsensioonid]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Repi Meeskond: Repi]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Renet Pirso&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Blogify Retsensioon: BLOGIFY]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: HelpOut===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mikk Sarapuu&lt;br /&gt;
* Martin Paakspuu&lt;br /&gt;
* Kerdo Kullamäe&lt;br /&gt;
* Marvin Mardiat&lt;br /&gt;
* Piret Pomerants&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Meeskond:_HelpOut Meeskonna koduleht]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
* XML/XSLT/XSD retsensioon meeskonnale &#039;&#039;&#039;Falador&#039;&#039;&#039; asub [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_Falador siin]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/2017_Meeskond_Poly Meeskond: Poly]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kristian Kalm&lt;br /&gt;
* Roland Kontson&lt;br /&gt;
&lt;br /&gt;
=== Meeskond [https://wiki.itcollege.ee/index.php/Meeskond_%22Nope%22: Nope] ===&lt;br /&gt;
* Raido Vell&lt;br /&gt;
* Taavi Vesinurm&lt;br /&gt;
* Kaspar Kaal&lt;br /&gt;
* Lisette Noor&lt;br /&gt;
* Madis Roosioks&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meeskonna koduleht:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Meeskond_%22Nope%22: Nope]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;XML/XSLT/XSD&#039;&#039;&#039; &amp;lt;br/&amp;gt;&lt;br /&gt;
Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:Bob%27s_Burgers Bob&#039;s Burgers] &amp;lt;br/&amp;gt;&lt;br /&gt;
Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:Blogify Blogify]&lt;br /&gt;
&lt;br /&gt;
===Meeskond [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab Alt + Tab]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Roots&lt;br /&gt;
* Roland Soosaar&lt;br /&gt;
* Krista Norak&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#Esimene_osa Esimene osa:] [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XML XML] | [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XSD XSD] | [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XSLT_HTML XSLT HTML] | [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XSLT_XML XSLT XML]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#Anal.C3.BC.C3.BCs Analüüs]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:Muru Muru]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Kirde_sai Meeskond: Kirde sai]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Taavi Teearu&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Kirde_sai#XML.2FXSD.2FXSLT XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Unnamed Team===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Andreas Kirotar&lt;br /&gt;
*Jaan Kostõgov&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Unnamed Team]]&lt;br /&gt;
 &lt;br /&gt;
Meeskonna retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:2017_Meeskond_Poly Poly]&lt;br /&gt;
&lt;br /&gt;
=== Meeskond [https://wiki.itcollege.ee/index.php/%3F%3F%3F_Profit ??? Profit] ===&lt;br /&gt;
* Aivar Romandi&lt;br /&gt;
* Frank Karl Koppel&lt;br /&gt;
* Aldin Talve&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Purgis Retsensioon meeskonnale Purgis]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Purgis===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Märt Lõhmus&lt;br /&gt;
* Kelli Lukas &lt;br /&gt;
Meeskonna koduleht: [[Purgis]]&amp;lt;br&amp;gt;&lt;br /&gt;
Esimene osa asub [https://wiki.itcollege.ee/index.php/Purgis#XML siin]&lt;br /&gt;
&lt;br /&gt;
XML Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:Alt_%2B_Tab  Alt + Tab]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Meeskond:_Falador Falador]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Madis Lugus&lt;br /&gt;
* Taavi Metsvahi&lt;br /&gt;
Meeskonna koguleht: [[Meeskond: Falador]]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Meeskond:_Falador#XML.2FXSD.2FXSLT XML/XSD/XSLT]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Meeskond:_Falador#Veebiteenus Veebiteenuse analüüs]&amp;lt;br&amp;gt;&lt;br /&gt;
XML retsensioon meeskonnale: [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_QView QView]&amp;lt;br&amp;gt;&lt;br /&gt;
Veebiteenuse analüüsi retsensioon meeskonnale: [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_QView QView]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Blogify Blogify]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Hando Laasmägi&lt;br /&gt;
* Tarvo Tammejuur&lt;br /&gt;
* Cathy Toomast&lt;br /&gt;
* Tõnn Vaher&lt;br /&gt;
&lt;br /&gt;
XML etapi Retsensioon meeskonnale: [https://wiki.itcollege.ee/index.php/Talk:Ott#Retsensioon_XML_kohta_meeskonnalt_Blogify Ott]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Proovitud_abielu Proovitud abielu]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Berit Põldoja&lt;br /&gt;
*Elina Kuldkepp&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Proovitud_abielu#XML.2FXSD.2FXSLT XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
XML Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:Meeskond_%22Nope%22: Nope]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Meeskond: [https://wiki.itcollege.ee/index.php/Mjart Mjart] ===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Märt Häkkinen&lt;br /&gt;
XML/XSLT/XSD Retsensioon meeskonnale [Proovitud Abielu https://wiki.itcollege.ee/index.php/Talk:Proovitud_abielu]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Ott Ott]===&lt;br /&gt;
Liige:&lt;br /&gt;
*Ott Sõerumäe&lt;br /&gt;
Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Ott#XML_Retsensioon_meeskonnale_Kirde_sai Kirde sai]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/PageNotFound PageNotFound]===&lt;br /&gt;
&#039;&#039;&#039;Liige:&#039;&#039;&#039;&lt;br /&gt;
*Arvo Paomees&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
*[https://wiki.itcollege.ee/index.php/Talk:Mjart XML-i retsensioon meeskonnale Mjart, meeskond PageNotFound poolt] (kirjutatud 01.05.2017)&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/TahaksLopetada TahaksLopetada]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mart Naris&lt;br /&gt;
&lt;br /&gt;
==Kaugõpe==&lt;br /&gt;
&lt;br /&gt;
===Meeskond: CoverMe===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Karit Kilgi&lt;br /&gt;
* Sten Kaasik&lt;br /&gt;
* Ragne Auling&lt;br /&gt;
* Silja Kralik&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: CoverMe]]&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon meeskonnale PC KartKicker: [https://wiki.itcollege.ee/index.php/Talk:PC_KartKicker Talk:Team_PC_KartKicker]&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon meeskonnale PC KartKicker: [https://wiki.itcollege.ee/index.php/Talk:Ticketer Talk:Team_Ticketer]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Team_SPOT Meeskond: SPOT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sigrid Pachel&lt;br /&gt;
* Oliver Tiks&lt;br /&gt;
Esitatud tööd:&lt;br /&gt;
# [https://wiki.itcollege.ee/index.php/Team_SPOT#XML_.2F_XSD_.2F_XSLT XML/XSD/XSLT] + [https://wiki.itcollege.ee/index.php/Talk:JRT retsensioon meeskonnale JRT]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/JRT Meeskond: JRT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Riho Uusjärv&lt;br /&gt;
* Jevgeni Gavrilov&lt;br /&gt;
* Tiit Kuuskmäe&lt;br /&gt;
&lt;br /&gt;
Retsensioon XML-failide kohta meeskonnale &amp;quot;PC KartKicker&amp;quot; [https://wiki.itcollege.ee/index.php/JRT#Retsensioon_JRT]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Retsensioon XML-failide kohta meeskonnale &amp;quot;Ninjas in pyjamas&amp;quot;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/JRT#Retsensioon_meeskonnale_.22Ninjas_in_pyjamas.22] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ticketer Meeskond: Ticketer]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Liina Abner&lt;br /&gt;
* Krista Rüütel&lt;br /&gt;
* Roland Türi&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ninjas_in_pyjamas Meeskond: Ninjas in Pyjamas]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Anna Linskaja&lt;br /&gt;
* Karen Grigorjan&lt;br /&gt;
* Sergei Hristoforov&lt;br /&gt;
* Artyom Likhachev&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Talupood Meeskond: Talutooted]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Matson&lt;br /&gt;
* Taavi Tilk&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talupood#XML XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
Retsensioon: [https://wiki.itcollege.ee/index.php/Talk:PC_KartKicker Talk:PC_KartKicker]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/DevHelpVR Meeskond: DevHelp]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Martin Jääger&lt;br /&gt;
* Kristo Leemets&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon tiimile Ticketer, 26.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ticketer Talk:Ticketer]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/YAWS Meeskond: Yet Another Weather Station]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Andres Kepler&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/PC_KartKicker Meeskond: PC KartKicker]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
* Jan Eerik&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR Talk:DevHelpVR] &amp;lt;br&amp;gt;&lt;br /&gt;
XML failide retsensioon meeskonnale Ninjas_in_pyjamas, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Talk:Ninjas_in_pyjamas]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/rent_a_bike Meeskond: rent-A-bike]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Erika Ehmann&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=120276</id>
		<title>PC KartKicker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=120276"/>
		<updated>2017-04-17T19:14:03Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Projekti struktuur: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
* Jan Eerik&lt;br /&gt;
&lt;br /&gt;
= Idee =&lt;br /&gt;
&lt;br /&gt;
Käesolev veebirakendus on asendamatu abimees arvuti kokkupanekul (võrdlemisi tugevalt inspireeritud https://pcpartpicker.com).&lt;br /&gt;
&lt;br /&gt;
Kuna teatavasti vajab arvuti töötamiseks kindlaid juppe mingis aktsepteeritud konfiguratsioonis, võimaldab meie rakendus välistada mitteühilduva raudvara &amp;quot;jõuga&amp;quot; ühildamist ja abistab kasutajal optimaalse konfiguratsiooni valimist.&lt;br /&gt;
&lt;br /&gt;
= Põhiline funktsionaalsus =&lt;br /&gt;
&lt;br /&gt;
* Kasutaja saab lisada üks kuni mitu arvutiskeemi&lt;br /&gt;
* Skeemile saab hakata ükshaaval lisama juppe (emaplaat, protsessor, mälud jne)&lt;br /&gt;
* Iga kord kui mingi jupp skeemi lisatakse, kitsendab see ülejäänud juppide valikut - näiteks LGA1151 liidesega emaplaadile ei õnnestu lisada AMD protsessorit jne&lt;br /&gt;
* Nii pooleliolevaid kui valminud skeeme saab salvestada&lt;br /&gt;
* Igal jupil on oma vaade koos tehnilise infoga&lt;br /&gt;
&lt;br /&gt;
= Nice to have =&lt;br /&gt;
&lt;br /&gt;
* Parima hinna kuvamine (nt Amazon, Newegg)&lt;br /&gt;
* Komponentide võrdlus&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 1: XML =&lt;br /&gt;
&lt;br /&gt;
== Teema ==&lt;br /&gt;
Uute arvutikomponentide olemasolevatesse kategooriatesse lisamiseks kasutab administraator ankeeti, mille salvestamisel ja andmete serverisse edastamiseks tekitatakse järgmine XML, kus on võimalik korraga suur hulk erinevaid arvutikomponente lisada, aga võib ka ainult ühe komponendi korraga saata.&lt;br /&gt;
&lt;br /&gt;
== XML==&lt;br /&gt;
&amp;lt;pre&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;components&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cases&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;NZXT&amp;quot; name=&amp;quot;S340&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;3&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;364&amp;quot; maxCpuHeight=&amp;quot;161&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;red&amp;quot; price=&amp;quot;66.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Deepcool&amp;quot; name=&amp;quot;TESSERACT SW&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;2&amp;quot; bay3=&amp;quot;4&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;light blue&amp;quot; price=&amp;quot;38.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Xion&amp;quot; name =&amp;quot;XON-310_BK&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;1&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;22.98&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;750D&amp;quot; type=&amp;quot;Full tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;3&amp;quot; bay3=&amp;quot;6&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;450&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;149.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
  &amp;lt;/cases&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpus&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.2&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;74&amp;quot; price=&amp;quot;327.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.8&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;69&amp;quot; price=&amp;quot;233.89&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.0&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;71&amp;quot; price=&amp;quot;316.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.5&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;61&amp;quot; price=&amp;quot;219.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;E5-2699 V3&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Xeon&amp;quot; family=&amp;quot;Haswell&amp;quot; socket=&amp;quot;LGA2011-3&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;18&amp;quot; threads=&amp;quot;36&amp;quot; ecc=&amp;quot;true&amp;quot; speed=&amp;quot;2.3&amp;quot; TDP=&amp;quot;145&amp;quot; lithography=&amp;quot;22&amp;quot; maxPowerDraw=&amp;quot;120&amp;quot; price=&amp;quot;3410.46&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;AMD&amp;quot; name=&amp;quot;1800X&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Ryzen 7&amp;quot; family=&amp;quot;Ryzen&amp;quot; socket=&amp;quot;AM4&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;8&amp;quot; threads=&amp;quot;16&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.6&amp;quot; TDP=&amp;quot;95&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;82&amp;quot; price=&amp;quot;469.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
  &amp;lt;/cpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpucoolers&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Cooler Master&amp;quot; name=&amp;quot;Hyper 212 EVO&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;1&amp;quot; height=&amp;quot;159&amp;quot; price=&amp;quot;24.88&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA775&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;H100i v2&amp;quot; liquid=&amp;quot;true&amp;quot; rad=&amp;quot;240&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;&amp;quot; price=&amp;quot;99.99&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Noctua&amp;quot; name=&amp;quot;NH-D15&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;165&amp;quot; price=&amp;quot;85.49&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
  &amp;lt;/cpucoolers&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;gpus&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;PowerColor&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX460&amp;quot; series=&amp;quot;Red Dragon&amp;quot; vram=&amp;quot;2&amp;quot; psuPin=&amp;quot;&amp;quot; length=&amp;quot;226&amp;quot; maxPowerDraw=&amp;quot;130&amp;quot; price=&amp;quot;73.98&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;Sapphire&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX480&amp;quot; series=&amp;quot;Nitro+&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;8&amp;quot; length=&amp;quot;240&amp;quot; maxPowerDraw=&amp;quot;150&amp;quot; price=&amp;quot;253.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;MSI&amp;quot; brandname=&amp;quot;Geforce&amp;quot; codename=&amp;quot;GTX1070&amp;quot; series=&amp;quot;Quick Silver OC&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;6+8&amp;quot; length=&amp;quot;279&amp;quot; maxPowerDraw=&amp;quot;170&amp;quot; price=&amp;quot;409.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
  &amp;lt;/gpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;memorychips&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Kingston&amp;quot; name=&amp;quot;ValueRAM&amp;quot; type=&amp;quot;DIMM&amp;quot; rank=&amp;quot;single&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;2133&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;yes&amp;quot; price=&amp;quot;67.58&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;Dominator Platinum&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;3000&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;2&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;123.25&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;ADATA&amp;quot; name=&amp;quot;&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR3&amp;quot; speed=&amp;quot;1600&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;88.29&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
  &amp;lt;/memorychips&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;motherboards&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Z170-A&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;Z170&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3400&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;152.99&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;ASRock&amp;quot; name=&amp;quot;H110M-HDS&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; chipset=&amp;quot;H110&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;2&amp;quot; maxMemory=&amp;quot;32&amp;quot; maxMemorySpeed=&amp;quot;2133&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;37.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Prime X370-PRO&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;X370&amp;quot; socket=&amp;quot;AM4&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3200&amp;quot; sata3=&amp;quot;8&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;162.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
  &amp;lt;/motherboards&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;psus&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;EVGA&amp;quot; name=&amp;quot;SuperNOVA 650&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;650&amp;quot; eff80plus=&amp;quot;gold&amp;quot; modular=&amp;quot;full&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;be Quiet!&amp;quot; name=&amp;quot;Pure Power L8 600W&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;600&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;no&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;CX550M&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;550&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;semi&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;2&amp;quot; price=&amp;quot;43.98&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
  &amp;lt;/psus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;storages&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;850 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;2048&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;823.14&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Intel&amp;quot; name=&amp;quot;DC P3608&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;4096&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;pcie8x&amp;quot; formFactor=&amp;quot;pcie&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;8867.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;960 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;m.2&amp;quot; formFactor=&amp;quot;m.2-2280&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;629.95&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Western Digital&amp;quot; name=&amp;quot;Black&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;6144&amp;quot; cache=&amp;quot;128&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;279.00&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Seagate&amp;quot; name=&amp;quot;BarraCuda Pro&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;10240&amp;quot; cache=&amp;quot;256&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;429.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Hitachi&amp;quot; name=&amp;quot;Travelstar&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;32&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;53.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
  &amp;lt;/storages&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/components&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML skeem (XSD) ==&lt;br /&gt;
&amp;lt;pre&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;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;cases&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;case&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay5&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psu&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxGpuLength&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxCpuHeight&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;primaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;secondaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cooler&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;family&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;iGPU&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cores&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;threads&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ecc&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;TDP&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;lithography&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpucoolers&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;sockets&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;liquid&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rad&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;fans&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;height&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;gpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;gpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brandname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;codename&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;vram&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psuPin&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;length&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;memorychips&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;memorychip&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rank&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cas&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;gen&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;moduleSize&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modules&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ECC&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;motherboards&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;motherboard&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;chipset&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memoryType&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memorySlots&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemory&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemorySpeed&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;video&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;sata3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ethernet&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;usb3&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;psus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;psu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;wattage&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;eff80plus&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modular&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6p2&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;storages&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;storage&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;capacity&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cache&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;interface&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rpm&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 1 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added computer parts:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;child::*/child::*&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 2 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added CPU coolers:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;cpucoolers/cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
== XML retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR Talk:DevHelpVR] &amp;lt;br&amp;gt;&lt;br /&gt;
XML failide retsensioon meeskonnale Ninjas_in_pyjamas, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Talk:Ninjas_in_pyjamas]&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 2: Veebirakendus =&lt;br /&gt;
== Analüüs == &lt;br /&gt;
Vastavalt klientrakenduse päringule annab veebirakendus andmebaasis oleva informatsiooni põhjal JSON kujul vastuse kliendile. Klientrakenduse funktsionaalsus ja andmebaasi skeem on mõlemad kirjeldatud allpool. Veebirakendus suudab anda komponentide kategooriate nimekirja, ühe kategooria komponentide nimekirja, nime järgi otsingu tulemuste nimekirja, konkreetse komponendi detailse informatsiooni, jpm.&lt;br /&gt;
&lt;br /&gt;
=== Mõisted ===&lt;br /&gt;
*&#039;&#039;&#039;CPU&#039;&#039;&#039; - Keskseade, ühest või mitmest protsessorist ja nende sisemäludest koosnev funktsionaalüksus, nii eesti kui inglise keeles kasutusel sünonüümina sõna protsessor;&lt;br /&gt;
*&#039;&#039;&#039;GPU&#039;&#039;&#039; - Graafikaseade, spetsiaalselt graafikatöötlusele orienteeritud protsessorid ja ( diskreetse puhul) mälu, integreeritud graafikaseaded kasutavad arvutisüsteemi muutmälu;&lt;br /&gt;
*&#039;&#039;&#039;RAM&#039;&#039;&#039; - Mälu kus hoitakse käimas-olevate programmide andmeid;&lt;br /&gt;
*&#039;&#039;&#039;Emaplaat&#039;&#039;&#039; - Kiibistik, mis ühendab ülejäänud arvutikomponendid omavahel kokku;&lt;br /&gt;
*&#039;&#039;&#039;PSU&#039;&#039;&#039; - Toiteblokk, võtab vooluvõrgust tuleva voolu ja muundab selle arvutikomponentidele sobivaks;&lt;br /&gt;
*&#039;&#039;&#039;Korpus&#039;&#039;&#039; - Erinevad “kastid”, mis on loodud tervikliku arvutisüsteemi komponentide tarbeks.&lt;br /&gt;
*&#039;&#039;&#039;ROM&#039;&#039;&#039; - Arvuti püsimälu, tänapäeval jaguneb laias laastus SSD (kallis maht, kiire) ja HDD (odav maht, aeglane) variantideks.&lt;br /&gt;
&lt;br /&gt;
=== Rakenduse kirjeldus (kogu süsteem, teenus+klient) ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Lühidalt:====&lt;br /&gt;
Meil on lauaarvutite komplekteerimise infosüsteem. Meie klientideks on inimesed kes kaaluvad lauaarvuti ostmist ja kes soovivad enne lauaarvuti või selle komponentide ostmist enda jaoks kogu protseduuri põhjalikult läbi mõelda. Süsteem võimaldab klientidel luua virtuaalse lauaarvuti ja tuvastab mitteühilduvad komponendid ning aitab seega vältida erinevaid probleeme, millega kaasneks aja- ja rahakulu.&lt;br /&gt;
&lt;br /&gt;
==== Nüansid ja programselt lahendatavad probleemid: ====&lt;br /&gt;
&lt;br /&gt;
Kliendid saavad ennast meie süsteemis registreerida kasutajateks. Üks füüsiline isik võib teha endale teha ükskõik kui palju kasutajaid, meil ei pea olema päriselt olemasoleva isiku ja süsteemi kasutaja vahel üks-ühest seost. Rakenduse kasutamiseks ei ole kohustuslik serveris konto loomine, klient saab virtuaalse arvuti luua ilma kasutajakontota, aga see ei säilu pärast sessiooni lõppemist.&lt;br /&gt;
&lt;br /&gt;
Iga kasutaja võib luua uue virtuaalse lauaarvuti, sellele nimetuse panna ja see seotakse automaatselt tema kasutajakontoga. Igale virtuaalsele arvutile võib lisada komponente. Lauaarvuti põhilisteks komponentideks on keskseade/protsessor (CPU), protsessori jahuti, emaplaat, muutmälu, graafikaseade (GPU), toiteblokk, arvuti korpus ja püsimälu.&lt;br /&gt;
&lt;br /&gt;
Iga protsessori generatsioon on ühilduv ainult kindlate emaplaadi kiipseadmete komplektidega (chipset) ja tüüpiliselt on emaplaadi protsessori pesa (socket) see, millest lähtuda emaplaadi ja protsessori ühilduvuse kindlaks tegemisel. Protsessori pesaga ühilduvus on peamine parameeter ka protsessori jahuti valikul, aga kui emaplaadil on ainult ühte tüüpi pesa ja protsessor sobib ainult ühte kindlasse pessa, siis jahutid on üldjuhul sobivad mitmete erinevate pesadega. Samuti ühilduvad iga protsessor ja emaplaat ainult spetsiifiliste muutmälu generatsioonidega. Emaplaadid toetavad muutmälu kindla taktsageduseni, kiirema taktsagedusega mälukiipe saab siiski kasutada, need töötavad lihtsalt emaplaadi poolt lubatud maksimaale taktsagedusega, mitte muutmälu kiibi maksimaalse taktsagedusega. On olemas emaplaate, mis toetavat mitut protsessorit.&lt;br /&gt;
&lt;br /&gt;
Muutmälu võib olla lauaarvutis üks kiip, aga võib ka rohkem. Mitme kiibi korral peaks need olema identsed või identsete näitajatega.&lt;br /&gt;
Osade protsessoritega on jahuti karbis kaasas, teistel ei ole. Tänapäeva lauaarvutite protsessorid ilma jahutita ei ole töövõimelised. Mõned protsessorid ja emaplaadid sisaldavad graafikaseadet. Diskreetne graafikaseade on üldjuhul võimekam protsessori või emaplaadiga kaasasolevast, seega on tavaline, et arvutile lisatakse diskreetne graafikaseade isegi kui sisene graafikaseade on juba olemas.&lt;br /&gt;
&lt;br /&gt;
Emaplaatidel, toiteblokkidel ja arvuti korpustel on mitmed suuruse standardid. Suured (ATX) emaplaadid ja toiteblokid ei mahu väikesesse (microATX) korpusesse. Mõned korpused toetavad väikest emaplaati, samas suurt toiteblokki ja teoreetiliselt on võimalik ka vastupidine olukord.&lt;br /&gt;
&lt;br /&gt;
Arvuti korpus toetab protsessori jahutust ainult kuni teatava jahuti kõrguseni ja diskreetse graafikaseadme puhul ainult teatud seadme pikkuseni. Mõned korpused sisaldavad toiteblokki.&lt;br /&gt;
&lt;br /&gt;
Erinevatel diskreetsetel graafikaseadmetel on erinevad nõuded toitele, osad saavad oma toite ainult emaplaadi liidese kaudu, teistel on vaja ühte või rohkemat kaablit toiteblokist. Graafikaseadmeid võib lauaarvutis olla mitmeid, ka mitu ühesugust.&lt;br /&gt;
&lt;br /&gt;
Toitebloki puhul peab toitebloki võimsus katma kõigi teiste komponentide vajaduse varuga ja diskreetse graafikaseadme korral peab toiteblokil olema selle toiteks piisavalt õigeid kaableid.&lt;br /&gt;
&lt;br /&gt;
====Projekti struktuur====&lt;br /&gt;
Rakendus koosneb kahest põhilisest osast: veebiteenus ja klient-rakendus, mis seda teenust kasutab. &lt;br /&gt;
&lt;br /&gt;
Projekt realiseeritakse kasutades ASP.NET MVC Web API tehnoloogiat, mis võimaldab teha kliendi poolelt vastu serverit asünkroonseid http päringuid (GET, POST, PUT, DELETE) ja mis tagastab andmekogumina JSON&#039;i. See on mugav ja kaasaegne lahendus, kuna töötab ühtemoodi erinevate klientrakendustega (mobiilseadmed, veeb jne).&lt;br /&gt;
  &lt;br /&gt;
Esialgne rakenduse ülesehituse skeem:&lt;br /&gt;
&lt;br /&gt;
[[File:STRUKTUUR.png]]&lt;br /&gt;
&lt;br /&gt;
==== Klientrakenduse funktsionaalsus====&lt;br /&gt;
Klientprogramm võimaldab kasutajal hallata oma kasutajaprofiili, lisada, muuta ja vaadata oma virtuaalseid arvuteid ja nende komponente.&lt;br /&gt;
Veebiklient suhtleb serveriga üle API.&lt;br /&gt;
Sisselogimisel küsitakse kasutajalt kasutajanime ja parooli, seejärel üritab rakendus kasutajat autentida. &lt;br /&gt;
Eduka autentimise korral kuvatakse antud kasutaja töölaud ning sünkroniseeritakse andmed serveriga.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse must-have funktsionaalsus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Üldine&amp;lt;/b&amp;gt;&lt;br /&gt;
** Rakendus peab töötama online režiimis;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Kasutajate haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Peab olema võimalik kasutajaks registreerida (kasutajakonto olemasolu on vajalik andmete talletamiseks);&lt;br /&gt;
** Kasutaja peab saama sisse logida kasutajanime ja parooliga;&lt;br /&gt;
** Paroolile peavad rakenduma keerukusnõuded (nt 8 tähemärki);&lt;br /&gt;
** Kasutajatel peavad olema erinevad õiguste tasemed (minimaalselt tavakasutaja ja administraator);&lt;br /&gt;
*** Tavakasutaja saab hallata ainult iseenda virtuaalseid arvuteid;&lt;br /&gt;
*** Adminkasutaja saab lisada või muuta saadaolevaid komponente;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Virtuaalsete arvutite haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Kasutaja peab saama lisada uusi virtuaalseid arvuteid;&lt;br /&gt;
** Kasutaja poolt lisatud arvutid peavad talle näha olema;&lt;br /&gt;
** Kasutaja peab saama oma arvutitele komponente lisada ja vahetada:&lt;br /&gt;
*** Komponendid on jagatud erinevatesse kategooriatesse: &lt;br /&gt;
**** keskseade/protsessor (CPU)&lt;br /&gt;
**** protsessori jahuti&lt;br /&gt;
**** emaplaat&lt;br /&gt;
**** muutmälu&lt;br /&gt;
**** graafikaseade (GPU)&lt;br /&gt;
**** toiteblokk&lt;br /&gt;
**** arvuti korpus&lt;br /&gt;
**** püsimälu&lt;br /&gt;
*** Ühest kategooriast on võimalik valida ka mitu komponenti (nt mitu graafikaseadet)&lt;br /&gt;
*** Kui kasutaja valib mõne komponendi, siis see piirab automaatselt tema võimalusi valida ainult juba valitud komponentidega kokkusobivaid teisi komponente.&lt;br /&gt;
*** Kui juba valitud komponent muutub mitte kokku sobivaks, siis antakse sellest kasutajale teada&lt;br /&gt;
*** Mitte kokkusobivate komponentidega arvutit salvestada ei ole võimalik&lt;br /&gt;
*** Komponente on võimalik nende omaduste põhjal sorteerida ja filtreerida&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Komponentide haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Komponent peab olema lisatav administraator kasutaja (kuid mitte tavakasutaja) poolt&lt;br /&gt;
** Juba loodud ja kinnitatud komponendi omadusi muuta ei saa&lt;br /&gt;
** Komponendi saab märkida eemaldatuks:&lt;br /&gt;
*** Eemaldatud komponente uute arvutite komplekteerimisel ei kuvata&lt;br /&gt;
*** Eemaldatud komponentidega juba komplekteeritud arvutite puhul kuvatakse kasutajale, et komponent pole enam saadaval&lt;br /&gt;
** Komponendile saab lisada tingimusi:&lt;br /&gt;
*** Tingimused määravad milliste komponentidega antud komponent koos on võimeline töötama&lt;br /&gt;
*** Tingimuseks võib olla ka loodava virtuaalse arvuti mingi parameeter (nt voolutarve)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse nice-to-have funktsionaalsus:&#039;&#039;&#039;&lt;br /&gt;
* Oma komplekteeritud arvuti jagamine&lt;br /&gt;
* Komponentide sorteerimine vastavalt populaarsusele (st kasutamine arvutites)&lt;br /&gt;
* Kasutaja parooli nullimine e-maili kinnituse kaudu&lt;br /&gt;
* Kasutajakonto kustutamine&lt;br /&gt;
* Kasutajakonto andmete muutmine ja lisainfo talletamise võimalus&lt;br /&gt;
&lt;br /&gt;
==== Serveri funktsionaalsus ====&lt;br /&gt;
&amp;lt;b&amp;gt;Serveri must-have funktsionaalsus&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Server peab toetama kõiki klientrakenduse must-have nõudeid. &lt;br /&gt;
* Serveris tuleb logida olulisemaid kasutajate poolt klientrakenduses tehtud toiminguid (sisse logimine, konto lukustumine, virtuaalse arvuti lisamine jne.);&lt;br /&gt;
* Kasutaja blokeerimine (ajutine), kui kasutaja on ennast püüdnud autentida vale parooliga enam kui 8 korda.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Serveri nice-to-have funktsionaalsus&amp;lt;/b&amp;gt;&lt;br /&gt;
* Kasutaja poolt sisestatud e-maili kinnitamine (kinnitava e-maili saatmine) kasutaja loomisel.&lt;br /&gt;
&lt;br /&gt;
=== Andmebaasi skeem ===&lt;br /&gt;
Infomüra vähendamiseks on andmebaasiskeem realiseeritud selliselt, et tabelites on ainult võtmed. Skeemist välja jäetud atribuudid (graafikakaardi pikkus jne) ei ole olulised analüüsi seisukohast.&lt;br /&gt;
&lt;br /&gt;
[[File:ANDMEBAAS.png]]&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 3: Klientrakendus =&lt;br /&gt;
= (b)logi =&lt;br /&gt;
&lt;br /&gt;
* 17/04/2017: Analüüsi lisatud klientrakenduse ja serveri kirjeldused, samuti kirjeldatud projekti üldine struktuur&lt;br /&gt;
* 16/04/2017: Veebirakenduse analüüsi kondikava&lt;br /&gt;
* 27/03/2017: Tehtud retsensioonid meeskondadele [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR DevHelpVR] ja [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Ninjas_in_pyjamas]&lt;br /&gt;
* 27/03/2017: XML ja XSD parandatud ja täiendatud vastavalt meeskonna JRT tagasisidele https://wiki.itcollege.ee/index.php/JRT#Retsensioon_JRT&lt;br /&gt;
* 20/03/2017: Loodud Wiki leht, jagatud ülesanded&lt;br /&gt;
* 20/03/2017: Projekti esimene osa valmis&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=120275</id>
		<title>PC KartKicker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=120275"/>
		<updated>2017-04-17T19:13:54Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Klientrakenduse funktsionaalsus: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
* Jan Eerik&lt;br /&gt;
&lt;br /&gt;
= Idee =&lt;br /&gt;
&lt;br /&gt;
Käesolev veebirakendus on asendamatu abimees arvuti kokkupanekul (võrdlemisi tugevalt inspireeritud https://pcpartpicker.com).&lt;br /&gt;
&lt;br /&gt;
Kuna teatavasti vajab arvuti töötamiseks kindlaid juppe mingis aktsepteeritud konfiguratsioonis, võimaldab meie rakendus välistada mitteühilduva raudvara &amp;quot;jõuga&amp;quot; ühildamist ja abistab kasutajal optimaalse konfiguratsiooni valimist.&lt;br /&gt;
&lt;br /&gt;
= Põhiline funktsionaalsus =&lt;br /&gt;
&lt;br /&gt;
* Kasutaja saab lisada üks kuni mitu arvutiskeemi&lt;br /&gt;
* Skeemile saab hakata ükshaaval lisama juppe (emaplaat, protsessor, mälud jne)&lt;br /&gt;
* Iga kord kui mingi jupp skeemi lisatakse, kitsendab see ülejäänud juppide valikut - näiteks LGA1151 liidesega emaplaadile ei õnnestu lisada AMD protsessorit jne&lt;br /&gt;
* Nii pooleliolevaid kui valminud skeeme saab salvestada&lt;br /&gt;
* Igal jupil on oma vaade koos tehnilise infoga&lt;br /&gt;
&lt;br /&gt;
= Nice to have =&lt;br /&gt;
&lt;br /&gt;
* Parima hinna kuvamine (nt Amazon, Newegg)&lt;br /&gt;
* Komponentide võrdlus&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 1: XML =&lt;br /&gt;
&lt;br /&gt;
== Teema ==&lt;br /&gt;
Uute arvutikomponentide olemasolevatesse kategooriatesse lisamiseks kasutab administraator ankeeti, mille salvestamisel ja andmete serverisse edastamiseks tekitatakse järgmine XML, kus on võimalik korraga suur hulk erinevaid arvutikomponente lisada, aga võib ka ainult ühe komponendi korraga saata.&lt;br /&gt;
&lt;br /&gt;
== XML==&lt;br /&gt;
&amp;lt;pre&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;components&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cases&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;NZXT&amp;quot; name=&amp;quot;S340&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;3&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;364&amp;quot; maxCpuHeight=&amp;quot;161&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;red&amp;quot; price=&amp;quot;66.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Deepcool&amp;quot; name=&amp;quot;TESSERACT SW&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;2&amp;quot; bay3=&amp;quot;4&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;light blue&amp;quot; price=&amp;quot;38.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Xion&amp;quot; name =&amp;quot;XON-310_BK&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;1&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;22.98&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;750D&amp;quot; type=&amp;quot;Full tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;3&amp;quot; bay3=&amp;quot;6&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;450&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;149.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
  &amp;lt;/cases&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpus&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.2&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;74&amp;quot; price=&amp;quot;327.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.8&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;69&amp;quot; price=&amp;quot;233.89&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.0&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;71&amp;quot; price=&amp;quot;316.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.5&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;61&amp;quot; price=&amp;quot;219.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;E5-2699 V3&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Xeon&amp;quot; family=&amp;quot;Haswell&amp;quot; socket=&amp;quot;LGA2011-3&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;18&amp;quot; threads=&amp;quot;36&amp;quot; ecc=&amp;quot;true&amp;quot; speed=&amp;quot;2.3&amp;quot; TDP=&amp;quot;145&amp;quot; lithography=&amp;quot;22&amp;quot; maxPowerDraw=&amp;quot;120&amp;quot; price=&amp;quot;3410.46&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;AMD&amp;quot; name=&amp;quot;1800X&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Ryzen 7&amp;quot; family=&amp;quot;Ryzen&amp;quot; socket=&amp;quot;AM4&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;8&amp;quot; threads=&amp;quot;16&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.6&amp;quot; TDP=&amp;quot;95&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;82&amp;quot; price=&amp;quot;469.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
  &amp;lt;/cpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpucoolers&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Cooler Master&amp;quot; name=&amp;quot;Hyper 212 EVO&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;1&amp;quot; height=&amp;quot;159&amp;quot; price=&amp;quot;24.88&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA775&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;H100i v2&amp;quot; liquid=&amp;quot;true&amp;quot; rad=&amp;quot;240&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;&amp;quot; price=&amp;quot;99.99&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Noctua&amp;quot; name=&amp;quot;NH-D15&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;165&amp;quot; price=&amp;quot;85.49&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
  &amp;lt;/cpucoolers&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;gpus&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;PowerColor&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX460&amp;quot; series=&amp;quot;Red Dragon&amp;quot; vram=&amp;quot;2&amp;quot; psuPin=&amp;quot;&amp;quot; length=&amp;quot;226&amp;quot; maxPowerDraw=&amp;quot;130&amp;quot; price=&amp;quot;73.98&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;Sapphire&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX480&amp;quot; series=&amp;quot;Nitro+&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;8&amp;quot; length=&amp;quot;240&amp;quot; maxPowerDraw=&amp;quot;150&amp;quot; price=&amp;quot;253.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;MSI&amp;quot; brandname=&amp;quot;Geforce&amp;quot; codename=&amp;quot;GTX1070&amp;quot; series=&amp;quot;Quick Silver OC&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;6+8&amp;quot; length=&amp;quot;279&amp;quot; maxPowerDraw=&amp;quot;170&amp;quot; price=&amp;quot;409.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
  &amp;lt;/gpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;memorychips&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Kingston&amp;quot; name=&amp;quot;ValueRAM&amp;quot; type=&amp;quot;DIMM&amp;quot; rank=&amp;quot;single&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;2133&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;yes&amp;quot; price=&amp;quot;67.58&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;Dominator Platinum&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;3000&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;2&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;123.25&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;ADATA&amp;quot; name=&amp;quot;&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR3&amp;quot; speed=&amp;quot;1600&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;88.29&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
  &amp;lt;/memorychips&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;motherboards&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Z170-A&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;Z170&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3400&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;152.99&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;ASRock&amp;quot; name=&amp;quot;H110M-HDS&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; chipset=&amp;quot;H110&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;2&amp;quot; maxMemory=&amp;quot;32&amp;quot; maxMemorySpeed=&amp;quot;2133&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;37.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Prime X370-PRO&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;X370&amp;quot; socket=&amp;quot;AM4&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3200&amp;quot; sata3=&amp;quot;8&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;162.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
  &amp;lt;/motherboards&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;psus&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;EVGA&amp;quot; name=&amp;quot;SuperNOVA 650&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;650&amp;quot; eff80plus=&amp;quot;gold&amp;quot; modular=&amp;quot;full&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;be Quiet!&amp;quot; name=&amp;quot;Pure Power L8 600W&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;600&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;no&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;CX550M&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;550&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;semi&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;2&amp;quot; price=&amp;quot;43.98&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
  &amp;lt;/psus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;storages&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;850 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;2048&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;823.14&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Intel&amp;quot; name=&amp;quot;DC P3608&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;4096&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;pcie8x&amp;quot; formFactor=&amp;quot;pcie&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;8867.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;960 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;m.2&amp;quot; formFactor=&amp;quot;m.2-2280&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;629.95&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Western Digital&amp;quot; name=&amp;quot;Black&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;6144&amp;quot; cache=&amp;quot;128&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;279.00&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Seagate&amp;quot; name=&amp;quot;BarraCuda Pro&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;10240&amp;quot; cache=&amp;quot;256&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;429.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Hitachi&amp;quot; name=&amp;quot;Travelstar&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;32&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;53.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
  &amp;lt;/storages&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/components&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML skeem (XSD) ==&lt;br /&gt;
&amp;lt;pre&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;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;cases&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;case&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay5&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psu&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxGpuLength&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxCpuHeight&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;primaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;secondaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cooler&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;family&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;iGPU&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cores&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;threads&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ecc&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;TDP&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;lithography&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpucoolers&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;sockets&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;liquid&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rad&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;fans&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;height&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;gpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;gpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brandname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;codename&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;vram&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psuPin&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;length&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;memorychips&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;memorychip&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rank&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cas&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;gen&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;moduleSize&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modules&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ECC&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;motherboards&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;motherboard&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;chipset&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memoryType&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memorySlots&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemory&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemorySpeed&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;video&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;sata3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ethernet&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;usb3&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;psus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;psu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;wattage&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;eff80plus&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modular&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6p2&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;storages&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;storage&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;capacity&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cache&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;interface&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rpm&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 1 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added computer parts:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;child::*/child::*&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 2 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added CPU coolers:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;cpucoolers/cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
== XML retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR Talk:DevHelpVR] &amp;lt;br&amp;gt;&lt;br /&gt;
XML failide retsensioon meeskonnale Ninjas_in_pyjamas, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Talk:Ninjas_in_pyjamas]&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 2: Veebirakendus =&lt;br /&gt;
== Analüüs == &lt;br /&gt;
Vastavalt klientrakenduse päringule annab veebirakendus andmebaasis oleva informatsiooni põhjal JSON kujul vastuse kliendile. Klientrakenduse funktsionaalsus ja andmebaasi skeem on mõlemad kirjeldatud allpool. Veebirakendus suudab anda komponentide kategooriate nimekirja, ühe kategooria komponentide nimekirja, nime järgi otsingu tulemuste nimekirja, konkreetse komponendi detailse informatsiooni, jpm.&lt;br /&gt;
&lt;br /&gt;
=== Mõisted ===&lt;br /&gt;
*&#039;&#039;&#039;CPU&#039;&#039;&#039; - Keskseade, ühest või mitmest protsessorist ja nende sisemäludest koosnev funktsionaalüksus, nii eesti kui inglise keeles kasutusel sünonüümina sõna protsessor;&lt;br /&gt;
*&#039;&#039;&#039;GPU&#039;&#039;&#039; - Graafikaseade, spetsiaalselt graafikatöötlusele orienteeritud protsessorid ja ( diskreetse puhul) mälu, integreeritud graafikaseaded kasutavad arvutisüsteemi muutmälu;&lt;br /&gt;
*&#039;&#039;&#039;RAM&#039;&#039;&#039; - Mälu kus hoitakse käimas-olevate programmide andmeid;&lt;br /&gt;
*&#039;&#039;&#039;Emaplaat&#039;&#039;&#039; - Kiibistik, mis ühendab ülejäänud arvutikomponendid omavahel kokku;&lt;br /&gt;
*&#039;&#039;&#039;PSU&#039;&#039;&#039; - Toiteblokk, võtab vooluvõrgust tuleva voolu ja muundab selle arvutikomponentidele sobivaks;&lt;br /&gt;
*&#039;&#039;&#039;Korpus&#039;&#039;&#039; - Erinevad “kastid”, mis on loodud tervikliku arvutisüsteemi komponentide tarbeks.&lt;br /&gt;
*&#039;&#039;&#039;ROM&#039;&#039;&#039; - Arvuti püsimälu, tänapäeval jaguneb laias laastus SSD (kallis maht, kiire) ja HDD (odav maht, aeglane) variantideks.&lt;br /&gt;
&lt;br /&gt;
=== Rakenduse kirjeldus (kogu süsteem, teenus+klient) ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Lühidalt:====&lt;br /&gt;
Meil on lauaarvutite komplekteerimise infosüsteem. Meie klientideks on inimesed kes kaaluvad lauaarvuti ostmist ja kes soovivad enne lauaarvuti või selle komponentide ostmist enda jaoks kogu protseduuri põhjalikult läbi mõelda. Süsteem võimaldab klientidel luua virtuaalse lauaarvuti ja tuvastab mitteühilduvad komponendid ning aitab seega vältida erinevaid probleeme, millega kaasneks aja- ja rahakulu.&lt;br /&gt;
&lt;br /&gt;
==== Nüansid ja programselt lahendatavad probleemid: ====&lt;br /&gt;
&lt;br /&gt;
Kliendid saavad ennast meie süsteemis registreerida kasutajateks. Üks füüsiline isik võib teha endale teha ükskõik kui palju kasutajaid, meil ei pea olema päriselt olemasoleva isiku ja süsteemi kasutaja vahel üks-ühest seost. Rakenduse kasutamiseks ei ole kohustuslik serveris konto loomine, klient saab virtuaalse arvuti luua ilma kasutajakontota, aga see ei säilu pärast sessiooni lõppemist.&lt;br /&gt;
&lt;br /&gt;
Iga kasutaja võib luua uue virtuaalse lauaarvuti, sellele nimetuse panna ja see seotakse automaatselt tema kasutajakontoga. Igale virtuaalsele arvutile võib lisada komponente. Lauaarvuti põhilisteks komponentideks on keskseade/protsessor (CPU), protsessori jahuti, emaplaat, muutmälu, graafikaseade (GPU), toiteblokk, arvuti korpus ja püsimälu.&lt;br /&gt;
&lt;br /&gt;
Iga protsessori generatsioon on ühilduv ainult kindlate emaplaadi kiipseadmete komplektidega (chipset) ja tüüpiliselt on emaplaadi protsessori pesa (socket) see, millest lähtuda emaplaadi ja protsessori ühilduvuse kindlaks tegemisel. Protsessori pesaga ühilduvus on peamine parameeter ka protsessori jahuti valikul, aga kui emaplaadil on ainult ühte tüüpi pesa ja protsessor sobib ainult ühte kindlasse pessa, siis jahutid on üldjuhul sobivad mitmete erinevate pesadega. Samuti ühilduvad iga protsessor ja emaplaat ainult spetsiifiliste muutmälu generatsioonidega. Emaplaadid toetavad muutmälu kindla taktsageduseni, kiirema taktsagedusega mälukiipe saab siiski kasutada, need töötavad lihtsalt emaplaadi poolt lubatud maksimaale taktsagedusega, mitte muutmälu kiibi maksimaalse taktsagedusega. On olemas emaplaate, mis toetavat mitut protsessorit.&lt;br /&gt;
&lt;br /&gt;
Muutmälu võib olla lauaarvutis üks kiip, aga võib ka rohkem. Mitme kiibi korral peaks need olema identsed või identsete näitajatega.&lt;br /&gt;
Osade protsessoritega on jahuti karbis kaasas, teistel ei ole. Tänapäeva lauaarvutite protsessorid ilma jahutita ei ole töövõimelised. Mõned protsessorid ja emaplaadid sisaldavad graafikaseadet. Diskreetne graafikaseade on üldjuhul võimekam protsessori või emaplaadiga kaasasolevast, seega on tavaline, et arvutile lisatakse diskreetne graafikaseade isegi kui sisene graafikaseade on juba olemas.&lt;br /&gt;
&lt;br /&gt;
Emaplaatidel, toiteblokkidel ja arvuti korpustel on mitmed suuruse standardid. Suured (ATX) emaplaadid ja toiteblokid ei mahu väikesesse (microATX) korpusesse. Mõned korpused toetavad väikest emaplaati, samas suurt toiteblokki ja teoreetiliselt on võimalik ka vastupidine olukord.&lt;br /&gt;
&lt;br /&gt;
Arvuti korpus toetab protsessori jahutust ainult kuni teatava jahuti kõrguseni ja diskreetse graafikaseadme puhul ainult teatud seadme pikkuseni. Mõned korpused sisaldavad toiteblokki.&lt;br /&gt;
&lt;br /&gt;
Erinevatel diskreetsetel graafikaseadmetel on erinevad nõuded toitele, osad saavad oma toite ainult emaplaadi liidese kaudu, teistel on vaja ühte või rohkemat kaablit toiteblokist. Graafikaseadmeid võib lauaarvutis olla mitmeid, ka mitu ühesugust.&lt;br /&gt;
&lt;br /&gt;
Toitebloki puhul peab toitebloki võimsus katma kõigi teiste komponentide vajaduse varuga ja diskreetse graafikaseadme korral peab toiteblokil olema selle toiteks piisavalt õigeid kaableid.&lt;br /&gt;
&lt;br /&gt;
====Projekti struktuur:====&lt;br /&gt;
Rakendus koosneb kahest põhilisest osast: veebiteenus ja klient-rakendus, mis seda teenust kasutab. &lt;br /&gt;
&lt;br /&gt;
Projekt realiseeritakse kasutades ASP.NET MVC Web API tehnoloogiat, mis võimaldab teha kliendi poolelt vastu serverit asünkroonseid http päringuid (GET, POST, PUT, DELETE) ja mis tagastab andmekogumina JSON&#039;i. See on mugav ja kaasaegne lahendus, kuna töötab ühtemoodi erinevate klientrakendustega (mobiilseadmed, veeb jne).&lt;br /&gt;
  &lt;br /&gt;
Esialgne rakenduse ülesehituse skeem:&lt;br /&gt;
&lt;br /&gt;
[[File:STRUKTUUR.png]]&lt;br /&gt;
&lt;br /&gt;
==== Klientrakenduse funktsionaalsus====&lt;br /&gt;
Klientprogramm võimaldab kasutajal hallata oma kasutajaprofiili, lisada, muuta ja vaadata oma virtuaalseid arvuteid ja nende komponente.&lt;br /&gt;
Veebiklient suhtleb serveriga üle API.&lt;br /&gt;
Sisselogimisel küsitakse kasutajalt kasutajanime ja parooli, seejärel üritab rakendus kasutajat autentida. &lt;br /&gt;
Eduka autentimise korral kuvatakse antud kasutaja töölaud ning sünkroniseeritakse andmed serveriga.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse must-have funktsionaalsus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Üldine&amp;lt;/b&amp;gt;&lt;br /&gt;
** Rakendus peab töötama online režiimis;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Kasutajate haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Peab olema võimalik kasutajaks registreerida (kasutajakonto olemasolu on vajalik andmete talletamiseks);&lt;br /&gt;
** Kasutaja peab saama sisse logida kasutajanime ja parooliga;&lt;br /&gt;
** Paroolile peavad rakenduma keerukusnõuded (nt 8 tähemärki);&lt;br /&gt;
** Kasutajatel peavad olema erinevad õiguste tasemed (minimaalselt tavakasutaja ja administraator);&lt;br /&gt;
*** Tavakasutaja saab hallata ainult iseenda virtuaalseid arvuteid;&lt;br /&gt;
*** Adminkasutaja saab lisada või muuta saadaolevaid komponente;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Virtuaalsete arvutite haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Kasutaja peab saama lisada uusi virtuaalseid arvuteid;&lt;br /&gt;
** Kasutaja poolt lisatud arvutid peavad talle näha olema;&lt;br /&gt;
** Kasutaja peab saama oma arvutitele komponente lisada ja vahetada:&lt;br /&gt;
*** Komponendid on jagatud erinevatesse kategooriatesse: &lt;br /&gt;
**** keskseade/protsessor (CPU)&lt;br /&gt;
**** protsessori jahuti&lt;br /&gt;
**** emaplaat&lt;br /&gt;
**** muutmälu&lt;br /&gt;
**** graafikaseade (GPU)&lt;br /&gt;
**** toiteblokk&lt;br /&gt;
**** arvuti korpus&lt;br /&gt;
**** püsimälu&lt;br /&gt;
*** Ühest kategooriast on võimalik valida ka mitu komponenti (nt mitu graafikaseadet)&lt;br /&gt;
*** Kui kasutaja valib mõne komponendi, siis see piirab automaatselt tema võimalusi valida ainult juba valitud komponentidega kokkusobivaid teisi komponente.&lt;br /&gt;
*** Kui juba valitud komponent muutub mitte kokku sobivaks, siis antakse sellest kasutajale teada&lt;br /&gt;
*** Mitte kokkusobivate komponentidega arvutit salvestada ei ole võimalik&lt;br /&gt;
*** Komponente on võimalik nende omaduste põhjal sorteerida ja filtreerida&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Komponentide haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Komponent peab olema lisatav administraator kasutaja (kuid mitte tavakasutaja) poolt&lt;br /&gt;
** Juba loodud ja kinnitatud komponendi omadusi muuta ei saa&lt;br /&gt;
** Komponendi saab märkida eemaldatuks:&lt;br /&gt;
*** Eemaldatud komponente uute arvutite komplekteerimisel ei kuvata&lt;br /&gt;
*** Eemaldatud komponentidega juba komplekteeritud arvutite puhul kuvatakse kasutajale, et komponent pole enam saadaval&lt;br /&gt;
** Komponendile saab lisada tingimusi:&lt;br /&gt;
*** Tingimused määravad milliste komponentidega antud komponent koos on võimeline töötama&lt;br /&gt;
*** Tingimuseks võib olla ka loodava virtuaalse arvuti mingi parameeter (nt voolutarve)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse nice-to-have funktsionaalsus:&#039;&#039;&#039;&lt;br /&gt;
* Oma komplekteeritud arvuti jagamine&lt;br /&gt;
* Komponentide sorteerimine vastavalt populaarsusele (st kasutamine arvutites)&lt;br /&gt;
* Kasutaja parooli nullimine e-maili kinnituse kaudu&lt;br /&gt;
* Kasutajakonto kustutamine&lt;br /&gt;
* Kasutajakonto andmete muutmine ja lisainfo talletamise võimalus&lt;br /&gt;
&lt;br /&gt;
==== Serveri funktsionaalsus ====&lt;br /&gt;
&amp;lt;b&amp;gt;Serveri must-have funktsionaalsus&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Server peab toetama kõiki klientrakenduse must-have nõudeid. &lt;br /&gt;
* Serveris tuleb logida olulisemaid kasutajate poolt klientrakenduses tehtud toiminguid (sisse logimine, konto lukustumine, virtuaalse arvuti lisamine jne.);&lt;br /&gt;
* Kasutaja blokeerimine (ajutine), kui kasutaja on ennast püüdnud autentida vale parooliga enam kui 8 korda.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Serveri nice-to-have funktsionaalsus&amp;lt;/b&amp;gt;&lt;br /&gt;
* Kasutaja poolt sisestatud e-maili kinnitamine (kinnitava e-maili saatmine) kasutaja loomisel.&lt;br /&gt;
&lt;br /&gt;
=== Andmebaasi skeem ===&lt;br /&gt;
Infomüra vähendamiseks on andmebaasiskeem realiseeritud selliselt, et tabelites on ainult võtmed. Skeemist välja jäetud atribuudid (graafikakaardi pikkus jne) ei ole olulised analüüsi seisukohast.&lt;br /&gt;
&lt;br /&gt;
[[File:ANDMEBAAS.png]]&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 3: Klientrakendus =&lt;br /&gt;
= (b)logi =&lt;br /&gt;
&lt;br /&gt;
* 17/04/2017: Analüüsi lisatud klientrakenduse ja serveri kirjeldused, samuti kirjeldatud projekti üldine struktuur&lt;br /&gt;
* 16/04/2017: Veebirakenduse analüüsi kondikava&lt;br /&gt;
* 27/03/2017: Tehtud retsensioonid meeskondadele [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR DevHelpVR] ja [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Ninjas_in_pyjamas]&lt;br /&gt;
* 27/03/2017: XML ja XSD parandatud ja täiendatud vastavalt meeskonna JRT tagasisidele https://wiki.itcollege.ee/index.php/JRT#Retsensioon_JRT&lt;br /&gt;
* 20/03/2017: Loodud Wiki leht, jagatud ülesanded&lt;br /&gt;
* 20/03/2017: Projekti esimene osa valmis&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=120274</id>
		<title>PC KartKicker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=120274"/>
		<updated>2017-04-17T19:13:44Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Klientrakenduse funktsionaalsus: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
* Jan Eerik&lt;br /&gt;
&lt;br /&gt;
= Idee =&lt;br /&gt;
&lt;br /&gt;
Käesolev veebirakendus on asendamatu abimees arvuti kokkupanekul (võrdlemisi tugevalt inspireeritud https://pcpartpicker.com).&lt;br /&gt;
&lt;br /&gt;
Kuna teatavasti vajab arvuti töötamiseks kindlaid juppe mingis aktsepteeritud konfiguratsioonis, võimaldab meie rakendus välistada mitteühilduva raudvara &amp;quot;jõuga&amp;quot; ühildamist ja abistab kasutajal optimaalse konfiguratsiooni valimist.&lt;br /&gt;
&lt;br /&gt;
= Põhiline funktsionaalsus =&lt;br /&gt;
&lt;br /&gt;
* Kasutaja saab lisada üks kuni mitu arvutiskeemi&lt;br /&gt;
* Skeemile saab hakata ükshaaval lisama juppe (emaplaat, protsessor, mälud jne)&lt;br /&gt;
* Iga kord kui mingi jupp skeemi lisatakse, kitsendab see ülejäänud juppide valikut - näiteks LGA1151 liidesega emaplaadile ei õnnestu lisada AMD protsessorit jne&lt;br /&gt;
* Nii pooleliolevaid kui valminud skeeme saab salvestada&lt;br /&gt;
* Igal jupil on oma vaade koos tehnilise infoga&lt;br /&gt;
&lt;br /&gt;
= Nice to have =&lt;br /&gt;
&lt;br /&gt;
* Parima hinna kuvamine (nt Amazon, Newegg)&lt;br /&gt;
* Komponentide võrdlus&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 1: XML =&lt;br /&gt;
&lt;br /&gt;
== Teema ==&lt;br /&gt;
Uute arvutikomponentide olemasolevatesse kategooriatesse lisamiseks kasutab administraator ankeeti, mille salvestamisel ja andmete serverisse edastamiseks tekitatakse järgmine XML, kus on võimalik korraga suur hulk erinevaid arvutikomponente lisada, aga võib ka ainult ühe komponendi korraga saata.&lt;br /&gt;
&lt;br /&gt;
== XML==&lt;br /&gt;
&amp;lt;pre&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;components&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cases&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;NZXT&amp;quot; name=&amp;quot;S340&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;3&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;364&amp;quot; maxCpuHeight=&amp;quot;161&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;red&amp;quot; price=&amp;quot;66.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Deepcool&amp;quot; name=&amp;quot;TESSERACT SW&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;2&amp;quot; bay3=&amp;quot;4&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;light blue&amp;quot; price=&amp;quot;38.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Xion&amp;quot; name =&amp;quot;XON-310_BK&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;1&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;22.98&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;750D&amp;quot; type=&amp;quot;Full tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;3&amp;quot; bay3=&amp;quot;6&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;450&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;149.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
  &amp;lt;/cases&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpus&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.2&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;74&amp;quot; price=&amp;quot;327.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.8&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;69&amp;quot; price=&amp;quot;233.89&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.0&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;71&amp;quot; price=&amp;quot;316.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.5&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;61&amp;quot; price=&amp;quot;219.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;E5-2699 V3&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Xeon&amp;quot; family=&amp;quot;Haswell&amp;quot; socket=&amp;quot;LGA2011-3&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;18&amp;quot; threads=&amp;quot;36&amp;quot; ecc=&amp;quot;true&amp;quot; speed=&amp;quot;2.3&amp;quot; TDP=&amp;quot;145&amp;quot; lithography=&amp;quot;22&amp;quot; maxPowerDraw=&amp;quot;120&amp;quot; price=&amp;quot;3410.46&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;AMD&amp;quot; name=&amp;quot;1800X&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Ryzen 7&amp;quot; family=&amp;quot;Ryzen&amp;quot; socket=&amp;quot;AM4&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;8&amp;quot; threads=&amp;quot;16&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.6&amp;quot; TDP=&amp;quot;95&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;82&amp;quot; price=&amp;quot;469.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
  &amp;lt;/cpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpucoolers&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Cooler Master&amp;quot; name=&amp;quot;Hyper 212 EVO&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;1&amp;quot; height=&amp;quot;159&amp;quot; price=&amp;quot;24.88&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA775&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;H100i v2&amp;quot; liquid=&amp;quot;true&amp;quot; rad=&amp;quot;240&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;&amp;quot; price=&amp;quot;99.99&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Noctua&amp;quot; name=&amp;quot;NH-D15&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;165&amp;quot; price=&amp;quot;85.49&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
  &amp;lt;/cpucoolers&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;gpus&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;PowerColor&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX460&amp;quot; series=&amp;quot;Red Dragon&amp;quot; vram=&amp;quot;2&amp;quot; psuPin=&amp;quot;&amp;quot; length=&amp;quot;226&amp;quot; maxPowerDraw=&amp;quot;130&amp;quot; price=&amp;quot;73.98&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;Sapphire&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX480&amp;quot; series=&amp;quot;Nitro+&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;8&amp;quot; length=&amp;quot;240&amp;quot; maxPowerDraw=&amp;quot;150&amp;quot; price=&amp;quot;253.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;MSI&amp;quot; brandname=&amp;quot;Geforce&amp;quot; codename=&amp;quot;GTX1070&amp;quot; series=&amp;quot;Quick Silver OC&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;6+8&amp;quot; length=&amp;quot;279&amp;quot; maxPowerDraw=&amp;quot;170&amp;quot; price=&amp;quot;409.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
  &amp;lt;/gpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;memorychips&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Kingston&amp;quot; name=&amp;quot;ValueRAM&amp;quot; type=&amp;quot;DIMM&amp;quot; rank=&amp;quot;single&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;2133&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;yes&amp;quot; price=&amp;quot;67.58&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;Dominator Platinum&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;3000&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;2&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;123.25&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;ADATA&amp;quot; name=&amp;quot;&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR3&amp;quot; speed=&amp;quot;1600&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;88.29&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
  &amp;lt;/memorychips&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;motherboards&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Z170-A&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;Z170&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3400&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;152.99&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;ASRock&amp;quot; name=&amp;quot;H110M-HDS&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; chipset=&amp;quot;H110&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;2&amp;quot; maxMemory=&amp;quot;32&amp;quot; maxMemorySpeed=&amp;quot;2133&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;37.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Prime X370-PRO&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;X370&amp;quot; socket=&amp;quot;AM4&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3200&amp;quot; sata3=&amp;quot;8&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;162.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
  &amp;lt;/motherboards&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;psus&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;EVGA&amp;quot; name=&amp;quot;SuperNOVA 650&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;650&amp;quot; eff80plus=&amp;quot;gold&amp;quot; modular=&amp;quot;full&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;be Quiet!&amp;quot; name=&amp;quot;Pure Power L8 600W&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;600&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;no&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;CX550M&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;550&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;semi&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;2&amp;quot; price=&amp;quot;43.98&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
  &amp;lt;/psus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;storages&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;850 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;2048&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;823.14&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Intel&amp;quot; name=&amp;quot;DC P3608&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;4096&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;pcie8x&amp;quot; formFactor=&amp;quot;pcie&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;8867.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;960 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;m.2&amp;quot; formFactor=&amp;quot;m.2-2280&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;629.95&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Western Digital&amp;quot; name=&amp;quot;Black&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;6144&amp;quot; cache=&amp;quot;128&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;279.00&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Seagate&amp;quot; name=&amp;quot;BarraCuda Pro&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;10240&amp;quot; cache=&amp;quot;256&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;429.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Hitachi&amp;quot; name=&amp;quot;Travelstar&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;32&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;53.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
  &amp;lt;/storages&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/components&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML skeem (XSD) ==&lt;br /&gt;
&amp;lt;pre&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;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;cases&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;case&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay5&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psu&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxGpuLength&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxCpuHeight&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;primaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;secondaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cooler&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;family&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;iGPU&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cores&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;threads&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ecc&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;TDP&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;lithography&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpucoolers&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;sockets&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;liquid&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rad&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;fans&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;height&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;gpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;gpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brandname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;codename&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;vram&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psuPin&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;length&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;memorychips&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;memorychip&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rank&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cas&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;gen&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;moduleSize&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modules&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ECC&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;motherboards&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;motherboard&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;chipset&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memoryType&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memorySlots&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemory&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemorySpeed&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;video&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;sata3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ethernet&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;usb3&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;psus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;psu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;wattage&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;eff80plus&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modular&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6p2&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;storages&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;storage&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;capacity&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cache&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;interface&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rpm&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 1 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added computer parts:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;child::*/child::*&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 2 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added CPU coolers:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;cpucoolers/cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
== XML retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR Talk:DevHelpVR] &amp;lt;br&amp;gt;&lt;br /&gt;
XML failide retsensioon meeskonnale Ninjas_in_pyjamas, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Talk:Ninjas_in_pyjamas]&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 2: Veebirakendus =&lt;br /&gt;
== Analüüs == &lt;br /&gt;
Vastavalt klientrakenduse päringule annab veebirakendus andmebaasis oleva informatsiooni põhjal JSON kujul vastuse kliendile. Klientrakenduse funktsionaalsus ja andmebaasi skeem on mõlemad kirjeldatud allpool. Veebirakendus suudab anda komponentide kategooriate nimekirja, ühe kategooria komponentide nimekirja, nime järgi otsingu tulemuste nimekirja, konkreetse komponendi detailse informatsiooni, jpm.&lt;br /&gt;
&lt;br /&gt;
=== Mõisted ===&lt;br /&gt;
*&#039;&#039;&#039;CPU&#039;&#039;&#039; - Keskseade, ühest või mitmest protsessorist ja nende sisemäludest koosnev funktsionaalüksus, nii eesti kui inglise keeles kasutusel sünonüümina sõna protsessor;&lt;br /&gt;
*&#039;&#039;&#039;GPU&#039;&#039;&#039; - Graafikaseade, spetsiaalselt graafikatöötlusele orienteeritud protsessorid ja ( diskreetse puhul) mälu, integreeritud graafikaseaded kasutavad arvutisüsteemi muutmälu;&lt;br /&gt;
*&#039;&#039;&#039;RAM&#039;&#039;&#039; - Mälu kus hoitakse käimas-olevate programmide andmeid;&lt;br /&gt;
*&#039;&#039;&#039;Emaplaat&#039;&#039;&#039; - Kiibistik, mis ühendab ülejäänud arvutikomponendid omavahel kokku;&lt;br /&gt;
*&#039;&#039;&#039;PSU&#039;&#039;&#039; - Toiteblokk, võtab vooluvõrgust tuleva voolu ja muundab selle arvutikomponentidele sobivaks;&lt;br /&gt;
*&#039;&#039;&#039;Korpus&#039;&#039;&#039; - Erinevad “kastid”, mis on loodud tervikliku arvutisüsteemi komponentide tarbeks.&lt;br /&gt;
*&#039;&#039;&#039;ROM&#039;&#039;&#039; - Arvuti püsimälu, tänapäeval jaguneb laias laastus SSD (kallis maht, kiire) ja HDD (odav maht, aeglane) variantideks.&lt;br /&gt;
&lt;br /&gt;
=== Rakenduse kirjeldus (kogu süsteem, teenus+klient) ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Lühidalt:====&lt;br /&gt;
Meil on lauaarvutite komplekteerimise infosüsteem. Meie klientideks on inimesed kes kaaluvad lauaarvuti ostmist ja kes soovivad enne lauaarvuti või selle komponentide ostmist enda jaoks kogu protseduuri põhjalikult läbi mõelda. Süsteem võimaldab klientidel luua virtuaalse lauaarvuti ja tuvastab mitteühilduvad komponendid ning aitab seega vältida erinevaid probleeme, millega kaasneks aja- ja rahakulu.&lt;br /&gt;
&lt;br /&gt;
==== Nüansid ja programselt lahendatavad probleemid: ====&lt;br /&gt;
&lt;br /&gt;
Kliendid saavad ennast meie süsteemis registreerida kasutajateks. Üks füüsiline isik võib teha endale teha ükskõik kui palju kasutajaid, meil ei pea olema päriselt olemasoleva isiku ja süsteemi kasutaja vahel üks-ühest seost. Rakenduse kasutamiseks ei ole kohustuslik serveris konto loomine, klient saab virtuaalse arvuti luua ilma kasutajakontota, aga see ei säilu pärast sessiooni lõppemist.&lt;br /&gt;
&lt;br /&gt;
Iga kasutaja võib luua uue virtuaalse lauaarvuti, sellele nimetuse panna ja see seotakse automaatselt tema kasutajakontoga. Igale virtuaalsele arvutile võib lisada komponente. Lauaarvuti põhilisteks komponentideks on keskseade/protsessor (CPU), protsessori jahuti, emaplaat, muutmälu, graafikaseade (GPU), toiteblokk, arvuti korpus ja püsimälu.&lt;br /&gt;
&lt;br /&gt;
Iga protsessori generatsioon on ühilduv ainult kindlate emaplaadi kiipseadmete komplektidega (chipset) ja tüüpiliselt on emaplaadi protsessori pesa (socket) see, millest lähtuda emaplaadi ja protsessori ühilduvuse kindlaks tegemisel. Protsessori pesaga ühilduvus on peamine parameeter ka protsessori jahuti valikul, aga kui emaplaadil on ainult ühte tüüpi pesa ja protsessor sobib ainult ühte kindlasse pessa, siis jahutid on üldjuhul sobivad mitmete erinevate pesadega. Samuti ühilduvad iga protsessor ja emaplaat ainult spetsiifiliste muutmälu generatsioonidega. Emaplaadid toetavad muutmälu kindla taktsageduseni, kiirema taktsagedusega mälukiipe saab siiski kasutada, need töötavad lihtsalt emaplaadi poolt lubatud maksimaale taktsagedusega, mitte muutmälu kiibi maksimaalse taktsagedusega. On olemas emaplaate, mis toetavat mitut protsessorit.&lt;br /&gt;
&lt;br /&gt;
Muutmälu võib olla lauaarvutis üks kiip, aga võib ka rohkem. Mitme kiibi korral peaks need olema identsed või identsete näitajatega.&lt;br /&gt;
Osade protsessoritega on jahuti karbis kaasas, teistel ei ole. Tänapäeva lauaarvutite protsessorid ilma jahutita ei ole töövõimelised. Mõned protsessorid ja emaplaadid sisaldavad graafikaseadet. Diskreetne graafikaseade on üldjuhul võimekam protsessori või emaplaadiga kaasasolevast, seega on tavaline, et arvutile lisatakse diskreetne graafikaseade isegi kui sisene graafikaseade on juba olemas.&lt;br /&gt;
&lt;br /&gt;
Emaplaatidel, toiteblokkidel ja arvuti korpustel on mitmed suuruse standardid. Suured (ATX) emaplaadid ja toiteblokid ei mahu väikesesse (microATX) korpusesse. Mõned korpused toetavad väikest emaplaati, samas suurt toiteblokki ja teoreetiliselt on võimalik ka vastupidine olukord.&lt;br /&gt;
&lt;br /&gt;
Arvuti korpus toetab protsessori jahutust ainult kuni teatava jahuti kõrguseni ja diskreetse graafikaseadme puhul ainult teatud seadme pikkuseni. Mõned korpused sisaldavad toiteblokki.&lt;br /&gt;
&lt;br /&gt;
Erinevatel diskreetsetel graafikaseadmetel on erinevad nõuded toitele, osad saavad oma toite ainult emaplaadi liidese kaudu, teistel on vaja ühte või rohkemat kaablit toiteblokist. Graafikaseadmeid võib lauaarvutis olla mitmeid, ka mitu ühesugust.&lt;br /&gt;
&lt;br /&gt;
Toitebloki puhul peab toitebloki võimsus katma kõigi teiste komponentide vajaduse varuga ja diskreetse graafikaseadme korral peab toiteblokil olema selle toiteks piisavalt õigeid kaableid.&lt;br /&gt;
&lt;br /&gt;
====Projekti struktuur:====&lt;br /&gt;
Rakendus koosneb kahest põhilisest osast: veebiteenus ja klient-rakendus, mis seda teenust kasutab. &lt;br /&gt;
&lt;br /&gt;
Projekt realiseeritakse kasutades ASP.NET MVC Web API tehnoloogiat, mis võimaldab teha kliendi poolelt vastu serverit asünkroonseid http päringuid (GET, POST, PUT, DELETE) ja mis tagastab andmekogumina JSON&#039;i. See on mugav ja kaasaegne lahendus, kuna töötab ühtemoodi erinevate klientrakendustega (mobiilseadmed, veeb jne).&lt;br /&gt;
  &lt;br /&gt;
Esialgne rakenduse ülesehituse skeem:&lt;br /&gt;
&lt;br /&gt;
[[File:STRUKTUUR.png]]&lt;br /&gt;
&lt;br /&gt;
==== Klientrakenduse funktsionaalsus:====&lt;br /&gt;
Klientprogramm võimaldab kasutajal hallata oma kasutajaprofiili, lisada, muuta ja vaadata oma virtuaalseid arvuteid ja nende komponente.&lt;br /&gt;
Veebiklient suhtleb serveriga üle API.&lt;br /&gt;
Sisselogimisel küsitakse kasutajalt kasutajanime ja parooli, seejärel üritab rakendus kasutajat autentida. &lt;br /&gt;
Eduka autentimise korral kuvatakse antud kasutaja töölaud ning sünkroniseeritakse andmed serveriga.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse must-have funktsionaalsus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Üldine&amp;lt;/b&amp;gt;&lt;br /&gt;
** Rakendus peab töötama online režiimis;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Kasutajate haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Peab olema võimalik kasutajaks registreerida (kasutajakonto olemasolu on vajalik andmete talletamiseks);&lt;br /&gt;
** Kasutaja peab saama sisse logida kasutajanime ja parooliga;&lt;br /&gt;
** Paroolile peavad rakenduma keerukusnõuded (nt 8 tähemärki);&lt;br /&gt;
** Kasutajatel peavad olema erinevad õiguste tasemed (minimaalselt tavakasutaja ja administraator);&lt;br /&gt;
*** Tavakasutaja saab hallata ainult iseenda virtuaalseid arvuteid;&lt;br /&gt;
*** Adminkasutaja saab lisada või muuta saadaolevaid komponente;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Virtuaalsete arvutite haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Kasutaja peab saama lisada uusi virtuaalseid arvuteid;&lt;br /&gt;
** Kasutaja poolt lisatud arvutid peavad talle näha olema;&lt;br /&gt;
** Kasutaja peab saama oma arvutitele komponente lisada ja vahetada:&lt;br /&gt;
*** Komponendid on jagatud erinevatesse kategooriatesse: &lt;br /&gt;
**** keskseade/protsessor (CPU)&lt;br /&gt;
**** protsessori jahuti&lt;br /&gt;
**** emaplaat&lt;br /&gt;
**** muutmälu&lt;br /&gt;
**** graafikaseade (GPU)&lt;br /&gt;
**** toiteblokk&lt;br /&gt;
**** arvuti korpus&lt;br /&gt;
**** püsimälu&lt;br /&gt;
*** Ühest kategooriast on võimalik valida ka mitu komponenti (nt mitu graafikaseadet)&lt;br /&gt;
*** Kui kasutaja valib mõne komponendi, siis see piirab automaatselt tema võimalusi valida ainult juba valitud komponentidega kokkusobivaid teisi komponente.&lt;br /&gt;
*** Kui juba valitud komponent muutub mitte kokku sobivaks, siis antakse sellest kasutajale teada&lt;br /&gt;
*** Mitte kokkusobivate komponentidega arvutit salvestada ei ole võimalik&lt;br /&gt;
*** Komponente on võimalik nende omaduste põhjal sorteerida ja filtreerida&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Komponentide haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Komponent peab olema lisatav administraator kasutaja (kuid mitte tavakasutaja) poolt&lt;br /&gt;
** Juba loodud ja kinnitatud komponendi omadusi muuta ei saa&lt;br /&gt;
** Komponendi saab märkida eemaldatuks:&lt;br /&gt;
*** Eemaldatud komponente uute arvutite komplekteerimisel ei kuvata&lt;br /&gt;
*** Eemaldatud komponentidega juba komplekteeritud arvutite puhul kuvatakse kasutajale, et komponent pole enam saadaval&lt;br /&gt;
** Komponendile saab lisada tingimusi:&lt;br /&gt;
*** Tingimused määravad milliste komponentidega antud komponent koos on võimeline töötama&lt;br /&gt;
*** Tingimuseks võib olla ka loodava virtuaalse arvuti mingi parameeter (nt voolutarve)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse nice-to-have funktsionaalsus:&#039;&#039;&#039;&lt;br /&gt;
* Oma komplekteeritud arvuti jagamine&lt;br /&gt;
* Komponentide sorteerimine vastavalt populaarsusele (st kasutamine arvutites)&lt;br /&gt;
* Kasutaja parooli nullimine e-maili kinnituse kaudu&lt;br /&gt;
* Kasutajakonto kustutamine&lt;br /&gt;
* Kasutajakonto andmete muutmine ja lisainfo talletamise võimalus&lt;br /&gt;
&lt;br /&gt;
==== Serveri funktsionaalsus ====&lt;br /&gt;
&amp;lt;b&amp;gt;Serveri must-have funktsionaalsus&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Server peab toetama kõiki klientrakenduse must-have nõudeid. &lt;br /&gt;
* Serveris tuleb logida olulisemaid kasutajate poolt klientrakenduses tehtud toiminguid (sisse logimine, konto lukustumine, virtuaalse arvuti lisamine jne.);&lt;br /&gt;
* Kasutaja blokeerimine (ajutine), kui kasutaja on ennast püüdnud autentida vale parooliga enam kui 8 korda.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Serveri nice-to-have funktsionaalsus&amp;lt;/b&amp;gt;&lt;br /&gt;
* Kasutaja poolt sisestatud e-maili kinnitamine (kinnitava e-maili saatmine) kasutaja loomisel.&lt;br /&gt;
&lt;br /&gt;
=== Andmebaasi skeem ===&lt;br /&gt;
Infomüra vähendamiseks on andmebaasiskeem realiseeritud selliselt, et tabelites on ainult võtmed. Skeemist välja jäetud atribuudid (graafikakaardi pikkus jne) ei ole olulised analüüsi seisukohast.&lt;br /&gt;
&lt;br /&gt;
[[File:ANDMEBAAS.png]]&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 3: Klientrakendus =&lt;br /&gt;
= (b)logi =&lt;br /&gt;
&lt;br /&gt;
* 17/04/2017: Analüüsi lisatud klientrakenduse ja serveri kirjeldused, samuti kirjeldatud projekti üldine struktuur&lt;br /&gt;
* 16/04/2017: Veebirakenduse analüüsi kondikava&lt;br /&gt;
* 27/03/2017: Tehtud retsensioonid meeskondadele [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR DevHelpVR] ja [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Ninjas_in_pyjamas]&lt;br /&gt;
* 27/03/2017: XML ja XSD parandatud ja täiendatud vastavalt meeskonna JRT tagasisidele https://wiki.itcollege.ee/index.php/JRT#Retsensioon_JRT&lt;br /&gt;
* 20/03/2017: Loodud Wiki leht, jagatud ülesanded&lt;br /&gt;
* 20/03/2017: Projekti esimene osa valmis&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=120196</id>
		<title>PC KartKicker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=120196"/>
		<updated>2017-04-17T13:35:13Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Projekti struktuur: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
* Jan Eerik&lt;br /&gt;
&lt;br /&gt;
= Idee =&lt;br /&gt;
&lt;br /&gt;
Käesolev veebirakendus on asendamatu abimees arvuti kokkupanekul (võrdlemisi tugevalt inspireeritud https://pcpartpicker.com).&lt;br /&gt;
&lt;br /&gt;
Kuna teatavasti vajab arvuti töötamiseks kindlaid juppe mingis aktsepteeritud konfiguratsioonis, võimaldab meie rakendus välistada mitteühilduva raudvara &amp;quot;jõuga&amp;quot; ühildamist ja abistab kasutajal optimaalse konfiguratsiooni valimist.&lt;br /&gt;
&lt;br /&gt;
= Põhiline funktsionaalsus =&lt;br /&gt;
&lt;br /&gt;
* Kasutaja saab lisada üks kuni mitu arvutiskeemi&lt;br /&gt;
* Skeemile saab hakata ükshaaval lisama juppe (emaplaat, protsessor, mälud jne)&lt;br /&gt;
* Iga kord kui mingi jupp skeemi lisatakse, kitsendab see ülejäänud juppide valikut - näiteks LGA1151 liidesega emaplaadile ei õnnestu lisada AMD protsessorit jne&lt;br /&gt;
* Nii pooleliolevaid kui valminud skeeme saab salvestada&lt;br /&gt;
* Igal jupil on oma vaade koos tehnilise infoga&lt;br /&gt;
&lt;br /&gt;
= Nice to have =&lt;br /&gt;
&lt;br /&gt;
* Parima hinna kuvamine (nt Amazon, Newegg)&lt;br /&gt;
* Komponentide võrdlus&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 1: XML =&lt;br /&gt;
&lt;br /&gt;
== Teema ==&lt;br /&gt;
Uute arvutikomponentide olemasolevatesse kategooriatesse lisamiseks kasutab administraator ankeeti, mille salvestamisel ja andmete serverisse edastamiseks tekitatakse järgmine XML, kus on võimalik korraga suur hulk erinevaid arvutikomponente lisada, aga võib ka ainult ühe komponendi korraga saata.&lt;br /&gt;
&lt;br /&gt;
== XML==&lt;br /&gt;
&amp;lt;pre&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;components&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cases&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;NZXT&amp;quot; name=&amp;quot;S340&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;3&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;364&amp;quot; maxCpuHeight=&amp;quot;161&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;red&amp;quot; price=&amp;quot;66.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Deepcool&amp;quot; name=&amp;quot;TESSERACT SW&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;2&amp;quot; bay3=&amp;quot;4&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;light blue&amp;quot; price=&amp;quot;38.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Xion&amp;quot; name =&amp;quot;XON-310_BK&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;1&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;22.98&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;750D&amp;quot; type=&amp;quot;Full tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;3&amp;quot; bay3=&amp;quot;6&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;450&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;149.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
  &amp;lt;/cases&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpus&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.2&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;74&amp;quot; price=&amp;quot;327.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.8&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;69&amp;quot; price=&amp;quot;233.89&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.0&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;71&amp;quot; price=&amp;quot;316.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.5&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;61&amp;quot; price=&amp;quot;219.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;E5-2699 V3&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Xeon&amp;quot; family=&amp;quot;Haswell&amp;quot; socket=&amp;quot;LGA2011-3&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;18&amp;quot; threads=&amp;quot;36&amp;quot; ecc=&amp;quot;true&amp;quot; speed=&amp;quot;2.3&amp;quot; TDP=&amp;quot;145&amp;quot; lithography=&amp;quot;22&amp;quot; maxPowerDraw=&amp;quot;120&amp;quot; price=&amp;quot;3410.46&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;AMD&amp;quot; name=&amp;quot;1800X&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Ryzen 7&amp;quot; family=&amp;quot;Ryzen&amp;quot; socket=&amp;quot;AM4&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;8&amp;quot; threads=&amp;quot;16&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.6&amp;quot; TDP=&amp;quot;95&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;82&amp;quot; price=&amp;quot;469.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
  &amp;lt;/cpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpucoolers&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Cooler Master&amp;quot; name=&amp;quot;Hyper 212 EVO&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;1&amp;quot; height=&amp;quot;159&amp;quot; price=&amp;quot;24.88&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA775&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;H100i v2&amp;quot; liquid=&amp;quot;true&amp;quot; rad=&amp;quot;240&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;&amp;quot; price=&amp;quot;99.99&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Noctua&amp;quot; name=&amp;quot;NH-D15&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;165&amp;quot; price=&amp;quot;85.49&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
  &amp;lt;/cpucoolers&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;gpus&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;PowerColor&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX460&amp;quot; series=&amp;quot;Red Dragon&amp;quot; vram=&amp;quot;2&amp;quot; psuPin=&amp;quot;&amp;quot; length=&amp;quot;226&amp;quot; maxPowerDraw=&amp;quot;130&amp;quot; price=&amp;quot;73.98&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;Sapphire&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX480&amp;quot; series=&amp;quot;Nitro+&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;8&amp;quot; length=&amp;quot;240&amp;quot; maxPowerDraw=&amp;quot;150&amp;quot; price=&amp;quot;253.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;MSI&amp;quot; brandname=&amp;quot;Geforce&amp;quot; codename=&amp;quot;GTX1070&amp;quot; series=&amp;quot;Quick Silver OC&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;6+8&amp;quot; length=&amp;quot;279&amp;quot; maxPowerDraw=&amp;quot;170&amp;quot; price=&amp;quot;409.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
  &amp;lt;/gpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;memorychips&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Kingston&amp;quot; name=&amp;quot;ValueRAM&amp;quot; type=&amp;quot;DIMM&amp;quot; rank=&amp;quot;single&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;2133&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;yes&amp;quot; price=&amp;quot;67.58&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;Dominator Platinum&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;3000&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;2&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;123.25&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;ADATA&amp;quot; name=&amp;quot;&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR3&amp;quot; speed=&amp;quot;1600&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;88.29&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
  &amp;lt;/memorychips&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;motherboards&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Z170-A&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;Z170&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3400&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;152.99&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;ASRock&amp;quot; name=&amp;quot;H110M-HDS&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; chipset=&amp;quot;H110&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;2&amp;quot; maxMemory=&amp;quot;32&amp;quot; maxMemorySpeed=&amp;quot;2133&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;37.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Prime X370-PRO&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;X370&amp;quot; socket=&amp;quot;AM4&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3200&amp;quot; sata3=&amp;quot;8&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;162.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
  &amp;lt;/motherboards&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;psus&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;EVGA&amp;quot; name=&amp;quot;SuperNOVA 650&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;650&amp;quot; eff80plus=&amp;quot;gold&amp;quot; modular=&amp;quot;full&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;be Quiet!&amp;quot; name=&amp;quot;Pure Power L8 600W&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;600&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;no&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;CX550M&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;550&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;semi&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;2&amp;quot; price=&amp;quot;43.98&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
  &amp;lt;/psus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;storages&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;850 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;2048&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;823.14&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Intel&amp;quot; name=&amp;quot;DC P3608&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;4096&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;pcie8x&amp;quot; formFactor=&amp;quot;pcie&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;8867.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;960 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;m.2&amp;quot; formFactor=&amp;quot;m.2-2280&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;629.95&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Western Digital&amp;quot; name=&amp;quot;Black&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;6144&amp;quot; cache=&amp;quot;128&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;279.00&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Seagate&amp;quot; name=&amp;quot;BarraCuda Pro&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;10240&amp;quot; cache=&amp;quot;256&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;429.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Hitachi&amp;quot; name=&amp;quot;Travelstar&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;32&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;53.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
  &amp;lt;/storages&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/components&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML skeem (XSD) ==&lt;br /&gt;
&amp;lt;pre&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;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;cases&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;case&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay5&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psu&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxGpuLength&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxCpuHeight&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;primaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;secondaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cooler&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;family&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;iGPU&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cores&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;threads&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ecc&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;TDP&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;lithography&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpucoolers&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;sockets&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;liquid&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rad&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;fans&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;height&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;gpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;gpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brandname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;codename&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;vram&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psuPin&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;length&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;memorychips&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;memorychip&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rank&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cas&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;gen&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;moduleSize&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modules&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ECC&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;motherboards&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;motherboard&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;chipset&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memoryType&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memorySlots&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemory&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemorySpeed&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;video&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;sata3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ethernet&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;usb3&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;psus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;psu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;wattage&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;eff80plus&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modular&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6p2&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;storages&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;storage&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;capacity&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cache&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;interface&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rpm&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 1 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added computer parts:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;child::*/child::*&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 2 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added CPU coolers:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;cpucoolers/cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
== XML retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR Talk:DevHelpVR] &amp;lt;br&amp;gt;&lt;br /&gt;
XML failide retsensioon meeskonnale Ninjas_in_pyjamas, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Talk:Ninjas_in_pyjamas]&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 2: Veebirakendus =&lt;br /&gt;
== Analüüs == &lt;br /&gt;
Vastavalt klientrakenduse päringule annab veebirakendus andmebaasis oleva informatsiooni põhjal JSON kujul vastuse kliendile. Klientrakenduse funktsionaalsus ja andmebaasi skeem on mõlemad kirjeldatud allpool. Veebirakendus suudab anda komponentide kategooriate nimekirja, ühe kategooria komponentide nimekirja, nime järgi otsingu tulemuste komponentide nimekirja, konkreetse komponendi detailse informatsiooni, jpm.&lt;br /&gt;
&lt;br /&gt;
=== Mõisted ===&lt;br /&gt;
&#039;&#039;&#039;WIP&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Rakenduse kirjeldus (kogu süsteem, teenus+klient) ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Lühidalt:====&lt;br /&gt;
Meil on lauaarvutite komplekteerimise infosüsteem. Meie klientideks on inimesed kes kaaluvad lauaarvuti ostmist ja kes soovivad enne lauaarvuti või selle komponentide ostmist enda jaoks kogu protseduuri põhjalikult läbi mõelda. Süsteem võimaldab klientidel luua virtuaalse lauaarvuti ja tuvastab mitteühilduvad komponendid ning aitab seega vältida erinevaid probleeme, millega kaasneks aja- ja rahakulu.&lt;br /&gt;
&lt;br /&gt;
====Nüansid:====&lt;br /&gt;
Kliendid saavad ennast meie süsteemis registreerida kasutajateks. Üks füüsiline isik võib teha endale teha ükskõik kui palju kasutajaid, meil ei pea olema päriselt olemasoleva isiku ja süsteemi kasutaja vahel üks-ühest seost. Rakenduse kasutamiseks ei ole kohustuslik serveris konto loomine, klient saab virtuaalse arvuti luua ilma kasutajakontota, aga see ei säilu pärast sessiooni lõppemist.&lt;br /&gt;
&lt;br /&gt;
Iga kasutaja võib luua uue virtuaalse lauaarvuti, sellele nimetuse panna ja see seotakse automaatselt tema kasutajakontoga. Igale virtuaalsele arvutile võib lisada komponente. Lauaarvuti põhilisteks komponentideks on keskseade/protsessor (CPU), protsessori jahuti, emaplaat, muutmälu, graafikaseade (GPU), toiteblokk, arvuti korpus ja püsimälu.&lt;br /&gt;
&lt;br /&gt;
Iga protsessori generatsioon on ühilduv ainult kindlate emaplaadi kiipseadmete komplektidega (chipset) ja tüüpiliselt on emaplaadi protsessori pesa (socket) see, millest lähtuda emaplaadi ja protsessori ühilduvuse kindlaks tegemisel. Protsessori pesaga ühilduvus on peamine parameeter ka protsessori jahuti valikul, aga kui emaplaadil on ainult ühte tüüpi pesa ja protsessor sobib ainult ühte kindlasse pessa, siis jahutid on üldjuhul sobivad mitmete erinevate pesadega. Samuti ühilduvad iga protsessor ja emaplaat ainult spetsiifiliste muutmälu generatsioonidega. Emaplaadid toetavad muutmälu kindla taktsageduseni, kiirema taktsagedusega mälukiipe saab siiski kasutada, need töötavad lihtsalt emaplaadi poolt lubatud maksimaale taktsagedusega, mitte muutmälu kiibi maksimaalse taktsagedusega. On olemas emaplaate, mis toetavat mitut protsessorit.&lt;br /&gt;
&lt;br /&gt;
Muutmälu võib olla lauaarvutis üks kiip, aga võib ka rohkem. Mitme kiibi korral peaks need olema identsed või identsete näitajatega.&lt;br /&gt;
Osade protsessoritega on jahuti karbis kaasas, teistel ei ole. Tänapäeva lauaarvutite protsessorid ilma jahutita ei ole töövõimelised. Mõned protsessorid ja emaplaadid sisaldavad graafikaseadet. Diskreetne graafikaseade on üldjuhul võimekam protsessori või emaplaadiga kaasasolevast, seega on tavaline, et arvutile lisatakse diskreetne graafikaseade isegi kui sisene graafikaseade on juba olemas.&lt;br /&gt;
&lt;br /&gt;
Emaplaatidel, toiteblokkidel ja arvuti korpustel on mitmed suuruse standardid. Suured (ATX) emaplaadid ja toiteblokid ei mahu väikesesse (microATX) korpusesse. Mõned korpused toetavad väikest emaplaati, samas suurt toiteblokki ja teoreetiliselt on võimalik ka vastupidine olukord.&lt;br /&gt;
&lt;br /&gt;
Arvuti korpus toetab protsessori jahutust ainult kuni teatava jahuti kõrguseni ja diskreetse graafikaseadme puhul ainult teatud seadme pikkuseni. Mõned korpused sisaldavad toiteblokki.&lt;br /&gt;
&lt;br /&gt;
Erinevatel diskreetsetel graafikaseadmetel on erinevad nõuded toitele, osad saavad oma toite ainult emaplaadi liidese kaudu, teistel on vaja ühte või rohkemat kaablit toiteblokist. Graafikaseadmeid võib lauaarvutis olla mitmeid, ka mitu ühesugust.&lt;br /&gt;
&lt;br /&gt;
Toitebloki puhul peab toitebloki võimsus katma kõigi teiste komponentide vajaduse varuga ja diskreetse graafikaseadme korral peab toiteblokil olema selle toiteks piisavalt õigeid kaableid.&lt;br /&gt;
&lt;br /&gt;
====Projekti struktuur:====&lt;br /&gt;
Rakendus koosneb kahest põhilisest osast: veebiteenus ja klient-rakendus, mis seda teenust kasutab. &lt;br /&gt;
&lt;br /&gt;
Projekt realiseeritakse kasutades ASP.NET MVC Web API tehnoloogiat, mis võimaldab teha kliendi poolelt vastu serverit asünkroonseid http päringuid (GET, POST, PUT, DELETE) ja mis tagastab andmekogumina JSON&#039;i. See on mugav ja kaasaegne lahendus, kuna töötab ühtemoodi erinevate klientrakendustega (mobiilseadmed, veeb jne).&lt;br /&gt;
  &lt;br /&gt;
Esialgne rakenduse ülesehituse skeem:&lt;br /&gt;
&lt;br /&gt;
[[File:STRUKTUUR.png]]&lt;br /&gt;
&lt;br /&gt;
==== Klientrakenduse funktsionaalsus:====&lt;br /&gt;
Klientprogramm võimaldab kasutajal hallata oma kasutajaprofiili, lisada, muuta ja vaadata oma virtuaalseid arvuteid ja nende komponente.&lt;br /&gt;
Veebiklient suhtleb serveriga üle API.&lt;br /&gt;
Sisselogimisel küsitakse kasutajalt kasutajanime ja parooli, seejärel üritab rakendus kasutajat autentida. &lt;br /&gt;
Eduka autentimise korral kuvatakse antud kasutaja töölaud ning sünkroniseeritakse andmed serveriga.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse must-have funktsionaalsus:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Üldine&amp;lt;/b&amp;gt;&lt;br /&gt;
** Rakendus peab töötama online režiimis;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Kasutajate haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Peab olema võimalik kasutajaks registreerida (kasutajakonto olemasolu on vajalik andmete talletamiseks);&lt;br /&gt;
** Kasutaja peab saama sisse logida kasutajanime ja parooliga;&lt;br /&gt;
** Paroolile peavad rakenduma keerukusnõuded (nt 8 tähemärki);&lt;br /&gt;
** Kasutajatel peavad olema erinevad õiguste tasemed (minimaalselt tavakasutaja ja administraator);&lt;br /&gt;
*** Tavakasutaja saab hallata ainult iseenda virtuaalseid arvuteid;&lt;br /&gt;
*** Adminkasutaja saab lisada või muuta arvuti komponente;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Virtuaalsete arvutite haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Kasutaja peab saama lisada uusi virtuaalseid arvuteid;&lt;br /&gt;
** Kasutaja poolt lisatud arvutid peavad talle näha olema;&lt;br /&gt;
** Kasutaja peab saama oma arvutitele komponente lisada ja vahetada:&lt;br /&gt;
*** Komponendid on jagatud erinevatesse kategooriatesse: &lt;br /&gt;
**** keskseade/protsessor (CPU)&lt;br /&gt;
**** protsessori jahuti&lt;br /&gt;
**** emaplaat&lt;br /&gt;
**** muutmälu&lt;br /&gt;
**** graafikaseade (GPU)&lt;br /&gt;
**** toiteblokk&lt;br /&gt;
**** arvuti korpus&lt;br /&gt;
**** püsimälu.&lt;br /&gt;
*** Ühest kategooriast on võimalik valida ka mitu komponenti (nt mitu graafikaseadet)&lt;br /&gt;
*** Kui kasutaja valib mõne komponendi, siis see piirab automaatselt tema võimalusi valida ainult juba valitud komponentidega kokkusobivaid teisi komponente.&lt;br /&gt;
*** Kui juba valitud komponent muutub mitte kokku sobivaks, siis antakse sellest kasutajale teada&lt;br /&gt;
*** Mitte kokkusobivate komponentidega arvutit salvestada ei ole võimalik&lt;br /&gt;
*** Komponente on võimalik nende omaduste põhjal sorteerida ja filtreerida&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Komponentide haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Komponent peab olema lisatav administraator kasutaja (kuid mitte tavakasutaja) poolt&lt;br /&gt;
** Juba loodud ja kinnitatud komponendi omadusi muuta ei saa&lt;br /&gt;
** Komponendi saab märkida eemaldatuks:&lt;br /&gt;
*** Eemaldatud komponente uute arvutite komplekteerimisel ei kuvata&lt;br /&gt;
*** Eemaldatud komponentidega juba komplekteeritud arvutite puhul kuvatakse kasutajale, et komponent pole enam saadaval&lt;br /&gt;
** Komponendile saab lisada tingimusi:&lt;br /&gt;
*** Tingimused määravad milliste komponentidega antud komponent koos on võimeline töötama&lt;br /&gt;
*** Tingimuseks võib olla ka loodava virtuaalse arvuti mingi parameeter (nt voolutarve)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse nice-to-have funktsionaalsus:&#039;&#039;&#039;&lt;br /&gt;
* Oma komplekteeritud arvuti jagamine&lt;br /&gt;
* Komponentide sorteerimine vastavalt populaarsusele (st kasutamine arvutites)&lt;br /&gt;
* Kasutaja parooli nullimine e-maili kinnituse kaudu&lt;br /&gt;
* Kasutajakonto kustutamine&lt;br /&gt;
* Kasutajakonto andmete muutmine ja lisainfo talletamise võimalus&lt;br /&gt;
&lt;br /&gt;
==== Serveri funktsionaalsus ====&lt;br /&gt;
&amp;lt;b&amp;gt;Serveri must-have funktsionaalsus&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Server peab toetama kõiki klientrakenduse must-have nõudeid. &lt;br /&gt;
* Serveris tuleb logida olulisemaid kasutajate poolt klientrakenduses tehtud toiminguid (sisse logimine, konto lukustumine, virtuaalse arvuti lisamine jne.);&lt;br /&gt;
* Kasutaja blokeerimine (ajutine), kui kasutaja on ennast püüdnud autentida vale parooliga enam kui 8 korda.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Serveri nice-to-have funktsionaalsus&amp;lt;/b&amp;gt;&lt;br /&gt;
* Kasutaja poolt sisestatud e-maili kinnitamine (kinnitava e-maili saatmine) kasutaja loomisel.&lt;br /&gt;
&lt;br /&gt;
=== Andmebaasi skeem ===&lt;br /&gt;
Infomüra vähendamiseks on andmebaasiskeem realiseeritud selliselt, et tabelites on ainult võtmed. Skeemist välja jäetud atribuudid (graafikakaardi pikkus jne) ei ole olulised analüüsi seisukohast.&lt;br /&gt;
&lt;br /&gt;
[[File:ANDMEBAAS.png]]&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 3: Klientrakendus =&lt;br /&gt;
= (b)logi =&lt;br /&gt;
&lt;br /&gt;
* 17/04/2017: Analüüsi lisatud klientrakenduse ja serveri kirjeldused, samuti kirjeldatud projekti üldine struktuur&lt;br /&gt;
* 16/04/2017: Veebirakenduse analüüsi kondikava&lt;br /&gt;
* 27/03/2017: Tehtud retsensioonid meeskondadele [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR DevHelpVR] ja [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Ninjas_in_pyjamas]&lt;br /&gt;
* 27/03/2017: XML ja XSD parandatud ja täiendatud vastavalt meeskonna JRT tagasisidele https://wiki.itcollege.ee/index.php/JRT#Retsensioon_JRT&lt;br /&gt;
* 20/03/2017: Loodud Wiki leht, jagatud ülesanded&lt;br /&gt;
* 20/03/2017: Projekti esimene osa valmis&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=120190</id>
		<title>PC KartKicker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=120190"/>
		<updated>2017-04-17T13:07:58Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Projekti struktuur: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
* Jan Eerik&lt;br /&gt;
&lt;br /&gt;
= Idee =&lt;br /&gt;
&lt;br /&gt;
Käesolev veebirakendus on asendamatu abimees arvuti kokkupanekul (võrdlemisi tugevalt inspireeritud https://pcpartpicker.com).&lt;br /&gt;
&lt;br /&gt;
Kuna teatavasti vajab arvuti töötamiseks kindlaid juppe mingis aktsepteeritud konfiguratsioonis, võimaldab meie rakendus välistada mitteühilduva raudvara &amp;quot;jõuga&amp;quot; ühildamist ja abistab kasutajal optimaalse konfiguratsiooni valimist.&lt;br /&gt;
&lt;br /&gt;
= Põhiline funktsionaalsus =&lt;br /&gt;
&lt;br /&gt;
* Kasutaja saab lisada üks kuni mitu arvutiskeemi&lt;br /&gt;
* Skeemile saab hakata ükshaaval lisama juppe (emaplaat, protsessor, mälud jne)&lt;br /&gt;
* Iga kord kui mingi jupp skeemi lisatakse, kitsendab see ülejäänud juppide valikut - näiteks LGA1151 liidesega emaplaadile ei õnnestu lisada AMD protsessorit jne&lt;br /&gt;
* Nii pooleliolevaid kui valminud skeeme saab salvestada&lt;br /&gt;
* Igal jupil on oma vaade koos tehnilise infoga&lt;br /&gt;
&lt;br /&gt;
= Nice to have =&lt;br /&gt;
&lt;br /&gt;
* Parima hinna kuvamine (nt Amazon, Newegg)&lt;br /&gt;
* Komponentide võrdlus&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 1: XML =&lt;br /&gt;
&lt;br /&gt;
== Teema ==&lt;br /&gt;
Uute arvutikomponentide olemasolevatesse kategooriatesse lisamiseks kasutab administraator ankeeti, mille salvestamisel ja andmete serverisse edastamiseks tekitatakse järgmine XML, kus on võimalik korraga suur hulk erinevaid arvutikomponente lisada, aga võib ka ainult ühe komponendi korraga saata.&lt;br /&gt;
&lt;br /&gt;
== XML==&lt;br /&gt;
&amp;lt;pre&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;components&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cases&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;NZXT&amp;quot; name=&amp;quot;S340&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;3&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;364&amp;quot; maxCpuHeight=&amp;quot;161&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;red&amp;quot; price=&amp;quot;66.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Deepcool&amp;quot; name=&amp;quot;TESSERACT SW&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;2&amp;quot; bay3=&amp;quot;4&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;light blue&amp;quot; price=&amp;quot;38.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Xion&amp;quot; name =&amp;quot;XON-310_BK&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;1&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;22.98&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;750D&amp;quot; type=&amp;quot;Full tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;3&amp;quot; bay3=&amp;quot;6&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;450&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;149.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
  &amp;lt;/cases&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpus&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.2&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;74&amp;quot; price=&amp;quot;327.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.8&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;69&amp;quot; price=&amp;quot;233.89&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.0&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;71&amp;quot; price=&amp;quot;316.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.5&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;61&amp;quot; price=&amp;quot;219.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;E5-2699 V3&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Xeon&amp;quot; family=&amp;quot;Haswell&amp;quot; socket=&amp;quot;LGA2011-3&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;18&amp;quot; threads=&amp;quot;36&amp;quot; ecc=&amp;quot;true&amp;quot; speed=&amp;quot;2.3&amp;quot; TDP=&amp;quot;145&amp;quot; lithography=&amp;quot;22&amp;quot; maxPowerDraw=&amp;quot;120&amp;quot; price=&amp;quot;3410.46&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;AMD&amp;quot; name=&amp;quot;1800X&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Ryzen 7&amp;quot; family=&amp;quot;Ryzen&amp;quot; socket=&amp;quot;AM4&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;8&amp;quot; threads=&amp;quot;16&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.6&amp;quot; TDP=&amp;quot;95&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;82&amp;quot; price=&amp;quot;469.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
  &amp;lt;/cpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpucoolers&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Cooler Master&amp;quot; name=&amp;quot;Hyper 212 EVO&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;1&amp;quot; height=&amp;quot;159&amp;quot; price=&amp;quot;24.88&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA775&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;H100i v2&amp;quot; liquid=&amp;quot;true&amp;quot; rad=&amp;quot;240&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;&amp;quot; price=&amp;quot;99.99&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Noctua&amp;quot; name=&amp;quot;NH-D15&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;165&amp;quot; price=&amp;quot;85.49&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
  &amp;lt;/cpucoolers&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;gpus&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;PowerColor&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX460&amp;quot; series=&amp;quot;Red Dragon&amp;quot; vram=&amp;quot;2&amp;quot; psuPin=&amp;quot;&amp;quot; length=&amp;quot;226&amp;quot; maxPowerDraw=&amp;quot;130&amp;quot; price=&amp;quot;73.98&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;Sapphire&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX480&amp;quot; series=&amp;quot;Nitro+&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;8&amp;quot; length=&amp;quot;240&amp;quot; maxPowerDraw=&amp;quot;150&amp;quot; price=&amp;quot;253.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;MSI&amp;quot; brandname=&amp;quot;Geforce&amp;quot; codename=&amp;quot;GTX1070&amp;quot; series=&amp;quot;Quick Silver OC&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;6+8&amp;quot; length=&amp;quot;279&amp;quot; maxPowerDraw=&amp;quot;170&amp;quot; price=&amp;quot;409.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
  &amp;lt;/gpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;memorychips&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Kingston&amp;quot; name=&amp;quot;ValueRAM&amp;quot; type=&amp;quot;DIMM&amp;quot; rank=&amp;quot;single&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;2133&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;yes&amp;quot; price=&amp;quot;67.58&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;Dominator Platinum&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;3000&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;2&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;123.25&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;ADATA&amp;quot; name=&amp;quot;&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR3&amp;quot; speed=&amp;quot;1600&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;88.29&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
  &amp;lt;/memorychips&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;motherboards&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Z170-A&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;Z170&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3400&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;152.99&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;ASRock&amp;quot; name=&amp;quot;H110M-HDS&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; chipset=&amp;quot;H110&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;2&amp;quot; maxMemory=&amp;quot;32&amp;quot; maxMemorySpeed=&amp;quot;2133&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;37.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Prime X370-PRO&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;X370&amp;quot; socket=&amp;quot;AM4&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3200&amp;quot; sata3=&amp;quot;8&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;162.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
  &amp;lt;/motherboards&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;psus&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;EVGA&amp;quot; name=&amp;quot;SuperNOVA 650&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;650&amp;quot; eff80plus=&amp;quot;gold&amp;quot; modular=&amp;quot;full&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;be Quiet!&amp;quot; name=&amp;quot;Pure Power L8 600W&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;600&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;no&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;CX550M&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;550&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;semi&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;2&amp;quot; price=&amp;quot;43.98&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
  &amp;lt;/psus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;storages&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;850 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;2048&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;823.14&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Intel&amp;quot; name=&amp;quot;DC P3608&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;4096&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;pcie8x&amp;quot; formFactor=&amp;quot;pcie&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;8867.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;960 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;m.2&amp;quot; formFactor=&amp;quot;m.2-2280&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;629.95&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Western Digital&amp;quot; name=&amp;quot;Black&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;6144&amp;quot; cache=&amp;quot;128&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;279.00&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Seagate&amp;quot; name=&amp;quot;BarraCuda Pro&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;10240&amp;quot; cache=&amp;quot;256&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;429.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Hitachi&amp;quot; name=&amp;quot;Travelstar&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;32&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;53.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
  &amp;lt;/storages&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/components&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML skeem (XSD) ==&lt;br /&gt;
&amp;lt;pre&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;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;cases&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;case&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay5&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psu&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxGpuLength&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxCpuHeight&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;primaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;secondaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cooler&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;family&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;iGPU&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cores&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;threads&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ecc&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;TDP&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;lithography&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpucoolers&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;sockets&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;liquid&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rad&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;fans&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;height&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;gpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;gpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brandname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;codename&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;vram&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psuPin&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;length&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;memorychips&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;memorychip&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rank&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cas&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;gen&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;moduleSize&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modules&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ECC&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;motherboards&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;motherboard&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;chipset&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memoryType&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memorySlots&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemory&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemorySpeed&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;video&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;sata3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ethernet&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;usb3&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;psus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;psu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;wattage&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;eff80plus&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modular&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6p2&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;storages&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;storage&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;capacity&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cache&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;interface&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rpm&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 1 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added computer parts:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;child::*/child::*&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 2 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added CPU coolers:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;cpucoolers/cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
== XML retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR Talk:DevHelpVR] &amp;lt;br&amp;gt;&lt;br /&gt;
XML failide retsensioon meeskonnale Ninjas_in_pyjamas, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Talk:Ninjas_in_pyjamas]&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 2: Veebirakendus =&lt;br /&gt;
== Analüüs == &lt;br /&gt;
Vastavalt klientrakenduse päringule annab veebirakendus andmebaasis oleva informatsiooni põhjal JSON kujul vastuse kliendile. Klientrakenduse funktsionaalsus ja andmebaasi skeem on mõlemad kirjeldatud allpool. Veebirakendus suudab anda komponentide kategooriate nimekirja, ühe kategooria komponentide nimekirja, nime järgi otsingu tulemuste komponentide nimekirja, konkreetse komponendi detailse informatsiooni, jpm.&lt;br /&gt;
&lt;br /&gt;
=== Mõisted ===&lt;br /&gt;
&#039;&#039;&#039;WIP&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Rakenduse kirjeldus (kogu süsteem, teenus+klient) ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Lühidalt:====&lt;br /&gt;
Meil on lauaarvutite komplekteerimise infosüsteem. Meie klientideks on inimesed kes kaaluvad lauaarvuti ostmist ja kes soovivad enne lauaarvuti või selle komponentide ostmist enda jaoks kogu protseduuri põhjalikult läbi mõelda. Süsteem võimaldab klientidel luua virtuaalse lauaarvuti ja tuvastab mitteühilduvad komponendid ning aitab seega vältida erinevaid probleeme, millega kaasneks aja- ja rahakulu.&lt;br /&gt;
&lt;br /&gt;
====Nüansid:====&lt;br /&gt;
Kliendid saavad ennast meie süsteemis registreerida kasutajateks. Üks füüsiline isik võib teha endale teha ükskõik kui palju kasutajaid, meil ei pea olema päriselt olemasoleva isiku ja süsteemi kasutaja vahel üks-ühest seost. Rakenduse kasutamiseks ei ole kohustuslik serveris konto loomine, klient saab virtuaalse arvuti luua ilma kasutajakontota, aga see ei säilu pärast sessiooni lõppemist.&lt;br /&gt;
&lt;br /&gt;
Iga kasutaja võib luua uue virtuaalse lauaarvuti, sellele nimetuse panna ja see seotakse automaatselt tema kasutajakontoga. Igale virtuaalsele arvutile võib lisada komponente. Lauaarvuti põhilisteks komponentideks on keskseade/protsessor (CPU), protsessori jahuti, emaplaat, muutmälu, graafikaseade (GPU), toiteblokk, arvuti korpus ja püsimälu.&lt;br /&gt;
&lt;br /&gt;
Iga protsessori generatsioon on ühilduv ainult kindlate emaplaadi kiipseadmete komplektidega (chipset) ja tüüpiliselt on emaplaadi protsessori pesa (socket) see, millest lähtuda emaplaadi ja protsessori ühilduvuse kindlaks tegemisel. Protsessori pesaga ühilduvus on peamine parameeter ka protsessori jahuti valikul, aga kui emaplaadil on ainult ühte tüüpi pesa ja protsessor sobib ainult ühte kindlasse pessa, siis jahutid on üldjuhul sobivad mitmete erinevate pesadega. Samuti ühilduvad iga protsessor ja emaplaat ainult spetsiifiliste muutmälu generatsioonidega. Emaplaadid toetavad muutmälu kindla taktsageduseni, kiirema taktsagedusega mälukiipe saab siiski kasutada, need töötavad lihtsalt emaplaadi poolt lubatud maksimaale taktsagedusega, mitte muutmälu kiibi maksimaalse taktsagedusega. On olemas emaplaate, mis toetavat mitut protsessorit.&lt;br /&gt;
&lt;br /&gt;
Muutmälu võib olla lauaarvutis üks kiip, aga võib ka rohkem. Mitme kiibi korral peaks need olema identsed või identsete näitajatega.&lt;br /&gt;
Osade protsessoritega on jahuti karbis kaasas, teistel ei ole. Tänapäeva lauaarvutite protsessorid ilma jahutita ei ole töövõimelised. Mõned protsessorid ja emaplaadid sisaldavad graafikaseadet. Diskreetne graafikaseade on üldjuhul võimekam protsessori või emaplaadiga kaasasolevast, seega on tavaline, et arvutile lisatakse diskreetne graafikaseade isegi kui sisene graafikaseade on juba olemas.&lt;br /&gt;
&lt;br /&gt;
Emaplaatidel, toiteblokkidel ja arvuti korpustel on mitmed suuruse standardid. Suured (ATX) emaplaadid ja toiteblokid ei mahu väikesesse (microATX) korpusesse. Mõned korpused toetavad väikest emaplaati, samas suurt toiteblokki ja teoreetiliselt on võimalik ka vastupidine olukord.&lt;br /&gt;
&lt;br /&gt;
Arvuti korpus toetab protsessori jahutust ainult kuni teatava jahuti kõrguseni ja diskreetse graafikaseadme puhul ainult teatud seadme pikkuseni. Mõned korpused sisaldavad toiteblokki.&lt;br /&gt;
&lt;br /&gt;
Erinevatel diskreetsetel graafikaseadmetel on erinevad nõuded toitele, osad saavad oma toite ainult emaplaadi liidese kaudu, teistel on vaja ühte või rohkemat kaablit toiteblokist. Graafikaseadmeid võib lauaarvutis olla mitmeid, ka mitu ühesugust.&lt;br /&gt;
&lt;br /&gt;
Toitebloki puhul peab toitebloki võimsus katma kõigi teiste komponentide vajaduse varuga ja diskreetse graafikaseadme korral peab toiteblokil olema selle toiteks piisavalt õigeid kaableid.&lt;br /&gt;
&lt;br /&gt;
====Projekti struktuur:====&lt;br /&gt;
Rakendus koosneb kahest põhilisest osast: veebiteenus ja klient-rakendus, mis seda teenust kasutab. &lt;br /&gt;
&lt;br /&gt;
Projekt realiseeritakse kasutades ASP.NET MVC Web API tehnoloogiat.&lt;br /&gt;
&lt;br /&gt;
Esialgne rakenduse ülesehituse skeem:&lt;br /&gt;
&lt;br /&gt;
[[File:STRUKTUUR.png]]&lt;br /&gt;
&lt;br /&gt;
==== Klientrakenduse funktsionaalsus:====&lt;br /&gt;
Klientprogramm võimaldab kasutajal hallata oma kasutajaprofiili, lisada, muuta ja vaadata oma virtuaalseid arvuteid ja nende komponente.&lt;br /&gt;
Veebiklient suhtleb serveriga üle API.&lt;br /&gt;
Sisselogimisel küsitakse kasutajalt kasutajanime ja parooli, seejärel üritab rakendus kasutajat autentida. &lt;br /&gt;
Eduka autentimise korral kuvatakse antud kasutaja töölaud ning sünkroniseeritakse andmed serveriga.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse must-have funktsionaalsus:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Üldine&amp;lt;/b&amp;gt;&lt;br /&gt;
** Rakendus peab töötama online režiimis;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Kasutajate haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Peab olema võimalik kasutajaks registreerida (kasutajakonto olemasolu on vajalik andmete talletamiseks);&lt;br /&gt;
** Kasutaja peab saama sisse logida kasutajanime ja parooliga;&lt;br /&gt;
** Paroolile peavad rakenduma keerukusnõuded (nt 8 tähemärki);&lt;br /&gt;
** Kasutajatel peavad olema erinevad õiguste tasemed (minimaalselt tavakasutaja ja administraator);&lt;br /&gt;
*** Tavakasutaja saab hallata ainult iseenda virtuaalseid arvuteid;&lt;br /&gt;
*** Adminkasutaja saab lisada või muuta arvuti komponente;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Virtuaalsete arvutite haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Kasutaja peab saama lisada uusi virtuaalseid arvuteid;&lt;br /&gt;
** Kasutaja poolt lisatud arvutid peavad talle näha olema;&lt;br /&gt;
** Kasutaja peab saama oma arvutitele komponente lisada ja vahetada:&lt;br /&gt;
*** Komponendid on jagatud erinevatesse kategooriatesse: &lt;br /&gt;
**** keskseade/protsessor (CPU)&lt;br /&gt;
**** protsessori jahuti&lt;br /&gt;
**** emaplaat&lt;br /&gt;
**** muutmälu&lt;br /&gt;
**** graafikaseade (GPU)&lt;br /&gt;
**** toiteblokk&lt;br /&gt;
**** arvuti korpus&lt;br /&gt;
**** püsimälu.&lt;br /&gt;
*** Ühest kategooriast on võimalik valida ka mitu komponenti (nt mitu graafikaseadet)&lt;br /&gt;
*** Kui kasutaja valib mõne komponendi, siis see piirab automaatselt tema võimalusi valida ainult juba valitud komponentidega kokkusobivaid teisi komponente.&lt;br /&gt;
*** Kui juba valitud komponent muutub mitte kokku sobivaks, siis antakse sellest kasutajale teada&lt;br /&gt;
*** Mitte kokkusobivate komponentidega arvutit salvestada ei ole võimalik&lt;br /&gt;
*** Komponente on võimalik nende omaduste põhjal sorteerida ja filtreerida&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Komponentide haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Komponent peab olema lisatav administraator kasutaja (kuid mitte tavakasutaja) poolt&lt;br /&gt;
** Juba loodud ja kinnitatud komponendi omadusi muuta ei saa&lt;br /&gt;
** Komponendi saab märkida eemaldatuks:&lt;br /&gt;
*** Eemaldatud komponente uute arvutite komplekteerimisel ei kuvata&lt;br /&gt;
*** Eemaldatud komponentidega juba komplekteeritud arvutite puhul kuvatakse kasutajale, et komponent pole enam saadaval&lt;br /&gt;
** Komponendile saab lisada tingimusi:&lt;br /&gt;
*** Tingimused määravad milliste komponentidega antud komponent koos on võimeline töötama&lt;br /&gt;
*** Tingimuseks võib olla ka loodava virtuaalse arvuti mingi parameeter (nt voolutarve)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse nice-to-have funktsionaalsus:&#039;&#039;&#039;&lt;br /&gt;
* Oma komplekteeritud arvuti jagamine&lt;br /&gt;
* Komponentide sorteerimine vastavalt populaarsusele (st kasutamine arvutites)&lt;br /&gt;
* Kasutaja parooli nullimine e-maili kinnituse kaudu&lt;br /&gt;
* Kasutajakonto kustutamine&lt;br /&gt;
* Kasutajakonto andmete muutmine ja lisainfo talletamise võimalus&lt;br /&gt;
&lt;br /&gt;
==== Serveri funktsionaalsus ====&lt;br /&gt;
&amp;lt;b&amp;gt;Serveri must-have funktsionaalsus&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Server peab toetama kõiki klientrakenduse must-have nõudeid. &lt;br /&gt;
* Serveris tuleb logida olulisemaid kasutajate poolt klientrakenduses tehtud toiminguid (sisse logimine, konto lukustumine, virtuaalse arvuti lisamine jne.);&lt;br /&gt;
* Kasutaja blokeerimine (ajutine), kui kasutaja on ennast püüdnud autentida vale parooliga enam kui 8 korda.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Serveri nice-to-have funktsionaalsus&amp;lt;/b&amp;gt;&lt;br /&gt;
* Kasutaja poolt sisestatud e-maili kinnitamine (kinnitava e-maili saatmine) kasutaja loomisel.&lt;br /&gt;
&lt;br /&gt;
=== Andmebaasi skeem ===&lt;br /&gt;
Infomüra vähendamiseks on andmebaasiskeem realiseeritud selliselt, et tabelites on ainult võtmed. Skeemist välja jäetud atribuudid (graafikakaardi pikkus jne) ei ole olulised analüüsi seisukohast.&lt;br /&gt;
&lt;br /&gt;
[[File:ANDMEBAAS.png]]&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 3: Klientrakendus =&lt;br /&gt;
= (b)logi =&lt;br /&gt;
&lt;br /&gt;
* 17/04/2017: Analüüsi lisatud klientrakenduse ja serveri kirjeldused, samuti kirjeldatud projekti üldine struktuur&lt;br /&gt;
* 16/04/2017: Veebirakenduse analüüsi kondikava&lt;br /&gt;
* 27/03/2017: Tehtud retsensioonid meeskondadele [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR DevHelpVR] ja [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Ninjas_in_pyjamas]&lt;br /&gt;
* 27/03/2017: XML ja XSD parandatud ja täiendatud vastavalt meeskonna JRT tagasisidele https://wiki.itcollege.ee/index.php/JRT#Retsensioon_JRT&lt;br /&gt;
* 20/03/2017: Loodud Wiki leht, jagatud ülesanded&lt;br /&gt;
* 20/03/2017: Projekti esimene osa valmis&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=120189</id>
		<title>PC KartKicker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=120189"/>
		<updated>2017-04-17T13:07:44Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Projekti struktuur: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
* Jan Eerik&lt;br /&gt;
&lt;br /&gt;
= Idee =&lt;br /&gt;
&lt;br /&gt;
Käesolev veebirakendus on asendamatu abimees arvuti kokkupanekul (võrdlemisi tugevalt inspireeritud https://pcpartpicker.com).&lt;br /&gt;
&lt;br /&gt;
Kuna teatavasti vajab arvuti töötamiseks kindlaid juppe mingis aktsepteeritud konfiguratsioonis, võimaldab meie rakendus välistada mitteühilduva raudvara &amp;quot;jõuga&amp;quot; ühildamist ja abistab kasutajal optimaalse konfiguratsiooni valimist.&lt;br /&gt;
&lt;br /&gt;
= Põhiline funktsionaalsus =&lt;br /&gt;
&lt;br /&gt;
* Kasutaja saab lisada üks kuni mitu arvutiskeemi&lt;br /&gt;
* Skeemile saab hakata ükshaaval lisama juppe (emaplaat, protsessor, mälud jne)&lt;br /&gt;
* Iga kord kui mingi jupp skeemi lisatakse, kitsendab see ülejäänud juppide valikut - näiteks LGA1151 liidesega emaplaadile ei õnnestu lisada AMD protsessorit jne&lt;br /&gt;
* Nii pooleliolevaid kui valminud skeeme saab salvestada&lt;br /&gt;
* Igal jupil on oma vaade koos tehnilise infoga&lt;br /&gt;
&lt;br /&gt;
= Nice to have =&lt;br /&gt;
&lt;br /&gt;
* Parima hinna kuvamine (nt Amazon, Newegg)&lt;br /&gt;
* Komponentide võrdlus&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 1: XML =&lt;br /&gt;
&lt;br /&gt;
== Teema ==&lt;br /&gt;
Uute arvutikomponentide olemasolevatesse kategooriatesse lisamiseks kasutab administraator ankeeti, mille salvestamisel ja andmete serverisse edastamiseks tekitatakse järgmine XML, kus on võimalik korraga suur hulk erinevaid arvutikomponente lisada, aga võib ka ainult ühe komponendi korraga saata.&lt;br /&gt;
&lt;br /&gt;
== XML==&lt;br /&gt;
&amp;lt;pre&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;components&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cases&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;NZXT&amp;quot; name=&amp;quot;S340&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;3&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;364&amp;quot; maxCpuHeight=&amp;quot;161&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;red&amp;quot; price=&amp;quot;66.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Deepcool&amp;quot; name=&amp;quot;TESSERACT SW&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;2&amp;quot; bay3=&amp;quot;4&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;light blue&amp;quot; price=&amp;quot;38.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Xion&amp;quot; name =&amp;quot;XON-310_BK&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;1&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;22.98&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;750D&amp;quot; type=&amp;quot;Full tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;3&amp;quot; bay3=&amp;quot;6&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;450&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;149.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
  &amp;lt;/cases&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpus&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.2&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;74&amp;quot; price=&amp;quot;327.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.8&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;69&amp;quot; price=&amp;quot;233.89&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.0&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;71&amp;quot; price=&amp;quot;316.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.5&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;61&amp;quot; price=&amp;quot;219.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;E5-2699 V3&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Xeon&amp;quot; family=&amp;quot;Haswell&amp;quot; socket=&amp;quot;LGA2011-3&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;18&amp;quot; threads=&amp;quot;36&amp;quot; ecc=&amp;quot;true&amp;quot; speed=&amp;quot;2.3&amp;quot; TDP=&amp;quot;145&amp;quot; lithography=&amp;quot;22&amp;quot; maxPowerDraw=&amp;quot;120&amp;quot; price=&amp;quot;3410.46&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;AMD&amp;quot; name=&amp;quot;1800X&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Ryzen 7&amp;quot; family=&amp;quot;Ryzen&amp;quot; socket=&amp;quot;AM4&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;8&amp;quot; threads=&amp;quot;16&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.6&amp;quot; TDP=&amp;quot;95&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;82&amp;quot; price=&amp;quot;469.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
  &amp;lt;/cpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpucoolers&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Cooler Master&amp;quot; name=&amp;quot;Hyper 212 EVO&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;1&amp;quot; height=&amp;quot;159&amp;quot; price=&amp;quot;24.88&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA775&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;H100i v2&amp;quot; liquid=&amp;quot;true&amp;quot; rad=&amp;quot;240&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;&amp;quot; price=&amp;quot;99.99&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Noctua&amp;quot; name=&amp;quot;NH-D15&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;165&amp;quot; price=&amp;quot;85.49&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
  &amp;lt;/cpucoolers&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;gpus&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;PowerColor&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX460&amp;quot; series=&amp;quot;Red Dragon&amp;quot; vram=&amp;quot;2&amp;quot; psuPin=&amp;quot;&amp;quot; length=&amp;quot;226&amp;quot; maxPowerDraw=&amp;quot;130&amp;quot; price=&amp;quot;73.98&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;Sapphire&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX480&amp;quot; series=&amp;quot;Nitro+&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;8&amp;quot; length=&amp;quot;240&amp;quot; maxPowerDraw=&amp;quot;150&amp;quot; price=&amp;quot;253.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;MSI&amp;quot; brandname=&amp;quot;Geforce&amp;quot; codename=&amp;quot;GTX1070&amp;quot; series=&amp;quot;Quick Silver OC&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;6+8&amp;quot; length=&amp;quot;279&amp;quot; maxPowerDraw=&amp;quot;170&amp;quot; price=&amp;quot;409.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
  &amp;lt;/gpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;memorychips&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Kingston&amp;quot; name=&amp;quot;ValueRAM&amp;quot; type=&amp;quot;DIMM&amp;quot; rank=&amp;quot;single&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;2133&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;yes&amp;quot; price=&amp;quot;67.58&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;Dominator Platinum&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;3000&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;2&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;123.25&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;ADATA&amp;quot; name=&amp;quot;&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR3&amp;quot; speed=&amp;quot;1600&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;88.29&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
  &amp;lt;/memorychips&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;motherboards&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Z170-A&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;Z170&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3400&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;152.99&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;ASRock&amp;quot; name=&amp;quot;H110M-HDS&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; chipset=&amp;quot;H110&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;2&amp;quot; maxMemory=&amp;quot;32&amp;quot; maxMemorySpeed=&amp;quot;2133&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;37.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Prime X370-PRO&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;X370&amp;quot; socket=&amp;quot;AM4&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3200&amp;quot; sata3=&amp;quot;8&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;162.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
  &amp;lt;/motherboards&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;psus&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;EVGA&amp;quot; name=&amp;quot;SuperNOVA 650&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;650&amp;quot; eff80plus=&amp;quot;gold&amp;quot; modular=&amp;quot;full&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;be Quiet!&amp;quot; name=&amp;quot;Pure Power L8 600W&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;600&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;no&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;CX550M&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;550&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;semi&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;2&amp;quot; price=&amp;quot;43.98&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
  &amp;lt;/psus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;storages&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;850 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;2048&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;823.14&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Intel&amp;quot; name=&amp;quot;DC P3608&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;4096&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;pcie8x&amp;quot; formFactor=&amp;quot;pcie&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;8867.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;960 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;m.2&amp;quot; formFactor=&amp;quot;m.2-2280&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;629.95&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Western Digital&amp;quot; name=&amp;quot;Black&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;6144&amp;quot; cache=&amp;quot;128&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;279.00&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Seagate&amp;quot; name=&amp;quot;BarraCuda Pro&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;10240&amp;quot; cache=&amp;quot;256&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;429.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Hitachi&amp;quot; name=&amp;quot;Travelstar&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;32&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;53.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
  &amp;lt;/storages&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/components&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML skeem (XSD) ==&lt;br /&gt;
&amp;lt;pre&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;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;cases&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;case&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay5&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psu&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxGpuLength&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxCpuHeight&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;primaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;secondaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cooler&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;family&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;iGPU&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cores&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;threads&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ecc&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;TDP&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;lithography&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpucoolers&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;sockets&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;liquid&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rad&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;fans&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;height&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;gpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;gpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brandname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;codename&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;vram&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psuPin&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;length&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;memorychips&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;memorychip&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rank&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cas&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;gen&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;moduleSize&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modules&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ECC&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;motherboards&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;motherboard&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;chipset&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memoryType&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memorySlots&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemory&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemorySpeed&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;video&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;sata3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ethernet&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;usb3&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;psus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;psu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;wattage&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;eff80plus&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modular&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6p2&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;storages&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;storage&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;capacity&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cache&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;interface&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rpm&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 1 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added computer parts:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;child::*/child::*&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 2 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added CPU coolers:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;cpucoolers/cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
== XML retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR Talk:DevHelpVR] &amp;lt;br&amp;gt;&lt;br /&gt;
XML failide retsensioon meeskonnale Ninjas_in_pyjamas, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Talk:Ninjas_in_pyjamas]&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 2: Veebirakendus =&lt;br /&gt;
== Analüüs == &lt;br /&gt;
Vastavalt klientrakenduse päringule annab veebirakendus andmebaasis oleva informatsiooni põhjal JSON kujul vastuse kliendile. Klientrakenduse funktsionaalsus ja andmebaasi skeem on mõlemad kirjeldatud allpool. Veebirakendus suudab anda komponentide kategooriate nimekirja, ühe kategooria komponentide nimekirja, nime järgi otsingu tulemuste komponentide nimekirja, konkreetse komponendi detailse informatsiooni, jpm.&lt;br /&gt;
&lt;br /&gt;
=== Mõisted ===&lt;br /&gt;
&#039;&#039;&#039;WIP&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Rakenduse kirjeldus (kogu süsteem, teenus+klient) ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Lühidalt:====&lt;br /&gt;
Meil on lauaarvutite komplekteerimise infosüsteem. Meie klientideks on inimesed kes kaaluvad lauaarvuti ostmist ja kes soovivad enne lauaarvuti või selle komponentide ostmist enda jaoks kogu protseduuri põhjalikult läbi mõelda. Süsteem võimaldab klientidel luua virtuaalse lauaarvuti ja tuvastab mitteühilduvad komponendid ning aitab seega vältida erinevaid probleeme, millega kaasneks aja- ja rahakulu.&lt;br /&gt;
&lt;br /&gt;
====Nüansid:====&lt;br /&gt;
Kliendid saavad ennast meie süsteemis registreerida kasutajateks. Üks füüsiline isik võib teha endale teha ükskõik kui palju kasutajaid, meil ei pea olema päriselt olemasoleva isiku ja süsteemi kasutaja vahel üks-ühest seost. Rakenduse kasutamiseks ei ole kohustuslik serveris konto loomine, klient saab virtuaalse arvuti luua ilma kasutajakontota, aga see ei säilu pärast sessiooni lõppemist.&lt;br /&gt;
&lt;br /&gt;
Iga kasutaja võib luua uue virtuaalse lauaarvuti, sellele nimetuse panna ja see seotakse automaatselt tema kasutajakontoga. Igale virtuaalsele arvutile võib lisada komponente. Lauaarvuti põhilisteks komponentideks on keskseade/protsessor (CPU), protsessori jahuti, emaplaat, muutmälu, graafikaseade (GPU), toiteblokk, arvuti korpus ja püsimälu.&lt;br /&gt;
&lt;br /&gt;
Iga protsessori generatsioon on ühilduv ainult kindlate emaplaadi kiipseadmete komplektidega (chipset) ja tüüpiliselt on emaplaadi protsessori pesa (socket) see, millest lähtuda emaplaadi ja protsessori ühilduvuse kindlaks tegemisel. Protsessori pesaga ühilduvus on peamine parameeter ka protsessori jahuti valikul, aga kui emaplaadil on ainult ühte tüüpi pesa ja protsessor sobib ainult ühte kindlasse pessa, siis jahutid on üldjuhul sobivad mitmete erinevate pesadega. Samuti ühilduvad iga protsessor ja emaplaat ainult spetsiifiliste muutmälu generatsioonidega. Emaplaadid toetavad muutmälu kindla taktsageduseni, kiirema taktsagedusega mälukiipe saab siiski kasutada, need töötavad lihtsalt emaplaadi poolt lubatud maksimaale taktsagedusega, mitte muutmälu kiibi maksimaalse taktsagedusega. On olemas emaplaate, mis toetavat mitut protsessorit.&lt;br /&gt;
&lt;br /&gt;
Muutmälu võib olla lauaarvutis üks kiip, aga võib ka rohkem. Mitme kiibi korral peaks need olema identsed või identsete näitajatega.&lt;br /&gt;
Osade protsessoritega on jahuti karbis kaasas, teistel ei ole. Tänapäeva lauaarvutite protsessorid ilma jahutita ei ole töövõimelised. Mõned protsessorid ja emaplaadid sisaldavad graafikaseadet. Diskreetne graafikaseade on üldjuhul võimekam protsessori või emaplaadiga kaasasolevast, seega on tavaline, et arvutile lisatakse diskreetne graafikaseade isegi kui sisene graafikaseade on juba olemas.&lt;br /&gt;
&lt;br /&gt;
Emaplaatidel, toiteblokkidel ja arvuti korpustel on mitmed suuruse standardid. Suured (ATX) emaplaadid ja toiteblokid ei mahu väikesesse (microATX) korpusesse. Mõned korpused toetavad väikest emaplaati, samas suurt toiteblokki ja teoreetiliselt on võimalik ka vastupidine olukord.&lt;br /&gt;
&lt;br /&gt;
Arvuti korpus toetab protsessori jahutust ainult kuni teatava jahuti kõrguseni ja diskreetse graafikaseadme puhul ainult teatud seadme pikkuseni. Mõned korpused sisaldavad toiteblokki.&lt;br /&gt;
&lt;br /&gt;
Erinevatel diskreetsetel graafikaseadmetel on erinevad nõuded toitele, osad saavad oma toite ainult emaplaadi liidese kaudu, teistel on vaja ühte või rohkemat kaablit toiteblokist. Graafikaseadmeid võib lauaarvutis olla mitmeid, ka mitu ühesugust.&lt;br /&gt;
&lt;br /&gt;
Toitebloki puhul peab toitebloki võimsus katma kõigi teiste komponentide vajaduse varuga ja diskreetse graafikaseadme korral peab toiteblokil olema selle toiteks piisavalt õigeid kaableid.&lt;br /&gt;
&lt;br /&gt;
====Projekti struktuur:====&lt;br /&gt;
Rakendus koosneb kahest põhilisest osast: veebiteenus ja klient-rakendus, mis seda teenust kasutab. &lt;br /&gt;
Projekt realiseeritakse kasutades ASP.NET MVC Web API tehnoloogiat.&lt;br /&gt;
&lt;br /&gt;
Esialgne rakenduse ülesehituse skeem:&lt;br /&gt;
&lt;br /&gt;
[[File:STRUKTUUR.png]]&lt;br /&gt;
&lt;br /&gt;
==== Klientrakenduse funktsionaalsus:====&lt;br /&gt;
Klientprogramm võimaldab kasutajal hallata oma kasutajaprofiili, lisada, muuta ja vaadata oma virtuaalseid arvuteid ja nende komponente.&lt;br /&gt;
Veebiklient suhtleb serveriga üle API.&lt;br /&gt;
Sisselogimisel küsitakse kasutajalt kasutajanime ja parooli, seejärel üritab rakendus kasutajat autentida. &lt;br /&gt;
Eduka autentimise korral kuvatakse antud kasutaja töölaud ning sünkroniseeritakse andmed serveriga.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse must-have funktsionaalsus:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Üldine&amp;lt;/b&amp;gt;&lt;br /&gt;
** Rakendus peab töötama online režiimis;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Kasutajate haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Peab olema võimalik kasutajaks registreerida (kasutajakonto olemasolu on vajalik andmete talletamiseks);&lt;br /&gt;
** Kasutaja peab saama sisse logida kasutajanime ja parooliga;&lt;br /&gt;
** Paroolile peavad rakenduma keerukusnõuded (nt 8 tähemärki);&lt;br /&gt;
** Kasutajatel peavad olema erinevad õiguste tasemed (minimaalselt tavakasutaja ja administraator);&lt;br /&gt;
*** Tavakasutaja saab hallata ainult iseenda virtuaalseid arvuteid;&lt;br /&gt;
*** Adminkasutaja saab lisada või muuta arvuti komponente;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Virtuaalsete arvutite haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Kasutaja peab saama lisada uusi virtuaalseid arvuteid;&lt;br /&gt;
** Kasutaja poolt lisatud arvutid peavad talle näha olema;&lt;br /&gt;
** Kasutaja peab saama oma arvutitele komponente lisada ja vahetada:&lt;br /&gt;
*** Komponendid on jagatud erinevatesse kategooriatesse: &lt;br /&gt;
**** keskseade/protsessor (CPU)&lt;br /&gt;
**** protsessori jahuti&lt;br /&gt;
**** emaplaat&lt;br /&gt;
**** muutmälu&lt;br /&gt;
**** graafikaseade (GPU)&lt;br /&gt;
**** toiteblokk&lt;br /&gt;
**** arvuti korpus&lt;br /&gt;
**** püsimälu.&lt;br /&gt;
*** Ühest kategooriast on võimalik valida ka mitu komponenti (nt mitu graafikaseadet)&lt;br /&gt;
*** Kui kasutaja valib mõne komponendi, siis see piirab automaatselt tema võimalusi valida ainult juba valitud komponentidega kokkusobivaid teisi komponente.&lt;br /&gt;
*** Kui juba valitud komponent muutub mitte kokku sobivaks, siis antakse sellest kasutajale teada&lt;br /&gt;
*** Mitte kokkusobivate komponentidega arvutit salvestada ei ole võimalik&lt;br /&gt;
*** Komponente on võimalik nende omaduste põhjal sorteerida ja filtreerida&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Komponentide haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Komponent peab olema lisatav administraator kasutaja (kuid mitte tavakasutaja) poolt&lt;br /&gt;
** Juba loodud ja kinnitatud komponendi omadusi muuta ei saa&lt;br /&gt;
** Komponendi saab märkida eemaldatuks:&lt;br /&gt;
*** Eemaldatud komponente uute arvutite komplekteerimisel ei kuvata&lt;br /&gt;
*** Eemaldatud komponentidega juba komplekteeritud arvutite puhul kuvatakse kasutajale, et komponent pole enam saadaval&lt;br /&gt;
** Komponendile saab lisada tingimusi:&lt;br /&gt;
*** Tingimused määravad milliste komponentidega antud komponent koos on võimeline töötama&lt;br /&gt;
*** Tingimuseks võib olla ka loodava virtuaalse arvuti mingi parameeter (nt voolutarve)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse nice-to-have funktsionaalsus:&#039;&#039;&#039;&lt;br /&gt;
* Oma komplekteeritud arvuti jagamine&lt;br /&gt;
* Komponentide sorteerimine vastavalt populaarsusele (st kasutamine arvutites)&lt;br /&gt;
* Kasutaja parooli nullimine e-maili kinnituse kaudu&lt;br /&gt;
* Kasutajakonto kustutamine&lt;br /&gt;
* Kasutajakonto andmete muutmine ja lisainfo talletamise võimalus&lt;br /&gt;
&lt;br /&gt;
==== Serveri funktsionaalsus ====&lt;br /&gt;
&amp;lt;b&amp;gt;Serveri must-have funktsionaalsus&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Server peab toetama kõiki klientrakenduse must-have nõudeid. &lt;br /&gt;
* Serveris tuleb logida olulisemaid kasutajate poolt klientrakenduses tehtud toiminguid (sisse logimine, konto lukustumine, virtuaalse arvuti lisamine jne.);&lt;br /&gt;
* Kasutaja blokeerimine (ajutine), kui kasutaja on ennast püüdnud autentida vale parooliga enam kui 8 korda.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Serveri nice-to-have funktsionaalsus&amp;lt;/b&amp;gt;&lt;br /&gt;
* Kasutaja poolt sisestatud e-maili kinnitamine (kinnitava e-maili saatmine) kasutaja loomisel.&lt;br /&gt;
&lt;br /&gt;
=== Andmebaasi skeem ===&lt;br /&gt;
Infomüra vähendamiseks on andmebaasiskeem realiseeritud selliselt, et tabelites on ainult võtmed. Skeemist välja jäetud atribuudid (graafikakaardi pikkus jne) ei ole olulised analüüsi seisukohast.&lt;br /&gt;
&lt;br /&gt;
[[File:ANDMEBAAS.png]]&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 3: Klientrakendus =&lt;br /&gt;
= (b)logi =&lt;br /&gt;
&lt;br /&gt;
* 17/04/2017: Analüüsi lisatud klientrakenduse ja serveri kirjeldused, samuti kirjeldatud projekti üldine struktuur&lt;br /&gt;
* 16/04/2017: Veebirakenduse analüüsi kondikava&lt;br /&gt;
* 27/03/2017: Tehtud retsensioonid meeskondadele [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR DevHelpVR] ja [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Ninjas_in_pyjamas]&lt;br /&gt;
* 27/03/2017: XML ja XSD parandatud ja täiendatud vastavalt meeskonna JRT tagasisidele https://wiki.itcollege.ee/index.php/JRT#Retsensioon_JRT&lt;br /&gt;
* 20/03/2017: Loodud Wiki leht, jagatud ülesanded&lt;br /&gt;
* 20/03/2017: Projekti esimene osa valmis&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=120188</id>
		<title>PC KartKicker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=120188"/>
		<updated>2017-04-17T13:07:14Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* (b)logi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
* Jan Eerik&lt;br /&gt;
&lt;br /&gt;
= Idee =&lt;br /&gt;
&lt;br /&gt;
Käesolev veebirakendus on asendamatu abimees arvuti kokkupanekul (võrdlemisi tugevalt inspireeritud https://pcpartpicker.com).&lt;br /&gt;
&lt;br /&gt;
Kuna teatavasti vajab arvuti töötamiseks kindlaid juppe mingis aktsepteeritud konfiguratsioonis, võimaldab meie rakendus välistada mitteühilduva raudvara &amp;quot;jõuga&amp;quot; ühildamist ja abistab kasutajal optimaalse konfiguratsiooni valimist.&lt;br /&gt;
&lt;br /&gt;
= Põhiline funktsionaalsus =&lt;br /&gt;
&lt;br /&gt;
* Kasutaja saab lisada üks kuni mitu arvutiskeemi&lt;br /&gt;
* Skeemile saab hakata ükshaaval lisama juppe (emaplaat, protsessor, mälud jne)&lt;br /&gt;
* Iga kord kui mingi jupp skeemi lisatakse, kitsendab see ülejäänud juppide valikut - näiteks LGA1151 liidesega emaplaadile ei õnnestu lisada AMD protsessorit jne&lt;br /&gt;
* Nii pooleliolevaid kui valminud skeeme saab salvestada&lt;br /&gt;
* Igal jupil on oma vaade koos tehnilise infoga&lt;br /&gt;
&lt;br /&gt;
= Nice to have =&lt;br /&gt;
&lt;br /&gt;
* Parima hinna kuvamine (nt Amazon, Newegg)&lt;br /&gt;
* Komponentide võrdlus&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 1: XML =&lt;br /&gt;
&lt;br /&gt;
== Teema ==&lt;br /&gt;
Uute arvutikomponentide olemasolevatesse kategooriatesse lisamiseks kasutab administraator ankeeti, mille salvestamisel ja andmete serverisse edastamiseks tekitatakse järgmine XML, kus on võimalik korraga suur hulk erinevaid arvutikomponente lisada, aga võib ka ainult ühe komponendi korraga saata.&lt;br /&gt;
&lt;br /&gt;
== XML==&lt;br /&gt;
&amp;lt;pre&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;components&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cases&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;NZXT&amp;quot; name=&amp;quot;S340&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;3&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;364&amp;quot; maxCpuHeight=&amp;quot;161&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;red&amp;quot; price=&amp;quot;66.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Deepcool&amp;quot; name=&amp;quot;TESSERACT SW&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;2&amp;quot; bay3=&amp;quot;4&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;light blue&amp;quot; price=&amp;quot;38.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Xion&amp;quot; name =&amp;quot;XON-310_BK&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;1&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;22.98&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;750D&amp;quot; type=&amp;quot;Full tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;3&amp;quot; bay3=&amp;quot;6&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;450&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;149.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
  &amp;lt;/cases&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpus&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.2&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;74&amp;quot; price=&amp;quot;327.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.8&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;69&amp;quot; price=&amp;quot;233.89&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.0&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;71&amp;quot; price=&amp;quot;316.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.5&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;61&amp;quot; price=&amp;quot;219.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;E5-2699 V3&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Xeon&amp;quot; family=&amp;quot;Haswell&amp;quot; socket=&amp;quot;LGA2011-3&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;18&amp;quot; threads=&amp;quot;36&amp;quot; ecc=&amp;quot;true&amp;quot; speed=&amp;quot;2.3&amp;quot; TDP=&amp;quot;145&amp;quot; lithography=&amp;quot;22&amp;quot; maxPowerDraw=&amp;quot;120&amp;quot; price=&amp;quot;3410.46&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;AMD&amp;quot; name=&amp;quot;1800X&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Ryzen 7&amp;quot; family=&amp;quot;Ryzen&amp;quot; socket=&amp;quot;AM4&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;8&amp;quot; threads=&amp;quot;16&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.6&amp;quot; TDP=&amp;quot;95&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;82&amp;quot; price=&amp;quot;469.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
  &amp;lt;/cpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpucoolers&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Cooler Master&amp;quot; name=&amp;quot;Hyper 212 EVO&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;1&amp;quot; height=&amp;quot;159&amp;quot; price=&amp;quot;24.88&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA775&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;H100i v2&amp;quot; liquid=&amp;quot;true&amp;quot; rad=&amp;quot;240&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;&amp;quot; price=&amp;quot;99.99&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Noctua&amp;quot; name=&amp;quot;NH-D15&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;165&amp;quot; price=&amp;quot;85.49&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
  &amp;lt;/cpucoolers&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;gpus&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;PowerColor&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX460&amp;quot; series=&amp;quot;Red Dragon&amp;quot; vram=&amp;quot;2&amp;quot; psuPin=&amp;quot;&amp;quot; length=&amp;quot;226&amp;quot; maxPowerDraw=&amp;quot;130&amp;quot; price=&amp;quot;73.98&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;Sapphire&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX480&amp;quot; series=&amp;quot;Nitro+&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;8&amp;quot; length=&amp;quot;240&amp;quot; maxPowerDraw=&amp;quot;150&amp;quot; price=&amp;quot;253.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;MSI&amp;quot; brandname=&amp;quot;Geforce&amp;quot; codename=&amp;quot;GTX1070&amp;quot; series=&amp;quot;Quick Silver OC&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;6+8&amp;quot; length=&amp;quot;279&amp;quot; maxPowerDraw=&amp;quot;170&amp;quot; price=&amp;quot;409.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
  &amp;lt;/gpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;memorychips&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Kingston&amp;quot; name=&amp;quot;ValueRAM&amp;quot; type=&amp;quot;DIMM&amp;quot; rank=&amp;quot;single&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;2133&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;yes&amp;quot; price=&amp;quot;67.58&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;Dominator Platinum&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;3000&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;2&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;123.25&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;ADATA&amp;quot; name=&amp;quot;&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR3&amp;quot; speed=&amp;quot;1600&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;88.29&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
  &amp;lt;/memorychips&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;motherboards&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Z170-A&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;Z170&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3400&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;152.99&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;ASRock&amp;quot; name=&amp;quot;H110M-HDS&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; chipset=&amp;quot;H110&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;2&amp;quot; maxMemory=&amp;quot;32&amp;quot; maxMemorySpeed=&amp;quot;2133&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;37.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Prime X370-PRO&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;X370&amp;quot; socket=&amp;quot;AM4&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3200&amp;quot; sata3=&amp;quot;8&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;162.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
  &amp;lt;/motherboards&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;psus&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;EVGA&amp;quot; name=&amp;quot;SuperNOVA 650&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;650&amp;quot; eff80plus=&amp;quot;gold&amp;quot; modular=&amp;quot;full&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;be Quiet!&amp;quot; name=&amp;quot;Pure Power L8 600W&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;600&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;no&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;CX550M&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;550&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;semi&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;2&amp;quot; price=&amp;quot;43.98&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
  &amp;lt;/psus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;storages&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;850 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;2048&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;823.14&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Intel&amp;quot; name=&amp;quot;DC P3608&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;4096&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;pcie8x&amp;quot; formFactor=&amp;quot;pcie&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;8867.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;960 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;m.2&amp;quot; formFactor=&amp;quot;m.2-2280&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;629.95&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Western Digital&amp;quot; name=&amp;quot;Black&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;6144&amp;quot; cache=&amp;quot;128&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;279.00&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Seagate&amp;quot; name=&amp;quot;BarraCuda Pro&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;10240&amp;quot; cache=&amp;quot;256&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;429.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Hitachi&amp;quot; name=&amp;quot;Travelstar&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;32&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;53.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
  &amp;lt;/storages&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/components&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML skeem (XSD) ==&lt;br /&gt;
&amp;lt;pre&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;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;cases&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;case&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay5&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psu&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxGpuLength&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxCpuHeight&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;primaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;secondaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cooler&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;family&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;iGPU&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cores&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;threads&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ecc&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;TDP&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;lithography&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpucoolers&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;sockets&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;liquid&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rad&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;fans&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;height&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;gpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;gpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brandname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;codename&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;vram&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psuPin&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;length&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;memorychips&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;memorychip&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rank&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cas&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;gen&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;moduleSize&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modules&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ECC&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;motherboards&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;motherboard&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;chipset&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memoryType&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memorySlots&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemory&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemorySpeed&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;video&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;sata3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ethernet&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;usb3&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;psus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;psu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;wattage&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;eff80plus&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modular&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6p2&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;storages&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;storage&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;capacity&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cache&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;interface&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rpm&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 1 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added computer parts:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;child::*/child::*&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 2 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added CPU coolers:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;cpucoolers/cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
== XML retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR Talk:DevHelpVR] &amp;lt;br&amp;gt;&lt;br /&gt;
XML failide retsensioon meeskonnale Ninjas_in_pyjamas, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Talk:Ninjas_in_pyjamas]&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 2: Veebirakendus =&lt;br /&gt;
== Analüüs == &lt;br /&gt;
Vastavalt klientrakenduse päringule annab veebirakendus andmebaasis oleva informatsiooni põhjal JSON kujul vastuse kliendile. Klientrakenduse funktsionaalsus ja andmebaasi skeem on mõlemad kirjeldatud allpool. Veebirakendus suudab anda komponentide kategooriate nimekirja, ühe kategooria komponentide nimekirja, nime järgi otsingu tulemuste komponentide nimekirja, konkreetse komponendi detailse informatsiooni, jpm.&lt;br /&gt;
&lt;br /&gt;
=== Mõisted ===&lt;br /&gt;
&#039;&#039;&#039;WIP&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Rakenduse kirjeldus (kogu süsteem, teenus+klient) ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Lühidalt:====&lt;br /&gt;
Meil on lauaarvutite komplekteerimise infosüsteem. Meie klientideks on inimesed kes kaaluvad lauaarvuti ostmist ja kes soovivad enne lauaarvuti või selle komponentide ostmist enda jaoks kogu protseduuri põhjalikult läbi mõelda. Süsteem võimaldab klientidel luua virtuaalse lauaarvuti ja tuvastab mitteühilduvad komponendid ning aitab seega vältida erinevaid probleeme, millega kaasneks aja- ja rahakulu.&lt;br /&gt;
&lt;br /&gt;
====Nüansid:====&lt;br /&gt;
Kliendid saavad ennast meie süsteemis registreerida kasutajateks. Üks füüsiline isik võib teha endale teha ükskõik kui palju kasutajaid, meil ei pea olema päriselt olemasoleva isiku ja süsteemi kasutaja vahel üks-ühest seost. Rakenduse kasutamiseks ei ole kohustuslik serveris konto loomine, klient saab virtuaalse arvuti luua ilma kasutajakontota, aga see ei säilu pärast sessiooni lõppemist.&lt;br /&gt;
&lt;br /&gt;
Iga kasutaja võib luua uue virtuaalse lauaarvuti, sellele nimetuse panna ja see seotakse automaatselt tema kasutajakontoga. Igale virtuaalsele arvutile võib lisada komponente. Lauaarvuti põhilisteks komponentideks on keskseade/protsessor (CPU), protsessori jahuti, emaplaat, muutmälu, graafikaseade (GPU), toiteblokk, arvuti korpus ja püsimälu.&lt;br /&gt;
&lt;br /&gt;
Iga protsessori generatsioon on ühilduv ainult kindlate emaplaadi kiipseadmete komplektidega (chipset) ja tüüpiliselt on emaplaadi protsessori pesa (socket) see, millest lähtuda emaplaadi ja protsessori ühilduvuse kindlaks tegemisel. Protsessori pesaga ühilduvus on peamine parameeter ka protsessori jahuti valikul, aga kui emaplaadil on ainult ühte tüüpi pesa ja protsessor sobib ainult ühte kindlasse pessa, siis jahutid on üldjuhul sobivad mitmete erinevate pesadega. Samuti ühilduvad iga protsessor ja emaplaat ainult spetsiifiliste muutmälu generatsioonidega. Emaplaadid toetavad muutmälu kindla taktsageduseni, kiirema taktsagedusega mälukiipe saab siiski kasutada, need töötavad lihtsalt emaplaadi poolt lubatud maksimaale taktsagedusega, mitte muutmälu kiibi maksimaalse taktsagedusega. On olemas emaplaate, mis toetavat mitut protsessorit.&lt;br /&gt;
&lt;br /&gt;
Muutmälu võib olla lauaarvutis üks kiip, aga võib ka rohkem. Mitme kiibi korral peaks need olema identsed või identsete näitajatega.&lt;br /&gt;
Osade protsessoritega on jahuti karbis kaasas, teistel ei ole. Tänapäeva lauaarvutite protsessorid ilma jahutita ei ole töövõimelised. Mõned protsessorid ja emaplaadid sisaldavad graafikaseadet. Diskreetne graafikaseade on üldjuhul võimekam protsessori või emaplaadiga kaasasolevast, seega on tavaline, et arvutile lisatakse diskreetne graafikaseade isegi kui sisene graafikaseade on juba olemas.&lt;br /&gt;
&lt;br /&gt;
Emaplaatidel, toiteblokkidel ja arvuti korpustel on mitmed suuruse standardid. Suured (ATX) emaplaadid ja toiteblokid ei mahu väikesesse (microATX) korpusesse. Mõned korpused toetavad väikest emaplaati, samas suurt toiteblokki ja teoreetiliselt on võimalik ka vastupidine olukord.&lt;br /&gt;
&lt;br /&gt;
Arvuti korpus toetab protsessori jahutust ainult kuni teatava jahuti kõrguseni ja diskreetse graafikaseadme puhul ainult teatud seadme pikkuseni. Mõned korpused sisaldavad toiteblokki.&lt;br /&gt;
&lt;br /&gt;
Erinevatel diskreetsetel graafikaseadmetel on erinevad nõuded toitele, osad saavad oma toite ainult emaplaadi liidese kaudu, teistel on vaja ühte või rohkemat kaablit toiteblokist. Graafikaseadmeid võib lauaarvutis olla mitmeid, ka mitu ühesugust.&lt;br /&gt;
&lt;br /&gt;
Toitebloki puhul peab toitebloki võimsus katma kõigi teiste komponentide vajaduse varuga ja diskreetse graafikaseadme korral peab toiteblokil olema selle toiteks piisavalt õigeid kaableid.&lt;br /&gt;
&lt;br /&gt;
====Projekti struktuur:====&lt;br /&gt;
Rakendus koosneb kahest põhilisest osast: veebiteenus ja klient-rakendus, mis seda teenust kasutab. Projekt realiseeritakse kasutades ASP.NET MVC Web API tehnoloogiat.&lt;br /&gt;
&lt;br /&gt;
Esialgne rakenduse ülesehituse skeem:&lt;br /&gt;
&lt;br /&gt;
[[File:STRUKTUUR.png]]&lt;br /&gt;
&lt;br /&gt;
==== Klientrakenduse funktsionaalsus:====&lt;br /&gt;
Klientprogramm võimaldab kasutajal hallata oma kasutajaprofiili, lisada, muuta ja vaadata oma virtuaalseid arvuteid ja nende komponente.&lt;br /&gt;
Veebiklient suhtleb serveriga üle API.&lt;br /&gt;
Sisselogimisel küsitakse kasutajalt kasutajanime ja parooli, seejärel üritab rakendus kasutajat autentida. &lt;br /&gt;
Eduka autentimise korral kuvatakse antud kasutaja töölaud ning sünkroniseeritakse andmed serveriga.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse must-have funktsionaalsus:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Üldine&amp;lt;/b&amp;gt;&lt;br /&gt;
** Rakendus peab töötama online režiimis;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Kasutajate haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Peab olema võimalik kasutajaks registreerida (kasutajakonto olemasolu on vajalik andmete talletamiseks);&lt;br /&gt;
** Kasutaja peab saama sisse logida kasutajanime ja parooliga;&lt;br /&gt;
** Paroolile peavad rakenduma keerukusnõuded (nt 8 tähemärki);&lt;br /&gt;
** Kasutajatel peavad olema erinevad õiguste tasemed (minimaalselt tavakasutaja ja administraator);&lt;br /&gt;
*** Tavakasutaja saab hallata ainult iseenda virtuaalseid arvuteid;&lt;br /&gt;
*** Adminkasutaja saab lisada või muuta arvuti komponente;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Virtuaalsete arvutite haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Kasutaja peab saama lisada uusi virtuaalseid arvuteid;&lt;br /&gt;
** Kasutaja poolt lisatud arvutid peavad talle näha olema;&lt;br /&gt;
** Kasutaja peab saama oma arvutitele komponente lisada ja vahetada:&lt;br /&gt;
*** Komponendid on jagatud erinevatesse kategooriatesse: &lt;br /&gt;
**** keskseade/protsessor (CPU)&lt;br /&gt;
**** protsessori jahuti&lt;br /&gt;
**** emaplaat&lt;br /&gt;
**** muutmälu&lt;br /&gt;
**** graafikaseade (GPU)&lt;br /&gt;
**** toiteblokk&lt;br /&gt;
**** arvuti korpus&lt;br /&gt;
**** püsimälu.&lt;br /&gt;
*** Ühest kategooriast on võimalik valida ka mitu komponenti (nt mitu graafikaseadet)&lt;br /&gt;
*** Kui kasutaja valib mõne komponendi, siis see piirab automaatselt tema võimalusi valida ainult juba valitud komponentidega kokkusobivaid teisi komponente.&lt;br /&gt;
*** Kui juba valitud komponent muutub mitte kokku sobivaks, siis antakse sellest kasutajale teada&lt;br /&gt;
*** Mitte kokkusobivate komponentidega arvutit salvestada ei ole võimalik&lt;br /&gt;
*** Komponente on võimalik nende omaduste põhjal sorteerida ja filtreerida&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Komponentide haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Komponent peab olema lisatav administraator kasutaja (kuid mitte tavakasutaja) poolt&lt;br /&gt;
** Juba loodud ja kinnitatud komponendi omadusi muuta ei saa&lt;br /&gt;
** Komponendi saab märkida eemaldatuks:&lt;br /&gt;
*** Eemaldatud komponente uute arvutite komplekteerimisel ei kuvata&lt;br /&gt;
*** Eemaldatud komponentidega juba komplekteeritud arvutite puhul kuvatakse kasutajale, et komponent pole enam saadaval&lt;br /&gt;
** Komponendile saab lisada tingimusi:&lt;br /&gt;
*** Tingimused määravad milliste komponentidega antud komponent koos on võimeline töötama&lt;br /&gt;
*** Tingimuseks võib olla ka loodava virtuaalse arvuti mingi parameeter (nt voolutarve)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse nice-to-have funktsionaalsus:&#039;&#039;&#039;&lt;br /&gt;
* Oma komplekteeritud arvuti jagamine&lt;br /&gt;
* Komponentide sorteerimine vastavalt populaarsusele (st kasutamine arvutites)&lt;br /&gt;
* Kasutaja parooli nullimine e-maili kinnituse kaudu&lt;br /&gt;
* Kasutajakonto kustutamine&lt;br /&gt;
* Kasutajakonto andmete muutmine ja lisainfo talletamise võimalus&lt;br /&gt;
&lt;br /&gt;
==== Serveri funktsionaalsus ====&lt;br /&gt;
&amp;lt;b&amp;gt;Serveri must-have funktsionaalsus&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Server peab toetama kõiki klientrakenduse must-have nõudeid. &lt;br /&gt;
* Serveris tuleb logida olulisemaid kasutajate poolt klientrakenduses tehtud toiminguid (sisse logimine, konto lukustumine, virtuaalse arvuti lisamine jne.);&lt;br /&gt;
* Kasutaja blokeerimine (ajutine), kui kasutaja on ennast püüdnud autentida vale parooliga enam kui 8 korda.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Serveri nice-to-have funktsionaalsus&amp;lt;/b&amp;gt;&lt;br /&gt;
* Kasutaja poolt sisestatud e-maili kinnitamine (kinnitava e-maili saatmine) kasutaja loomisel.&lt;br /&gt;
&lt;br /&gt;
=== Andmebaasi skeem ===&lt;br /&gt;
Infomüra vähendamiseks on andmebaasiskeem realiseeritud selliselt, et tabelites on ainult võtmed. Skeemist välja jäetud atribuudid (graafikakaardi pikkus jne) ei ole olulised analüüsi seisukohast.&lt;br /&gt;
&lt;br /&gt;
[[File:ANDMEBAAS.png]]&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 3: Klientrakendus =&lt;br /&gt;
= (b)logi =&lt;br /&gt;
&lt;br /&gt;
* 17/04/2017: Analüüsi lisatud klientrakenduse ja serveri kirjeldused, samuti kirjeldatud projekti üldine struktuur&lt;br /&gt;
* 16/04/2017: Veebirakenduse analüüsi kondikava&lt;br /&gt;
* 27/03/2017: Tehtud retsensioonid meeskondadele [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR DevHelpVR] ja [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Ninjas_in_pyjamas]&lt;br /&gt;
* 27/03/2017: XML ja XSD parandatud ja täiendatud vastavalt meeskonna JRT tagasisidele https://wiki.itcollege.ee/index.php/JRT#Retsensioon_JRT&lt;br /&gt;
* 20/03/2017: Loodud Wiki leht, jagatud ülesanded&lt;br /&gt;
* 20/03/2017: Projekti esimene osa valmis&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=120187</id>
		<title>PC KartKicker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=120187"/>
		<updated>2017-04-17T13:06:00Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
* Jan Eerik&lt;br /&gt;
&lt;br /&gt;
= Idee =&lt;br /&gt;
&lt;br /&gt;
Käesolev veebirakendus on asendamatu abimees arvuti kokkupanekul (võrdlemisi tugevalt inspireeritud https://pcpartpicker.com).&lt;br /&gt;
&lt;br /&gt;
Kuna teatavasti vajab arvuti töötamiseks kindlaid juppe mingis aktsepteeritud konfiguratsioonis, võimaldab meie rakendus välistada mitteühilduva raudvara &amp;quot;jõuga&amp;quot; ühildamist ja abistab kasutajal optimaalse konfiguratsiooni valimist.&lt;br /&gt;
&lt;br /&gt;
= Põhiline funktsionaalsus =&lt;br /&gt;
&lt;br /&gt;
* Kasutaja saab lisada üks kuni mitu arvutiskeemi&lt;br /&gt;
* Skeemile saab hakata ükshaaval lisama juppe (emaplaat, protsessor, mälud jne)&lt;br /&gt;
* Iga kord kui mingi jupp skeemi lisatakse, kitsendab see ülejäänud juppide valikut - näiteks LGA1151 liidesega emaplaadile ei õnnestu lisada AMD protsessorit jne&lt;br /&gt;
* Nii pooleliolevaid kui valminud skeeme saab salvestada&lt;br /&gt;
* Igal jupil on oma vaade koos tehnilise infoga&lt;br /&gt;
&lt;br /&gt;
= Nice to have =&lt;br /&gt;
&lt;br /&gt;
* Parima hinna kuvamine (nt Amazon, Newegg)&lt;br /&gt;
* Komponentide võrdlus&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 1: XML =&lt;br /&gt;
&lt;br /&gt;
== Teema ==&lt;br /&gt;
Uute arvutikomponentide olemasolevatesse kategooriatesse lisamiseks kasutab administraator ankeeti, mille salvestamisel ja andmete serverisse edastamiseks tekitatakse järgmine XML, kus on võimalik korraga suur hulk erinevaid arvutikomponente lisada, aga võib ka ainult ühe komponendi korraga saata.&lt;br /&gt;
&lt;br /&gt;
== XML==&lt;br /&gt;
&amp;lt;pre&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;components&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cases&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;NZXT&amp;quot; name=&amp;quot;S340&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;3&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;364&amp;quot; maxCpuHeight=&amp;quot;161&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;red&amp;quot; price=&amp;quot;66.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Deepcool&amp;quot; name=&amp;quot;TESSERACT SW&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;2&amp;quot; bay3=&amp;quot;4&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;light blue&amp;quot; price=&amp;quot;38.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Xion&amp;quot; name =&amp;quot;XON-310_BK&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;1&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;22.98&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;750D&amp;quot; type=&amp;quot;Full tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;3&amp;quot; bay3=&amp;quot;6&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;450&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;149.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
  &amp;lt;/cases&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpus&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.2&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;74&amp;quot; price=&amp;quot;327.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.8&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;69&amp;quot; price=&amp;quot;233.89&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.0&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;71&amp;quot; price=&amp;quot;316.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.5&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;61&amp;quot; price=&amp;quot;219.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;E5-2699 V3&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Xeon&amp;quot; family=&amp;quot;Haswell&amp;quot; socket=&amp;quot;LGA2011-3&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;18&amp;quot; threads=&amp;quot;36&amp;quot; ecc=&amp;quot;true&amp;quot; speed=&amp;quot;2.3&amp;quot; TDP=&amp;quot;145&amp;quot; lithography=&amp;quot;22&amp;quot; maxPowerDraw=&amp;quot;120&amp;quot; price=&amp;quot;3410.46&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;AMD&amp;quot; name=&amp;quot;1800X&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Ryzen 7&amp;quot; family=&amp;quot;Ryzen&amp;quot; socket=&amp;quot;AM4&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;8&amp;quot; threads=&amp;quot;16&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.6&amp;quot; TDP=&amp;quot;95&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;82&amp;quot; price=&amp;quot;469.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
  &amp;lt;/cpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpucoolers&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Cooler Master&amp;quot; name=&amp;quot;Hyper 212 EVO&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;1&amp;quot; height=&amp;quot;159&amp;quot; price=&amp;quot;24.88&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA775&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;H100i v2&amp;quot; liquid=&amp;quot;true&amp;quot; rad=&amp;quot;240&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;&amp;quot; price=&amp;quot;99.99&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Noctua&amp;quot; name=&amp;quot;NH-D15&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;165&amp;quot; price=&amp;quot;85.49&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
  &amp;lt;/cpucoolers&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;gpus&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;PowerColor&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX460&amp;quot; series=&amp;quot;Red Dragon&amp;quot; vram=&amp;quot;2&amp;quot; psuPin=&amp;quot;&amp;quot; length=&amp;quot;226&amp;quot; maxPowerDraw=&amp;quot;130&amp;quot; price=&amp;quot;73.98&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;Sapphire&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX480&amp;quot; series=&amp;quot;Nitro+&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;8&amp;quot; length=&amp;quot;240&amp;quot; maxPowerDraw=&amp;quot;150&amp;quot; price=&amp;quot;253.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;MSI&amp;quot; brandname=&amp;quot;Geforce&amp;quot; codename=&amp;quot;GTX1070&amp;quot; series=&amp;quot;Quick Silver OC&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;6+8&amp;quot; length=&amp;quot;279&amp;quot; maxPowerDraw=&amp;quot;170&amp;quot; price=&amp;quot;409.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
  &amp;lt;/gpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;memorychips&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Kingston&amp;quot; name=&amp;quot;ValueRAM&amp;quot; type=&amp;quot;DIMM&amp;quot; rank=&amp;quot;single&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;2133&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;yes&amp;quot; price=&amp;quot;67.58&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;Dominator Platinum&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;3000&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;2&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;123.25&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;ADATA&amp;quot; name=&amp;quot;&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR3&amp;quot; speed=&amp;quot;1600&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;88.29&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
  &amp;lt;/memorychips&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;motherboards&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Z170-A&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;Z170&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3400&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;152.99&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;ASRock&amp;quot; name=&amp;quot;H110M-HDS&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; chipset=&amp;quot;H110&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;2&amp;quot; maxMemory=&amp;quot;32&amp;quot; maxMemorySpeed=&amp;quot;2133&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;37.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Prime X370-PRO&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;X370&amp;quot; socket=&amp;quot;AM4&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3200&amp;quot; sata3=&amp;quot;8&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;162.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
  &amp;lt;/motherboards&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;psus&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;EVGA&amp;quot; name=&amp;quot;SuperNOVA 650&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;650&amp;quot; eff80plus=&amp;quot;gold&amp;quot; modular=&amp;quot;full&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;be Quiet!&amp;quot; name=&amp;quot;Pure Power L8 600W&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;600&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;no&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;CX550M&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;550&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;semi&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;2&amp;quot; price=&amp;quot;43.98&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
  &amp;lt;/psus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;storages&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;850 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;2048&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;823.14&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Intel&amp;quot; name=&amp;quot;DC P3608&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;4096&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;pcie8x&amp;quot; formFactor=&amp;quot;pcie&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;8867.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;960 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;m.2&amp;quot; formFactor=&amp;quot;m.2-2280&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;629.95&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Western Digital&amp;quot; name=&amp;quot;Black&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;6144&amp;quot; cache=&amp;quot;128&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;279.00&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Seagate&amp;quot; name=&amp;quot;BarraCuda Pro&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;10240&amp;quot; cache=&amp;quot;256&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;429.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Hitachi&amp;quot; name=&amp;quot;Travelstar&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;32&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;53.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
  &amp;lt;/storages&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/components&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML skeem (XSD) ==&lt;br /&gt;
&amp;lt;pre&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;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;cases&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;case&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay5&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psu&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxGpuLength&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxCpuHeight&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;primaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;secondaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cooler&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;family&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;iGPU&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cores&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;threads&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ecc&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;TDP&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;lithography&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpucoolers&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;sockets&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;liquid&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rad&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;fans&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;height&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;gpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;gpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brandname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;codename&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;vram&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psuPin&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;length&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;memorychips&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;memorychip&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rank&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cas&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;gen&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;moduleSize&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modules&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ECC&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;motherboards&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;motherboard&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;chipset&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memoryType&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memorySlots&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemory&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemorySpeed&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;video&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;sata3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ethernet&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;usb3&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;psus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;psu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;wattage&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;eff80plus&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modular&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6p2&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;storages&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;storage&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;capacity&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cache&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;interface&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rpm&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 1 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added computer parts:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;child::*/child::*&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 2 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added CPU coolers:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;cpucoolers/cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
== XML retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR Talk:DevHelpVR] &amp;lt;br&amp;gt;&lt;br /&gt;
XML failide retsensioon meeskonnale Ninjas_in_pyjamas, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Talk:Ninjas_in_pyjamas]&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 2: Veebirakendus =&lt;br /&gt;
== Analüüs == &lt;br /&gt;
Vastavalt klientrakenduse päringule annab veebirakendus andmebaasis oleva informatsiooni põhjal JSON kujul vastuse kliendile. Klientrakenduse funktsionaalsus ja andmebaasi skeem on mõlemad kirjeldatud allpool. Veebirakendus suudab anda komponentide kategooriate nimekirja, ühe kategooria komponentide nimekirja, nime järgi otsingu tulemuste komponentide nimekirja, konkreetse komponendi detailse informatsiooni, jpm.&lt;br /&gt;
&lt;br /&gt;
=== Mõisted ===&lt;br /&gt;
&#039;&#039;&#039;WIP&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Rakenduse kirjeldus (kogu süsteem, teenus+klient) ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Lühidalt:====&lt;br /&gt;
Meil on lauaarvutite komplekteerimise infosüsteem. Meie klientideks on inimesed kes kaaluvad lauaarvuti ostmist ja kes soovivad enne lauaarvuti või selle komponentide ostmist enda jaoks kogu protseduuri põhjalikult läbi mõelda. Süsteem võimaldab klientidel luua virtuaalse lauaarvuti ja tuvastab mitteühilduvad komponendid ning aitab seega vältida erinevaid probleeme, millega kaasneks aja- ja rahakulu.&lt;br /&gt;
&lt;br /&gt;
====Nüansid:====&lt;br /&gt;
Kliendid saavad ennast meie süsteemis registreerida kasutajateks. Üks füüsiline isik võib teha endale teha ükskõik kui palju kasutajaid, meil ei pea olema päriselt olemasoleva isiku ja süsteemi kasutaja vahel üks-ühest seost. Rakenduse kasutamiseks ei ole kohustuslik serveris konto loomine, klient saab virtuaalse arvuti luua ilma kasutajakontota, aga see ei säilu pärast sessiooni lõppemist.&lt;br /&gt;
&lt;br /&gt;
Iga kasutaja võib luua uue virtuaalse lauaarvuti, sellele nimetuse panna ja see seotakse automaatselt tema kasutajakontoga. Igale virtuaalsele arvutile võib lisada komponente. Lauaarvuti põhilisteks komponentideks on keskseade/protsessor (CPU), protsessori jahuti, emaplaat, muutmälu, graafikaseade (GPU), toiteblokk, arvuti korpus ja püsimälu.&lt;br /&gt;
&lt;br /&gt;
Iga protsessori generatsioon on ühilduv ainult kindlate emaplaadi kiipseadmete komplektidega (chipset) ja tüüpiliselt on emaplaadi protsessori pesa (socket) see, millest lähtuda emaplaadi ja protsessori ühilduvuse kindlaks tegemisel. Protsessori pesaga ühilduvus on peamine parameeter ka protsessori jahuti valikul, aga kui emaplaadil on ainult ühte tüüpi pesa ja protsessor sobib ainult ühte kindlasse pessa, siis jahutid on üldjuhul sobivad mitmete erinevate pesadega. Samuti ühilduvad iga protsessor ja emaplaat ainult spetsiifiliste muutmälu generatsioonidega. Emaplaadid toetavad muutmälu kindla taktsageduseni, kiirema taktsagedusega mälukiipe saab siiski kasutada, need töötavad lihtsalt emaplaadi poolt lubatud maksimaale taktsagedusega, mitte muutmälu kiibi maksimaalse taktsagedusega. On olemas emaplaate, mis toetavat mitut protsessorit.&lt;br /&gt;
&lt;br /&gt;
Muutmälu võib olla lauaarvutis üks kiip, aga võib ka rohkem. Mitme kiibi korral peaks need olema identsed või identsete näitajatega.&lt;br /&gt;
Osade protsessoritega on jahuti karbis kaasas, teistel ei ole. Tänapäeva lauaarvutite protsessorid ilma jahutita ei ole töövõimelised. Mõned protsessorid ja emaplaadid sisaldavad graafikaseadet. Diskreetne graafikaseade on üldjuhul võimekam protsessori või emaplaadiga kaasasolevast, seega on tavaline, et arvutile lisatakse diskreetne graafikaseade isegi kui sisene graafikaseade on juba olemas.&lt;br /&gt;
&lt;br /&gt;
Emaplaatidel, toiteblokkidel ja arvuti korpustel on mitmed suuruse standardid. Suured (ATX) emaplaadid ja toiteblokid ei mahu väikesesse (microATX) korpusesse. Mõned korpused toetavad väikest emaplaati, samas suurt toiteblokki ja teoreetiliselt on võimalik ka vastupidine olukord.&lt;br /&gt;
&lt;br /&gt;
Arvuti korpus toetab protsessori jahutust ainult kuni teatava jahuti kõrguseni ja diskreetse graafikaseadme puhul ainult teatud seadme pikkuseni. Mõned korpused sisaldavad toiteblokki.&lt;br /&gt;
&lt;br /&gt;
Erinevatel diskreetsetel graafikaseadmetel on erinevad nõuded toitele, osad saavad oma toite ainult emaplaadi liidese kaudu, teistel on vaja ühte või rohkemat kaablit toiteblokist. Graafikaseadmeid võib lauaarvutis olla mitmeid, ka mitu ühesugust.&lt;br /&gt;
&lt;br /&gt;
Toitebloki puhul peab toitebloki võimsus katma kõigi teiste komponentide vajaduse varuga ja diskreetse graafikaseadme korral peab toiteblokil olema selle toiteks piisavalt õigeid kaableid.&lt;br /&gt;
&lt;br /&gt;
====Projekti struktuur:====&lt;br /&gt;
Rakendus koosneb kahest põhilisest osast: veebiteenus ja klient-rakendus, mis seda teenust kasutab. Projekt realiseeritakse kasutades ASP.NET MVC Web API tehnoloogiat.&lt;br /&gt;
&lt;br /&gt;
Esialgne rakenduse ülesehituse skeem:&lt;br /&gt;
&lt;br /&gt;
[[File:STRUKTUUR.png]]&lt;br /&gt;
&lt;br /&gt;
==== Klientrakenduse funktsionaalsus:====&lt;br /&gt;
Klientprogramm võimaldab kasutajal hallata oma kasutajaprofiili, lisada, muuta ja vaadata oma virtuaalseid arvuteid ja nende komponente.&lt;br /&gt;
Veebiklient suhtleb serveriga üle API.&lt;br /&gt;
Sisselogimisel küsitakse kasutajalt kasutajanime ja parooli, seejärel üritab rakendus kasutajat autentida. &lt;br /&gt;
Eduka autentimise korral kuvatakse antud kasutaja töölaud ning sünkroniseeritakse andmed serveriga.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse must-have funktsionaalsus:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Üldine&amp;lt;/b&amp;gt;&lt;br /&gt;
** Rakendus peab töötama online režiimis;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Kasutajate haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Peab olema võimalik kasutajaks registreerida (kasutajakonto olemasolu on vajalik andmete talletamiseks);&lt;br /&gt;
** Kasutaja peab saama sisse logida kasutajanime ja parooliga;&lt;br /&gt;
** Paroolile peavad rakenduma keerukusnõuded (nt 8 tähemärki);&lt;br /&gt;
** Kasutajatel peavad olema erinevad õiguste tasemed (minimaalselt tavakasutaja ja administraator);&lt;br /&gt;
*** Tavakasutaja saab hallata ainult iseenda virtuaalseid arvuteid;&lt;br /&gt;
*** Adminkasutaja saab lisada või muuta arvuti komponente;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Virtuaalsete arvutite haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Kasutaja peab saama lisada uusi virtuaalseid arvuteid;&lt;br /&gt;
** Kasutaja poolt lisatud arvutid peavad talle näha olema;&lt;br /&gt;
** Kasutaja peab saama oma arvutitele komponente lisada ja vahetada:&lt;br /&gt;
*** Komponendid on jagatud erinevatesse kategooriatesse: &lt;br /&gt;
**** keskseade/protsessor (CPU)&lt;br /&gt;
**** protsessori jahuti&lt;br /&gt;
**** emaplaat&lt;br /&gt;
**** muutmälu&lt;br /&gt;
**** graafikaseade (GPU)&lt;br /&gt;
**** toiteblokk&lt;br /&gt;
**** arvuti korpus&lt;br /&gt;
**** püsimälu.&lt;br /&gt;
*** Ühest kategooriast on võimalik valida ka mitu komponenti (nt mitu graafikaseadet)&lt;br /&gt;
*** Kui kasutaja valib mõne komponendi, siis see piirab automaatselt tema võimalusi valida ainult juba valitud komponentidega kokkusobivaid teisi komponente.&lt;br /&gt;
*** Kui juba valitud komponent muutub mitte kokku sobivaks, siis antakse sellest kasutajale teada&lt;br /&gt;
*** Mitte kokkusobivate komponentidega arvutit salvestada ei ole võimalik&lt;br /&gt;
*** Komponente on võimalik nende omaduste põhjal sorteerida ja filtreerida&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Komponentide haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Komponent peab olema lisatav administraator kasutaja (kuid mitte tavakasutaja) poolt&lt;br /&gt;
** Juba loodud ja kinnitatud komponendi omadusi muuta ei saa&lt;br /&gt;
** Komponendi saab märkida eemaldatuks:&lt;br /&gt;
*** Eemaldatud komponente uute arvutite komplekteerimisel ei kuvata&lt;br /&gt;
*** Eemaldatud komponentidega juba komplekteeritud arvutite puhul kuvatakse kasutajale, et komponent pole enam saadaval&lt;br /&gt;
** Komponendile saab lisada tingimusi:&lt;br /&gt;
*** Tingimused määravad milliste komponentidega antud komponent koos on võimeline töötama&lt;br /&gt;
*** Tingimuseks võib olla ka loodava virtuaalse arvuti mingi parameeter (nt voolutarve)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse nice-to-have funktsionaalsus:&#039;&#039;&#039;&lt;br /&gt;
* Oma komplekteeritud arvuti jagamine&lt;br /&gt;
* Komponentide sorteerimine vastavalt populaarsusele (st kasutamine arvutites)&lt;br /&gt;
* Kasutaja parooli nullimine e-maili kinnituse kaudu&lt;br /&gt;
* Kasutajakonto kustutamine&lt;br /&gt;
* Kasutajakonto andmete muutmine ja lisainfo talletamise võimalus&lt;br /&gt;
&lt;br /&gt;
==== Serveri funktsionaalsus ====&lt;br /&gt;
&amp;lt;b&amp;gt;Serveri must-have funktsionaalsus&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Server peab toetama kõiki klientrakenduse must-have nõudeid. &lt;br /&gt;
* Serveris tuleb logida olulisemaid kasutajate poolt klientrakenduses tehtud toiminguid (sisse logimine, konto lukustumine, virtuaalse arvuti lisamine jne.);&lt;br /&gt;
* Kasutaja blokeerimine (ajutine), kui kasutaja on ennast püüdnud autentida vale parooliga enam kui 8 korda.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Serveri nice-to-have funktsionaalsus&amp;lt;/b&amp;gt;&lt;br /&gt;
* Kasutaja poolt sisestatud e-maili kinnitamine (kinnitava e-maili saatmine) kasutaja loomisel.&lt;br /&gt;
&lt;br /&gt;
=== Andmebaasi skeem ===&lt;br /&gt;
Infomüra vähendamiseks on andmebaasiskeem realiseeritud selliselt, et tabelites on ainult võtmed. Skeemist välja jäetud atribuudid (graafikakaardi pikkus jne) ei ole olulised analüüsi seisukohast.&lt;br /&gt;
&lt;br /&gt;
[[File:ANDMEBAAS.png]]&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 3: Klientrakendus =&lt;br /&gt;
= (b)logi =&lt;br /&gt;
&lt;br /&gt;
* 16/04/2017: Veebirakenduse analüüsi kondikava&lt;br /&gt;
* 27/03/2017: Tehtud retsensioonid meeskondadele [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR DevHelpVR] ja [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Ninjas_in_pyjamas]&lt;br /&gt;
* 27/03/2017: XML ja XSD parandatud ja täiendatud vastavalt meeskonna JRT tagasisidele https://wiki.itcollege.ee/index.php/JRT#Retsensioon_JRT&lt;br /&gt;
* 20/03/2017: Loodud Wiki leht, jagatud ülesanded&lt;br /&gt;
* 20/03/2017: Projekti esimene osa valmis&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=120186</id>
		<title>PC KartKicker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=120186"/>
		<updated>2017-04-17T13:05:49Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Klient: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
* Jan Eerik&lt;br /&gt;
&lt;br /&gt;
= Idee =&lt;br /&gt;
&lt;br /&gt;
Käesolev veebirakendus on asendamatu abimees arvuti kokkupanekul (võrdlemisi tugevalt inspireeritud https://pcpartpicker.com).&lt;br /&gt;
&lt;br /&gt;
Kuna teatavasti vajab arvuti töötamiseks kindlaid juppe mingis aktsepteeritud konfiguratsioonis, võimaldab meie rakendus välistada mitteühilduva raudvara &amp;quot;jõuga&amp;quot; ühildamist ja abistab kasutajal optimaalse konfiguratsiooni valimist.&lt;br /&gt;
&lt;br /&gt;
= Põhiline funktsionaalsus =&lt;br /&gt;
&lt;br /&gt;
* Kasutaja saab lisada üks kuni mitu arvutiskeemi&lt;br /&gt;
* Skeemile saab hakata ükshaaval lisama juppe (emaplaat, protsessor, mälud jne)&lt;br /&gt;
* Iga kord kui mingi jupp skeemi lisatakse, kitsendab see ülejäänud juppide valikut - näiteks LGA1151 liidesega emaplaadile ei õnnestu lisada AMD protsessorit jne&lt;br /&gt;
* Nii pooleliolevaid kui valminud skeeme saab salvestada&lt;br /&gt;
* Igal jupil on oma vaade koos tehnilise infoga&lt;br /&gt;
&lt;br /&gt;
= Nice to have =&lt;br /&gt;
&lt;br /&gt;
* Parima hinna kuvamine (nt Amazon, Newegg)&lt;br /&gt;
* Komponentide võrdlus&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 1: XML =&lt;br /&gt;
&lt;br /&gt;
== Teema ==&lt;br /&gt;
Uute arvutikomponentide olemasolevatesse kategooriatesse lisamiseks kasutab administraator ankeeti, mille salvestamisel ja andmete serverisse edastamiseks tekitatakse järgmine XML, kus on võimalik korraga suur hulk erinevaid arvutikomponente lisada, aga võib ka ainult ühe komponendi korraga saata.&lt;br /&gt;
&lt;br /&gt;
== XML==&lt;br /&gt;
&amp;lt;pre&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;components&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cases&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;NZXT&amp;quot; name=&amp;quot;S340&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;3&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;364&amp;quot; maxCpuHeight=&amp;quot;161&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;red&amp;quot; price=&amp;quot;66.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Deepcool&amp;quot; name=&amp;quot;TESSERACT SW&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;2&amp;quot; bay3=&amp;quot;4&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;light blue&amp;quot; price=&amp;quot;38.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Xion&amp;quot; name =&amp;quot;XON-310_BK&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;1&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;22.98&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;750D&amp;quot; type=&amp;quot;Full tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;3&amp;quot; bay3=&amp;quot;6&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;450&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;149.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
  &amp;lt;/cases&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpus&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.2&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;74&amp;quot; price=&amp;quot;327.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.8&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;69&amp;quot; price=&amp;quot;233.89&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.0&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;71&amp;quot; price=&amp;quot;316.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.5&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;61&amp;quot; price=&amp;quot;219.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;E5-2699 V3&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Xeon&amp;quot; family=&amp;quot;Haswell&amp;quot; socket=&amp;quot;LGA2011-3&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;18&amp;quot; threads=&amp;quot;36&amp;quot; ecc=&amp;quot;true&amp;quot; speed=&amp;quot;2.3&amp;quot; TDP=&amp;quot;145&amp;quot; lithography=&amp;quot;22&amp;quot; maxPowerDraw=&amp;quot;120&amp;quot; price=&amp;quot;3410.46&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;AMD&amp;quot; name=&amp;quot;1800X&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Ryzen 7&amp;quot; family=&amp;quot;Ryzen&amp;quot; socket=&amp;quot;AM4&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;8&amp;quot; threads=&amp;quot;16&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.6&amp;quot; TDP=&amp;quot;95&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;82&amp;quot; price=&amp;quot;469.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
  &amp;lt;/cpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpucoolers&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Cooler Master&amp;quot; name=&amp;quot;Hyper 212 EVO&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;1&amp;quot; height=&amp;quot;159&amp;quot; price=&amp;quot;24.88&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA775&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;H100i v2&amp;quot; liquid=&amp;quot;true&amp;quot; rad=&amp;quot;240&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;&amp;quot; price=&amp;quot;99.99&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Noctua&amp;quot; name=&amp;quot;NH-D15&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;165&amp;quot; price=&amp;quot;85.49&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
  &amp;lt;/cpucoolers&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;gpus&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;PowerColor&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX460&amp;quot; series=&amp;quot;Red Dragon&amp;quot; vram=&amp;quot;2&amp;quot; psuPin=&amp;quot;&amp;quot; length=&amp;quot;226&amp;quot; maxPowerDraw=&amp;quot;130&amp;quot; price=&amp;quot;73.98&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;Sapphire&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX480&amp;quot; series=&amp;quot;Nitro+&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;8&amp;quot; length=&amp;quot;240&amp;quot; maxPowerDraw=&amp;quot;150&amp;quot; price=&amp;quot;253.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;MSI&amp;quot; brandname=&amp;quot;Geforce&amp;quot; codename=&amp;quot;GTX1070&amp;quot; series=&amp;quot;Quick Silver OC&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;6+8&amp;quot; length=&amp;quot;279&amp;quot; maxPowerDraw=&amp;quot;170&amp;quot; price=&amp;quot;409.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
  &amp;lt;/gpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;memorychips&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Kingston&amp;quot; name=&amp;quot;ValueRAM&amp;quot; type=&amp;quot;DIMM&amp;quot; rank=&amp;quot;single&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;2133&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;yes&amp;quot; price=&amp;quot;67.58&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;Dominator Platinum&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;3000&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;2&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;123.25&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;ADATA&amp;quot; name=&amp;quot;&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR3&amp;quot; speed=&amp;quot;1600&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;88.29&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
  &amp;lt;/memorychips&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;motherboards&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Z170-A&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;Z170&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3400&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;152.99&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;ASRock&amp;quot; name=&amp;quot;H110M-HDS&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; chipset=&amp;quot;H110&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;2&amp;quot; maxMemory=&amp;quot;32&amp;quot; maxMemorySpeed=&amp;quot;2133&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;37.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Prime X370-PRO&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;X370&amp;quot; socket=&amp;quot;AM4&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3200&amp;quot; sata3=&amp;quot;8&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;162.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
  &amp;lt;/motherboards&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;psus&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;EVGA&amp;quot; name=&amp;quot;SuperNOVA 650&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;650&amp;quot; eff80plus=&amp;quot;gold&amp;quot; modular=&amp;quot;full&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;be Quiet!&amp;quot; name=&amp;quot;Pure Power L8 600W&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;600&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;no&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;CX550M&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;550&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;semi&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;2&amp;quot; price=&amp;quot;43.98&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
  &amp;lt;/psus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;storages&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;850 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;2048&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;823.14&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Intel&amp;quot; name=&amp;quot;DC P3608&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;4096&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;pcie8x&amp;quot; formFactor=&amp;quot;pcie&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;8867.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;960 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;m.2&amp;quot; formFactor=&amp;quot;m.2-2280&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;629.95&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Western Digital&amp;quot; name=&amp;quot;Black&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;6144&amp;quot; cache=&amp;quot;128&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;279.00&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Seagate&amp;quot; name=&amp;quot;BarraCuda Pro&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;10240&amp;quot; cache=&amp;quot;256&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;429.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Hitachi&amp;quot; name=&amp;quot;Travelstar&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;32&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;53.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
  &amp;lt;/storages&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/components&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML skeem (XSD) ==&lt;br /&gt;
&amp;lt;pre&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;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;cases&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;case&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay5&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psu&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxGpuLength&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxCpuHeight&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;primaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;secondaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cooler&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;family&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;iGPU&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cores&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;threads&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ecc&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;TDP&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;lithography&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpucoolers&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;sockets&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;liquid&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rad&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;fans&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;height&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;gpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;gpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brandname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;codename&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;vram&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psuPin&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;length&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;memorychips&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;memorychip&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rank&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cas&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;gen&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;moduleSize&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modules&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ECC&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;motherboards&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;motherboard&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;chipset&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memoryType&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memorySlots&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemory&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemorySpeed&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;video&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;sata3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ethernet&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;usb3&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;psus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;psu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;wattage&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;eff80plus&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modular&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6p2&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;storages&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;storage&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;capacity&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cache&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;interface&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rpm&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 1 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added computer parts:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;child::*/child::*&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 2 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added CPU coolers:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;cpucoolers/cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
== XML retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR Talk:DevHelpVR] &amp;lt;br&amp;gt;&lt;br /&gt;
XML failide retsensioon meeskonnale Ninjas_in_pyjamas, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Talk:Ninjas_in_pyjamas]&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 2: Veebirakendus =&lt;br /&gt;
== Analüüs == &lt;br /&gt;
Vastavalt klientrakenduse päringule annab veebirakendus andmebaasis oleva informatsiooni põhjal JSON kujul vastuse kliendile. Klientrakenduse funktsionaalsus ja andmebaasi skeem on mõlemad kirjeldatud allpool. Veebirakendus suudab anda komponentide kategooriate nimekirja, ühe kategooria komponentide nimekirja, nime järgi otsingu tulemuste komponentide nimekirja, konkreetse komponendi detailse informatsiooni, jpm.&lt;br /&gt;
&lt;br /&gt;
=== Mõisted ===&lt;br /&gt;
&#039;&#039;&#039;WIP&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Rakenduse kirjeldus (kogu süsteem, teenus+klient) ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Lühidalt:====&lt;br /&gt;
Meil on lauaarvutite komplekteerimise infosüsteem. Meie klientideks on inimesed kes kaaluvad lauaarvuti ostmist ja kes soovivad enne lauaarvuti või selle komponentide ostmist enda jaoks kogu protseduuri põhjalikult läbi mõelda. Süsteem võimaldab klientidel luua virtuaalse lauaarvuti ja tuvastab mitteühilduvad komponendid ning aitab seega vältida erinevaid probleeme, millega kaasneks aja- ja rahakulu.&lt;br /&gt;
&lt;br /&gt;
====Nüansid:====&lt;br /&gt;
Kliendid saavad ennast meie süsteemis registreerida kasutajateks. Üks füüsiline isik võib teha endale teha ükskõik kui palju kasutajaid, meil ei pea olema päriselt olemasoleva isiku ja süsteemi kasutaja vahel üks-ühest seost. Rakenduse kasutamiseks ei ole kohustuslik serveris konto loomine, klient saab virtuaalse arvuti luua ilma kasutajakontota, aga see ei säilu pärast sessiooni lõppemist.&lt;br /&gt;
&lt;br /&gt;
Iga kasutaja võib luua uue virtuaalse lauaarvuti, sellele nimetuse panna ja see seotakse automaatselt tema kasutajakontoga. Igale virtuaalsele arvutile võib lisada komponente. Lauaarvuti põhilisteks komponentideks on keskseade/protsessor (CPU), protsessori jahuti, emaplaat, muutmälu, graafikaseade (GPU), toiteblokk, arvuti korpus ja püsimälu.&lt;br /&gt;
&lt;br /&gt;
Iga protsessori generatsioon on ühilduv ainult kindlate emaplaadi kiipseadmete komplektidega (chipset) ja tüüpiliselt on emaplaadi protsessori pesa (socket) see, millest lähtuda emaplaadi ja protsessori ühilduvuse kindlaks tegemisel. Protsessori pesaga ühilduvus on peamine parameeter ka protsessori jahuti valikul, aga kui emaplaadil on ainult ühte tüüpi pesa ja protsessor sobib ainult ühte kindlasse pessa, siis jahutid on üldjuhul sobivad mitmete erinevate pesadega. Samuti ühilduvad iga protsessor ja emaplaat ainult spetsiifiliste muutmälu generatsioonidega. Emaplaadid toetavad muutmälu kindla taktsageduseni, kiirema taktsagedusega mälukiipe saab siiski kasutada, need töötavad lihtsalt emaplaadi poolt lubatud maksimaale taktsagedusega, mitte muutmälu kiibi maksimaalse taktsagedusega. On olemas emaplaate, mis toetavat mitut protsessorit.&lt;br /&gt;
&lt;br /&gt;
Muutmälu võib olla lauaarvutis üks kiip, aga võib ka rohkem. Mitme kiibi korral peaks need olema identsed või identsete näitajatega.&lt;br /&gt;
Osade protsessoritega on jahuti karbis kaasas, teistel ei ole. Tänapäeva lauaarvutite protsessorid ilma jahutita ei ole töövõimelised. Mõned protsessorid ja emaplaadid sisaldavad graafikaseadet. Diskreetne graafikaseade on üldjuhul võimekam protsessori või emaplaadiga kaasasolevast, seega on tavaline, et arvutile lisatakse diskreetne graafikaseade isegi kui sisene graafikaseade on juba olemas.&lt;br /&gt;
&lt;br /&gt;
Emaplaatidel, toiteblokkidel ja arvuti korpustel on mitmed suuruse standardid. Suured (ATX) emaplaadid ja toiteblokid ei mahu väikesesse (microATX) korpusesse. Mõned korpused toetavad väikest emaplaati, samas suurt toiteblokki ja teoreetiliselt on võimalik ka vastupidine olukord.&lt;br /&gt;
&lt;br /&gt;
Arvuti korpus toetab protsessori jahutust ainult kuni teatava jahuti kõrguseni ja diskreetse graafikaseadme puhul ainult teatud seadme pikkuseni. Mõned korpused sisaldavad toiteblokki.&lt;br /&gt;
&lt;br /&gt;
Erinevatel diskreetsetel graafikaseadmetel on erinevad nõuded toitele, osad saavad oma toite ainult emaplaadi liidese kaudu, teistel on vaja ühte või rohkemat kaablit toiteblokist. Graafikaseadmeid võib lauaarvutis olla mitmeid, ka mitu ühesugust.&lt;br /&gt;
&lt;br /&gt;
Toitebloki puhul peab toitebloki võimsus katma kõigi teiste komponentide vajaduse varuga ja diskreetse graafikaseadme korral peab toiteblokil olema selle toiteks piisavalt õigeid kaableid.&lt;br /&gt;
&lt;br /&gt;
====Projekti struktuur:====&lt;br /&gt;
Rakendus koosneb kahest põhilisest osast: veebiteenus ja klient-rakendus, mis seda teenust kasutab. Projekt realiseeritakse kasutades ASP.NET MVC Web API tehnoloogiat.&lt;br /&gt;
&lt;br /&gt;
Esialgne rakenduse ülesehituse skeem:&lt;br /&gt;
&lt;br /&gt;
[[File:STRUKTUUR.png]]&lt;br /&gt;
&lt;br /&gt;
==== Klientrakenduse funktsionaalsus:====&lt;br /&gt;
Klientprogramm võimaldab kasutajal hallata oma kasutajaprofiili, lisada, muuta ja vaadata oma virtuaalseid arvuteid ja nende komponente.&lt;br /&gt;
Veebiklient suhtleb serveriga üle API.&lt;br /&gt;
Sisselogimisel küsitakse kasutajalt kasutajanime ja parooli, seejärel üritab rakendus kasutajat autentida. &lt;br /&gt;
Eduka autentimise korral kuvatakse antud kasutaja töölaud ning sünkroniseeritakse andmed serveriga.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse must-have funktsionaalsus:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Üldine&amp;lt;/b&amp;gt;&lt;br /&gt;
** Rakendus peab töötama online režiimis;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Kasutajate haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Peab olema võimalik kasutajaks registreerida (kasutajakonto olemasolu on vajalik andmete talletamiseks);&lt;br /&gt;
** Kasutaja peab saama sisse logida kasutajanime ja parooliga;&lt;br /&gt;
** Paroolile peavad rakenduma keerukusnõuded (nt 8 tähemärki);&lt;br /&gt;
** Kasutajatel peavad olema erinevad õiguste tasemed (minimaalselt tavakasutaja ja administraator);&lt;br /&gt;
*** Tavakasutaja saab hallata ainult iseenda virtuaalseid arvuteid;&lt;br /&gt;
*** Adminkasutaja saab lisada või muuta arvuti komponente;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Virtuaalsete arvutite haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Kasutaja peab saama lisada uusi virtuaalseid arvuteid;&lt;br /&gt;
** Kasutaja poolt lisatud arvutid peavad talle näha olema;&lt;br /&gt;
** Kasutaja peab saama oma arvutitele komponente lisada ja vahetada:&lt;br /&gt;
*** Komponendid on jagatud erinevatesse kategooriatesse: &lt;br /&gt;
**** keskseade/protsessor (CPU)&lt;br /&gt;
**** protsessori jahuti&lt;br /&gt;
**** emaplaat&lt;br /&gt;
**** muutmälu&lt;br /&gt;
**** graafikaseade (GPU)&lt;br /&gt;
**** toiteblokk&lt;br /&gt;
**** arvuti korpus&lt;br /&gt;
**** püsimälu.&lt;br /&gt;
*** Ühest kategooriast on võimalik valida ka mitu komponenti (nt mitu graafikaseadet)&lt;br /&gt;
*** Kui kasutaja valib mõne komponendi, siis see piirab automaatselt tema võimalusi valida ainult juba valitud komponentidega kokkusobivaid teisi komponente.&lt;br /&gt;
*** Kui juba valitud komponent muutub mitte kokku sobivaks, siis antakse sellest kasutajale teada&lt;br /&gt;
*** Mitte kokkusobivate komponentidega arvutit salvestada ei ole võimalik&lt;br /&gt;
*** Komponente on võimalik nende omaduste põhjal sorteerida ja filtreerida&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Komponentide haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Komponent peab olema lisatav administraator kasutaja (kuid mitte tavakasutaja) poolt&lt;br /&gt;
** Juba loodud ja kinnitatud komponendi omadusi muuta ei saa&lt;br /&gt;
** Komponendi saab märkida eemaldatuks:&lt;br /&gt;
*** Eemaldatud komponente uute arvutite komplekteerimisel ei kuvata&lt;br /&gt;
*** Eemaldatud komponentidega juba komplekteeritud arvutite puhul kuvatakse kasutajale, et komponent pole enam saadaval&lt;br /&gt;
** Komponendile saab lisada tingimusi:&lt;br /&gt;
*** Tingimused määravad milliste komponentidega antud komponent koos on võimeline töötama&lt;br /&gt;
*** Tingimuseks võib olla ka loodava virtuaalse arvuti mingi parameeter (nt voolutarve)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse nice-to-have funktsionaalsus:&#039;&#039;&#039;&lt;br /&gt;
* Oma komplekteeritud arvuti jagamine&lt;br /&gt;
* Komponentide sorteerimine vastavalt populaarsusele (st kasutamine arvutites)&lt;br /&gt;
* Kasutaja parooli nullimine e-maili kinnituse kaudu&lt;br /&gt;
* Kasutajakonto kustutamine&lt;br /&gt;
* Kasutajakonto andmete muutmine ja lisainfo talletamise võimalus&lt;br /&gt;
&lt;br /&gt;
==== Server ====&lt;br /&gt;
&amp;lt;b&amp;gt;Serveri must-have funktsionaalsus&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Server peab toetama kõiki klientrakenduse must-have nõudeid. &lt;br /&gt;
* Serveris tuleb logida olulisemaid kasutajate poolt klientrakenduses tehtud toiminguid (sisse logimine, konto lukustumine, virtuaalse arvuti lisamine jne.);&lt;br /&gt;
* Kasutaja blokeerimine (ajutine), kui kasutaja on ennast püüdnud autentida vale parooliga enam kui 8 korda.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Serveri nice-to-have funktsionaalsus&amp;lt;/b&amp;gt;&lt;br /&gt;
* Kasutaja poolt sisestatud e-maili kinnitamine (kinnitava e-maili saatmine) kasutaja loomisel.&lt;br /&gt;
&lt;br /&gt;
=== Andmebaasi skeem ===&lt;br /&gt;
Infomüra vähendamiseks on andmebaasiskeem realiseeritud selliselt, et tabelites on ainult võtmed. Skeemist välja jäetud atribuudid (graafikakaardi pikkus jne) ei ole olulised analüüsi seisukohast.&lt;br /&gt;
&lt;br /&gt;
[[File:ANDMEBAAS.png]]&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 3: Klientrakendus =&lt;br /&gt;
= (b)logi =&lt;br /&gt;
&lt;br /&gt;
* 16/04/2017: Veebirakenduse analüüsi kondikava&lt;br /&gt;
* 27/03/2017: Tehtud retsensioonid meeskondadele [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR DevHelpVR] ja [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Ninjas_in_pyjamas]&lt;br /&gt;
* 27/03/2017: XML ja XSD parandatud ja täiendatud vastavalt meeskonna JRT tagasisidele https://wiki.itcollege.ee/index.php/JRT#Retsensioon_JRT&lt;br /&gt;
* 20/03/2017: Loodud Wiki leht, jagatud ülesanded&lt;br /&gt;
* 20/03/2017: Projekti esimene osa valmis&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=120185</id>
		<title>PC KartKicker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=120185"/>
		<updated>2017-04-17T13:05:01Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
* Jan Eerik&lt;br /&gt;
&lt;br /&gt;
= Idee =&lt;br /&gt;
&lt;br /&gt;
Käesolev veebirakendus on asendamatu abimees arvuti kokkupanekul (võrdlemisi tugevalt inspireeritud https://pcpartpicker.com).&lt;br /&gt;
&lt;br /&gt;
Kuna teatavasti vajab arvuti töötamiseks kindlaid juppe mingis aktsepteeritud konfiguratsioonis, võimaldab meie rakendus välistada mitteühilduva raudvara &amp;quot;jõuga&amp;quot; ühildamist ja abistab kasutajal optimaalse konfiguratsiooni valimist.&lt;br /&gt;
&lt;br /&gt;
= Põhiline funktsionaalsus =&lt;br /&gt;
&lt;br /&gt;
* Kasutaja saab lisada üks kuni mitu arvutiskeemi&lt;br /&gt;
* Skeemile saab hakata ükshaaval lisama juppe (emaplaat, protsessor, mälud jne)&lt;br /&gt;
* Iga kord kui mingi jupp skeemi lisatakse, kitsendab see ülejäänud juppide valikut - näiteks LGA1151 liidesega emaplaadile ei õnnestu lisada AMD protsessorit jne&lt;br /&gt;
* Nii pooleliolevaid kui valminud skeeme saab salvestada&lt;br /&gt;
* Igal jupil on oma vaade koos tehnilise infoga&lt;br /&gt;
&lt;br /&gt;
= Nice to have =&lt;br /&gt;
&lt;br /&gt;
* Parima hinna kuvamine (nt Amazon, Newegg)&lt;br /&gt;
* Komponentide võrdlus&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 1: XML =&lt;br /&gt;
&lt;br /&gt;
== Teema ==&lt;br /&gt;
Uute arvutikomponentide olemasolevatesse kategooriatesse lisamiseks kasutab administraator ankeeti, mille salvestamisel ja andmete serverisse edastamiseks tekitatakse järgmine XML, kus on võimalik korraga suur hulk erinevaid arvutikomponente lisada, aga võib ka ainult ühe komponendi korraga saata.&lt;br /&gt;
&lt;br /&gt;
== XML==&lt;br /&gt;
&amp;lt;pre&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;components&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cases&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;NZXT&amp;quot; name=&amp;quot;S340&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;3&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;364&amp;quot; maxCpuHeight=&amp;quot;161&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;red&amp;quot; price=&amp;quot;66.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Deepcool&amp;quot; name=&amp;quot;TESSERACT SW&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;2&amp;quot; bay3=&amp;quot;4&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;light blue&amp;quot; price=&amp;quot;38.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Xion&amp;quot; name =&amp;quot;XON-310_BK&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;1&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;22.98&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;750D&amp;quot; type=&amp;quot;Full tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;3&amp;quot; bay3=&amp;quot;6&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;450&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;149.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
  &amp;lt;/cases&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpus&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.2&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;74&amp;quot; price=&amp;quot;327.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.8&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;69&amp;quot; price=&amp;quot;233.89&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.0&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;71&amp;quot; price=&amp;quot;316.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.5&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;61&amp;quot; price=&amp;quot;219.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;E5-2699 V3&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Xeon&amp;quot; family=&amp;quot;Haswell&amp;quot; socket=&amp;quot;LGA2011-3&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;18&amp;quot; threads=&amp;quot;36&amp;quot; ecc=&amp;quot;true&amp;quot; speed=&amp;quot;2.3&amp;quot; TDP=&amp;quot;145&amp;quot; lithography=&amp;quot;22&amp;quot; maxPowerDraw=&amp;quot;120&amp;quot; price=&amp;quot;3410.46&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;AMD&amp;quot; name=&amp;quot;1800X&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Ryzen 7&amp;quot; family=&amp;quot;Ryzen&amp;quot; socket=&amp;quot;AM4&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;8&amp;quot; threads=&amp;quot;16&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.6&amp;quot; TDP=&amp;quot;95&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;82&amp;quot; price=&amp;quot;469.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
  &amp;lt;/cpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpucoolers&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Cooler Master&amp;quot; name=&amp;quot;Hyper 212 EVO&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;1&amp;quot; height=&amp;quot;159&amp;quot; price=&amp;quot;24.88&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA775&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;H100i v2&amp;quot; liquid=&amp;quot;true&amp;quot; rad=&amp;quot;240&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;&amp;quot; price=&amp;quot;99.99&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Noctua&amp;quot; name=&amp;quot;NH-D15&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;165&amp;quot; price=&amp;quot;85.49&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
  &amp;lt;/cpucoolers&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;gpus&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;PowerColor&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX460&amp;quot; series=&amp;quot;Red Dragon&amp;quot; vram=&amp;quot;2&amp;quot; psuPin=&amp;quot;&amp;quot; length=&amp;quot;226&amp;quot; maxPowerDraw=&amp;quot;130&amp;quot; price=&amp;quot;73.98&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;Sapphire&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX480&amp;quot; series=&amp;quot;Nitro+&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;8&amp;quot; length=&amp;quot;240&amp;quot; maxPowerDraw=&amp;quot;150&amp;quot; price=&amp;quot;253.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;MSI&amp;quot; brandname=&amp;quot;Geforce&amp;quot; codename=&amp;quot;GTX1070&amp;quot; series=&amp;quot;Quick Silver OC&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;6+8&amp;quot; length=&amp;quot;279&amp;quot; maxPowerDraw=&amp;quot;170&amp;quot; price=&amp;quot;409.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
  &amp;lt;/gpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;memorychips&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Kingston&amp;quot; name=&amp;quot;ValueRAM&amp;quot; type=&amp;quot;DIMM&amp;quot; rank=&amp;quot;single&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;2133&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;yes&amp;quot; price=&amp;quot;67.58&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;Dominator Platinum&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;3000&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;2&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;123.25&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;ADATA&amp;quot; name=&amp;quot;&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR3&amp;quot; speed=&amp;quot;1600&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;88.29&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
  &amp;lt;/memorychips&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;motherboards&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Z170-A&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;Z170&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3400&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;152.99&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;ASRock&amp;quot; name=&amp;quot;H110M-HDS&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; chipset=&amp;quot;H110&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;2&amp;quot; maxMemory=&amp;quot;32&amp;quot; maxMemorySpeed=&amp;quot;2133&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;37.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Prime X370-PRO&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;X370&amp;quot; socket=&amp;quot;AM4&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3200&amp;quot; sata3=&amp;quot;8&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;162.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
  &amp;lt;/motherboards&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;psus&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;EVGA&amp;quot; name=&amp;quot;SuperNOVA 650&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;650&amp;quot; eff80plus=&amp;quot;gold&amp;quot; modular=&amp;quot;full&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;be Quiet!&amp;quot; name=&amp;quot;Pure Power L8 600W&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;600&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;no&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;CX550M&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;550&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;semi&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;2&amp;quot; price=&amp;quot;43.98&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
  &amp;lt;/psus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;storages&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;850 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;2048&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;823.14&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Intel&amp;quot; name=&amp;quot;DC P3608&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;4096&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;pcie8x&amp;quot; formFactor=&amp;quot;pcie&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;8867.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;960 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;m.2&amp;quot; formFactor=&amp;quot;m.2-2280&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;629.95&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Western Digital&amp;quot; name=&amp;quot;Black&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;6144&amp;quot; cache=&amp;quot;128&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;279.00&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Seagate&amp;quot; name=&amp;quot;BarraCuda Pro&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;10240&amp;quot; cache=&amp;quot;256&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;429.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Hitachi&amp;quot; name=&amp;quot;Travelstar&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;32&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;53.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
  &amp;lt;/storages&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/components&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML skeem (XSD) ==&lt;br /&gt;
&amp;lt;pre&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;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;cases&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;case&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay5&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psu&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxGpuLength&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxCpuHeight&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;primaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;secondaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cooler&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;family&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;iGPU&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cores&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;threads&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ecc&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;TDP&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;lithography&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpucoolers&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;sockets&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;liquid&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rad&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;fans&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;height&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;gpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;gpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brandname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;codename&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;vram&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psuPin&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;length&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;memorychips&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;memorychip&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rank&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cas&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;gen&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;moduleSize&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modules&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ECC&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;motherboards&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;motherboard&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;chipset&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memoryType&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memorySlots&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemory&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemorySpeed&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;video&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;sata3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ethernet&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;usb3&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;psus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;psu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;wattage&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;eff80plus&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modular&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6p2&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;storages&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;storage&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;capacity&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cache&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;interface&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rpm&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 1 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added computer parts:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;child::*/child::*&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 2 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added CPU coolers:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;cpucoolers/cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
== XML retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR Talk:DevHelpVR] &amp;lt;br&amp;gt;&lt;br /&gt;
XML failide retsensioon meeskonnale Ninjas_in_pyjamas, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Talk:Ninjas_in_pyjamas]&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 2: Veebirakendus =&lt;br /&gt;
== Analüüs == &lt;br /&gt;
Vastavalt klientrakenduse päringule annab veebirakendus andmebaasis oleva informatsiooni põhjal JSON kujul vastuse kliendile. Klientrakenduse funktsionaalsus ja andmebaasi skeem on mõlemad kirjeldatud allpool. Veebirakendus suudab anda komponentide kategooriate nimekirja, ühe kategooria komponentide nimekirja, nime järgi otsingu tulemuste komponentide nimekirja, konkreetse komponendi detailse informatsiooni, jpm.&lt;br /&gt;
&lt;br /&gt;
=== Mõisted ===&lt;br /&gt;
&#039;&#039;&#039;WIP&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Rakenduse kirjeldus (kogu süsteem, teenus+klient) ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Lühidalt:====&lt;br /&gt;
Meil on lauaarvutite komplekteerimise infosüsteem. Meie klientideks on inimesed kes kaaluvad lauaarvuti ostmist ja kes soovivad enne lauaarvuti või selle komponentide ostmist enda jaoks kogu protseduuri põhjalikult läbi mõelda. Süsteem võimaldab klientidel luua virtuaalse lauaarvuti ja tuvastab mitteühilduvad komponendid ning aitab seega vältida erinevaid probleeme, millega kaasneks aja- ja rahakulu.&lt;br /&gt;
&lt;br /&gt;
====Nüansid:====&lt;br /&gt;
Kliendid saavad ennast meie süsteemis registreerida kasutajateks. Üks füüsiline isik võib teha endale teha ükskõik kui palju kasutajaid, meil ei pea olema päriselt olemasoleva isiku ja süsteemi kasutaja vahel üks-ühest seost. Rakenduse kasutamiseks ei ole kohustuslik serveris konto loomine, klient saab virtuaalse arvuti luua ilma kasutajakontota, aga see ei säilu pärast sessiooni lõppemist.&lt;br /&gt;
&lt;br /&gt;
Iga kasutaja võib luua uue virtuaalse lauaarvuti, sellele nimetuse panna ja see seotakse automaatselt tema kasutajakontoga. Igale virtuaalsele arvutile võib lisada komponente. Lauaarvuti põhilisteks komponentideks on keskseade/protsessor (CPU), protsessori jahuti, emaplaat, muutmälu, graafikaseade (GPU), toiteblokk, arvuti korpus ja püsimälu.&lt;br /&gt;
&lt;br /&gt;
Iga protsessori generatsioon on ühilduv ainult kindlate emaplaadi kiipseadmete komplektidega (chipset) ja tüüpiliselt on emaplaadi protsessori pesa (socket) see, millest lähtuda emaplaadi ja protsessori ühilduvuse kindlaks tegemisel. Protsessori pesaga ühilduvus on peamine parameeter ka protsessori jahuti valikul, aga kui emaplaadil on ainult ühte tüüpi pesa ja protsessor sobib ainult ühte kindlasse pessa, siis jahutid on üldjuhul sobivad mitmete erinevate pesadega. Samuti ühilduvad iga protsessor ja emaplaat ainult spetsiifiliste muutmälu generatsioonidega. Emaplaadid toetavad muutmälu kindla taktsageduseni, kiirema taktsagedusega mälukiipe saab siiski kasutada, need töötavad lihtsalt emaplaadi poolt lubatud maksimaale taktsagedusega, mitte muutmälu kiibi maksimaalse taktsagedusega. On olemas emaplaate, mis toetavat mitut protsessorit.&lt;br /&gt;
&lt;br /&gt;
Muutmälu võib olla lauaarvutis üks kiip, aga võib ka rohkem. Mitme kiibi korral peaks need olema identsed või identsete näitajatega.&lt;br /&gt;
Osade protsessoritega on jahuti karbis kaasas, teistel ei ole. Tänapäeva lauaarvutite protsessorid ilma jahutita ei ole töövõimelised. Mõned protsessorid ja emaplaadid sisaldavad graafikaseadet. Diskreetne graafikaseade on üldjuhul võimekam protsessori või emaplaadiga kaasasolevast, seega on tavaline, et arvutile lisatakse diskreetne graafikaseade isegi kui sisene graafikaseade on juba olemas.&lt;br /&gt;
&lt;br /&gt;
Emaplaatidel, toiteblokkidel ja arvuti korpustel on mitmed suuruse standardid. Suured (ATX) emaplaadid ja toiteblokid ei mahu väikesesse (microATX) korpusesse. Mõned korpused toetavad väikest emaplaati, samas suurt toiteblokki ja teoreetiliselt on võimalik ka vastupidine olukord.&lt;br /&gt;
&lt;br /&gt;
Arvuti korpus toetab protsessori jahutust ainult kuni teatava jahuti kõrguseni ja diskreetse graafikaseadme puhul ainult teatud seadme pikkuseni. Mõned korpused sisaldavad toiteblokki.&lt;br /&gt;
&lt;br /&gt;
Erinevatel diskreetsetel graafikaseadmetel on erinevad nõuded toitele, osad saavad oma toite ainult emaplaadi liidese kaudu, teistel on vaja ühte või rohkemat kaablit toiteblokist. Graafikaseadmeid võib lauaarvutis olla mitmeid, ka mitu ühesugust.&lt;br /&gt;
&lt;br /&gt;
Toitebloki puhul peab toitebloki võimsus katma kõigi teiste komponentide vajaduse varuga ja diskreetse graafikaseadme korral peab toiteblokil olema selle toiteks piisavalt õigeid kaableid.&lt;br /&gt;
&lt;br /&gt;
====Projekti struktuur:====&lt;br /&gt;
Rakendus koosneb kahest põhilisest osast: veebiteenus ja klient-rakendus, mis seda teenust kasutab. Projekt realiseeritakse kasutades ASP.NET MVC Web API tehnoloogiat.&lt;br /&gt;
&lt;br /&gt;
Esialgne rakenduse ülesehituse skeem:&lt;br /&gt;
&lt;br /&gt;
[[File:STRUKTUUR.png]]&lt;br /&gt;
&lt;br /&gt;
==== Klient:====&lt;br /&gt;
Klientprogramm võimaldab kasutajal hallata oma kasutajaprofiili, lisada, muuta ja vaadata oma virtuaalseid arvuteid ja nende komponente.&lt;br /&gt;
Veebiklient suhtleb serveriga üle API.&lt;br /&gt;
Sisselogimisel küsitakse kasutajalt kasutajanime ja parooli, seejärel üritab rakendus kasutajat autentida. &lt;br /&gt;
Eduka autentimise korral kuvatakse antud kasutaja töölaud ning sünkroniseeritakse andmed serveriga.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse must-have funktsionaalsus:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Üldine&amp;lt;/b&amp;gt;&lt;br /&gt;
** Rakendus peab töötama online režiimis;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Kasutajate haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Peab olema võimalik kasutajaks registreerida (kasutajakonto olemasolu on vajalik andmete talletamiseks);&lt;br /&gt;
** Kasutaja peab saama sisse logida kasutajanime ja parooliga;&lt;br /&gt;
** Paroolile peavad rakenduma keerukusnõuded (nt 8 tähemärki);&lt;br /&gt;
** Kasutajatel peavad olema erinevad õiguste tasemed (minimaalselt tavakasutaja ja administraator);&lt;br /&gt;
*** Tavakasutaja saab hallata ainult iseenda virtuaalseid arvuteid;&lt;br /&gt;
*** Adminkasutaja saab lisada või muuta arvuti komponente;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Virtuaalsete arvutite haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Kasutaja peab saama lisada uusi virtuaalseid arvuteid;&lt;br /&gt;
** Kasutaja poolt lisatud arvutid peavad talle näha olema;&lt;br /&gt;
** Kasutaja peab saama oma arvutitele komponente lisada ja vahetada:&lt;br /&gt;
*** Komponendid on jagatud erinevatesse kategooriatesse: &lt;br /&gt;
**** keskseade/protsessor (CPU)&lt;br /&gt;
**** protsessori jahuti&lt;br /&gt;
**** emaplaat&lt;br /&gt;
**** muutmälu&lt;br /&gt;
**** graafikaseade (GPU)&lt;br /&gt;
**** toiteblokk&lt;br /&gt;
**** arvuti korpus&lt;br /&gt;
**** püsimälu.&lt;br /&gt;
*** Ühest kategooriast on võimalik valida ka mitu komponenti (nt mitu graafikaseadet)&lt;br /&gt;
*** Kui kasutaja valib mõne komponendi, siis see piirab automaatselt tema võimalusi valida ainult juba valitud komponentidega kokkusobivaid teisi komponente.&lt;br /&gt;
*** Kui juba valitud komponent muutub mitte kokku sobivaks, siis antakse sellest kasutajale teada&lt;br /&gt;
*** Mitte kokkusobivate komponentidega arvutit salvestada ei ole võimalik&lt;br /&gt;
*** Komponente on võimalik nende omaduste põhjal sorteerida ja filtreerida&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Komponentide haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Komponent peab olema lisatav administraator kasutaja (kuid mitte tavakasutaja) poolt&lt;br /&gt;
** Juba loodud ja kinnitatud komponendi omadusi muuta ei saa&lt;br /&gt;
** Komponendi saab märkida eemaldatuks:&lt;br /&gt;
*** Eemaldatud komponente uute arvutite komplekteerimisel ei kuvata&lt;br /&gt;
*** Eemaldatud komponentidega juba komplekteeritud arvutite puhul kuvatakse kasutajale, et komponent pole enam saadaval&lt;br /&gt;
** Komponendile saab lisada tingimusi:&lt;br /&gt;
*** Tingimused määravad milliste komponentidega antud komponent koos on võimeline töötama&lt;br /&gt;
*** Tingimuseks võib olla ka loodava virtuaalse arvuti mingi parameeter (nt voolutarve)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse nice-to-have funktsionaalsus:&#039;&#039;&#039;&lt;br /&gt;
* Oma komplekteeritud arvuti jagamine&lt;br /&gt;
* Komponentide sorteerimine vastavalt populaarsusele (st kasutamine arvutites)&lt;br /&gt;
* Kasutaja parooli nullimine e-maili kinnituse kaudu&lt;br /&gt;
* Kasutajakonto kustutamine&lt;br /&gt;
* Kasutajakonto andmete muutmine ja lisainfo talletamise võimalus&lt;br /&gt;
&lt;br /&gt;
==== Server ====&lt;br /&gt;
&amp;lt;b&amp;gt;Serveri must-have funktsionaalsus&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Server peab toetama kõiki klientrakenduse must-have nõudeid. &lt;br /&gt;
* Serveris tuleb logida olulisemaid kasutajate poolt klientrakenduses tehtud toiminguid (sisse logimine, konto lukustumine, virtuaalse arvuti lisamine jne.);&lt;br /&gt;
* Kasutaja blokeerimine (ajutine), kui kasutaja on ennast püüdnud autentida vale parooliga enam kui 8 korda.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Serveri nice-to-have funktsionaalsus&amp;lt;/b&amp;gt;&lt;br /&gt;
* Kasutaja poolt sisestatud e-maili kinnitamine (kinnitava e-maili saatmine) kasutaja loomisel.&lt;br /&gt;
&lt;br /&gt;
=== Andmebaasi skeem ===&lt;br /&gt;
Infomüra vähendamiseks on andmebaasiskeem realiseeritud selliselt, et tabelites on ainult võtmed. Skeemist välja jäetud atribuudid (graafikakaardi pikkus jne) ei ole olulised analüüsi seisukohast.&lt;br /&gt;
&lt;br /&gt;
[[File:ANDMEBAAS.png]]&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 3: Klientrakendus =&lt;br /&gt;
= (b)logi =&lt;br /&gt;
&lt;br /&gt;
* 16/04/2017: Veebirakenduse analüüsi kondikava&lt;br /&gt;
* 27/03/2017: Tehtud retsensioonid meeskondadele [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR DevHelpVR] ja [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Ninjas_in_pyjamas]&lt;br /&gt;
* 27/03/2017: XML ja XSD parandatud ja täiendatud vastavalt meeskonna JRT tagasisidele https://wiki.itcollege.ee/index.php/JRT#Retsensioon_JRT&lt;br /&gt;
* 20/03/2017: Loodud Wiki leht, jagatud ülesanded&lt;br /&gt;
* 20/03/2017: Projekti esimene osa valmis&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=120184</id>
		<title>PC KartKicker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=120184"/>
		<updated>2017-04-17T13:04:30Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Klient: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
* Jan Eerik&lt;br /&gt;
&lt;br /&gt;
= Idee =&lt;br /&gt;
&lt;br /&gt;
Käesolev veebirakendus on asendamatu abimees arvuti kokkupanekul (võrdlemisi tugevalt inspireeritud https://pcpartpicker.com).&lt;br /&gt;
&lt;br /&gt;
Kuna teatavasti vajab arvuti töötamiseks kindlaid juppe mingis aktsepteeritud konfiguratsioonis, võimaldab meie rakendus välistada mitteühilduva raudvara &amp;quot;jõuga&amp;quot; ühildamist ja abistab kasutajal optimaalse konfiguratsiooni valimist.&lt;br /&gt;
&lt;br /&gt;
= Põhiline funktsionaalsus =&lt;br /&gt;
&lt;br /&gt;
* Kasutaja saab lisada üks kuni mitu arvutiskeemi&lt;br /&gt;
* Skeemile saab hakata ükshaaval lisama juppe (emaplaat, protsessor, mälud jne)&lt;br /&gt;
* Iga kord kui mingi jupp skeemi lisatakse, kitsendab see ülejäänud juppide valikut - näiteks LGA1151 liidesega emaplaadile ei õnnestu lisada AMD protsessorit jne&lt;br /&gt;
* Nii pooleliolevaid kui valminud skeeme saab salvestada&lt;br /&gt;
* Igal jupil on oma vaade koos tehnilise infoga&lt;br /&gt;
&lt;br /&gt;
= Nice to have =&lt;br /&gt;
&lt;br /&gt;
* Parima hinna kuvamine (nt Amazon, Newegg)&lt;br /&gt;
* Komponentide võrdlus&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 1: XML =&lt;br /&gt;
&lt;br /&gt;
== Teema ==&lt;br /&gt;
Uute arvutikomponentide olemasolevatesse kategooriatesse lisamiseks kasutab administraator ankeeti, mille salvestamisel ja andmete serverisse edastamiseks tekitatakse järgmine XML, kus on võimalik korraga suur hulk erinevaid arvutikomponente lisada, aga võib ka ainult ühe komponendi korraga saata.&lt;br /&gt;
&lt;br /&gt;
== XML==&lt;br /&gt;
&amp;lt;pre&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;components&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cases&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;NZXT&amp;quot; name=&amp;quot;S340&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;3&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;364&amp;quot; maxCpuHeight=&amp;quot;161&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;red&amp;quot; price=&amp;quot;66.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Deepcool&amp;quot; name=&amp;quot;TESSERACT SW&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;2&amp;quot; bay3=&amp;quot;4&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;light blue&amp;quot; price=&amp;quot;38.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Xion&amp;quot; name =&amp;quot;XON-310_BK&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;1&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;22.98&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;750D&amp;quot; type=&amp;quot;Full tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;3&amp;quot; bay3=&amp;quot;6&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;450&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;149.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
  &amp;lt;/cases&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpus&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.2&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;74&amp;quot; price=&amp;quot;327.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.8&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;69&amp;quot; price=&amp;quot;233.89&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.0&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;71&amp;quot; price=&amp;quot;316.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.5&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;61&amp;quot; price=&amp;quot;219.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;E5-2699 V3&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Xeon&amp;quot; family=&amp;quot;Haswell&amp;quot; socket=&amp;quot;LGA2011-3&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;18&amp;quot; threads=&amp;quot;36&amp;quot; ecc=&amp;quot;true&amp;quot; speed=&amp;quot;2.3&amp;quot; TDP=&amp;quot;145&amp;quot; lithography=&amp;quot;22&amp;quot; maxPowerDraw=&amp;quot;120&amp;quot; price=&amp;quot;3410.46&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;AMD&amp;quot; name=&amp;quot;1800X&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Ryzen 7&amp;quot; family=&amp;quot;Ryzen&amp;quot; socket=&amp;quot;AM4&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;8&amp;quot; threads=&amp;quot;16&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.6&amp;quot; TDP=&amp;quot;95&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;82&amp;quot; price=&amp;quot;469.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
  &amp;lt;/cpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpucoolers&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Cooler Master&amp;quot; name=&amp;quot;Hyper 212 EVO&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;1&amp;quot; height=&amp;quot;159&amp;quot; price=&amp;quot;24.88&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA775&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;H100i v2&amp;quot; liquid=&amp;quot;true&amp;quot; rad=&amp;quot;240&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;&amp;quot; price=&amp;quot;99.99&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Noctua&amp;quot; name=&amp;quot;NH-D15&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;165&amp;quot; price=&amp;quot;85.49&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
  &amp;lt;/cpucoolers&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;gpus&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;PowerColor&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX460&amp;quot; series=&amp;quot;Red Dragon&amp;quot; vram=&amp;quot;2&amp;quot; psuPin=&amp;quot;&amp;quot; length=&amp;quot;226&amp;quot; maxPowerDraw=&amp;quot;130&amp;quot; price=&amp;quot;73.98&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;Sapphire&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX480&amp;quot; series=&amp;quot;Nitro+&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;8&amp;quot; length=&amp;quot;240&amp;quot; maxPowerDraw=&amp;quot;150&amp;quot; price=&amp;quot;253.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;MSI&amp;quot; brandname=&amp;quot;Geforce&amp;quot; codename=&amp;quot;GTX1070&amp;quot; series=&amp;quot;Quick Silver OC&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;6+8&amp;quot; length=&amp;quot;279&amp;quot; maxPowerDraw=&amp;quot;170&amp;quot; price=&amp;quot;409.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
  &amp;lt;/gpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;memorychips&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Kingston&amp;quot; name=&amp;quot;ValueRAM&amp;quot; type=&amp;quot;DIMM&amp;quot; rank=&amp;quot;single&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;2133&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;yes&amp;quot; price=&amp;quot;67.58&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;Dominator Platinum&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;3000&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;2&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;123.25&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;ADATA&amp;quot; name=&amp;quot;&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR3&amp;quot; speed=&amp;quot;1600&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;88.29&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
  &amp;lt;/memorychips&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;motherboards&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Z170-A&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;Z170&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3400&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;152.99&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;ASRock&amp;quot; name=&amp;quot;H110M-HDS&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; chipset=&amp;quot;H110&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;2&amp;quot; maxMemory=&amp;quot;32&amp;quot; maxMemorySpeed=&amp;quot;2133&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;37.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Prime X370-PRO&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;X370&amp;quot; socket=&amp;quot;AM4&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3200&amp;quot; sata3=&amp;quot;8&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;162.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
  &amp;lt;/motherboards&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;psus&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;EVGA&amp;quot; name=&amp;quot;SuperNOVA 650&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;650&amp;quot; eff80plus=&amp;quot;gold&amp;quot; modular=&amp;quot;full&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;be Quiet!&amp;quot; name=&amp;quot;Pure Power L8 600W&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;600&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;no&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;CX550M&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;550&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;semi&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;2&amp;quot; price=&amp;quot;43.98&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
  &amp;lt;/psus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;storages&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;850 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;2048&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;823.14&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Intel&amp;quot; name=&amp;quot;DC P3608&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;4096&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;pcie8x&amp;quot; formFactor=&amp;quot;pcie&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;8867.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;960 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;m.2&amp;quot; formFactor=&amp;quot;m.2-2280&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;629.95&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Western Digital&amp;quot; name=&amp;quot;Black&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;6144&amp;quot; cache=&amp;quot;128&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;279.00&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Seagate&amp;quot; name=&amp;quot;BarraCuda Pro&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;10240&amp;quot; cache=&amp;quot;256&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;429.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Hitachi&amp;quot; name=&amp;quot;Travelstar&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;32&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;53.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
  &amp;lt;/storages&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/components&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML skeem (XSD) ==&lt;br /&gt;
&amp;lt;pre&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;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;cases&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;case&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay5&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psu&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxGpuLength&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxCpuHeight&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;primaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;secondaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cooler&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;family&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;iGPU&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cores&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;threads&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ecc&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;TDP&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;lithography&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpucoolers&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;sockets&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;liquid&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rad&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;fans&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;height&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;gpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;gpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brandname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;codename&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;vram&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psuPin&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;length&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;memorychips&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;memorychip&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rank&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cas&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;gen&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;moduleSize&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modules&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ECC&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;motherboards&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;motherboard&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;chipset&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memoryType&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memorySlots&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemory&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemorySpeed&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;video&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;sata3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ethernet&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;usb3&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;psus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;psu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;wattage&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;eff80plus&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modular&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6p2&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;storages&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;storage&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;capacity&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cache&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;interface&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rpm&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 1 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added computer parts:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;child::*/child::*&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 2 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added CPU coolers:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;cpucoolers/cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
== XML retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR Talk:DevHelpVR] &amp;lt;br&amp;gt;&lt;br /&gt;
XML failide retsensioon meeskonnale Ninjas_in_pyjamas, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Talk:Ninjas_in_pyjamas]&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 2: Veebirakendus =&lt;br /&gt;
== Analüüs == &lt;br /&gt;
Vastavalt klientrakenduse päringule annab veebirakendus andmebaasis oleva informatsiooni põhjal JSON kujul vastuse kliendile. Klientrakenduse funktsionaalsus ja andmebaasi skeem on mõlemad kirjeldatud allpool. Veebirakendus suudab anda komponentide kategooriate nimekirja, ühe kategooria komponentide nimekirja, nime järgi otsingu tulemuste komponentide nimekirja, konkreetse komponendi detailse informatsiooni, jpm.&lt;br /&gt;
&lt;br /&gt;
=== Mõisted ===&lt;br /&gt;
&#039;&#039;&#039;WIP&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Rakenduse kirjeldus (kogu süsteem, teenus+klient) ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Lühidalt:====&lt;br /&gt;
Meil on lauaarvutite komplekteerimise infosüsteem. Meie klientideks on inimesed kes kaaluvad lauaarvuti ostmist ja kes soovivad enne lauaarvuti või selle komponentide ostmist enda jaoks kogu protseduuri põhjalikult läbi mõelda. Süsteem võimaldab klientidel luua virtuaalse lauaarvuti ja tuvastab mitteühilduvad komponendid ning aitab seega vältida erinevaid probleeme, millega kaasneks aja- ja rahakulu.&lt;br /&gt;
&lt;br /&gt;
====Nüansid:====&lt;br /&gt;
Kliendid saavad ennast meie süsteemis registreerida kasutajateks. Üks füüsiline isik võib teha endale teha ükskõik kui palju kasutajaid, meil ei pea olema päriselt olemasoleva isiku ja süsteemi kasutaja vahel üks-ühest seost. Rakenduse kasutamiseks ei ole kohustuslik serveris konto loomine, klient saab virtuaalse arvuti luua ilma kasutajakontota, aga see ei säilu pärast sessiooni lõppemist.&lt;br /&gt;
&lt;br /&gt;
Iga kasutaja võib luua uue virtuaalse lauaarvuti, sellele nimetuse panna ja see seotakse automaatselt tema kasutajakontoga. Igale virtuaalsele arvutile võib lisada komponente. Lauaarvuti põhilisteks komponentideks on keskseade/protsessor (CPU), protsessori jahuti, emaplaat, muutmälu, graafikaseade (GPU), toiteblokk, arvuti korpus ja püsimälu.&lt;br /&gt;
&lt;br /&gt;
Iga protsessori generatsioon on ühilduv ainult kindlate emaplaadi kiipseadmete komplektidega (chipset) ja tüüpiliselt on emaplaadi protsessori pesa (socket) see, millest lähtuda emaplaadi ja protsessori ühilduvuse kindlaks tegemisel. Protsessori pesaga ühilduvus on peamine parameeter ka protsessori jahuti valikul, aga kui emaplaadil on ainult ühte tüüpi pesa ja protsessor sobib ainult ühte kindlasse pessa, siis jahutid on üldjuhul sobivad mitmete erinevate pesadega. Samuti ühilduvad iga protsessor ja emaplaat ainult spetsiifiliste muutmälu generatsioonidega. Emaplaadid toetavad muutmälu kindla taktsageduseni, kiirema taktsagedusega mälukiipe saab siiski kasutada, need töötavad lihtsalt emaplaadi poolt lubatud maksimaale taktsagedusega, mitte muutmälu kiibi maksimaalse taktsagedusega. On olemas emaplaate, mis toetavat mitut protsessorit.&lt;br /&gt;
&lt;br /&gt;
Muutmälu võib olla lauaarvutis üks kiip, aga võib ka rohkem. Mitme kiibi korral peaks need olema identsed või identsete näitajatega.&lt;br /&gt;
Osade protsessoritega on jahuti karbis kaasas, teistel ei ole. Tänapäeva lauaarvutite protsessorid ilma jahutita ei ole töövõimelised. Mõned protsessorid ja emaplaadid sisaldavad graafikaseadet. Diskreetne graafikaseade on üldjuhul võimekam protsessori või emaplaadiga kaasasolevast, seega on tavaline, et arvutile lisatakse diskreetne graafikaseade isegi kui sisene graafikaseade on juba olemas.&lt;br /&gt;
&lt;br /&gt;
Emaplaatidel, toiteblokkidel ja arvuti korpustel on mitmed suuruse standardid. Suured (ATX) emaplaadid ja toiteblokid ei mahu väikesesse (microATX) korpusesse. Mõned korpused toetavad väikest emaplaati, samas suurt toiteblokki ja teoreetiliselt on võimalik ka vastupidine olukord.&lt;br /&gt;
&lt;br /&gt;
Arvuti korpus toetab protsessori jahutust ainult kuni teatava jahuti kõrguseni ja diskreetse graafikaseadme puhul ainult teatud seadme pikkuseni. Mõned korpused sisaldavad toiteblokki.&lt;br /&gt;
&lt;br /&gt;
Erinevatel diskreetsetel graafikaseadmetel on erinevad nõuded toitele, osad saavad oma toite ainult emaplaadi liidese kaudu, teistel on vaja ühte või rohkemat kaablit toiteblokist. Graafikaseadmeid võib lauaarvutis olla mitmeid, ka mitu ühesugust.&lt;br /&gt;
&lt;br /&gt;
Toitebloki puhul peab toitebloki võimsus katma kõigi teiste komponentide vajaduse varuga ja diskreetse graafikaseadme korral peab toiteblokil olema selle toiteks piisavalt õigeid kaableid.&lt;br /&gt;
&lt;br /&gt;
====Projekti struktuur:====&lt;br /&gt;
Rakendus koosneb kahest põhilisest osast: veebiteenus ja klient-rakendus, mis seda teenust kasutab. Projekt realiseeritakse kasutades ASP.NET MVC Web API tehnoloogiat.&lt;br /&gt;
&lt;br /&gt;
Esialgne rakenduse ülesehituse skeem:&lt;br /&gt;
&lt;br /&gt;
[[File:STRUKTUUR.png]]&lt;br /&gt;
&lt;br /&gt;
==== Klient:====&lt;br /&gt;
Klientprogramm võimaldab kasutajal hallata oma kasutajaprofiili, lisada, muuta ja vaadata oma virtuaalseid arvuteid ja nende komponente.&lt;br /&gt;
Veebiklient suhtleb serveriga üle API.&lt;br /&gt;
Sisselogimisel küsitakse kasutajalt kasutajanime ja parooli, seejärel üritab rakendus kasutajat autentida. &lt;br /&gt;
Eduka autentimise korral kuvatakse antud kasutaja töölaud ning sünkroniseeritakse andmed serveriga.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse must-have funktsionaalsus:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Üldine&amp;lt;/b&amp;gt;&lt;br /&gt;
** Rakendus peab töötama online režiimis;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Kasutajate haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Peab olema võimalik kasutajaks registreerida (kasutajakonto olemasolu on vajalik andmete talletamiseks);&lt;br /&gt;
** Kasutaja peab saama sisse logida kasutajanime ja parooliga;&lt;br /&gt;
** Paroolile peavad rakenduma keerukusnõuded (nt 8 tähemärki);&lt;br /&gt;
** Kasutajatel peavad olema erinevad õiguste tasemed (minimaalselt tavakasutaja ja administraator);&lt;br /&gt;
*** Tavakasutaja saab hallata ainult iseenda virtuaalseid arvuteid;&lt;br /&gt;
*** Adminkasutaja saab lisada või muuta arvuti komponente;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Virtuaalsete arvutite haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Kasutaja peab saama lisada uusi virtuaalseid arvuteid;&lt;br /&gt;
** Kasutaja poolt lisatud arvutid peavad talle näha olema;&lt;br /&gt;
** Kasutaja peab saama oma arvutitele komponente lisada ja vahetada:&lt;br /&gt;
*** Komponendid on jagatud erinevatesse kategooriatesse: &lt;br /&gt;
**** keskseade/protsessor (CPU)&lt;br /&gt;
**** protsessori jahuti&lt;br /&gt;
**** emaplaat&lt;br /&gt;
**** muutmälu&lt;br /&gt;
**** graafikaseade (GPU)&lt;br /&gt;
**** toiteblokk&lt;br /&gt;
**** arvuti korpus&lt;br /&gt;
**** püsimälu.&lt;br /&gt;
*** Ühest kategooriast on võimalik valida ka mitu komponenti (nt mitu graafikaseadet)&lt;br /&gt;
*** Kui kasutaja valib mõne komponendi, siis see piirab automaatselt tema võimalusi valida ainult juba valitud komponentidega kokkusobivaid teisi komponente.&lt;br /&gt;
*** Kui juba valitud komponent muutub mitte kokku sobivaks, siis antakse sellest kasutajale teada&lt;br /&gt;
*** Mitte kokkusobivate komponentidega arvutit salvestada ei ole võimalik&lt;br /&gt;
*** Komponente on võimalik nende omaduste põhjal sorteerida ja filtreerida&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Komponentide haldus&amp;lt;/b&amp;gt;&lt;br /&gt;
** Komponent peab olema lisatav administraator kasutaja (kuid mitte tavakasutaja) poolt&lt;br /&gt;
** Juba loodud ja kinnitatud komponendi omadusi muuta ei saa&lt;br /&gt;
** Komponendi saab märkida eemaldatuks:&lt;br /&gt;
*** Eemaldatud komponente uute arvutite komplekteerimisel ei kuvata&lt;br /&gt;
*** Eemaldatud komponentidega juba komplekteeritud arvutite puhul kuvatakse kasutajale, et komponent pole enam saadaval&lt;br /&gt;
** Komponendile saab lisada tingimusi:&lt;br /&gt;
*** Tingimused määravad milliste komponentidega antud komponent koos on võimeline töötama&lt;br /&gt;
*** Tingimuseks võib olla ka loodava virtuaalse arvuti mingi parameeter (nt voolutarve)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse nice-to-have funktsionaalsus:&#039;&#039;&#039;&lt;br /&gt;
* Oma komplekteeritud arvuti jagamine&lt;br /&gt;
* Komponentide sorteerimine vastavalt populaarsusele (st kasutamine arvutites)&lt;br /&gt;
* Kasutaja parooli nullimine e-maili kinnituse kaudu&lt;br /&gt;
* Kasutajakonto kustutamine&lt;br /&gt;
* Kasutajakonto andmete muutmine ja lisainfo talletamise võimalus&lt;br /&gt;
&lt;br /&gt;
==== Server ====&lt;br /&gt;
&#039;&#039;&#039;WIP&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Andmebaasi skeem ===&lt;br /&gt;
Infomüra vähendamiseks on andmebaasiskeem realiseeritud selliselt, et tabelites on ainult võtmed. Skeemist välja jäetud atribuudid (graafikakaardi pikkus jne) ei ole olulised analüüsi seisukohast.&lt;br /&gt;
&lt;br /&gt;
[[File:ANDMEBAAS.png]]&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 3: Klientrakendus =&lt;br /&gt;
= (b)logi =&lt;br /&gt;
&lt;br /&gt;
* 16/04/2017: Veebirakenduse analüüsi kondikava&lt;br /&gt;
* 27/03/2017: Tehtud retsensioonid meeskondadele [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR DevHelpVR] ja [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Ninjas_in_pyjamas]&lt;br /&gt;
* 27/03/2017: XML ja XSD parandatud ja täiendatud vastavalt meeskonna JRT tagasisidele https://wiki.itcollege.ee/index.php/JRT#Retsensioon_JRT&lt;br /&gt;
* 20/03/2017: Loodud Wiki leht, jagatud ülesanded&lt;br /&gt;
* 20/03/2017: Projekti esimene osa valmis&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:STRUKTUUR.png&amp;diff=120183</id>
		<title>File:STRUKTUUR.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:STRUKTUUR.png&amp;diff=120183"/>
		<updated>2017-04-17T13:01:28Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=120182</id>
		<title>PC KartKicker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=120182"/>
		<updated>2017-04-17T12:59:55Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Ülesanne 2: Veebirakendus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
* Jan Eerik&lt;br /&gt;
&lt;br /&gt;
= Idee =&lt;br /&gt;
&lt;br /&gt;
Käesolev veebirakendus on asendamatu abimees arvuti kokkupanekul (võrdlemisi tugevalt inspireeritud https://pcpartpicker.com).&lt;br /&gt;
&lt;br /&gt;
Kuna teatavasti vajab arvuti töötamiseks kindlaid juppe mingis aktsepteeritud konfiguratsioonis, võimaldab meie rakendus välistada mitteühilduva raudvara &amp;quot;jõuga&amp;quot; ühildamist ja abistab kasutajal optimaalse konfiguratsiooni valimist.&lt;br /&gt;
&lt;br /&gt;
= Põhiline funktsionaalsus =&lt;br /&gt;
&lt;br /&gt;
* Kasutaja saab lisada üks kuni mitu arvutiskeemi&lt;br /&gt;
* Skeemile saab hakata ükshaaval lisama juppe (emaplaat, protsessor, mälud jne)&lt;br /&gt;
* Iga kord kui mingi jupp skeemi lisatakse, kitsendab see ülejäänud juppide valikut - näiteks LGA1151 liidesega emaplaadile ei õnnestu lisada AMD protsessorit jne&lt;br /&gt;
* Nii pooleliolevaid kui valminud skeeme saab salvestada&lt;br /&gt;
* Igal jupil on oma vaade koos tehnilise infoga&lt;br /&gt;
&lt;br /&gt;
= Nice to have =&lt;br /&gt;
&lt;br /&gt;
* Parima hinna kuvamine (nt Amazon, Newegg)&lt;br /&gt;
* Komponentide võrdlus&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 1: XML =&lt;br /&gt;
&lt;br /&gt;
== Teema ==&lt;br /&gt;
Uute arvutikomponentide olemasolevatesse kategooriatesse lisamiseks kasutab administraator ankeeti, mille salvestamisel ja andmete serverisse edastamiseks tekitatakse järgmine XML, kus on võimalik korraga suur hulk erinevaid arvutikomponente lisada, aga võib ka ainult ühe komponendi korraga saata.&lt;br /&gt;
&lt;br /&gt;
== XML==&lt;br /&gt;
&amp;lt;pre&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;components&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cases&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;NZXT&amp;quot; name=&amp;quot;S340&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;3&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;364&amp;quot; maxCpuHeight=&amp;quot;161&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;red&amp;quot; price=&amp;quot;66.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Deepcool&amp;quot; name=&amp;quot;TESSERACT SW&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;2&amp;quot; bay3=&amp;quot;4&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;light blue&amp;quot; price=&amp;quot;38.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Xion&amp;quot; name =&amp;quot;XON-310_BK&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;1&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;22.98&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;750D&amp;quot; type=&amp;quot;Full tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;3&amp;quot; bay3=&amp;quot;6&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;450&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;149.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
  &amp;lt;/cases&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpus&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.2&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;74&amp;quot; price=&amp;quot;327.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.8&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;69&amp;quot; price=&amp;quot;233.89&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.0&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;71&amp;quot; price=&amp;quot;316.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.5&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;61&amp;quot; price=&amp;quot;219.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;E5-2699 V3&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Xeon&amp;quot; family=&amp;quot;Haswell&amp;quot; socket=&amp;quot;LGA2011-3&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;18&amp;quot; threads=&amp;quot;36&amp;quot; ecc=&amp;quot;true&amp;quot; speed=&amp;quot;2.3&amp;quot; TDP=&amp;quot;145&amp;quot; lithography=&amp;quot;22&amp;quot; maxPowerDraw=&amp;quot;120&amp;quot; price=&amp;quot;3410.46&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;AMD&amp;quot; name=&amp;quot;1800X&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Ryzen 7&amp;quot; family=&amp;quot;Ryzen&amp;quot; socket=&amp;quot;AM4&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;8&amp;quot; threads=&amp;quot;16&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.6&amp;quot; TDP=&amp;quot;95&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;82&amp;quot; price=&amp;quot;469.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
  &amp;lt;/cpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpucoolers&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Cooler Master&amp;quot; name=&amp;quot;Hyper 212 EVO&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;1&amp;quot; height=&amp;quot;159&amp;quot; price=&amp;quot;24.88&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA775&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;H100i v2&amp;quot; liquid=&amp;quot;true&amp;quot; rad=&amp;quot;240&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;&amp;quot; price=&amp;quot;99.99&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Noctua&amp;quot; name=&amp;quot;NH-D15&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;165&amp;quot; price=&amp;quot;85.49&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
  &amp;lt;/cpucoolers&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;gpus&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;PowerColor&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX460&amp;quot; series=&amp;quot;Red Dragon&amp;quot; vram=&amp;quot;2&amp;quot; psuPin=&amp;quot;&amp;quot; length=&amp;quot;226&amp;quot; maxPowerDraw=&amp;quot;130&amp;quot; price=&amp;quot;73.98&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;Sapphire&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX480&amp;quot; series=&amp;quot;Nitro+&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;8&amp;quot; length=&amp;quot;240&amp;quot; maxPowerDraw=&amp;quot;150&amp;quot; price=&amp;quot;253.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;MSI&amp;quot; brandname=&amp;quot;Geforce&amp;quot; codename=&amp;quot;GTX1070&amp;quot; series=&amp;quot;Quick Silver OC&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;6+8&amp;quot; length=&amp;quot;279&amp;quot; maxPowerDraw=&amp;quot;170&amp;quot; price=&amp;quot;409.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
  &amp;lt;/gpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;memorychips&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Kingston&amp;quot; name=&amp;quot;ValueRAM&amp;quot; type=&amp;quot;DIMM&amp;quot; rank=&amp;quot;single&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;2133&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;yes&amp;quot; price=&amp;quot;67.58&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;Dominator Platinum&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;3000&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;2&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;123.25&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;ADATA&amp;quot; name=&amp;quot;&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR3&amp;quot; speed=&amp;quot;1600&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;88.29&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
  &amp;lt;/memorychips&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;motherboards&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Z170-A&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;Z170&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3400&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;152.99&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;ASRock&amp;quot; name=&amp;quot;H110M-HDS&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; chipset=&amp;quot;H110&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;2&amp;quot; maxMemory=&amp;quot;32&amp;quot; maxMemorySpeed=&amp;quot;2133&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;37.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Prime X370-PRO&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;X370&amp;quot; socket=&amp;quot;AM4&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3200&amp;quot; sata3=&amp;quot;8&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;162.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
  &amp;lt;/motherboards&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;psus&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;EVGA&amp;quot; name=&amp;quot;SuperNOVA 650&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;650&amp;quot; eff80plus=&amp;quot;gold&amp;quot; modular=&amp;quot;full&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;be Quiet!&amp;quot; name=&amp;quot;Pure Power L8 600W&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;600&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;no&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;CX550M&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;550&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;semi&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;2&amp;quot; price=&amp;quot;43.98&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
  &amp;lt;/psus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;storages&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;850 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;2048&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;823.14&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Intel&amp;quot; name=&amp;quot;DC P3608&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;4096&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;pcie8x&amp;quot; formFactor=&amp;quot;pcie&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;8867.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;960 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;m.2&amp;quot; formFactor=&amp;quot;m.2-2280&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;629.95&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Western Digital&amp;quot; name=&amp;quot;Black&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;6144&amp;quot; cache=&amp;quot;128&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;279.00&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Seagate&amp;quot; name=&amp;quot;BarraCuda Pro&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;10240&amp;quot; cache=&amp;quot;256&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;429.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Hitachi&amp;quot; name=&amp;quot;Travelstar&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;32&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;53.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
  &amp;lt;/storages&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/components&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML skeem (XSD) ==&lt;br /&gt;
&amp;lt;pre&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;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;cases&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;case&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay5&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psu&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxGpuLength&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxCpuHeight&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;primaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;secondaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cooler&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;family&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;iGPU&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cores&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;threads&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ecc&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;TDP&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;lithography&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpucoolers&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;sockets&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;liquid&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rad&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;fans&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;height&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;gpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;gpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brandname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;codename&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;vram&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psuPin&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;length&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;memorychips&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;memorychip&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rank&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cas&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;gen&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;moduleSize&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modules&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ECC&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;motherboards&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;motherboard&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;chipset&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memoryType&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memorySlots&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemory&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemorySpeed&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;video&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;sata3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ethernet&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;usb3&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;psus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;psu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;wattage&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;eff80plus&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modular&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6p2&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;storages&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;storage&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;capacity&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cache&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;interface&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rpm&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 1 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added computer parts:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;child::*/child::*&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 2 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added CPU coolers:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;cpucoolers/cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
== XML retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR Talk:DevHelpVR] &amp;lt;br&amp;gt;&lt;br /&gt;
XML failide retsensioon meeskonnale Ninjas_in_pyjamas, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Talk:Ninjas_in_pyjamas]&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 2: Veebirakendus =&lt;br /&gt;
== Analüüs == &lt;br /&gt;
Vastavalt klientrakenduse päringule annab veebirakendus andmebaasis oleva informatsiooni põhjal JSON kujul vastuse kliendile. Klientrakenduse funktsionaalsus ja andmebaasi skeem on mõlemad kirjeldatud allpool. Veebirakendus suudab anda komponentide kategooriate nimekirja, ühe kategooria komponentide nimekirja, nime järgi otsingu tulemuste komponentide nimekirja, konkreetse komponendi detailse informatsiooni, jpm.&lt;br /&gt;
&lt;br /&gt;
=== Mõisted ===&lt;br /&gt;
&#039;&#039;&#039;WIP&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Rakenduse kirjeldus (kogu süsteem, teenus+klient) ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Lühidalt:====&lt;br /&gt;
Meil on lauaarvutite komplekteerimise infosüsteem. Meie klientideks on inimesed kes kaaluvad lauaarvuti ostmist ja kes soovivad enne lauaarvuti või selle komponentide ostmist enda jaoks kogu protseduuri põhjalikult läbi mõelda. Süsteem võimaldab klientidel luua virtuaalse lauaarvuti ja tuvastab mitteühilduvad komponendid ning aitab seega vältida erinevaid probleeme, millega kaasneks aja- ja rahakulu.&lt;br /&gt;
&lt;br /&gt;
====Nüansid:====&lt;br /&gt;
Kliendid saavad ennast meie süsteemis registreerida kasutajateks. Üks füüsiline isik võib teha endale teha ükskõik kui palju kasutajaid, meil ei pea olema päriselt olemasoleva isiku ja süsteemi kasutaja vahel üks-ühest seost. Rakenduse kasutamiseks ei ole kohustuslik serveris konto loomine, klient saab virtuaalse arvuti luua ilma kasutajakontota, aga see ei säilu pärast sessiooni lõppemist.&lt;br /&gt;
&lt;br /&gt;
Iga kasutaja võib luua uue virtuaalse lauaarvuti, sellele nimetuse panna ja see seotakse automaatselt tema kasutajakontoga. Igale virtuaalsele arvutile võib lisada komponente. Lauaarvuti põhilisteks komponentideks on keskseade/protsessor (CPU), protsessori jahuti, emaplaat, muutmälu, graafikaseade (GPU), toiteblokk, arvuti korpus ja püsimälu.&lt;br /&gt;
&lt;br /&gt;
Iga protsessori generatsioon on ühilduv ainult kindlate emaplaadi kiipseadmete komplektidega (chipset) ja tüüpiliselt on emaplaadi protsessori pesa (socket) see, millest lähtuda emaplaadi ja protsessori ühilduvuse kindlaks tegemisel. Protsessori pesaga ühilduvus on peamine parameeter ka protsessori jahuti valikul, aga kui emaplaadil on ainult ühte tüüpi pesa ja protsessor sobib ainult ühte kindlasse pessa, siis jahutid on üldjuhul sobivad mitmete erinevate pesadega. Samuti ühilduvad iga protsessor ja emaplaat ainult spetsiifiliste muutmälu generatsioonidega. Emaplaadid toetavad muutmälu kindla taktsageduseni, kiirema taktsagedusega mälukiipe saab siiski kasutada, need töötavad lihtsalt emaplaadi poolt lubatud maksimaale taktsagedusega, mitte muutmälu kiibi maksimaalse taktsagedusega. On olemas emaplaate, mis toetavat mitut protsessorit.&lt;br /&gt;
&lt;br /&gt;
Muutmälu võib olla lauaarvutis üks kiip, aga võib ka rohkem. Mitme kiibi korral peaks need olema identsed või identsete näitajatega.&lt;br /&gt;
Osade protsessoritega on jahuti karbis kaasas, teistel ei ole. Tänapäeva lauaarvutite protsessorid ilma jahutita ei ole töövõimelised. Mõned protsessorid ja emaplaadid sisaldavad graafikaseadet. Diskreetne graafikaseade on üldjuhul võimekam protsessori või emaplaadiga kaasasolevast, seega on tavaline, et arvutile lisatakse diskreetne graafikaseade isegi kui sisene graafikaseade on juba olemas.&lt;br /&gt;
&lt;br /&gt;
Emaplaatidel, toiteblokkidel ja arvuti korpustel on mitmed suuruse standardid. Suured (ATX) emaplaadid ja toiteblokid ei mahu väikesesse (microATX) korpusesse. Mõned korpused toetavad väikest emaplaati, samas suurt toiteblokki ja teoreetiliselt on võimalik ka vastupidine olukord.&lt;br /&gt;
&lt;br /&gt;
Arvuti korpus toetab protsessori jahutust ainult kuni teatava jahuti kõrguseni ja diskreetse graafikaseadme puhul ainult teatud seadme pikkuseni. Mõned korpused sisaldavad toiteblokki.&lt;br /&gt;
&lt;br /&gt;
Erinevatel diskreetsetel graafikaseadmetel on erinevad nõuded toitele, osad saavad oma toite ainult emaplaadi liidese kaudu, teistel on vaja ühte või rohkemat kaablit toiteblokist. Graafikaseadmeid võib lauaarvutis olla mitmeid, ka mitu ühesugust.&lt;br /&gt;
&lt;br /&gt;
Toitebloki puhul peab toitebloki võimsus katma kõigi teiste komponentide vajaduse varuga ja diskreetse graafikaseadme korral peab toiteblokil olema selle toiteks piisavalt õigeid kaableid.&lt;br /&gt;
&lt;br /&gt;
====Projekti struktuur:====&lt;br /&gt;
Rakendus koosneb kahest põhilisest osast: veebiteenus ja klient-rakendus, mis seda teenust kasutab. Projekt realiseeritakse kasutades ASP.NET MVC Web API tehnoloogiat.&lt;br /&gt;
&lt;br /&gt;
Esialgne rakenduse ülesehituse skeem:&lt;br /&gt;
&lt;br /&gt;
[[File:STRUKTUUR.png]]&lt;br /&gt;
&lt;br /&gt;
==== Klient:====&lt;br /&gt;
&#039;&#039;&#039;WIP&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Server ====&lt;br /&gt;
&#039;&#039;&#039;WIP&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Andmebaasi skeem ===&lt;br /&gt;
Infomüra vähendamiseks on andmebaasiskeem realiseeritud selliselt, et tabelites on ainult võtmed. Skeemist välja jäetud atribuudid (graafikakaardi pikkus jne) ei ole olulised analüüsi seisukohast.&lt;br /&gt;
&lt;br /&gt;
[[File:ANDMEBAAS.png]]&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 3: Klientrakendus =&lt;br /&gt;
= (b)logi =&lt;br /&gt;
&lt;br /&gt;
* 16/04/2017: Veebirakenduse analüüsi kondikava&lt;br /&gt;
* 27/03/2017: Tehtud retsensioonid meeskondadele [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR DevHelpVR] ja [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Ninjas_in_pyjamas]&lt;br /&gt;
* 27/03/2017: XML ja XSD parandatud ja täiendatud vastavalt meeskonna JRT tagasisidele https://wiki.itcollege.ee/index.php/JRT#Retsensioon_JRT&lt;br /&gt;
* 20/03/2017: Loodud Wiki leht, jagatud ülesanded&lt;br /&gt;
* 20/03/2017: Projekti esimene osa valmis&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=119745</id>
		<title>PC KartKicker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=119745"/>
		<updated>2017-03-27T19:12:00Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* (b)logi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
* Jan Eerik&lt;br /&gt;
&lt;br /&gt;
= Idee =&lt;br /&gt;
&lt;br /&gt;
Käesolev veebirakendus on asendamatu abimees arvuti kokkupanekul (võrdlemisi tugevalt inspireeritud https://pcpartpicker.com).&lt;br /&gt;
&lt;br /&gt;
Kuna teatavasti vajab arvuti töötamiseks kindlaid juppe mingis aktsepteeritud konfiguratsioonis, võimaldab meie rakendus välistada mitteühilduva raudvara &amp;quot;jõuga&amp;quot; ühildamist ja abistab kasutajal optimaalse konfiguratsiooni valimist.&lt;br /&gt;
&lt;br /&gt;
= Põhiline funktsionaalsus =&lt;br /&gt;
&lt;br /&gt;
* Kasutaja saab lisada üks kuni mitu arvutiskeemi&lt;br /&gt;
* Skeemile saab hakata ükshaaval lisama juppe (emaplaat, protsessor, mälud jne)&lt;br /&gt;
* Iga kord kui mingi jupp skeemi lisatakse, kitsendab see ülejäänud juppide valikut - näiteks LGA1151 liidesega emaplaadile ei õnnestu lisada AMD protsessorit jne&lt;br /&gt;
* Nii pooleliolevaid kui valminud skeeme saab salvestada&lt;br /&gt;
* Igal jupil on oma vaade koos tehnilise infoga&lt;br /&gt;
&lt;br /&gt;
= Nice to have =&lt;br /&gt;
&lt;br /&gt;
* Parima hinna kuvamine (nt Amazon, Newegg)&lt;br /&gt;
* Komponentide võrdlus&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 1: XML =&lt;br /&gt;
&lt;br /&gt;
== Teema ==&lt;br /&gt;
Uute arvutikomponentide olemasolevatesse kategooriatesse lisamiseks kasutab administraator ankeeti, mille salvestamisel ja andmete serverisse edastamiseks tekitatakse järgmine XML, kus on võimalik korraga suur hulk erinevaid arvutikomponente lisada, aga võib ka ainult ühe komponendi korraga saata.&lt;br /&gt;
&lt;br /&gt;
== XML==&lt;br /&gt;
&amp;lt;pre&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;components&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cases&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;NZXT&amp;quot; name=&amp;quot;S340&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;3&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;364&amp;quot; maxCpuHeight=&amp;quot;161&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;red&amp;quot; price=&amp;quot;66.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Deepcool&amp;quot; name=&amp;quot;TESSERACT SW&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;2&amp;quot; bay3=&amp;quot;4&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;light blue&amp;quot; price=&amp;quot;38.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Xion&amp;quot; name =&amp;quot;XON-310_BK&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;1&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;22.98&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;750D&amp;quot; type=&amp;quot;Full tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;3&amp;quot; bay3=&amp;quot;6&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;450&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;149.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
  &amp;lt;/cases&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpus&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.2&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;74&amp;quot; price=&amp;quot;327.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.8&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;69&amp;quot; price=&amp;quot;233.89&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.0&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;71&amp;quot; price=&amp;quot;316.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.5&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;61&amp;quot; price=&amp;quot;219.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;E5-2699 V3&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Xeon&amp;quot; family=&amp;quot;Haswell&amp;quot; socket=&amp;quot;LGA2011-3&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;18&amp;quot; threads=&amp;quot;36&amp;quot; ecc=&amp;quot;true&amp;quot; speed=&amp;quot;2.3&amp;quot; TDP=&amp;quot;145&amp;quot; lithography=&amp;quot;22&amp;quot; maxPowerDraw=&amp;quot;120&amp;quot; price=&amp;quot;3410.46&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;AMD&amp;quot; name=&amp;quot;1800X&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Ryzen 7&amp;quot; family=&amp;quot;Ryzen&amp;quot; socket=&amp;quot;AM4&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;8&amp;quot; threads=&amp;quot;16&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.6&amp;quot; TDP=&amp;quot;95&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;82&amp;quot; price=&amp;quot;469.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
  &amp;lt;/cpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpucoolers&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Cooler Master&amp;quot; name=&amp;quot;Hyper 212 EVO&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;1&amp;quot; height=&amp;quot;159&amp;quot; price=&amp;quot;24.88&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA775&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;H100i v2&amp;quot; liquid=&amp;quot;true&amp;quot; rad=&amp;quot;240&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;&amp;quot; price=&amp;quot;99.99&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Noctua&amp;quot; name=&amp;quot;NH-D15&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;165&amp;quot; price=&amp;quot;85.49&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
  &amp;lt;/cpucoolers&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;gpus&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;PowerColor&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX460&amp;quot; series=&amp;quot;Red Dragon&amp;quot; vram=&amp;quot;2&amp;quot; psuPin=&amp;quot;&amp;quot; length=&amp;quot;226&amp;quot; maxPowerDraw=&amp;quot;130&amp;quot; price=&amp;quot;73.98&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;Sapphire&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX480&amp;quot; series=&amp;quot;Nitro+&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;8&amp;quot; length=&amp;quot;240&amp;quot; maxPowerDraw=&amp;quot;150&amp;quot; price=&amp;quot;253.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;MSI&amp;quot; brandname=&amp;quot;Geforce&amp;quot; codename=&amp;quot;GTX1070&amp;quot; series=&amp;quot;Quick Silver OC&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;6+8&amp;quot; length=&amp;quot;279&amp;quot; maxPowerDraw=&amp;quot;170&amp;quot; price=&amp;quot;409.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
  &amp;lt;/gpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;memorychips&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Kingston&amp;quot; name=&amp;quot;ValueRAM&amp;quot; type=&amp;quot;DIMM&amp;quot; rank=&amp;quot;single&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;2133&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;yes&amp;quot; price=&amp;quot;67.58&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;Dominator Platinum&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;3000&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;2&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;123.25&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;ADATA&amp;quot; name=&amp;quot;&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR3&amp;quot; speed=&amp;quot;1600&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;88.29&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
  &amp;lt;/memorychips&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;motherboards&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Z170-A&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;Z170&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3400&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;152.99&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;ASRock&amp;quot; name=&amp;quot;H110M-HDS&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; chipset=&amp;quot;H110&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;2&amp;quot; maxMemory=&amp;quot;32&amp;quot; maxMemorySpeed=&amp;quot;2133&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;37.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Prime X370-PRO&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;X370&amp;quot; socket=&amp;quot;AM4&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3200&amp;quot; sata3=&amp;quot;8&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;162.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
  &amp;lt;/motherboards&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;psus&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;EVGA&amp;quot; name=&amp;quot;SuperNOVA 650&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;650&amp;quot; eff80plus=&amp;quot;gold&amp;quot; modular=&amp;quot;full&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;be Quiet!&amp;quot; name=&amp;quot;Pure Power L8 600W&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;600&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;no&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;CX550M&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;550&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;semi&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;2&amp;quot; price=&amp;quot;43.98&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
  &amp;lt;/psus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;storages&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;850 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;2048&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;823.14&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Intel&amp;quot; name=&amp;quot;DC P3608&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;4096&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;pcie8x&amp;quot; formFactor=&amp;quot;pcie&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;8867.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;960 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;m.2&amp;quot; formFactor=&amp;quot;m.2-2280&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;629.95&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Western Digital&amp;quot; name=&amp;quot;Black&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;6144&amp;quot; cache=&amp;quot;128&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;279.00&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Seagate&amp;quot; name=&amp;quot;BarraCuda Pro&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;10240&amp;quot; cache=&amp;quot;256&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;429.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Hitachi&amp;quot; name=&amp;quot;Travelstar&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;32&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;53.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
  &amp;lt;/storages&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/components&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML skeem (XSD) ==&lt;br /&gt;
&amp;lt;pre&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;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;cases&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;case&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay5&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psu&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxGpuLength&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxCpuHeight&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;primaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;secondaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cooler&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;family&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;iGPU&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cores&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;threads&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ecc&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;TDP&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;lithography&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpucoolers&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;sockets&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;liquid&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rad&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;fans&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;height&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;gpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;gpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brandname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;codename&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;vram&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psuPin&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;length&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;memorychips&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;memorychip&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rank&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cas&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;gen&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;moduleSize&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modules&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ECC&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;motherboards&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;motherboard&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;chipset&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memoryType&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memorySlots&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemory&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemorySpeed&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;video&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;sata3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ethernet&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;usb3&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;psus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;psu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;wattage&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;eff80plus&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modular&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6p2&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;storages&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;storage&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;capacity&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cache&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;interface&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rpm&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 1 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added computer parts:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;child::*/child::*&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 2 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added CPU coolers:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;cpucoolers/cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
== XML retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR Talk:DevHelpVR] &amp;lt;br&amp;gt;&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Talk:Ninjas_in_pyjamas]&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 2: Veebirakendus =&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 3: Klientrakendus =&lt;br /&gt;
= (b)logi =&lt;br /&gt;
&lt;br /&gt;
* 27/03/2017: Tehtud retsensioonid meeskondadele [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR DevHelpVR] ja [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Ninjas_in_pyjamas]&lt;br /&gt;
* 27/03/2017: XML ja XSD parandatud ja täiendatud vastavalt meeskonna JRT tagasisidele https://wiki.itcollege.ee/index.php/JRT#Retsensioon_JRT&lt;br /&gt;
* 20/03/2017: Loodud Wiki leht, jagatud ülesanded&lt;br /&gt;
* 20/03/2017: Projekti esimene osa valmis&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=119744</id>
		<title>PC KartKicker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=119744"/>
		<updated>2017-03-27T19:11:27Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* (b)logi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
* Jan Eerik&lt;br /&gt;
&lt;br /&gt;
= Idee =&lt;br /&gt;
&lt;br /&gt;
Käesolev veebirakendus on asendamatu abimees arvuti kokkupanekul (võrdlemisi tugevalt inspireeritud https://pcpartpicker.com).&lt;br /&gt;
&lt;br /&gt;
Kuna teatavasti vajab arvuti töötamiseks kindlaid juppe mingis aktsepteeritud konfiguratsioonis, võimaldab meie rakendus välistada mitteühilduva raudvara &amp;quot;jõuga&amp;quot; ühildamist ja abistab kasutajal optimaalse konfiguratsiooni valimist.&lt;br /&gt;
&lt;br /&gt;
= Põhiline funktsionaalsus =&lt;br /&gt;
&lt;br /&gt;
* Kasutaja saab lisada üks kuni mitu arvutiskeemi&lt;br /&gt;
* Skeemile saab hakata ükshaaval lisama juppe (emaplaat, protsessor, mälud jne)&lt;br /&gt;
* Iga kord kui mingi jupp skeemi lisatakse, kitsendab see ülejäänud juppide valikut - näiteks LGA1151 liidesega emaplaadile ei õnnestu lisada AMD protsessorit jne&lt;br /&gt;
* Nii pooleliolevaid kui valminud skeeme saab salvestada&lt;br /&gt;
* Igal jupil on oma vaade koos tehnilise infoga&lt;br /&gt;
&lt;br /&gt;
= Nice to have =&lt;br /&gt;
&lt;br /&gt;
* Parima hinna kuvamine (nt Amazon, Newegg)&lt;br /&gt;
* Komponentide võrdlus&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 1: XML =&lt;br /&gt;
&lt;br /&gt;
== Teema ==&lt;br /&gt;
Uute arvutikomponentide olemasolevatesse kategooriatesse lisamiseks kasutab administraator ankeeti, mille salvestamisel ja andmete serverisse edastamiseks tekitatakse järgmine XML, kus on võimalik korraga suur hulk erinevaid arvutikomponente lisada, aga võib ka ainult ühe komponendi korraga saata.&lt;br /&gt;
&lt;br /&gt;
== XML==&lt;br /&gt;
&amp;lt;pre&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;components&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cases&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;NZXT&amp;quot; name=&amp;quot;S340&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;3&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;364&amp;quot; maxCpuHeight=&amp;quot;161&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;red&amp;quot; price=&amp;quot;66.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Deepcool&amp;quot; name=&amp;quot;TESSERACT SW&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;2&amp;quot; bay3=&amp;quot;4&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;light blue&amp;quot; price=&amp;quot;38.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Xion&amp;quot; name =&amp;quot;XON-310_BK&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;1&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;22.98&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;750D&amp;quot; type=&amp;quot;Full tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;3&amp;quot; bay3=&amp;quot;6&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;450&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;149.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
  &amp;lt;/cases&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpus&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.2&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;74&amp;quot; price=&amp;quot;327.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.8&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;69&amp;quot; price=&amp;quot;233.89&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.0&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;71&amp;quot; price=&amp;quot;316.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.5&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;61&amp;quot; price=&amp;quot;219.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;E5-2699 V3&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Xeon&amp;quot; family=&amp;quot;Haswell&amp;quot; socket=&amp;quot;LGA2011-3&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;18&amp;quot; threads=&amp;quot;36&amp;quot; ecc=&amp;quot;true&amp;quot; speed=&amp;quot;2.3&amp;quot; TDP=&amp;quot;145&amp;quot; lithography=&amp;quot;22&amp;quot; maxPowerDraw=&amp;quot;120&amp;quot; price=&amp;quot;3410.46&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;AMD&amp;quot; name=&amp;quot;1800X&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Ryzen 7&amp;quot; family=&amp;quot;Ryzen&amp;quot; socket=&amp;quot;AM4&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;8&amp;quot; threads=&amp;quot;16&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.6&amp;quot; TDP=&amp;quot;95&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;82&amp;quot; price=&amp;quot;469.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
  &amp;lt;/cpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpucoolers&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Cooler Master&amp;quot; name=&amp;quot;Hyper 212 EVO&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;1&amp;quot; height=&amp;quot;159&amp;quot; price=&amp;quot;24.88&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA775&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;H100i v2&amp;quot; liquid=&amp;quot;true&amp;quot; rad=&amp;quot;240&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;&amp;quot; price=&amp;quot;99.99&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Noctua&amp;quot; name=&amp;quot;NH-D15&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;165&amp;quot; price=&amp;quot;85.49&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
  &amp;lt;/cpucoolers&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;gpus&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;PowerColor&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX460&amp;quot; series=&amp;quot;Red Dragon&amp;quot; vram=&amp;quot;2&amp;quot; psuPin=&amp;quot;&amp;quot; length=&amp;quot;226&amp;quot; maxPowerDraw=&amp;quot;130&amp;quot; price=&amp;quot;73.98&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;Sapphire&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX480&amp;quot; series=&amp;quot;Nitro+&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;8&amp;quot; length=&amp;quot;240&amp;quot; maxPowerDraw=&amp;quot;150&amp;quot; price=&amp;quot;253.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;MSI&amp;quot; brandname=&amp;quot;Geforce&amp;quot; codename=&amp;quot;GTX1070&amp;quot; series=&amp;quot;Quick Silver OC&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;6+8&amp;quot; length=&amp;quot;279&amp;quot; maxPowerDraw=&amp;quot;170&amp;quot; price=&amp;quot;409.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
  &amp;lt;/gpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;memorychips&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Kingston&amp;quot; name=&amp;quot;ValueRAM&amp;quot; type=&amp;quot;DIMM&amp;quot; rank=&amp;quot;single&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;2133&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;yes&amp;quot; price=&amp;quot;67.58&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;Dominator Platinum&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;3000&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;2&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;123.25&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;ADATA&amp;quot; name=&amp;quot;&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR3&amp;quot; speed=&amp;quot;1600&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;88.29&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
  &amp;lt;/memorychips&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;motherboards&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Z170-A&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;Z170&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3400&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;152.99&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;ASRock&amp;quot; name=&amp;quot;H110M-HDS&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; chipset=&amp;quot;H110&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;2&amp;quot; maxMemory=&amp;quot;32&amp;quot; maxMemorySpeed=&amp;quot;2133&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;37.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Prime X370-PRO&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;X370&amp;quot; socket=&amp;quot;AM4&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3200&amp;quot; sata3=&amp;quot;8&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;162.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
  &amp;lt;/motherboards&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;psus&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;EVGA&amp;quot; name=&amp;quot;SuperNOVA 650&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;650&amp;quot; eff80plus=&amp;quot;gold&amp;quot; modular=&amp;quot;full&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;be Quiet!&amp;quot; name=&amp;quot;Pure Power L8 600W&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;600&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;no&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;CX550M&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;550&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;semi&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;2&amp;quot; price=&amp;quot;43.98&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
  &amp;lt;/psus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;storages&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;850 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;2048&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;823.14&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Intel&amp;quot; name=&amp;quot;DC P3608&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;4096&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;pcie8x&amp;quot; formFactor=&amp;quot;pcie&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;8867.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;960 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;m.2&amp;quot; formFactor=&amp;quot;m.2-2280&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;629.95&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Western Digital&amp;quot; name=&amp;quot;Black&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;6144&amp;quot; cache=&amp;quot;128&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;279.00&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Seagate&amp;quot; name=&amp;quot;BarraCuda Pro&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;10240&amp;quot; cache=&amp;quot;256&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;429.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Hitachi&amp;quot; name=&amp;quot;Travelstar&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;32&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;53.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
  &amp;lt;/storages&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/components&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML skeem (XSD) ==&lt;br /&gt;
&amp;lt;pre&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;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;cases&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;case&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay5&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psu&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxGpuLength&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxCpuHeight&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;primaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;secondaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cooler&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;family&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;iGPU&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cores&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;threads&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ecc&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;TDP&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;lithography&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpucoolers&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;sockets&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;liquid&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rad&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;fans&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;height&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;gpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;gpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brandname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;codename&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;vram&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psuPin&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;length&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;memorychips&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;memorychip&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rank&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cas&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;gen&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;moduleSize&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modules&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ECC&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;motherboards&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;motherboard&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;chipset&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memoryType&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memorySlots&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemory&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemorySpeed&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;video&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;sata3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ethernet&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;usb3&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;psus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;psu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;wattage&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;eff80plus&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modular&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6p2&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;storages&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;storage&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;capacity&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cache&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;interface&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rpm&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 1 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added computer parts:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;child::*/child::*&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 2 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added CPU coolers:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;cpucoolers/cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
== XML retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR Talk:DevHelpVR] &amp;lt;br&amp;gt;&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Talk:Ninjas_in_pyjamas]&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 2: Veebirakendus =&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 3: Klientrakendus =&lt;br /&gt;
= (b)logi =&lt;br /&gt;
&lt;br /&gt;
* 27/03/2017: Tehtud retsensioonid meeskondadele [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Ninjas_in_pyjamas]&lt;br /&gt;
* 27/03/2017: XML ja XSD parandatud ja täiendatud vastavalt meeskonna JRT tagasisidele https://wiki.itcollege.ee/index.php/JRT#Retsensioon_JRT&lt;br /&gt;
* 20/03/2017: Loodud Wiki leht, jagatud ülesanded&lt;br /&gt;
* 20/03/2017: Projekti esimene osa valmis&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=119743</id>
		<title>PC KartKicker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=119743"/>
		<updated>2017-03-27T19:11:17Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* (b)logi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
* Jan Eerik&lt;br /&gt;
&lt;br /&gt;
= Idee =&lt;br /&gt;
&lt;br /&gt;
Käesolev veebirakendus on asendamatu abimees arvuti kokkupanekul (võrdlemisi tugevalt inspireeritud https://pcpartpicker.com).&lt;br /&gt;
&lt;br /&gt;
Kuna teatavasti vajab arvuti töötamiseks kindlaid juppe mingis aktsepteeritud konfiguratsioonis, võimaldab meie rakendus välistada mitteühilduva raudvara &amp;quot;jõuga&amp;quot; ühildamist ja abistab kasutajal optimaalse konfiguratsiooni valimist.&lt;br /&gt;
&lt;br /&gt;
= Põhiline funktsionaalsus =&lt;br /&gt;
&lt;br /&gt;
* Kasutaja saab lisada üks kuni mitu arvutiskeemi&lt;br /&gt;
* Skeemile saab hakata ükshaaval lisama juppe (emaplaat, protsessor, mälud jne)&lt;br /&gt;
* Iga kord kui mingi jupp skeemi lisatakse, kitsendab see ülejäänud juppide valikut - näiteks LGA1151 liidesega emaplaadile ei õnnestu lisada AMD protsessorit jne&lt;br /&gt;
* Nii pooleliolevaid kui valminud skeeme saab salvestada&lt;br /&gt;
* Igal jupil on oma vaade koos tehnilise infoga&lt;br /&gt;
&lt;br /&gt;
= Nice to have =&lt;br /&gt;
&lt;br /&gt;
* Parima hinna kuvamine (nt Amazon, Newegg)&lt;br /&gt;
* Komponentide võrdlus&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 1: XML =&lt;br /&gt;
&lt;br /&gt;
== Teema ==&lt;br /&gt;
Uute arvutikomponentide olemasolevatesse kategooriatesse lisamiseks kasutab administraator ankeeti, mille salvestamisel ja andmete serverisse edastamiseks tekitatakse järgmine XML, kus on võimalik korraga suur hulk erinevaid arvutikomponente lisada, aga võib ka ainult ühe komponendi korraga saata.&lt;br /&gt;
&lt;br /&gt;
== XML==&lt;br /&gt;
&amp;lt;pre&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;components&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cases&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;NZXT&amp;quot; name=&amp;quot;S340&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;3&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;364&amp;quot; maxCpuHeight=&amp;quot;161&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;red&amp;quot; price=&amp;quot;66.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Deepcool&amp;quot; name=&amp;quot;TESSERACT SW&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;2&amp;quot; bay3=&amp;quot;4&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;light blue&amp;quot; price=&amp;quot;38.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Xion&amp;quot; name =&amp;quot;XON-310_BK&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;1&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;22.98&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;750D&amp;quot; type=&amp;quot;Full tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;3&amp;quot; bay3=&amp;quot;6&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;450&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;149.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
  &amp;lt;/cases&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpus&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.2&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;74&amp;quot; price=&amp;quot;327.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.8&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;69&amp;quot; price=&amp;quot;233.89&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.0&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;71&amp;quot; price=&amp;quot;316.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.5&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;61&amp;quot; price=&amp;quot;219.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;E5-2699 V3&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Xeon&amp;quot; family=&amp;quot;Haswell&amp;quot; socket=&amp;quot;LGA2011-3&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;18&amp;quot; threads=&amp;quot;36&amp;quot; ecc=&amp;quot;true&amp;quot; speed=&amp;quot;2.3&amp;quot; TDP=&amp;quot;145&amp;quot; lithography=&amp;quot;22&amp;quot; maxPowerDraw=&amp;quot;120&amp;quot; price=&amp;quot;3410.46&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;AMD&amp;quot; name=&amp;quot;1800X&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Ryzen 7&amp;quot; family=&amp;quot;Ryzen&amp;quot; socket=&amp;quot;AM4&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;8&amp;quot; threads=&amp;quot;16&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.6&amp;quot; TDP=&amp;quot;95&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;82&amp;quot; price=&amp;quot;469.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
  &amp;lt;/cpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpucoolers&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Cooler Master&amp;quot; name=&amp;quot;Hyper 212 EVO&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;1&amp;quot; height=&amp;quot;159&amp;quot; price=&amp;quot;24.88&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA775&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;H100i v2&amp;quot; liquid=&amp;quot;true&amp;quot; rad=&amp;quot;240&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;&amp;quot; price=&amp;quot;99.99&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Noctua&amp;quot; name=&amp;quot;NH-D15&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;165&amp;quot; price=&amp;quot;85.49&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
  &amp;lt;/cpucoolers&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;gpus&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;PowerColor&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX460&amp;quot; series=&amp;quot;Red Dragon&amp;quot; vram=&amp;quot;2&amp;quot; psuPin=&amp;quot;&amp;quot; length=&amp;quot;226&amp;quot; maxPowerDraw=&amp;quot;130&amp;quot; price=&amp;quot;73.98&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;Sapphire&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX480&amp;quot; series=&amp;quot;Nitro+&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;8&amp;quot; length=&amp;quot;240&amp;quot; maxPowerDraw=&amp;quot;150&amp;quot; price=&amp;quot;253.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;MSI&amp;quot; brandname=&amp;quot;Geforce&amp;quot; codename=&amp;quot;GTX1070&amp;quot; series=&amp;quot;Quick Silver OC&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;6+8&amp;quot; length=&amp;quot;279&amp;quot; maxPowerDraw=&amp;quot;170&amp;quot; price=&amp;quot;409.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
  &amp;lt;/gpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;memorychips&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Kingston&amp;quot; name=&amp;quot;ValueRAM&amp;quot; type=&amp;quot;DIMM&amp;quot; rank=&amp;quot;single&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;2133&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;yes&amp;quot; price=&amp;quot;67.58&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;Dominator Platinum&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;3000&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;2&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;123.25&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;ADATA&amp;quot; name=&amp;quot;&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR3&amp;quot; speed=&amp;quot;1600&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;88.29&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
  &amp;lt;/memorychips&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;motherboards&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Z170-A&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;Z170&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3400&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;152.99&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;ASRock&amp;quot; name=&amp;quot;H110M-HDS&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; chipset=&amp;quot;H110&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;2&amp;quot; maxMemory=&amp;quot;32&amp;quot; maxMemorySpeed=&amp;quot;2133&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;37.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Prime X370-PRO&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;X370&amp;quot; socket=&amp;quot;AM4&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3200&amp;quot; sata3=&amp;quot;8&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;162.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
  &amp;lt;/motherboards&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;psus&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;EVGA&amp;quot; name=&amp;quot;SuperNOVA 650&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;650&amp;quot; eff80plus=&amp;quot;gold&amp;quot; modular=&amp;quot;full&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;be Quiet!&amp;quot; name=&amp;quot;Pure Power L8 600W&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;600&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;no&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;CX550M&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;550&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;semi&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;2&amp;quot; price=&amp;quot;43.98&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
  &amp;lt;/psus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;storages&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;850 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;2048&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;823.14&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Intel&amp;quot; name=&amp;quot;DC P3608&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;4096&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;pcie8x&amp;quot; formFactor=&amp;quot;pcie&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;8867.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;960 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;m.2&amp;quot; formFactor=&amp;quot;m.2-2280&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;629.95&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Western Digital&amp;quot; name=&amp;quot;Black&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;6144&amp;quot; cache=&amp;quot;128&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;279.00&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Seagate&amp;quot; name=&amp;quot;BarraCuda Pro&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;10240&amp;quot; cache=&amp;quot;256&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;429.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Hitachi&amp;quot; name=&amp;quot;Travelstar&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;32&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;53.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
  &amp;lt;/storages&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/components&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML skeem (XSD) ==&lt;br /&gt;
&amp;lt;pre&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;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;cases&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;case&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay5&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psu&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxGpuLength&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxCpuHeight&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;primaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;secondaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cooler&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;family&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;iGPU&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cores&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;threads&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ecc&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;TDP&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;lithography&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpucoolers&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;sockets&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;liquid&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rad&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;fans&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;height&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;gpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;gpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brandname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;codename&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;vram&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psuPin&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;length&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;memorychips&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;memorychip&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rank&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cas&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;gen&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;moduleSize&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modules&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ECC&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;motherboards&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;motherboard&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;chipset&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memoryType&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memorySlots&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemory&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemorySpeed&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;video&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;sata3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ethernet&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;usb3&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;psus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;psu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;wattage&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;eff80plus&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modular&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6p2&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;storages&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;storage&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;capacity&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cache&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;interface&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rpm&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 1 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added computer parts:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;child::*/child::*&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 2 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added CPU coolers:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;cpucoolers/cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
== XML retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR Talk:DevHelpVR] &amp;lt;br&amp;gt;&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Talk:Ninjas_in_pyjamas]&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 2: Veebirakendus =&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 3: Klientrakendus =&lt;br /&gt;
= (b)logi =&lt;br /&gt;
&lt;br /&gt;
* 27/03/2017: Tehtud retsensioonid meeskondadele [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Talk:Ninjas_in_pyjamas]&lt;br /&gt;
* 27/03/2017: XML ja XSD parandatud ja täiendatud vastavalt meeskonna JRT tagasisidele https://wiki.itcollege.ee/index.php/JRT#Retsensioon_JRT&lt;br /&gt;
* 20/03/2017: Loodud Wiki leht, jagatud ülesanded&lt;br /&gt;
* 20/03/2017: Projekti esimene osa valmis&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=119742</id>
		<title>PC KartKicker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=119742"/>
		<updated>2017-03-27T19:10:49Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* (b)logi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
* Jan Eerik&lt;br /&gt;
&lt;br /&gt;
= Idee =&lt;br /&gt;
&lt;br /&gt;
Käesolev veebirakendus on asendamatu abimees arvuti kokkupanekul (võrdlemisi tugevalt inspireeritud https://pcpartpicker.com).&lt;br /&gt;
&lt;br /&gt;
Kuna teatavasti vajab arvuti töötamiseks kindlaid juppe mingis aktsepteeritud konfiguratsioonis, võimaldab meie rakendus välistada mitteühilduva raudvara &amp;quot;jõuga&amp;quot; ühildamist ja abistab kasutajal optimaalse konfiguratsiooni valimist.&lt;br /&gt;
&lt;br /&gt;
= Põhiline funktsionaalsus =&lt;br /&gt;
&lt;br /&gt;
* Kasutaja saab lisada üks kuni mitu arvutiskeemi&lt;br /&gt;
* Skeemile saab hakata ükshaaval lisama juppe (emaplaat, protsessor, mälud jne)&lt;br /&gt;
* Iga kord kui mingi jupp skeemi lisatakse, kitsendab see ülejäänud juppide valikut - näiteks LGA1151 liidesega emaplaadile ei õnnestu lisada AMD protsessorit jne&lt;br /&gt;
* Nii pooleliolevaid kui valminud skeeme saab salvestada&lt;br /&gt;
* Igal jupil on oma vaade koos tehnilise infoga&lt;br /&gt;
&lt;br /&gt;
= Nice to have =&lt;br /&gt;
&lt;br /&gt;
* Parima hinna kuvamine (nt Amazon, Newegg)&lt;br /&gt;
* Komponentide võrdlus&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 1: XML =&lt;br /&gt;
&lt;br /&gt;
== Teema ==&lt;br /&gt;
Uute arvutikomponentide olemasolevatesse kategooriatesse lisamiseks kasutab administraator ankeeti, mille salvestamisel ja andmete serverisse edastamiseks tekitatakse järgmine XML, kus on võimalik korraga suur hulk erinevaid arvutikomponente lisada, aga võib ka ainult ühe komponendi korraga saata.&lt;br /&gt;
&lt;br /&gt;
== XML==&lt;br /&gt;
&amp;lt;pre&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;components&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cases&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;NZXT&amp;quot; name=&amp;quot;S340&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;3&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;364&amp;quot; maxCpuHeight=&amp;quot;161&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;red&amp;quot; price=&amp;quot;66.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Deepcool&amp;quot; name=&amp;quot;TESSERACT SW&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;2&amp;quot; bay3=&amp;quot;4&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;light blue&amp;quot; price=&amp;quot;38.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Xion&amp;quot; name =&amp;quot;XON-310_BK&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;1&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;22.98&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;750D&amp;quot; type=&amp;quot;Full tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;3&amp;quot; bay3=&amp;quot;6&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;450&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;149.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
  &amp;lt;/cases&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpus&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.2&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;74&amp;quot; price=&amp;quot;327.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.8&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;69&amp;quot; price=&amp;quot;233.89&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.0&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;71&amp;quot; price=&amp;quot;316.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.5&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;61&amp;quot; price=&amp;quot;219.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;E5-2699 V3&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Xeon&amp;quot; family=&amp;quot;Haswell&amp;quot; socket=&amp;quot;LGA2011-3&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;18&amp;quot; threads=&amp;quot;36&amp;quot; ecc=&amp;quot;true&amp;quot; speed=&amp;quot;2.3&amp;quot; TDP=&amp;quot;145&amp;quot; lithography=&amp;quot;22&amp;quot; maxPowerDraw=&amp;quot;120&amp;quot; price=&amp;quot;3410.46&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;AMD&amp;quot; name=&amp;quot;1800X&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Ryzen 7&amp;quot; family=&amp;quot;Ryzen&amp;quot; socket=&amp;quot;AM4&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;8&amp;quot; threads=&amp;quot;16&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.6&amp;quot; TDP=&amp;quot;95&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;82&amp;quot; price=&amp;quot;469.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
  &amp;lt;/cpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpucoolers&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Cooler Master&amp;quot; name=&amp;quot;Hyper 212 EVO&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;1&amp;quot; height=&amp;quot;159&amp;quot; price=&amp;quot;24.88&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA775&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;H100i v2&amp;quot; liquid=&amp;quot;true&amp;quot; rad=&amp;quot;240&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;&amp;quot; price=&amp;quot;99.99&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Noctua&amp;quot; name=&amp;quot;NH-D15&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;165&amp;quot; price=&amp;quot;85.49&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
  &amp;lt;/cpucoolers&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;gpus&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;PowerColor&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX460&amp;quot; series=&amp;quot;Red Dragon&amp;quot; vram=&amp;quot;2&amp;quot; psuPin=&amp;quot;&amp;quot; length=&amp;quot;226&amp;quot; maxPowerDraw=&amp;quot;130&amp;quot; price=&amp;quot;73.98&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;Sapphire&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX480&amp;quot; series=&amp;quot;Nitro+&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;8&amp;quot; length=&amp;quot;240&amp;quot; maxPowerDraw=&amp;quot;150&amp;quot; price=&amp;quot;253.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;MSI&amp;quot; brandname=&amp;quot;Geforce&amp;quot; codename=&amp;quot;GTX1070&amp;quot; series=&amp;quot;Quick Silver OC&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;6+8&amp;quot; length=&amp;quot;279&amp;quot; maxPowerDraw=&amp;quot;170&amp;quot; price=&amp;quot;409.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
  &amp;lt;/gpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;memorychips&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Kingston&amp;quot; name=&amp;quot;ValueRAM&amp;quot; type=&amp;quot;DIMM&amp;quot; rank=&amp;quot;single&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;2133&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;yes&amp;quot; price=&amp;quot;67.58&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;Dominator Platinum&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;3000&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;2&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;123.25&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;ADATA&amp;quot; name=&amp;quot;&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR3&amp;quot; speed=&amp;quot;1600&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;88.29&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
  &amp;lt;/memorychips&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;motherboards&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Z170-A&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;Z170&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3400&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;152.99&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;ASRock&amp;quot; name=&amp;quot;H110M-HDS&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; chipset=&amp;quot;H110&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;2&amp;quot; maxMemory=&amp;quot;32&amp;quot; maxMemorySpeed=&amp;quot;2133&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;37.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Prime X370-PRO&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;X370&amp;quot; socket=&amp;quot;AM4&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3200&amp;quot; sata3=&amp;quot;8&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;162.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
  &amp;lt;/motherboards&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;psus&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;EVGA&amp;quot; name=&amp;quot;SuperNOVA 650&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;650&amp;quot; eff80plus=&amp;quot;gold&amp;quot; modular=&amp;quot;full&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;be Quiet!&amp;quot; name=&amp;quot;Pure Power L8 600W&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;600&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;no&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;CX550M&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;550&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;semi&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;2&amp;quot; price=&amp;quot;43.98&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
  &amp;lt;/psus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;storages&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;850 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;2048&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;823.14&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Intel&amp;quot; name=&amp;quot;DC P3608&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;4096&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;pcie8x&amp;quot; formFactor=&amp;quot;pcie&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;8867.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;960 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;m.2&amp;quot; formFactor=&amp;quot;m.2-2280&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;629.95&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Western Digital&amp;quot; name=&amp;quot;Black&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;6144&amp;quot; cache=&amp;quot;128&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;279.00&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Seagate&amp;quot; name=&amp;quot;BarraCuda Pro&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;10240&amp;quot; cache=&amp;quot;256&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;429.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Hitachi&amp;quot; name=&amp;quot;Travelstar&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;32&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;53.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
  &amp;lt;/storages&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/components&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML skeem (XSD) ==&lt;br /&gt;
&amp;lt;pre&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;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;cases&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;case&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay5&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psu&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxGpuLength&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxCpuHeight&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;primaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;secondaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cooler&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;family&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;iGPU&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cores&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;threads&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ecc&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;TDP&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;lithography&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpucoolers&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;sockets&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;liquid&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rad&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;fans&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;height&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;gpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;gpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brandname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;codename&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;vram&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psuPin&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;length&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;memorychips&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;memorychip&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rank&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cas&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;gen&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;moduleSize&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modules&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ECC&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;motherboards&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;motherboard&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;chipset&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memoryType&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memorySlots&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemory&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemorySpeed&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;video&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;sata3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ethernet&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;usb3&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;psus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;psu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;wattage&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;eff80plus&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modular&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6p2&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;storages&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;storage&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;capacity&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cache&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;interface&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rpm&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 1 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added computer parts:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;child::*/child::*&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 2 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added CPU coolers:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;cpucoolers/cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
== XML retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR Talk:DevHelpVR] &amp;lt;br&amp;gt;&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Talk:Ninjas_in_pyjamas]&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 2: Veebirakendus =&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 3: Klientrakendus =&lt;br /&gt;
= (b)logi =&lt;br /&gt;
&lt;br /&gt;
* 27/03/2017: Tehtud retsensioonid meeskondadele&lt;br /&gt;
* 27/03/2017: XML ja XSD parandatud ja täiendatud vastavalt meeskonna JRT tagasisidele https://wiki.itcollege.ee/index.php/JRT#Retsensioon_JRT&lt;br /&gt;
* 20/03/2017: Loodud Wiki leht, jagatud ülesanded&lt;br /&gt;
* 20/03/2017: Projekti esimene osa valmis&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=119741</id>
		<title>PC KartKicker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=119741"/>
		<updated>2017-03-27T19:09:21Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* XML retsensioonid */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
* Jan Eerik&lt;br /&gt;
&lt;br /&gt;
= Idee =&lt;br /&gt;
&lt;br /&gt;
Käesolev veebirakendus on asendamatu abimees arvuti kokkupanekul (võrdlemisi tugevalt inspireeritud https://pcpartpicker.com).&lt;br /&gt;
&lt;br /&gt;
Kuna teatavasti vajab arvuti töötamiseks kindlaid juppe mingis aktsepteeritud konfiguratsioonis, võimaldab meie rakendus välistada mitteühilduva raudvara &amp;quot;jõuga&amp;quot; ühildamist ja abistab kasutajal optimaalse konfiguratsiooni valimist.&lt;br /&gt;
&lt;br /&gt;
= Põhiline funktsionaalsus =&lt;br /&gt;
&lt;br /&gt;
* Kasutaja saab lisada üks kuni mitu arvutiskeemi&lt;br /&gt;
* Skeemile saab hakata ükshaaval lisama juppe (emaplaat, protsessor, mälud jne)&lt;br /&gt;
* Iga kord kui mingi jupp skeemi lisatakse, kitsendab see ülejäänud juppide valikut - näiteks LGA1151 liidesega emaplaadile ei õnnestu lisada AMD protsessorit jne&lt;br /&gt;
* Nii pooleliolevaid kui valminud skeeme saab salvestada&lt;br /&gt;
* Igal jupil on oma vaade koos tehnilise infoga&lt;br /&gt;
&lt;br /&gt;
= Nice to have =&lt;br /&gt;
&lt;br /&gt;
* Parima hinna kuvamine (nt Amazon, Newegg)&lt;br /&gt;
* Komponentide võrdlus&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 1: XML =&lt;br /&gt;
&lt;br /&gt;
== Teema ==&lt;br /&gt;
Uute arvutikomponentide olemasolevatesse kategooriatesse lisamiseks kasutab administraator ankeeti, mille salvestamisel ja andmete serverisse edastamiseks tekitatakse järgmine XML, kus on võimalik korraga suur hulk erinevaid arvutikomponente lisada, aga võib ka ainult ühe komponendi korraga saata.&lt;br /&gt;
&lt;br /&gt;
== XML==&lt;br /&gt;
&amp;lt;pre&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;components&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cases&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;NZXT&amp;quot; name=&amp;quot;S340&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;3&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;364&amp;quot; maxCpuHeight=&amp;quot;161&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;red&amp;quot; price=&amp;quot;66.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Deepcool&amp;quot; name=&amp;quot;TESSERACT SW&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;2&amp;quot; bay3=&amp;quot;4&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;light blue&amp;quot; price=&amp;quot;38.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Xion&amp;quot; name =&amp;quot;XON-310_BK&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;1&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;22.98&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;750D&amp;quot; type=&amp;quot;Full tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;3&amp;quot; bay3=&amp;quot;6&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;450&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;149.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
  &amp;lt;/cases&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpus&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.2&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;74&amp;quot; price=&amp;quot;327.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.8&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;69&amp;quot; price=&amp;quot;233.89&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.0&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;71&amp;quot; price=&amp;quot;316.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.5&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;61&amp;quot; price=&amp;quot;219.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;E5-2699 V3&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Xeon&amp;quot; family=&amp;quot;Haswell&amp;quot; socket=&amp;quot;LGA2011-3&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;18&amp;quot; threads=&amp;quot;36&amp;quot; ecc=&amp;quot;true&amp;quot; speed=&amp;quot;2.3&amp;quot; TDP=&amp;quot;145&amp;quot; lithography=&amp;quot;22&amp;quot; maxPowerDraw=&amp;quot;120&amp;quot; price=&amp;quot;3410.46&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;AMD&amp;quot; name=&amp;quot;1800X&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Ryzen 7&amp;quot; family=&amp;quot;Ryzen&amp;quot; socket=&amp;quot;AM4&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;8&amp;quot; threads=&amp;quot;16&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.6&amp;quot; TDP=&amp;quot;95&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;82&amp;quot; price=&amp;quot;469.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
  &amp;lt;/cpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpucoolers&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Cooler Master&amp;quot; name=&amp;quot;Hyper 212 EVO&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;1&amp;quot; height=&amp;quot;159&amp;quot; price=&amp;quot;24.88&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA775&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;H100i v2&amp;quot; liquid=&amp;quot;true&amp;quot; rad=&amp;quot;240&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;&amp;quot; price=&amp;quot;99.99&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Noctua&amp;quot; name=&amp;quot;NH-D15&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;165&amp;quot; price=&amp;quot;85.49&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
  &amp;lt;/cpucoolers&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;gpus&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;PowerColor&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX460&amp;quot; series=&amp;quot;Red Dragon&amp;quot; vram=&amp;quot;2&amp;quot; psuPin=&amp;quot;&amp;quot; length=&amp;quot;226&amp;quot; maxPowerDraw=&amp;quot;130&amp;quot; price=&amp;quot;73.98&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;Sapphire&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX480&amp;quot; series=&amp;quot;Nitro+&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;8&amp;quot; length=&amp;quot;240&amp;quot; maxPowerDraw=&amp;quot;150&amp;quot; price=&amp;quot;253.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;MSI&amp;quot; brandname=&amp;quot;Geforce&amp;quot; codename=&amp;quot;GTX1070&amp;quot; series=&amp;quot;Quick Silver OC&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;6+8&amp;quot; length=&amp;quot;279&amp;quot; maxPowerDraw=&amp;quot;170&amp;quot; price=&amp;quot;409.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
  &amp;lt;/gpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;memorychips&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Kingston&amp;quot; name=&amp;quot;ValueRAM&amp;quot; type=&amp;quot;DIMM&amp;quot; rank=&amp;quot;single&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;2133&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;yes&amp;quot; price=&amp;quot;67.58&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;Dominator Platinum&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;3000&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;2&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;123.25&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;ADATA&amp;quot; name=&amp;quot;&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR3&amp;quot; speed=&amp;quot;1600&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;88.29&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
  &amp;lt;/memorychips&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;motherboards&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Z170-A&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;Z170&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3400&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;152.99&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;ASRock&amp;quot; name=&amp;quot;H110M-HDS&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; chipset=&amp;quot;H110&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;2&amp;quot; maxMemory=&amp;quot;32&amp;quot; maxMemorySpeed=&amp;quot;2133&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;37.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Prime X370-PRO&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;X370&amp;quot; socket=&amp;quot;AM4&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3200&amp;quot; sata3=&amp;quot;8&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;162.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
  &amp;lt;/motherboards&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;psus&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;EVGA&amp;quot; name=&amp;quot;SuperNOVA 650&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;650&amp;quot; eff80plus=&amp;quot;gold&amp;quot; modular=&amp;quot;full&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;be Quiet!&amp;quot; name=&amp;quot;Pure Power L8 600W&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;600&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;no&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;CX550M&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;550&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;semi&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;2&amp;quot; price=&amp;quot;43.98&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
  &amp;lt;/psus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;storages&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;850 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;2048&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;823.14&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Intel&amp;quot; name=&amp;quot;DC P3608&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;4096&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;pcie8x&amp;quot; formFactor=&amp;quot;pcie&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;8867.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;960 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;m.2&amp;quot; formFactor=&amp;quot;m.2-2280&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;629.95&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Western Digital&amp;quot; name=&amp;quot;Black&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;6144&amp;quot; cache=&amp;quot;128&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;279.00&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Seagate&amp;quot; name=&amp;quot;BarraCuda Pro&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;10240&amp;quot; cache=&amp;quot;256&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;429.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Hitachi&amp;quot; name=&amp;quot;Travelstar&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;32&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;53.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
  &amp;lt;/storages&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/components&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML skeem (XSD) ==&lt;br /&gt;
&amp;lt;pre&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;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;cases&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;case&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay5&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psu&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxGpuLength&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxCpuHeight&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;primaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;secondaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cooler&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;family&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;iGPU&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cores&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;threads&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ecc&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;TDP&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;lithography&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpucoolers&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;sockets&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;liquid&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rad&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;fans&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;height&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;gpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;gpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brandname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;codename&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;vram&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psuPin&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;length&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;memorychips&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;memorychip&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rank&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cas&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;gen&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;moduleSize&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modules&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ECC&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;motherboards&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;motherboard&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;chipset&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memoryType&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memorySlots&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemory&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemorySpeed&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;video&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;sata3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ethernet&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;usb3&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;psus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;psu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;wattage&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;eff80plus&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modular&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6p2&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;storages&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;storage&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;capacity&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cache&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;interface&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rpm&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 1 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added computer parts:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;child::*/child::*&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 2 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added CPU coolers:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;cpucoolers/cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
== XML retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR Talk:DevHelpVR] &amp;lt;br&amp;gt;&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Talk:Ninjas_in_pyjamas]&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 2: Veebirakendus =&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 3: Klientrakendus =&lt;br /&gt;
= (b)logi =&lt;br /&gt;
&lt;br /&gt;
* 27/03/2017: XML ja XSD parandatud ja täiendatud vastavalt meeskonna JRT tagasisidele https://wiki.itcollege.ee/index.php/JRT#Retsensioon_JRT&lt;br /&gt;
* 20/03/2017: Loodud Wiki leht, jagatud ülesanded&lt;br /&gt;
* 20/03/2017: Projekti esimene osa valmis&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=119740</id>
		<title>PC KartKicker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=119740"/>
		<updated>2017-03-27T19:09:13Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* XML retsensioonid */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
* Jan Eerik&lt;br /&gt;
&lt;br /&gt;
= Idee =&lt;br /&gt;
&lt;br /&gt;
Käesolev veebirakendus on asendamatu abimees arvuti kokkupanekul (võrdlemisi tugevalt inspireeritud https://pcpartpicker.com).&lt;br /&gt;
&lt;br /&gt;
Kuna teatavasti vajab arvuti töötamiseks kindlaid juppe mingis aktsepteeritud konfiguratsioonis, võimaldab meie rakendus välistada mitteühilduva raudvara &amp;quot;jõuga&amp;quot; ühildamist ja abistab kasutajal optimaalse konfiguratsiooni valimist.&lt;br /&gt;
&lt;br /&gt;
= Põhiline funktsionaalsus =&lt;br /&gt;
&lt;br /&gt;
* Kasutaja saab lisada üks kuni mitu arvutiskeemi&lt;br /&gt;
* Skeemile saab hakata ükshaaval lisama juppe (emaplaat, protsessor, mälud jne)&lt;br /&gt;
* Iga kord kui mingi jupp skeemi lisatakse, kitsendab see ülejäänud juppide valikut - näiteks LGA1151 liidesega emaplaadile ei õnnestu lisada AMD protsessorit jne&lt;br /&gt;
* Nii pooleliolevaid kui valminud skeeme saab salvestada&lt;br /&gt;
* Igal jupil on oma vaade koos tehnilise infoga&lt;br /&gt;
&lt;br /&gt;
= Nice to have =&lt;br /&gt;
&lt;br /&gt;
* Parima hinna kuvamine (nt Amazon, Newegg)&lt;br /&gt;
* Komponentide võrdlus&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 1: XML =&lt;br /&gt;
&lt;br /&gt;
== Teema ==&lt;br /&gt;
Uute arvutikomponentide olemasolevatesse kategooriatesse lisamiseks kasutab administraator ankeeti, mille salvestamisel ja andmete serverisse edastamiseks tekitatakse järgmine XML, kus on võimalik korraga suur hulk erinevaid arvutikomponente lisada, aga võib ka ainult ühe komponendi korraga saata.&lt;br /&gt;
&lt;br /&gt;
== XML==&lt;br /&gt;
&amp;lt;pre&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;components&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cases&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;NZXT&amp;quot; name=&amp;quot;S340&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;3&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;364&amp;quot; maxCpuHeight=&amp;quot;161&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;red&amp;quot; price=&amp;quot;66.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Deepcool&amp;quot; name=&amp;quot;TESSERACT SW&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;ATX&amp;quot; bay5=&amp;quot;2&amp;quot; bay3=&amp;quot;4&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;light blue&amp;quot; price=&amp;quot;38.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Xion&amp;quot; name =&amp;quot;XON-310_BK&amp;quot; type=&amp;quot;Mid Tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;0&amp;quot; bay3=&amp;quot;1&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;350&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;22.98&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
    &amp;lt;case brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;750D&amp;quot; type=&amp;quot;Full tower&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; bay5=&amp;quot;3&amp;quot; bay3=&amp;quot;6&amp;quot; psu=&amp;quot;&amp;quot; maxGpuLength=&amp;quot;450&amp;quot; maxCpuHeight=&amp;quot;170&amp;quot; primaryColor=&amp;quot;black&amp;quot; secondaryColor=&amp;quot;&amp;quot; price=&amp;quot;149.99&amp;quot;&amp;gt;&amp;lt;/case&amp;gt;&lt;br /&gt;
  &amp;lt;/cases&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpus&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.2&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;74&amp;quot; price=&amp;quot;327.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;7600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Kaby Lake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 630&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.8&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;69&amp;quot; price=&amp;quot;233.89&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6700k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i7&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;8&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;4.0&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;71&amp;quot; price=&amp;quot;316.98&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;6600k&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Core i5&amp;quot; family=&amp;quot;Skylake&amp;quot; socket=&amp;quot;LGA1151&amp;quot; iGPU=&amp;quot;HD 530&amp;quot; cores=&amp;quot;4&amp;quot; threads=&amp;quot;4&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.5&amp;quot; TDP=&amp;quot;91&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;61&amp;quot; price=&amp;quot;219.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;Intel&amp;quot; name=&amp;quot;E5-2699 V3&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Xeon&amp;quot; family=&amp;quot;Haswell&amp;quot; socket=&amp;quot;LGA2011-3&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;18&amp;quot; threads=&amp;quot;36&amp;quot; ecc=&amp;quot;true&amp;quot; speed=&amp;quot;2.3&amp;quot; TDP=&amp;quot;145&amp;quot; lithography=&amp;quot;22&amp;quot; maxPowerDraw=&amp;quot;120&amp;quot; price=&amp;quot;3410.46&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
    &amp;lt;cpu brand=&amp;quot;AMD&amp;quot; name=&amp;quot;1800X&amp;quot; cooler=&amp;quot;false&amp;quot; series=&amp;quot;Ryzen 7&amp;quot; family=&amp;quot;Ryzen&amp;quot; socket=&amp;quot;AM4&amp;quot; iGPU=&amp;quot;&amp;quot; cores=&amp;quot;8&amp;quot; threads=&amp;quot;16&amp;quot; ecc=&amp;quot;false&amp;quot; speed=&amp;quot;3.6&amp;quot; TDP=&amp;quot;95&amp;quot; lithography=&amp;quot;14&amp;quot; maxPowerDraw=&amp;quot;82&amp;quot; price=&amp;quot;469.99&amp;quot;&amp;gt;&amp;lt;/cpu&amp;gt;&lt;br /&gt;
  &amp;lt;/cpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cpucoolers&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Cooler Master&amp;quot; name=&amp;quot;Hyper 212 EVO&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;1&amp;quot; height=&amp;quot;159&amp;quot; price=&amp;quot;24.88&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA775&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;H100i v2&amp;quot; liquid=&amp;quot;true&amp;quot; rad=&amp;quot;240&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;&amp;quot; price=&amp;quot;99.99&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
    &amp;lt;cpucooler brand=&amp;quot;Noctua&amp;quot; name=&amp;quot;NH-D15&amp;quot; liquid=&amp;quot;false&amp;quot; fans=&amp;quot;2&amp;quot; height=&amp;quot;165&amp;quot; price=&amp;quot;85.49&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;sockets&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;AM3+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM1&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;FM2+&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1150&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1151&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1155&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1156&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA1366&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011&amp;lt;/socket&amp;gt;&lt;br /&gt;
        &amp;lt;socket&amp;gt;LGA2011-3&amp;lt;/socket&amp;gt;&lt;br /&gt;
      &amp;lt;/sockets&amp;gt;&lt;br /&gt;
    &amp;lt;/cpucooler&amp;gt;&lt;br /&gt;
  &amp;lt;/cpucoolers&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;gpus&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;PowerColor&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX460&amp;quot; series=&amp;quot;Red Dragon&amp;quot; vram=&amp;quot;2&amp;quot; psuPin=&amp;quot;&amp;quot; length=&amp;quot;226&amp;quot; maxPowerDraw=&amp;quot;130&amp;quot; price=&amp;quot;73.98&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;Sapphire&amp;quot; brandname=&amp;quot;Radeon&amp;quot; codename=&amp;quot;RX480&amp;quot; series=&amp;quot;Nitro+&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;8&amp;quot; length=&amp;quot;240&amp;quot; maxPowerDraw=&amp;quot;150&amp;quot; price=&amp;quot;253.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
    &amp;lt;gpu manufacturer=&amp;quot;MSI&amp;quot; brandname=&amp;quot;Geforce&amp;quot; codename=&amp;quot;GTX1070&amp;quot; series=&amp;quot;Quick Silver OC&amp;quot; vram=&amp;quot;8&amp;quot; psuPin=&amp;quot;6+8&amp;quot; length=&amp;quot;279&amp;quot; maxPowerDraw=&amp;quot;170&amp;quot; price=&amp;quot;409.99&amp;quot;&amp;gt;&amp;lt;/gpu&amp;gt;&lt;br /&gt;
  &amp;lt;/gpus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;memorychips&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Kingston&amp;quot; name=&amp;quot;ValueRAM&amp;quot; type=&amp;quot;DIMM&amp;quot; rank=&amp;quot;single&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;2133&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;yes&amp;quot; price=&amp;quot;67.58&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;Dominator Platinum&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR4&amp;quot; speed=&amp;quot;3000&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;2&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;123.25&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
    &amp;lt;memorychip brand=&amp;quot;ADATA&amp;quot; name=&amp;quot;&amp;quot; type=&amp;quot;DIMM&amp;quot; cas=&amp;quot;15&amp;quot; gen=&amp;quot;DDR3&amp;quot; speed=&amp;quot;1600&amp;quot; moduleSize=&amp;quot;8&amp;quot; modules=&amp;quot;1&amp;quot; ECC=&amp;quot;no&amp;quot; price=&amp;quot;88.29&amp;quot;&amp;gt;&amp;lt;/memorychip&amp;gt;&lt;br /&gt;
  &amp;lt;/memorychips&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;motherboards&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Z170-A&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;Z170&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3400&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;152.99&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;ASRock&amp;quot; name=&amp;quot;H110M-HDS&amp;quot; formFactor=&amp;quot;MicroATX&amp;quot; chipset=&amp;quot;H110&amp;quot; socket=&amp;quot;LGA1151&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;2&amp;quot; maxMemory=&amp;quot;32&amp;quot; maxMemorySpeed=&amp;quot;2133&amp;quot; sata3=&amp;quot;4&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;37.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
    &amp;lt;motherboard brand=&amp;quot;Asus&amp;quot; name=&amp;quot;Prime X370-PRO&amp;quot; formFactor=&amp;quot;ATX&amp;quot; chipset=&amp;quot;X370&amp;quot; socket=&amp;quot;AM4&amp;quot; memoryType=&amp;quot;DDR4&amp;quot; memorySlots=&amp;quot;4&amp;quot; maxMemory=&amp;quot;64&amp;quot; maxMemorySpeed=&amp;quot;3200&amp;quot; sata3=&amp;quot;8&amp;quot; ethernet=&amp;quot;1000&amp;quot; usb3=&amp;quot;true&amp;quot; price=&amp;quot;162.98&amp;quot;&amp;gt;&amp;lt;/motherboard&amp;gt;&lt;br /&gt;
  &amp;lt;/motherboards&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;psus&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;EVGA&amp;quot; name=&amp;quot;SuperNOVA 650&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;650&amp;quot; eff80plus=&amp;quot;gold&amp;quot; modular=&amp;quot;full&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;be Quiet!&amp;quot; name=&amp;quot;Pure Power L8 600W&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;600&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;no&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;4&amp;quot; price=&amp;quot;77.88&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
    &amp;lt;psu brand=&amp;quot;Corsair&amp;quot; name=&amp;quot;CX550M&amp;quot; formFactor=&amp;quot;ATX&amp;quot; wattage=&amp;quot;550&amp;quot; eff80plus=&amp;quot;bronze&amp;quot; modular=&amp;quot;semi&amp;quot; pcie6=&amp;quot;0&amp;quot; pcie6p2=&amp;quot;2&amp;quot; price=&amp;quot;43.98&amp;quot;&amp;gt;&amp;lt;/psu&amp;gt;&lt;br /&gt;
  &amp;lt;/psus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;storages&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;850 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;2048&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;823.14&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Intel&amp;quot; name=&amp;quot;DC P3608&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;4096&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;pcie8x&amp;quot; formFactor=&amp;quot;pcie&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;8867.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Samsung&amp;quot; name=&amp;quot;960 PRO&amp;quot; type=&amp;quot;ssd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;&amp;quot; interface=&amp;quot;m.2&amp;quot; formFactor=&amp;quot;m.2-2280&amp;quot; rpm=&amp;quot;&amp;quot; price=&amp;quot;629.95&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Western Digital&amp;quot; name=&amp;quot;Black&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;6144&amp;quot; cache=&amp;quot;128&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;279.00&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Seagate&amp;quot; name=&amp;quot;BarraCuda Pro&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;10240&amp;quot; cache=&amp;quot;256&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;3,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;429.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
    &amp;lt;storage brand=&amp;quot;Hitachi&amp;quot; name=&amp;quot;Travelstar&amp;quot; type=&amp;quot;hdd&amp;quot; capacity=&amp;quot;1024&amp;quot; cache=&amp;quot;32&amp;quot; interface=&amp;quot;sata3&amp;quot; formFactor=&amp;quot;2,5&amp;quot; rpm=&amp;quot;7200&amp;quot; price=&amp;quot;53.99&amp;quot;&amp;gt;&amp;lt;/storage&amp;gt;&lt;br /&gt;
  &amp;lt;/storages&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/components&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XML skeem (XSD) ==&lt;br /&gt;
&amp;lt;pre&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;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;cases&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;case&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay5&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;bay3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psu&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxGpuLength&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxCpuHeight&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;primaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;secondaryColor&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cooler&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;family&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;iGPU&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cores&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;threads&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ecc&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;TDP&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;lithography&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;cpucoolers&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;sockets&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;liquid&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rad&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;fans&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;height&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;gpus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;gpu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brandname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;codename&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;series&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;vram&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;psuPin&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;length&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxPowerDraw&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;memorychips&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;memorychip&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rank&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cas&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;gen&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;speed&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;moduleSize&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modules&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ECC&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;motherboards&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;motherboard&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;chipset&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;socket&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memoryType&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;memorySlots&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemory&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;maxMemorySpeed&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;video&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;sata3&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ethernet&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;usb3&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;psus&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;psu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;wattage&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;eff80plus&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;modular&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;pcie6p2&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&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;storages&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;storage&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;brand&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;capacity&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;cache&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;interface&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;formFactor&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rpm&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 1 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added computer parts:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;child::*/child::*&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSLT 2 ==&lt;br /&gt;
&amp;lt;pre&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;
&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;/components&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Added CPU coolers:&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding =&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#58FAF4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Brand&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;cpucoolers/cpucooler&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@brand&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;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;
      &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;/pre&amp;gt;&lt;br /&gt;
== XML retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR Talk:DevHelpVR]&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Talk:Ninjas_in_pyjamas]&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 2: Veebirakendus =&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 3: Klientrakendus =&lt;br /&gt;
= (b)logi =&lt;br /&gt;
&lt;br /&gt;
* 27/03/2017: XML ja XSD parandatud ja täiendatud vastavalt meeskonna JRT tagasisidele https://wiki.itcollege.ee/index.php/JRT#Retsensioon_JRT&lt;br /&gt;
* 20/03/2017: Loodud Wiki leht, jagatud ülesanded&lt;br /&gt;
* 20/03/2017: Projekti esimene osa valmis&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017&amp;diff=119739</id>
		<title>Kodutöö aines &quot;Võrgurakendused II: hajussüsteemide ehitamine&quot; 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017&amp;diff=119739"/>
		<updated>2017-03-27T19:08:17Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Meeskond: PC KartKicker */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
__NOINDEX__&lt;br /&gt;
&lt;br /&gt;
=Kodutöö aines &amp;quot;Võrgurakendused II: hajussüsteemide ehitamine&amp;quot; 2017=&lt;br /&gt;
==Eesmärk==&lt;br /&gt;
Saada praktiline kogemus hajussüsteemide ehitamisest XML(SOAP) või Rest veebiteenusel ja sellele klientrakenduse loomise abil ning süvendada meeskonnatööoskust. &lt;br /&gt;
*SOAP veebiteenuse puhul eeldatakse WCF tehnoloogia kasutamist. Vanema põlvkonna ASP.NET veebiteenuse loomine ei ole lubatud, kuna seda ei toeta ka Microsoft enam tänasel päeval.&lt;br /&gt;
*REST teenuste loomisel tuleks kasutada ASP.NET Web API võimalusi.&lt;br /&gt;
&lt;br /&gt;
Kaugem eesmärk on loomulikult hinne :).&lt;br /&gt;
&lt;br /&gt;
==Reeglid==&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendused (soovitavalt vähemalt kaks)endaloodud veebiteenusele&lt;br /&gt;
&lt;br /&gt;
Ühte projektimeeskonda kuulub 3..4 tudengit ning ühel teemal teostab projekti üks või mitu meeskonda. 1,2 ja viie liikmelised meeskonnad tuleks õppejõuga eraldi kooskõlastada.&lt;br /&gt;
&lt;br /&gt;
Töö käiku kajastatakse  http://wiki.itcollege.ee keskkonnas. Wikilehe täitmise eesmärke on kaks: nii on võimalik kirja panna kõik mõtted ja ideed (ning nendest jääb jälg) ning õppejõul on hiljem võimalik saada ülevaade iga projektimeeskonna liikme panusest.&lt;br /&gt;
&lt;br /&gt;
==Tähtajad==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;XML fail&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#XML_andmefail NB! Täpsem info]&lt;br /&gt;
** XML fail, stiilifail ja skeemifail peavad olema valmis ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;20. märts 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid XML-failide kohta peavad tehtud olema &#039;&#039;&#039;27. märts 2017&#039;&#039;&#039;.&lt;br /&gt;
** &#039;&#039;&#039;Meeskonnad on loonud omale enda wiki lehe, kuhu kirjeldavad meeskonna ja panevad nad üles oma tööd. Lisaks hakkavad kogunema ka sinna teiste gruppide poolt kirjutatavad retsensioonid. &amp;lt;ins&amp;gt;Meeskonnalehed lingitakse selle lehe lõppu Meeskonna pealkirja alla.&amp;lt;/ins&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Veebiteenus&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#Veebiteenus NB! Täpsem info]&lt;br /&gt;
** Veebiteenuse analüüs peab olema valmis, esitatud ja wikilehel kirjeldatud hiljemalt: &#039;&#039;&#039;17.aprill 2017&#039;&#039;&#039;&lt;br /&gt;
** Veebiteenus peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;29. mai 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid veebiteenuste kohta peavad tehtud olema &#039;&#039;&#039;08. juuni 2017&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--** Veebiteenus tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Klientrakendused&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#Klientrakendus NB! Täpsem info]&lt;br /&gt;
** Klientrakendused peavad olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;29. mai 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid klientrakenduste kohta peavad tehtud olema &#039;&#039;&#039;08. juuni 2017&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--** Klientrakendused tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--* &#039;&#039;&#039;Meeskonna kokkuvõttev aruanne&#039;&#039;&#039;&lt;br /&gt;
** Meeskonnatöö kokkuvõttev aruanne peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt 8.mai 2011&lt;br /&gt;
** Arvamused Meeskonnatöö kokkuvõtva aruande ja esitluse kohta tuleb esitada hiljemalt päev enne eksamit&lt;br /&gt;
** &#039;&#039;&#039;Meeskonna kokkuvõttev aruanne ja töö lõplik tulemus&#039;&#039;&#039; tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hindamine==&lt;br /&gt;
===Üldised kriteeriumid===&lt;br /&gt;
&lt;br /&gt;
Teostatuks loetakse projekt juhul, kui lähteülesanne on realiseeritud, lahendus on töötav, kuid esineb suuremaid vigu ning piirsituatsioonidega ei ole arvestatud.&lt;br /&gt;
&lt;br /&gt;
Maksimumtulemuse saavutamiseks peab projekt olema teostatud tehniliselt veatult ning varustatud dokumentatsiooniga, milles sisaldub  arendusprotsessi kirjeldus (peab selguma ka iga rühmaliikme panus projekti teostamisel), kasutajajuhend ning lahenduse kirjeldus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Maksimumtulemuse annab (vähemalt 4/6):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Majanduslik mõtlemine (kas loodav teenus ja rakendused oleks kasutatav ka ärilistel eesmärkidel)&lt;br /&gt;
* Mobiilrakendused &lt;br /&gt;
* AngularJS klientrakendus&lt;br /&gt;
* Kogukondade kaasamine&lt;br /&gt;
* Kasutajamugavus&lt;br /&gt;
* Läbimõeldud töökorraldus&lt;br /&gt;
* Lisavõimaluste realiseerimine (vt näidisteemad)&lt;br /&gt;
&lt;br /&gt;
===XML andmefail===&lt;br /&gt;
Ülesande täitmiseks tuleb luua XML fail andmete edastamiseks, selle XML faili skeemifail ning minimaalselt kaks sobivat XSL transformatsiooni faili loodud XML failis olevate andmete transformeerimiseks HTML formaati ja XML faili formaadi muutmiseks. Transformatsioonid peavad sisaldama midagi enamat, kui ainult üks for-each klausel. Transformatsiooni käigus peaks kasutama vajadusel parameetreid ning kindlasti ka erinevaid tingimuste kontrolle.&lt;br /&gt;
&lt;br /&gt;
XML-il peab olema vähemalt 4 loogilist dimensiooni.&lt;br /&gt;
 &amp;lt;dim1&amp;gt;&lt;br /&gt;
   &amp;lt;dim2&amp;gt;&lt;br /&gt;
     &amp;lt;dim3&amp;gt;&lt;br /&gt;
       &amp;lt;dim4&amp;gt;&lt;br /&gt;
       &amp;lt;/dim4&amp;gt;&lt;br /&gt;
     &amp;lt;/dim3&amp;gt;&lt;br /&gt;
   &amp;lt;/dim2&amp;gt;&lt;br /&gt;
 &amp;lt;/dim1&amp;gt;&lt;br /&gt;
Lisaks tuleb kasutada 3-el dimensioonil attribuute, mis one enamat, kui lihtsalt ID.&lt;br /&gt;
&lt;br /&gt;
Käesoleva ülesande käigus peab looma meeskonna ning selle wiki lehekülje&lt;br /&gt;
&lt;br /&gt;
===Veebiteenus===&lt;br /&gt;
Loodav veebiteenus peab võimaldama:&lt;br /&gt;
* Teenuse pakkumist&lt;br /&gt;
* &#039;&#039;&#039;Teenuse kasutajate tuvastamist ning haldamist&#039;&#039;&#039;&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes&lt;br /&gt;
* Teenuse poole pöördumiste arvu piiramist ja piirangute haldamist.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus peab toetama mitme kasutaja võimalust.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus tuleb luua kasutades &#039;&#039;Windows Communication Foundation&#039;&#039; või ASP.NET MVC  Web API tehnoloogiat&lt;br /&gt;
&lt;br /&gt;
Andmebaasis peab olema vähemalt 9 olemit ehk andmebaas on eeldus,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soovitav on luua teenus (FE) ja teenuse seadistamiseks ning kasutajate haldamiseks mõeldud rakendus (BE).&lt;br /&gt;
&lt;br /&gt;
===Klientrakendus===&lt;br /&gt;
Klientrakendus mõnele olemasolevale veebiteenusele, võib olla teostatud veebirakendusena, Silverlight, WPF või vormirakendusena.&lt;br /&gt;
&lt;br /&gt;
Variant1: teha klientrakendus enda loodud veebiteenusele &lt;br /&gt;
&lt;br /&gt;
Variant2: teha klientrakendus mõnele levinud veebiteenusele.&lt;br /&gt;
Näiteks: &lt;br /&gt;
* http://www.bing.com/developer&lt;br /&gt;
* http://www.flickr.com/services/api/response.soap.html&lt;br /&gt;
* http://developer.ebay.com/developercenter/windows/&lt;br /&gt;
* http://apiwiki.twitter.com/Getting-Started&lt;br /&gt;
&lt;br /&gt;
===Retsensioonid===&lt;br /&gt;
Retsensioon on üliõpilase iseseisva teadustöö kriitilise analüüsi põhjal koostatud argumenteeritud hinnang. Retsensioonis tuleb hinnata töö vastavust esitatud tingimustele, programmikoodi loetavust ning kommenteeritust, dokumentatsiooni ja kirjeldada puudusi. Retsensioonide põhjal on meeskondadel õigus oma projekte parandada enne määratud esitamistähtaja kättejõudmist.&lt;br /&gt;
&lt;br /&gt;
Retsensioon peab sisaldama minimaalselt...&lt;br /&gt;
* XML - ...200 sõna.&lt;br /&gt;
* Veebiteenus - ...600 sõna.&lt;br /&gt;
* Klientrakendus - ...600 sõna.&lt;br /&gt;
&lt;br /&gt;
Mõnelauselisest arvamusest ei piisa, kuna tegemist on grupi loodavate arvustustega, mitte individuaalsete arvustustega.&lt;br /&gt;
&lt;br /&gt;
==Konsultatsioonid==&lt;br /&gt;
 Igal projektimeeskonnal on piiramatu õigus saada õppejõu käest konsultatsiooni ja juhendamist oma&lt;br /&gt;
 töö tegemiseks, kas harjutuste ajal või pärast harjutusi ja loenguid. Eriaegade suhtes saab sõlmida&lt;br /&gt;
 õppejõuga kokkuleppeid kontaktidel&lt;br /&gt;
 mait.poska [ät] itcollege.ee või (+372 53 469 734)&lt;br /&gt;
 (teksti originaalautor Priit Raspel)&lt;br /&gt;
&lt;br /&gt;
=Teemad 2017 kevad=&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus mõnele olemasolevale või endaloodud veebiteenusele&lt;br /&gt;
&lt;br /&gt;
NB! XML andmefail ja veebiteenus ei pea olema omavahel seotud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Näidisteemad==&lt;br /&gt;
&lt;br /&gt;
===Nimede pakkumise teenus===&lt;br /&gt;
Mõte selles, et luua nimede baas, mille abil pakkuda rakenduse loojale sobiva algusega nimesid. Reaalne rakendus: &#039;&#039;autocompleter&#039;&#039; tarvis teenuse pakkumine&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua sobiva alguse järgi nimede pakkumise teenus:&lt;br /&gt;
* alates kahetähelisetest algustest pakkuda sobivad nimesid&lt;br /&gt;
* luua võimalus kasutajatel nimesid lisada&lt;br /&gt;
* luua võimalus administraatoril nimesid muuta/kustutada&lt;br /&gt;
* meeste ja naiste nimed peavad olema süsteemis eristatavad&lt;br /&gt;
* luua võimalus, mis võimaldab kuvada populaarseid nimesid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* luua võimalus, et nimi lisatakse baasi alles siis, kui administraatori õigustega inimene on selleks vastava loa andnud&lt;br /&gt;
&lt;br /&gt;
===Külastusstatistika teenus===&lt;br /&gt;
Mõte selles, et pakkuda teenust, kus kasutajal on võimalik registreerida külastused ning küsida oma külastusstatistikat.&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua külastusstatistika teenus:&lt;br /&gt;
* kasutaja saab teenuses registreerida külastusi&lt;br /&gt;
* kasutaja saab küsida külastusstatistikat päevade/kuude/kogu perioodi lõikes&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
&lt;br /&gt;
Lisavõimalused:&lt;br /&gt;
* luua võimalus registreerida alamlehtede külastusstatistikat&lt;br /&gt;
* luua võimalus külastusstatistikale lisaparameetrite lisamiseks (ip aadress, sirviku versioon jne)&lt;br /&gt;
&lt;br /&gt;
===Telefoniraamatu teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada kontakte ja nende seast otsida&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua telefoniraamatu teenus:&lt;br /&gt;
* kasutaja saab teenuses kontakte lisada ja kustutada&lt;br /&gt;
* kasutaja saab kontaktide nime/telefoninumbri jne abil otsida&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutajaid on võimalik lisada gruppidesse&lt;br /&gt;
* kasutajal on võimalik lisada vajalike kontaktandmete liike&lt;br /&gt;
* kasutajatel on võimalik jagada omavahel kontakte ja kontaktide grupper&lt;br /&gt;
&lt;br /&gt;
===RSS voogude kogumise ja uudiste kuvamise teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada talle huvipakkuvaid RSS vooge ja nendelt voogudelt uudiseid lugeda&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua RSS voogude haldusteenus:&lt;br /&gt;
* kasutaja saab teenuses RSS vooge lisada ja kustudada&lt;br /&gt;
* kasutaja saab pärida talle huvipakkuvate voogude viimaseid uudiseid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutaja saab RSS vooge vaadata eraldi või grupeeritult&lt;br /&gt;
* vooge peab puhverdama, kuna voogude lugemine võtab enamasti üsna palju aega &lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
= Meeskonnad 2017=&lt;br /&gt;
==Päevaõpe==&lt;br /&gt;
&lt;br /&gt;
===Meeskond: QView===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Semjon Greef&lt;br /&gt;
* Martin Nigul&lt;br /&gt;
* Martin Nõukas&lt;br /&gt;
* Margus Muru&lt;br /&gt;
* Lisandra Noor&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: QView]]&lt;br /&gt;
&lt;br /&gt;
Retsentsioon meeskonnale: [https://wiki.itcollege.ee/index.php/User_talk:Meeskond:_VeebiGurmaanid#M.C3.A4rkused: VeebiGurmaanid]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Redundant Rappers===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Taavi Kliss&lt;br /&gt;
*Kertu Nurmberg&lt;br /&gt;
*Anneli Asser&lt;br /&gt;
*Mart-Erki Nõumees&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: Redundant Rappers]]&lt;br /&gt;
&lt;br /&gt;
Meeskonna XML/XSD/XSLT : [https://wiki.itcollege.ee/index.php/Meeskond:_Redundant_Rappers#XML_.2F_XSD_.2F_XSLT]&lt;br /&gt;
&lt;br /&gt;
Meeskonna retsensioon meeskonnale Sense Of Direction: [https://wiki.itcollege.ee/index.php/Talk:Sense_Of_Direction]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Sense Of Direction===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Ilja Andrejev&lt;br /&gt;
*Aleksandr Babõkin&lt;br /&gt;
*Vladislav Lahtarin&lt;br /&gt;
*Vladislav Kovaltšuk&lt;br /&gt;
Meeskonna koduleht: [[Sense Of Direction]]&amp;lt;br&amp;gt;&lt;br /&gt;
XML/XSD/XSLT osa asub [https://wiki.itcollege.ee/index.php/Sense_Of_Direction#XML siin]&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon XML-failide kohta meeskonnale &amp;quot;Poly&amp;quot; [https://wiki.itcollege.ee/index.php/Sense_Of_Direction#Retsensioon_XML-failide_kohta_meeskonnale_.22Poly.22 siin]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/RK Meeskond: RK]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Raido Kivinurm&lt;br /&gt;
&lt;br /&gt;
Esimene osa: [https://wiki.itcollege.ee/index.php/RK#XML XML] / [https://wiki.itcollege.ee/index.php/RK#XSD XSD] / [https://wiki.itcollege.ee/index.php/RK#XSLT_HTML XSLT HTML] / [https://wiki.itcollege.ee/index.php/RK#XSLT_XML XSLT XML]&lt;br /&gt;
&amp;lt;BR&amp;gt; [https://wiki.itcollege.ee/index.php/RK#Retsensioonid Retsensioonid]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Team_Echo Meeskond: Echo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Vajak&lt;br /&gt;
* Janno Oolo&lt;br /&gt;
* Mari-Liis Oldja&lt;br /&gt;
* Arti Zirk&lt;br /&gt;
* Joosep Voolma&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Team_Echo#XML XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Meeskond:_Redundant_Rappers#Retsensioon_Team_Echo_poolt Retsensioon meeskonnale Redundant Rappers]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Bob%27s_Burgers Meeskond: Bob&#039;s Burgers]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Aleksei Kopõlov&lt;br /&gt;
*Sander Perens&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Bob%27s_Burgers#XML_Retsensioon_meeskonnale_VeebiGurmaanid Retsensioon meeskonnale &#039;&#039;&#039;VeebiGurmaanid&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/User:Meeskond:_VeebiGurmaanid Meeskond: VeebiGurmaanid]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Koit Kõrvel&lt;br /&gt;
* Marko Kask&lt;br /&gt;
* Melissa Eenmaa&lt;br /&gt;
* Joosep Koort&lt;br /&gt;
&lt;br /&gt;
Retsentsioon meeskonnale: [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_HelpOut HelpOut]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Muru Meeskond: Muru]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Murdho Savila&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Repi Meeskond: Repi]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Renet Pirso&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Blogify Retsensioon: BLOGIFY]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: HelpOut===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mikk Sarapuu&lt;br /&gt;
* Martin Paakspuu&lt;br /&gt;
* Kerdo Kullamäe&lt;br /&gt;
* Marvin Mardiat&lt;br /&gt;
* Piret Pomerants&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Meeskond:_HelpOut Meeskonna koduleht]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
* XML/XSLT/XSD retsensioon meeskonnale &#039;&#039;&#039;Falador&#039;&#039;&#039; asub [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_Falador siin]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/2017_Meeskond_Poly Meeskond: Poly]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kristian Kalm&lt;br /&gt;
* Roland Kontson&lt;br /&gt;
&lt;br /&gt;
=== Meeskond [https://wiki.itcollege.ee/index.php/Meeskond_%22Nope%22: Nope] ===&lt;br /&gt;
* Raido Vell&lt;br /&gt;
* Taavi Vesinurm&lt;br /&gt;
* Kaspar Kaal&lt;br /&gt;
* Lisette Noor&lt;br /&gt;
* Madis Roosioks&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meeskonna koduleht:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Meeskond_%22Nope%22: Nope]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;XML/XSLT/XSD&#039;&#039;&#039; &amp;lt;br/&amp;gt;&lt;br /&gt;
Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:Bob%27s_Burgers Bob&#039;s Burgers] &amp;lt;br/&amp;gt;&lt;br /&gt;
Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:Blogify Blogify]&lt;br /&gt;
&lt;br /&gt;
===Meeskond [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab Alt + Tab]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Roots&lt;br /&gt;
* Roland Soosaar&lt;br /&gt;
* Krista Norak&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#Esimene_osa Esimene osa:] [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XML XML] | [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XSD XSD] | [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XSLT_HTML XSLT HTML] | [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XSLT_XML XSLT XML]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Kirde_sai Meeskond: Kirde sai]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Taavi Teearu&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Kirde_sai#XML.2FXSD.2FXSLT XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Unnamed Team===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Andreas Kirotar&lt;br /&gt;
*Jaan Kostõgov&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Unnamed Team]]&lt;br /&gt;
 &lt;br /&gt;
Meeskonna retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:2017_Meeskond_Poly Poly]&lt;br /&gt;
&lt;br /&gt;
=== Meeskond [https://wiki.itcollege.ee/index.php/%3F%3F%3F_Profit ??? Profit] ===&lt;br /&gt;
* Aivar Romandi&lt;br /&gt;
* Frank Karl Koppel&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Purgis Retsensioon meeskonnale Purgis]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Purgis===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Märt Lõhmus&lt;br /&gt;
* Kelli Lukas &lt;br /&gt;
Meeskonna koduleht: [[Purgis]]&amp;lt;br&amp;gt;&lt;br /&gt;
Esimene osa asub [https://wiki.itcollege.ee/index.php/Purgis#XML siin]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Meeskond:_Falador Falador]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Madis Lugus&lt;br /&gt;
* Taavi Metsvahi&lt;br /&gt;
* Kristjan Kivisild&lt;br /&gt;
Meeskonna koguleht: [[Meeskond: Falador]]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Meeskond:_Falador#XML.2FXSD.2FXSLT XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Blogify Blogify]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Hando Laasmägi&lt;br /&gt;
* Tarvo Tammejuur&lt;br /&gt;
* Cathy Toomast&lt;br /&gt;
* Tõnn Vaher&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Proovitud_abielu Proovitud abielu]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Berit Põldoja&lt;br /&gt;
*Elina Kuldkepp&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Proovitud_abielu#XML.2FXSD.2FXSLT XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Meeskond: [https://wiki.itcollege.ee/index.php/Mjart Mjart] ===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Märt Häkkinen&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Ott Ott]===&lt;br /&gt;
Liige:&lt;br /&gt;
*Ott Sõerumäe&lt;br /&gt;
Retsensioon tuleb meeskonnale Kirde sai&lt;br /&gt;
==Kaugõpe==&lt;br /&gt;
&lt;br /&gt;
===Meeskond: CoverMe===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Karit Kilgi&lt;br /&gt;
* Sten Kaasik&lt;br /&gt;
* Ragne Auling&lt;br /&gt;
* Silja Kralik&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: CoverMe]]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Team_SPOT Meeskond: SPOT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sigrid Pachel&lt;br /&gt;
* Oliver Tiks&lt;br /&gt;
Esitatud tööd:&lt;br /&gt;
# [https://wiki.itcollege.ee/index.php/Team_SPOT#XML_.2F_XSD_.2F_XSLT XML/XSD/XSLT] + [https://wiki.itcollege.ee/index.php/Talk:JRT retsensioon meeskonnale JRT]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/JRT Meeskond: JRT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Riho Uusjärv&lt;br /&gt;
* Jevgeni Gavrilov&lt;br /&gt;
* Tiit Kuuskmäe&lt;br /&gt;
&lt;br /&gt;
Retsensioon XML-failide kohta meeskonnale &amp;quot;PC KartKicker&amp;quot; [https://wiki.itcollege.ee/index.php/JRT#Retsensioon_JRT]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Retsensioon XML-failide kohta meeskonnale &amp;quot;Ninjas in pyjamas&amp;quot;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/JRT#Retsensioon_meeskonnale_.22Ninjas_in_pyjamas.22] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ticketer Meeskond: Ticketer]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Liina Abner&lt;br /&gt;
* Krista Rüütel&lt;br /&gt;
* Roland Türi&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ninjas_in_pyjamas Meeskond: Ninjas in Pyjamas]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Anna Linskaja&lt;br /&gt;
* Karen Grigorjan&lt;br /&gt;
* Sergei Hristoforov&lt;br /&gt;
* Artyom Likhachev&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Talupood Meeskond: Talutooted]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Matson&lt;br /&gt;
* Taavi Tilk&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talupood#XML XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/DevHelpVR Meeskond: DevHelp]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Martin Jääger&lt;br /&gt;
* Kristo Leemets&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon tiimile Ticketer, 26.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ticketer Talk:Ticketer]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/YAWS Meeskond: Yet Another Weather Station]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Andres Kepler&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/PC_KartKicker Meeskond: PC KartKicker]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
* Jan Eerik&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR Talk:DevHelpVR] &amp;lt;br&amp;gt;&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Talk:Ninjas_in_pyjamas]&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017&amp;diff=119737</id>
		<title>Kodutöö aines &quot;Võrgurakendused II: hajussüsteemide ehitamine&quot; 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017&amp;diff=119737"/>
		<updated>2017-03-27T19:07:54Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Meeskond: PC KartKicker */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
__NOINDEX__&lt;br /&gt;
&lt;br /&gt;
=Kodutöö aines &amp;quot;Võrgurakendused II: hajussüsteemide ehitamine&amp;quot; 2017=&lt;br /&gt;
==Eesmärk==&lt;br /&gt;
Saada praktiline kogemus hajussüsteemide ehitamisest XML(SOAP) või Rest veebiteenusel ja sellele klientrakenduse loomise abil ning süvendada meeskonnatööoskust. &lt;br /&gt;
*SOAP veebiteenuse puhul eeldatakse WCF tehnoloogia kasutamist. Vanema põlvkonna ASP.NET veebiteenuse loomine ei ole lubatud, kuna seda ei toeta ka Microsoft enam tänasel päeval.&lt;br /&gt;
*REST teenuste loomisel tuleks kasutada ASP.NET Web API võimalusi.&lt;br /&gt;
&lt;br /&gt;
Kaugem eesmärk on loomulikult hinne :).&lt;br /&gt;
&lt;br /&gt;
==Reeglid==&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendused (soovitavalt vähemalt kaks)endaloodud veebiteenusele&lt;br /&gt;
&lt;br /&gt;
Ühte projektimeeskonda kuulub 3..4 tudengit ning ühel teemal teostab projekti üks või mitu meeskonda. 1,2 ja viie liikmelised meeskonnad tuleks õppejõuga eraldi kooskõlastada.&lt;br /&gt;
&lt;br /&gt;
Töö käiku kajastatakse  http://wiki.itcollege.ee keskkonnas. Wikilehe täitmise eesmärke on kaks: nii on võimalik kirja panna kõik mõtted ja ideed (ning nendest jääb jälg) ning õppejõul on hiljem võimalik saada ülevaade iga projektimeeskonna liikme panusest.&lt;br /&gt;
&lt;br /&gt;
==Tähtajad==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;XML fail&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#XML_andmefail NB! Täpsem info]&lt;br /&gt;
** XML fail, stiilifail ja skeemifail peavad olema valmis ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;20. märts 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid XML-failide kohta peavad tehtud olema &#039;&#039;&#039;27. märts 2017&#039;&#039;&#039;.&lt;br /&gt;
** &#039;&#039;&#039;Meeskonnad on loonud omale enda wiki lehe, kuhu kirjeldavad meeskonna ja panevad nad üles oma tööd. Lisaks hakkavad kogunema ka sinna teiste gruppide poolt kirjutatavad retsensioonid. &amp;lt;ins&amp;gt;Meeskonnalehed lingitakse selle lehe lõppu Meeskonna pealkirja alla.&amp;lt;/ins&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Veebiteenus&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#Veebiteenus NB! Täpsem info]&lt;br /&gt;
** Veebiteenuse analüüs peab olema valmis, esitatud ja wikilehel kirjeldatud hiljemalt: &#039;&#039;&#039;17.aprill 2017&#039;&#039;&#039;&lt;br /&gt;
** Veebiteenus peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;29. mai 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid veebiteenuste kohta peavad tehtud olema &#039;&#039;&#039;08. juuni 2017&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--** Veebiteenus tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Klientrakendused&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#Klientrakendus NB! Täpsem info]&lt;br /&gt;
** Klientrakendused peavad olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;29. mai 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid klientrakenduste kohta peavad tehtud olema &#039;&#039;&#039;08. juuni 2017&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--** Klientrakendused tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--* &#039;&#039;&#039;Meeskonna kokkuvõttev aruanne&#039;&#039;&#039;&lt;br /&gt;
** Meeskonnatöö kokkuvõttev aruanne peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt 8.mai 2011&lt;br /&gt;
** Arvamused Meeskonnatöö kokkuvõtva aruande ja esitluse kohta tuleb esitada hiljemalt päev enne eksamit&lt;br /&gt;
** &#039;&#039;&#039;Meeskonna kokkuvõttev aruanne ja töö lõplik tulemus&#039;&#039;&#039; tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hindamine==&lt;br /&gt;
===Üldised kriteeriumid===&lt;br /&gt;
&lt;br /&gt;
Teostatuks loetakse projekt juhul, kui lähteülesanne on realiseeritud, lahendus on töötav, kuid esineb suuremaid vigu ning piirsituatsioonidega ei ole arvestatud.&lt;br /&gt;
&lt;br /&gt;
Maksimumtulemuse saavutamiseks peab projekt olema teostatud tehniliselt veatult ning varustatud dokumentatsiooniga, milles sisaldub  arendusprotsessi kirjeldus (peab selguma ka iga rühmaliikme panus projekti teostamisel), kasutajajuhend ning lahenduse kirjeldus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Maksimumtulemuse annab (vähemalt 4/6):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Majanduslik mõtlemine (kas loodav teenus ja rakendused oleks kasutatav ka ärilistel eesmärkidel)&lt;br /&gt;
* Mobiilrakendused &lt;br /&gt;
* AngularJS klientrakendus&lt;br /&gt;
* Kogukondade kaasamine&lt;br /&gt;
* Kasutajamugavus&lt;br /&gt;
* Läbimõeldud töökorraldus&lt;br /&gt;
* Lisavõimaluste realiseerimine (vt näidisteemad)&lt;br /&gt;
&lt;br /&gt;
===XML andmefail===&lt;br /&gt;
Ülesande täitmiseks tuleb luua XML fail andmete edastamiseks, selle XML faili skeemifail ning minimaalselt kaks sobivat XSL transformatsiooni faili loodud XML failis olevate andmete transformeerimiseks HTML formaati ja XML faili formaadi muutmiseks. Transformatsioonid peavad sisaldama midagi enamat, kui ainult üks for-each klausel. Transformatsiooni käigus peaks kasutama vajadusel parameetreid ning kindlasti ka erinevaid tingimuste kontrolle.&lt;br /&gt;
&lt;br /&gt;
XML-il peab olema vähemalt 4 loogilist dimensiooni.&lt;br /&gt;
 &amp;lt;dim1&amp;gt;&lt;br /&gt;
   &amp;lt;dim2&amp;gt;&lt;br /&gt;
     &amp;lt;dim3&amp;gt;&lt;br /&gt;
       &amp;lt;dim4&amp;gt;&lt;br /&gt;
       &amp;lt;/dim4&amp;gt;&lt;br /&gt;
     &amp;lt;/dim3&amp;gt;&lt;br /&gt;
   &amp;lt;/dim2&amp;gt;&lt;br /&gt;
 &amp;lt;/dim1&amp;gt;&lt;br /&gt;
Lisaks tuleb kasutada 3-el dimensioonil attribuute, mis one enamat, kui lihtsalt ID.&lt;br /&gt;
&lt;br /&gt;
Käesoleva ülesande käigus peab looma meeskonna ning selle wiki lehekülje&lt;br /&gt;
&lt;br /&gt;
===Veebiteenus===&lt;br /&gt;
Loodav veebiteenus peab võimaldama:&lt;br /&gt;
* Teenuse pakkumist&lt;br /&gt;
* &#039;&#039;&#039;Teenuse kasutajate tuvastamist ning haldamist&#039;&#039;&#039;&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes&lt;br /&gt;
* Teenuse poole pöördumiste arvu piiramist ja piirangute haldamist.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus peab toetama mitme kasutaja võimalust.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus tuleb luua kasutades &#039;&#039;Windows Communication Foundation&#039;&#039; või ASP.NET MVC  Web API tehnoloogiat&lt;br /&gt;
&lt;br /&gt;
Andmebaasis peab olema vähemalt 9 olemit ehk andmebaas on eeldus,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soovitav on luua teenus (FE) ja teenuse seadistamiseks ning kasutajate haldamiseks mõeldud rakendus (BE).&lt;br /&gt;
&lt;br /&gt;
===Klientrakendus===&lt;br /&gt;
Klientrakendus mõnele olemasolevale veebiteenusele, võib olla teostatud veebirakendusena, Silverlight, WPF või vormirakendusena.&lt;br /&gt;
&lt;br /&gt;
Variant1: teha klientrakendus enda loodud veebiteenusele &lt;br /&gt;
&lt;br /&gt;
Variant2: teha klientrakendus mõnele levinud veebiteenusele.&lt;br /&gt;
Näiteks: &lt;br /&gt;
* http://www.bing.com/developer&lt;br /&gt;
* http://www.flickr.com/services/api/response.soap.html&lt;br /&gt;
* http://developer.ebay.com/developercenter/windows/&lt;br /&gt;
* http://apiwiki.twitter.com/Getting-Started&lt;br /&gt;
&lt;br /&gt;
===Retsensioonid===&lt;br /&gt;
Retsensioon on üliõpilase iseseisva teadustöö kriitilise analüüsi põhjal koostatud argumenteeritud hinnang. Retsensioonis tuleb hinnata töö vastavust esitatud tingimustele, programmikoodi loetavust ning kommenteeritust, dokumentatsiooni ja kirjeldada puudusi. Retsensioonide põhjal on meeskondadel õigus oma projekte parandada enne määratud esitamistähtaja kättejõudmist.&lt;br /&gt;
&lt;br /&gt;
Retsensioon peab sisaldama minimaalselt...&lt;br /&gt;
* XML - ...200 sõna.&lt;br /&gt;
* Veebiteenus - ...600 sõna.&lt;br /&gt;
* Klientrakendus - ...600 sõna.&lt;br /&gt;
&lt;br /&gt;
Mõnelauselisest arvamusest ei piisa, kuna tegemist on grupi loodavate arvustustega, mitte individuaalsete arvustustega.&lt;br /&gt;
&lt;br /&gt;
==Konsultatsioonid==&lt;br /&gt;
 Igal projektimeeskonnal on piiramatu õigus saada õppejõu käest konsultatsiooni ja juhendamist oma&lt;br /&gt;
 töö tegemiseks, kas harjutuste ajal või pärast harjutusi ja loenguid. Eriaegade suhtes saab sõlmida&lt;br /&gt;
 õppejõuga kokkuleppeid kontaktidel&lt;br /&gt;
 mait.poska [ät] itcollege.ee või (+372 53 469 734)&lt;br /&gt;
 (teksti originaalautor Priit Raspel)&lt;br /&gt;
&lt;br /&gt;
=Teemad 2017 kevad=&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus mõnele olemasolevale või endaloodud veebiteenusele&lt;br /&gt;
&lt;br /&gt;
NB! XML andmefail ja veebiteenus ei pea olema omavahel seotud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Näidisteemad==&lt;br /&gt;
&lt;br /&gt;
===Nimede pakkumise teenus===&lt;br /&gt;
Mõte selles, et luua nimede baas, mille abil pakkuda rakenduse loojale sobiva algusega nimesid. Reaalne rakendus: &#039;&#039;autocompleter&#039;&#039; tarvis teenuse pakkumine&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua sobiva alguse järgi nimede pakkumise teenus:&lt;br /&gt;
* alates kahetähelisetest algustest pakkuda sobivad nimesid&lt;br /&gt;
* luua võimalus kasutajatel nimesid lisada&lt;br /&gt;
* luua võimalus administraatoril nimesid muuta/kustutada&lt;br /&gt;
* meeste ja naiste nimed peavad olema süsteemis eristatavad&lt;br /&gt;
* luua võimalus, mis võimaldab kuvada populaarseid nimesid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* luua võimalus, et nimi lisatakse baasi alles siis, kui administraatori õigustega inimene on selleks vastava loa andnud&lt;br /&gt;
&lt;br /&gt;
===Külastusstatistika teenus===&lt;br /&gt;
Mõte selles, et pakkuda teenust, kus kasutajal on võimalik registreerida külastused ning küsida oma külastusstatistikat.&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua külastusstatistika teenus:&lt;br /&gt;
* kasutaja saab teenuses registreerida külastusi&lt;br /&gt;
* kasutaja saab küsida külastusstatistikat päevade/kuude/kogu perioodi lõikes&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
&lt;br /&gt;
Lisavõimalused:&lt;br /&gt;
* luua võimalus registreerida alamlehtede külastusstatistikat&lt;br /&gt;
* luua võimalus külastusstatistikale lisaparameetrite lisamiseks (ip aadress, sirviku versioon jne)&lt;br /&gt;
&lt;br /&gt;
===Telefoniraamatu teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada kontakte ja nende seast otsida&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua telefoniraamatu teenus:&lt;br /&gt;
* kasutaja saab teenuses kontakte lisada ja kustutada&lt;br /&gt;
* kasutaja saab kontaktide nime/telefoninumbri jne abil otsida&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutajaid on võimalik lisada gruppidesse&lt;br /&gt;
* kasutajal on võimalik lisada vajalike kontaktandmete liike&lt;br /&gt;
* kasutajatel on võimalik jagada omavahel kontakte ja kontaktide grupper&lt;br /&gt;
&lt;br /&gt;
===RSS voogude kogumise ja uudiste kuvamise teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada talle huvipakkuvaid RSS vooge ja nendelt voogudelt uudiseid lugeda&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua RSS voogude haldusteenus:&lt;br /&gt;
* kasutaja saab teenuses RSS vooge lisada ja kustudada&lt;br /&gt;
* kasutaja saab pärida talle huvipakkuvate voogude viimaseid uudiseid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutaja saab RSS vooge vaadata eraldi või grupeeritult&lt;br /&gt;
* vooge peab puhverdama, kuna voogude lugemine võtab enamasti üsna palju aega &lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
= Meeskonnad 2017=&lt;br /&gt;
==Päevaõpe==&lt;br /&gt;
&lt;br /&gt;
===Meeskond: QView===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Semjon Greef&lt;br /&gt;
* Martin Nigul&lt;br /&gt;
* Martin Nõukas&lt;br /&gt;
* Margus Muru&lt;br /&gt;
* Lisandra Noor&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: QView]]&lt;br /&gt;
&lt;br /&gt;
Retsentsioon meeskonnale: [https://wiki.itcollege.ee/index.php/User_talk:Meeskond:_VeebiGurmaanid#M.C3.A4rkused: VeebiGurmaanid]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Redundant Rappers===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Taavi Kliss&lt;br /&gt;
*Kertu Nurmberg&lt;br /&gt;
*Anneli Asser&lt;br /&gt;
*Mart-Erki Nõumees&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: Redundant Rappers]]&lt;br /&gt;
&lt;br /&gt;
Meeskonna XML/XSD/XSLT : [https://wiki.itcollege.ee/index.php/Meeskond:_Redundant_Rappers#XML_.2F_XSD_.2F_XSLT]&lt;br /&gt;
&lt;br /&gt;
Meeskonna retsensioon meeskonnale Sense Of Direction: [https://wiki.itcollege.ee/index.php/Talk:Sense_Of_Direction]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Sense Of Direction===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Ilja Andrejev&lt;br /&gt;
*Aleksandr Babõkin&lt;br /&gt;
*Vladislav Lahtarin&lt;br /&gt;
*Vladislav Kovaltšuk&lt;br /&gt;
Meeskonna koduleht: [[Sense Of Direction]]&amp;lt;br&amp;gt;&lt;br /&gt;
XML/XSD/XSLT osa asub [https://wiki.itcollege.ee/index.php/Sense_Of_Direction#XML siin]&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon XML-failide kohta meeskonnale &amp;quot;Poly&amp;quot; [https://wiki.itcollege.ee/index.php/Sense_Of_Direction#Retsensioon_XML-failide_kohta_meeskonnale_.22Poly.22 siin]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/RK Meeskond: RK]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Raido Kivinurm&lt;br /&gt;
&lt;br /&gt;
Esimene osa: [https://wiki.itcollege.ee/index.php/RK#XML XML] / [https://wiki.itcollege.ee/index.php/RK#XSD XSD] / [https://wiki.itcollege.ee/index.php/RK#XSLT_HTML XSLT HTML] / [https://wiki.itcollege.ee/index.php/RK#XSLT_XML XSLT XML]&lt;br /&gt;
&amp;lt;BR&amp;gt; [https://wiki.itcollege.ee/index.php/RK#Retsensioonid Retsensioonid]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Team_Echo Meeskond: Echo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Vajak&lt;br /&gt;
* Janno Oolo&lt;br /&gt;
* Mari-Liis Oldja&lt;br /&gt;
* Arti Zirk&lt;br /&gt;
* Joosep Voolma&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Team_Echo#XML XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Meeskond:_Redundant_Rappers#Retsensioon_Team_Echo_poolt Retsensioon meeskonnale Redundant Rappers]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Bob%27s_Burgers Meeskond: Bob&#039;s Burgers]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Aleksei Kopõlov&lt;br /&gt;
*Sander Perens&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Bob%27s_Burgers#XML_Retsensioon_meeskonnale_VeebiGurmaanid Retsensioon meeskonnale &#039;&#039;&#039;VeebiGurmaanid&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/User:Meeskond:_VeebiGurmaanid Meeskond: VeebiGurmaanid]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Koit Kõrvel&lt;br /&gt;
* Marko Kask&lt;br /&gt;
* Melissa Eenmaa&lt;br /&gt;
* Joosep Koort&lt;br /&gt;
&lt;br /&gt;
Retsentsioon meeskonnale: [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_HelpOut HelpOut]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Muru Meeskond: Muru]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Murdho Savila&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Repi Meeskond: Repi]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Renet Pirso&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Blogify Retsensioon: BLOGIFY]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: HelpOut===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mikk Sarapuu&lt;br /&gt;
* Martin Paakspuu&lt;br /&gt;
* Kerdo Kullamäe&lt;br /&gt;
* Marvin Mardiat&lt;br /&gt;
* Piret Pomerants&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Meeskond:_HelpOut Meeskonna koduleht]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
* XML/XSLT/XSD retsensioon meeskonnale &#039;&#039;&#039;Falador&#039;&#039;&#039; asub [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_Falador siin]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/2017_Meeskond_Poly Meeskond: Poly]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kristian Kalm&lt;br /&gt;
* Roland Kontson&lt;br /&gt;
&lt;br /&gt;
=== Meeskond [https://wiki.itcollege.ee/index.php/Meeskond_%22Nope%22: Nope] ===&lt;br /&gt;
* Raido Vell&lt;br /&gt;
* Taavi Vesinurm&lt;br /&gt;
* Kaspar Kaal&lt;br /&gt;
* Lisette Noor&lt;br /&gt;
* Madis Roosioks&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meeskonna koduleht:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Meeskond_%22Nope%22: Nope]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;XML/XSLT/XSD&#039;&#039;&#039; &amp;lt;br/&amp;gt;&lt;br /&gt;
Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:Bob%27s_Burgers Bob&#039;s Burgers] &amp;lt;br/&amp;gt;&lt;br /&gt;
Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:Blogify Blogify]&lt;br /&gt;
&lt;br /&gt;
===Meeskond [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab Alt + Tab]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Roots&lt;br /&gt;
* Roland Soosaar&lt;br /&gt;
* Krista Norak&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#Esimene_osa Esimene osa:] [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XML XML] | [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XSD XSD] | [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XSLT_HTML XSLT HTML] | [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XSLT_XML XSLT XML]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Kirde_sai Meeskond: Kirde sai]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Taavi Teearu&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Kirde_sai#XML.2FXSD.2FXSLT XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Unnamed Team===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Andreas Kirotar&lt;br /&gt;
*Jaan Kostõgov&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Unnamed Team]]&lt;br /&gt;
 &lt;br /&gt;
Meeskonna retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:2017_Meeskond_Poly Poly]&lt;br /&gt;
&lt;br /&gt;
=== Meeskond [https://wiki.itcollege.ee/index.php/%3F%3F%3F_Profit ??? Profit] ===&lt;br /&gt;
* Aivar Romandi&lt;br /&gt;
* Frank Karl Koppel&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Purgis Retsensioon meeskonnale Purgis]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Purgis===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Märt Lõhmus&lt;br /&gt;
* Kelli Lukas &lt;br /&gt;
Meeskonna koduleht: [[Purgis]]&amp;lt;br&amp;gt;&lt;br /&gt;
Esimene osa asub [https://wiki.itcollege.ee/index.php/Purgis#XML siin]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Meeskond:_Falador Falador]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Madis Lugus&lt;br /&gt;
* Taavi Metsvahi&lt;br /&gt;
* Kristjan Kivisild&lt;br /&gt;
Meeskonna koguleht: [[Meeskond: Falador]]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Meeskond:_Falador#XML.2FXSD.2FXSLT XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Blogify Blogify]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Hando Laasmägi&lt;br /&gt;
* Tarvo Tammejuur&lt;br /&gt;
* Cathy Toomast&lt;br /&gt;
* Tõnn Vaher&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Proovitud_abielu Proovitud abielu]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Berit Põldoja&lt;br /&gt;
*Elina Kuldkepp&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Proovitud_abielu#XML.2FXSD.2FXSLT XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Meeskond: [https://wiki.itcollege.ee/index.php/Mjart Mjart] ===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Märt Häkkinen&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Ott Ott]===&lt;br /&gt;
Liige:&lt;br /&gt;
*Ott Sõerumäe&lt;br /&gt;
Retsensioon tuleb meeskonnale Kirde sai&lt;br /&gt;
==Kaugõpe==&lt;br /&gt;
&lt;br /&gt;
===Meeskond: CoverMe===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Karit Kilgi&lt;br /&gt;
* Sten Kaasik&lt;br /&gt;
* Ragne Auling&lt;br /&gt;
* Silja Kralik&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: CoverMe]]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Team_SPOT Meeskond: SPOT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sigrid Pachel&lt;br /&gt;
* Oliver Tiks&lt;br /&gt;
Esitatud tööd:&lt;br /&gt;
# [https://wiki.itcollege.ee/index.php/Team_SPOT#XML_.2F_XSD_.2F_XSLT XML/XSD/XSLT] + [https://wiki.itcollege.ee/index.php/Talk:JRT retsensioon meeskonnale JRT]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/JRT Meeskond: JRT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Riho Uusjärv&lt;br /&gt;
* Jevgeni Gavrilov&lt;br /&gt;
* Tiit Kuuskmäe&lt;br /&gt;
&lt;br /&gt;
Retsensioon XML-failide kohta meeskonnale &amp;quot;PC KartKicker&amp;quot; [https://wiki.itcollege.ee/index.php/JRT#Retsensioon_JRT]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Retsensioon XML-failide kohta meeskonnale &amp;quot;Ninjas in pyjamas&amp;quot;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/JRT#Retsensioon_meeskonnale_.22Ninjas_in_pyjamas.22] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ticketer Meeskond: Ticketer]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Liina Abner&lt;br /&gt;
* Krista Rüütel&lt;br /&gt;
* Roland Türi&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ninjas_in_pyjamas Meeskond: Ninjas in Pyjamas]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Anna Linskaja&lt;br /&gt;
* Karen Grigorjan&lt;br /&gt;
* Sergei Hristoforov&lt;br /&gt;
* Artyom Likhachev&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Talupood Meeskond: Talutooted]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Matson&lt;br /&gt;
* Taavi Tilk&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talupood#XML XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/DevHelpVR Meeskond: DevHelp]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Martin Jääger&lt;br /&gt;
* Kristo Leemets&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon tiimile Ticketer, 26.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ticketer Talk:Ticketer]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/YAWS Meeskond: Yet Another Weather Station]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Andres Kepler&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/PC_KartKicker Meeskond: PC KartKicker]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
* Jan Eerik&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR Talk:DevHelpVR] &amp;lt;/br&amp;gt;&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Talk:Ninjas_in_pyjamas]&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017&amp;diff=119736</id>
		<title>Kodutöö aines &quot;Võrgurakendused II: hajussüsteemide ehitamine&quot; 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017&amp;diff=119736"/>
		<updated>2017-03-27T19:07:43Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Meeskond: PC KartKicker */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
__NOINDEX__&lt;br /&gt;
&lt;br /&gt;
=Kodutöö aines &amp;quot;Võrgurakendused II: hajussüsteemide ehitamine&amp;quot; 2017=&lt;br /&gt;
==Eesmärk==&lt;br /&gt;
Saada praktiline kogemus hajussüsteemide ehitamisest XML(SOAP) või Rest veebiteenusel ja sellele klientrakenduse loomise abil ning süvendada meeskonnatööoskust. &lt;br /&gt;
*SOAP veebiteenuse puhul eeldatakse WCF tehnoloogia kasutamist. Vanema põlvkonna ASP.NET veebiteenuse loomine ei ole lubatud, kuna seda ei toeta ka Microsoft enam tänasel päeval.&lt;br /&gt;
*REST teenuste loomisel tuleks kasutada ASP.NET Web API võimalusi.&lt;br /&gt;
&lt;br /&gt;
Kaugem eesmärk on loomulikult hinne :).&lt;br /&gt;
&lt;br /&gt;
==Reeglid==&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendused (soovitavalt vähemalt kaks)endaloodud veebiteenusele&lt;br /&gt;
&lt;br /&gt;
Ühte projektimeeskonda kuulub 3..4 tudengit ning ühel teemal teostab projekti üks või mitu meeskonda. 1,2 ja viie liikmelised meeskonnad tuleks õppejõuga eraldi kooskõlastada.&lt;br /&gt;
&lt;br /&gt;
Töö käiku kajastatakse  http://wiki.itcollege.ee keskkonnas. Wikilehe täitmise eesmärke on kaks: nii on võimalik kirja panna kõik mõtted ja ideed (ning nendest jääb jälg) ning õppejõul on hiljem võimalik saada ülevaade iga projektimeeskonna liikme panusest.&lt;br /&gt;
&lt;br /&gt;
==Tähtajad==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;XML fail&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#XML_andmefail NB! Täpsem info]&lt;br /&gt;
** XML fail, stiilifail ja skeemifail peavad olema valmis ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;20. märts 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid XML-failide kohta peavad tehtud olema &#039;&#039;&#039;27. märts 2017&#039;&#039;&#039;.&lt;br /&gt;
** &#039;&#039;&#039;Meeskonnad on loonud omale enda wiki lehe, kuhu kirjeldavad meeskonna ja panevad nad üles oma tööd. Lisaks hakkavad kogunema ka sinna teiste gruppide poolt kirjutatavad retsensioonid. &amp;lt;ins&amp;gt;Meeskonnalehed lingitakse selle lehe lõppu Meeskonna pealkirja alla.&amp;lt;/ins&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Veebiteenus&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#Veebiteenus NB! Täpsem info]&lt;br /&gt;
** Veebiteenuse analüüs peab olema valmis, esitatud ja wikilehel kirjeldatud hiljemalt: &#039;&#039;&#039;17.aprill 2017&#039;&#039;&#039;&lt;br /&gt;
** Veebiteenus peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;29. mai 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid veebiteenuste kohta peavad tehtud olema &#039;&#039;&#039;08. juuni 2017&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--** Veebiteenus tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Klientrakendused&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#Klientrakendus NB! Täpsem info]&lt;br /&gt;
** Klientrakendused peavad olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;29. mai 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid klientrakenduste kohta peavad tehtud olema &#039;&#039;&#039;08. juuni 2017&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--** Klientrakendused tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--* &#039;&#039;&#039;Meeskonna kokkuvõttev aruanne&#039;&#039;&#039;&lt;br /&gt;
** Meeskonnatöö kokkuvõttev aruanne peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt 8.mai 2011&lt;br /&gt;
** Arvamused Meeskonnatöö kokkuvõtva aruande ja esitluse kohta tuleb esitada hiljemalt päev enne eksamit&lt;br /&gt;
** &#039;&#039;&#039;Meeskonna kokkuvõttev aruanne ja töö lõplik tulemus&#039;&#039;&#039; tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hindamine==&lt;br /&gt;
===Üldised kriteeriumid===&lt;br /&gt;
&lt;br /&gt;
Teostatuks loetakse projekt juhul, kui lähteülesanne on realiseeritud, lahendus on töötav, kuid esineb suuremaid vigu ning piirsituatsioonidega ei ole arvestatud.&lt;br /&gt;
&lt;br /&gt;
Maksimumtulemuse saavutamiseks peab projekt olema teostatud tehniliselt veatult ning varustatud dokumentatsiooniga, milles sisaldub  arendusprotsessi kirjeldus (peab selguma ka iga rühmaliikme panus projekti teostamisel), kasutajajuhend ning lahenduse kirjeldus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Maksimumtulemuse annab (vähemalt 4/6):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Majanduslik mõtlemine (kas loodav teenus ja rakendused oleks kasutatav ka ärilistel eesmärkidel)&lt;br /&gt;
* Mobiilrakendused &lt;br /&gt;
* AngularJS klientrakendus&lt;br /&gt;
* Kogukondade kaasamine&lt;br /&gt;
* Kasutajamugavus&lt;br /&gt;
* Läbimõeldud töökorraldus&lt;br /&gt;
* Lisavõimaluste realiseerimine (vt näidisteemad)&lt;br /&gt;
&lt;br /&gt;
===XML andmefail===&lt;br /&gt;
Ülesande täitmiseks tuleb luua XML fail andmete edastamiseks, selle XML faili skeemifail ning minimaalselt kaks sobivat XSL transformatsiooni faili loodud XML failis olevate andmete transformeerimiseks HTML formaati ja XML faili formaadi muutmiseks. Transformatsioonid peavad sisaldama midagi enamat, kui ainult üks for-each klausel. Transformatsiooni käigus peaks kasutama vajadusel parameetreid ning kindlasti ka erinevaid tingimuste kontrolle.&lt;br /&gt;
&lt;br /&gt;
XML-il peab olema vähemalt 4 loogilist dimensiooni.&lt;br /&gt;
 &amp;lt;dim1&amp;gt;&lt;br /&gt;
   &amp;lt;dim2&amp;gt;&lt;br /&gt;
     &amp;lt;dim3&amp;gt;&lt;br /&gt;
       &amp;lt;dim4&amp;gt;&lt;br /&gt;
       &amp;lt;/dim4&amp;gt;&lt;br /&gt;
     &amp;lt;/dim3&amp;gt;&lt;br /&gt;
   &amp;lt;/dim2&amp;gt;&lt;br /&gt;
 &amp;lt;/dim1&amp;gt;&lt;br /&gt;
Lisaks tuleb kasutada 3-el dimensioonil attribuute, mis one enamat, kui lihtsalt ID.&lt;br /&gt;
&lt;br /&gt;
Käesoleva ülesande käigus peab looma meeskonna ning selle wiki lehekülje&lt;br /&gt;
&lt;br /&gt;
===Veebiteenus===&lt;br /&gt;
Loodav veebiteenus peab võimaldama:&lt;br /&gt;
* Teenuse pakkumist&lt;br /&gt;
* &#039;&#039;&#039;Teenuse kasutajate tuvastamist ning haldamist&#039;&#039;&#039;&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes&lt;br /&gt;
* Teenuse poole pöördumiste arvu piiramist ja piirangute haldamist.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus peab toetama mitme kasutaja võimalust.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus tuleb luua kasutades &#039;&#039;Windows Communication Foundation&#039;&#039; või ASP.NET MVC  Web API tehnoloogiat&lt;br /&gt;
&lt;br /&gt;
Andmebaasis peab olema vähemalt 9 olemit ehk andmebaas on eeldus,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soovitav on luua teenus (FE) ja teenuse seadistamiseks ning kasutajate haldamiseks mõeldud rakendus (BE).&lt;br /&gt;
&lt;br /&gt;
===Klientrakendus===&lt;br /&gt;
Klientrakendus mõnele olemasolevale veebiteenusele, võib olla teostatud veebirakendusena, Silverlight, WPF või vormirakendusena.&lt;br /&gt;
&lt;br /&gt;
Variant1: teha klientrakendus enda loodud veebiteenusele &lt;br /&gt;
&lt;br /&gt;
Variant2: teha klientrakendus mõnele levinud veebiteenusele.&lt;br /&gt;
Näiteks: &lt;br /&gt;
* http://www.bing.com/developer&lt;br /&gt;
* http://www.flickr.com/services/api/response.soap.html&lt;br /&gt;
* http://developer.ebay.com/developercenter/windows/&lt;br /&gt;
* http://apiwiki.twitter.com/Getting-Started&lt;br /&gt;
&lt;br /&gt;
===Retsensioonid===&lt;br /&gt;
Retsensioon on üliõpilase iseseisva teadustöö kriitilise analüüsi põhjal koostatud argumenteeritud hinnang. Retsensioonis tuleb hinnata töö vastavust esitatud tingimustele, programmikoodi loetavust ning kommenteeritust, dokumentatsiooni ja kirjeldada puudusi. Retsensioonide põhjal on meeskondadel õigus oma projekte parandada enne määratud esitamistähtaja kättejõudmist.&lt;br /&gt;
&lt;br /&gt;
Retsensioon peab sisaldama minimaalselt...&lt;br /&gt;
* XML - ...200 sõna.&lt;br /&gt;
* Veebiteenus - ...600 sõna.&lt;br /&gt;
* Klientrakendus - ...600 sõna.&lt;br /&gt;
&lt;br /&gt;
Mõnelauselisest arvamusest ei piisa, kuna tegemist on grupi loodavate arvustustega, mitte individuaalsete arvustustega.&lt;br /&gt;
&lt;br /&gt;
==Konsultatsioonid==&lt;br /&gt;
 Igal projektimeeskonnal on piiramatu õigus saada õppejõu käest konsultatsiooni ja juhendamist oma&lt;br /&gt;
 töö tegemiseks, kas harjutuste ajal või pärast harjutusi ja loenguid. Eriaegade suhtes saab sõlmida&lt;br /&gt;
 õppejõuga kokkuleppeid kontaktidel&lt;br /&gt;
 mait.poska [ät] itcollege.ee või (+372 53 469 734)&lt;br /&gt;
 (teksti originaalautor Priit Raspel)&lt;br /&gt;
&lt;br /&gt;
=Teemad 2017 kevad=&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus mõnele olemasolevale või endaloodud veebiteenusele&lt;br /&gt;
&lt;br /&gt;
NB! XML andmefail ja veebiteenus ei pea olema omavahel seotud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Näidisteemad==&lt;br /&gt;
&lt;br /&gt;
===Nimede pakkumise teenus===&lt;br /&gt;
Mõte selles, et luua nimede baas, mille abil pakkuda rakenduse loojale sobiva algusega nimesid. Reaalne rakendus: &#039;&#039;autocompleter&#039;&#039; tarvis teenuse pakkumine&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua sobiva alguse järgi nimede pakkumise teenus:&lt;br /&gt;
* alates kahetähelisetest algustest pakkuda sobivad nimesid&lt;br /&gt;
* luua võimalus kasutajatel nimesid lisada&lt;br /&gt;
* luua võimalus administraatoril nimesid muuta/kustutada&lt;br /&gt;
* meeste ja naiste nimed peavad olema süsteemis eristatavad&lt;br /&gt;
* luua võimalus, mis võimaldab kuvada populaarseid nimesid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* luua võimalus, et nimi lisatakse baasi alles siis, kui administraatori õigustega inimene on selleks vastava loa andnud&lt;br /&gt;
&lt;br /&gt;
===Külastusstatistika teenus===&lt;br /&gt;
Mõte selles, et pakkuda teenust, kus kasutajal on võimalik registreerida külastused ning küsida oma külastusstatistikat.&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua külastusstatistika teenus:&lt;br /&gt;
* kasutaja saab teenuses registreerida külastusi&lt;br /&gt;
* kasutaja saab küsida külastusstatistikat päevade/kuude/kogu perioodi lõikes&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
&lt;br /&gt;
Lisavõimalused:&lt;br /&gt;
* luua võimalus registreerida alamlehtede külastusstatistikat&lt;br /&gt;
* luua võimalus külastusstatistikale lisaparameetrite lisamiseks (ip aadress, sirviku versioon jne)&lt;br /&gt;
&lt;br /&gt;
===Telefoniraamatu teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada kontakte ja nende seast otsida&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua telefoniraamatu teenus:&lt;br /&gt;
* kasutaja saab teenuses kontakte lisada ja kustutada&lt;br /&gt;
* kasutaja saab kontaktide nime/telefoninumbri jne abil otsida&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutajaid on võimalik lisada gruppidesse&lt;br /&gt;
* kasutajal on võimalik lisada vajalike kontaktandmete liike&lt;br /&gt;
* kasutajatel on võimalik jagada omavahel kontakte ja kontaktide grupper&lt;br /&gt;
&lt;br /&gt;
===RSS voogude kogumise ja uudiste kuvamise teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada talle huvipakkuvaid RSS vooge ja nendelt voogudelt uudiseid lugeda&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua RSS voogude haldusteenus:&lt;br /&gt;
* kasutaja saab teenuses RSS vooge lisada ja kustudada&lt;br /&gt;
* kasutaja saab pärida talle huvipakkuvate voogude viimaseid uudiseid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutaja saab RSS vooge vaadata eraldi või grupeeritult&lt;br /&gt;
* vooge peab puhverdama, kuna voogude lugemine võtab enamasti üsna palju aega &lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
= Meeskonnad 2017=&lt;br /&gt;
==Päevaõpe==&lt;br /&gt;
&lt;br /&gt;
===Meeskond: QView===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Semjon Greef&lt;br /&gt;
* Martin Nigul&lt;br /&gt;
* Martin Nõukas&lt;br /&gt;
* Margus Muru&lt;br /&gt;
* Lisandra Noor&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: QView]]&lt;br /&gt;
&lt;br /&gt;
Retsentsioon meeskonnale: [https://wiki.itcollege.ee/index.php/User_talk:Meeskond:_VeebiGurmaanid#M.C3.A4rkused: VeebiGurmaanid]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Redundant Rappers===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Taavi Kliss&lt;br /&gt;
*Kertu Nurmberg&lt;br /&gt;
*Anneli Asser&lt;br /&gt;
*Mart-Erki Nõumees&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: Redundant Rappers]]&lt;br /&gt;
&lt;br /&gt;
Meeskonna XML/XSD/XSLT : [https://wiki.itcollege.ee/index.php/Meeskond:_Redundant_Rappers#XML_.2F_XSD_.2F_XSLT]&lt;br /&gt;
&lt;br /&gt;
Meeskonna retsensioon meeskonnale Sense Of Direction: [https://wiki.itcollege.ee/index.php/Talk:Sense_Of_Direction]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Sense Of Direction===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Ilja Andrejev&lt;br /&gt;
*Aleksandr Babõkin&lt;br /&gt;
*Vladislav Lahtarin&lt;br /&gt;
*Vladislav Kovaltšuk&lt;br /&gt;
Meeskonna koduleht: [[Sense Of Direction]]&amp;lt;br&amp;gt;&lt;br /&gt;
XML/XSD/XSLT osa asub [https://wiki.itcollege.ee/index.php/Sense_Of_Direction#XML siin]&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon XML-failide kohta meeskonnale &amp;quot;Poly&amp;quot; [https://wiki.itcollege.ee/index.php/Sense_Of_Direction#Retsensioon_XML-failide_kohta_meeskonnale_.22Poly.22 siin]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/RK Meeskond: RK]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Raido Kivinurm&lt;br /&gt;
&lt;br /&gt;
Esimene osa: [https://wiki.itcollege.ee/index.php/RK#XML XML] / [https://wiki.itcollege.ee/index.php/RK#XSD XSD] / [https://wiki.itcollege.ee/index.php/RK#XSLT_HTML XSLT HTML] / [https://wiki.itcollege.ee/index.php/RK#XSLT_XML XSLT XML]&lt;br /&gt;
&amp;lt;BR&amp;gt; [https://wiki.itcollege.ee/index.php/RK#Retsensioonid Retsensioonid]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Team_Echo Meeskond: Echo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Vajak&lt;br /&gt;
* Janno Oolo&lt;br /&gt;
* Mari-Liis Oldja&lt;br /&gt;
* Arti Zirk&lt;br /&gt;
* Joosep Voolma&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Team_Echo#XML XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Meeskond:_Redundant_Rappers#Retsensioon_Team_Echo_poolt Retsensioon meeskonnale Redundant Rappers]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Bob%27s_Burgers Meeskond: Bob&#039;s Burgers]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Aleksei Kopõlov&lt;br /&gt;
*Sander Perens&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Bob%27s_Burgers#XML_Retsensioon_meeskonnale_VeebiGurmaanid Retsensioon meeskonnale &#039;&#039;&#039;VeebiGurmaanid&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/User:Meeskond:_VeebiGurmaanid Meeskond: VeebiGurmaanid]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Koit Kõrvel&lt;br /&gt;
* Marko Kask&lt;br /&gt;
* Melissa Eenmaa&lt;br /&gt;
* Joosep Koort&lt;br /&gt;
&lt;br /&gt;
Retsentsioon meeskonnale: [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_HelpOut HelpOut]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Muru Meeskond: Muru]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Murdho Savila&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Repi Meeskond: Repi]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Renet Pirso&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Blogify Retsensioon: BLOGIFY]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: HelpOut===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mikk Sarapuu&lt;br /&gt;
* Martin Paakspuu&lt;br /&gt;
* Kerdo Kullamäe&lt;br /&gt;
* Marvin Mardiat&lt;br /&gt;
* Piret Pomerants&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Meeskond:_HelpOut Meeskonna koduleht]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
* XML/XSLT/XSD retsensioon meeskonnale &#039;&#039;&#039;Falador&#039;&#039;&#039; asub [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_Falador siin]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/2017_Meeskond_Poly Meeskond: Poly]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kristian Kalm&lt;br /&gt;
* Roland Kontson&lt;br /&gt;
&lt;br /&gt;
=== Meeskond [https://wiki.itcollege.ee/index.php/Meeskond_%22Nope%22: Nope] ===&lt;br /&gt;
* Raido Vell&lt;br /&gt;
* Taavi Vesinurm&lt;br /&gt;
* Kaspar Kaal&lt;br /&gt;
* Lisette Noor&lt;br /&gt;
* Madis Roosioks&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meeskonna koduleht:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Meeskond_%22Nope%22: Nope]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;XML/XSLT/XSD&#039;&#039;&#039; &amp;lt;br/&amp;gt;&lt;br /&gt;
Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:Bob%27s_Burgers Bob&#039;s Burgers] &amp;lt;br/&amp;gt;&lt;br /&gt;
Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:Blogify Blogify]&lt;br /&gt;
&lt;br /&gt;
===Meeskond [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab Alt + Tab]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Roots&lt;br /&gt;
* Roland Soosaar&lt;br /&gt;
* Krista Norak&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#Esimene_osa Esimene osa:] [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XML XML] | [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XSD XSD] | [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XSLT_HTML XSLT HTML] | [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XSLT_XML XSLT XML]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Kirde_sai Meeskond: Kirde sai]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Taavi Teearu&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Kirde_sai#XML.2FXSD.2FXSLT XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Unnamed Team===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Andreas Kirotar&lt;br /&gt;
*Jaan Kostõgov&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Unnamed Team]]&lt;br /&gt;
 &lt;br /&gt;
Meeskonna retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:2017_Meeskond_Poly Poly]&lt;br /&gt;
&lt;br /&gt;
=== Meeskond [https://wiki.itcollege.ee/index.php/%3F%3F%3F_Profit ??? Profit] ===&lt;br /&gt;
* Aivar Romandi&lt;br /&gt;
* Frank Karl Koppel&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Purgis Retsensioon meeskonnale Purgis]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Purgis===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Märt Lõhmus&lt;br /&gt;
* Kelli Lukas &lt;br /&gt;
Meeskonna koduleht: [[Purgis]]&amp;lt;br&amp;gt;&lt;br /&gt;
Esimene osa asub [https://wiki.itcollege.ee/index.php/Purgis#XML siin]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Meeskond:_Falador Falador]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Madis Lugus&lt;br /&gt;
* Taavi Metsvahi&lt;br /&gt;
* Kristjan Kivisild&lt;br /&gt;
Meeskonna koguleht: [[Meeskond: Falador]]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Meeskond:_Falador#XML.2FXSD.2FXSLT XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Blogify Blogify]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Hando Laasmägi&lt;br /&gt;
* Tarvo Tammejuur&lt;br /&gt;
* Cathy Toomast&lt;br /&gt;
* Tõnn Vaher&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Proovitud_abielu Proovitud abielu]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Berit Põldoja&lt;br /&gt;
*Elina Kuldkepp&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Proovitud_abielu#XML.2FXSD.2FXSLT XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Meeskond: [https://wiki.itcollege.ee/index.php/Mjart Mjart] ===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Märt Häkkinen&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Ott Ott]===&lt;br /&gt;
Liige:&lt;br /&gt;
*Ott Sõerumäe&lt;br /&gt;
Retsensioon tuleb meeskonnale Kirde sai&lt;br /&gt;
==Kaugõpe==&lt;br /&gt;
&lt;br /&gt;
===Meeskond: CoverMe===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Karit Kilgi&lt;br /&gt;
* Sten Kaasik&lt;br /&gt;
* Ragne Auling&lt;br /&gt;
* Silja Kralik&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: CoverMe]]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Team_SPOT Meeskond: SPOT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sigrid Pachel&lt;br /&gt;
* Oliver Tiks&lt;br /&gt;
Esitatud tööd:&lt;br /&gt;
# [https://wiki.itcollege.ee/index.php/Team_SPOT#XML_.2F_XSD_.2F_XSLT XML/XSD/XSLT] + [https://wiki.itcollege.ee/index.php/Talk:JRT retsensioon meeskonnale JRT]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/JRT Meeskond: JRT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Riho Uusjärv&lt;br /&gt;
* Jevgeni Gavrilov&lt;br /&gt;
* Tiit Kuuskmäe&lt;br /&gt;
&lt;br /&gt;
Retsensioon XML-failide kohta meeskonnale &amp;quot;PC KartKicker&amp;quot; [https://wiki.itcollege.ee/index.php/JRT#Retsensioon_JRT]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Retsensioon XML-failide kohta meeskonnale &amp;quot;Ninjas in pyjamas&amp;quot;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/JRT#Retsensioon_meeskonnale_.22Ninjas_in_pyjamas.22] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ticketer Meeskond: Ticketer]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Liina Abner&lt;br /&gt;
* Krista Rüütel&lt;br /&gt;
* Roland Türi&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ninjas_in_pyjamas Meeskond: Ninjas in Pyjamas]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Anna Linskaja&lt;br /&gt;
* Karen Grigorjan&lt;br /&gt;
* Sergei Hristoforov&lt;br /&gt;
* Artyom Likhachev&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Talupood Meeskond: Talutooted]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Matson&lt;br /&gt;
* Taavi Tilk&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talupood#XML XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/DevHelpVR Meeskond: DevHelp]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Martin Jääger&lt;br /&gt;
* Kristo Leemets&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon tiimile Ticketer, 26.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ticketer Talk:Ticketer]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/YAWS Meeskond: Yet Another Weather Station]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Andres Kepler&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/PC_KartKicker Meeskond: PC KartKicker]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
* Jan Eerik&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR Talk:DevHelpVR]&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ninjas_in_pyjamas Talk:Ninjas_in_pyjamas]&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Talk:Ninjas_in_pyjamas&amp;diff=119734</id>
		<title>Talk:Ninjas in pyjamas</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Talk:Ninjas_in_pyjamas&amp;diff=119734"/>
		<updated>2017-03-27T19:06:08Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Retsensioon meeskonnalt PC KartKicker */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Retsensioon meeskonnalt [https://wiki.itcollege.ee/index.php/PC_KartKicker PC KartKicker]=&lt;br /&gt;
&lt;br /&gt;
==1. XML:== &lt;br /&gt;
XML fail valideerub vigadeta, kuid õppejõu nõuetele täielikult ei vasta. Puudu on üks dimensioon ning samuti esineb elemente, millel on üksainus atribuut (id). Elemente võiks olla natuke rohkem ehk xml võiks oleks sisutihedam.&lt;br /&gt;
&lt;br /&gt;
==2. XSD:==&lt;br /&gt;
Skeemifail annab validaatoris vigu&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Error - Line 15, 79: org.xml.sax.SAXParseException; lineNumber: 15; columnNumber: 79; s4s-elt-must-match.1: The content of &#039;priority&#039; must match (annotation?, (simpleType | complexType)?, (unique | key | keyref)*)). A problem was found starting at: attribute.&lt;br /&gt;
Error - Line 22, 82: org.xml.sax.SAXParseException; lineNumber: 22; columnNumber: 82; s4s-elt-must-match.1: The content of &#039;user&#039; must match (annotation?, (simpleType | complexType)?, (unique | key | keyref)*)). A problem was found starting at: attribute.&lt;br /&gt;
Error - Line 35, 76: org.xml.sax.SAXParseException; lineNumber: 35; columnNumber: 76; s4s-elt-must-match.1: The content of &#039;attachment&#039; must match (annotation?, (simpleType | complexType)?, (unique | key | keyref)*)). A problem was found starting at: attribute.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==3. XSLT:== &lt;br /&gt;
Esimene transformatsioon valideerub vigadeta, kuigi võiks jällegi olla sisutihedam (üks for-each loop). Teine transformatsioon paraku ei valideeru:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FatalError: javax.xml.transform.TransformerException: A location step was expected following the &#039;/&#039; or &#039;//&#039; token.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Kokkuvõte==&lt;br /&gt;
Üldiselt korralikult tehtud töö, kuid valideerimisvead tuleks ära parandada - XSD ja teine transformatsioon hetkel ei valideeru. Samuti võiks töö olla sisutihedam, praegu on &amp;quot;sügavus&amp;quot; kolm dimensiooni ja xml tundub veidi õhuke.&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Talk:Ninjas_in_pyjamas&amp;diff=119731</id>
		<title>Talk:Ninjas in pyjamas</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Talk:Ninjas_in_pyjamas&amp;diff=119731"/>
		<updated>2017-03-27T19:02:14Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: Created page with &amp;quot;= Retsensioon meeskonnalt [https://wiki.itcollege.ee/index.php/PC_KartKicker PC KartKicker]=  ==1. XML:==  XML fail valideerub vigadeta, kuid õppejõu nõuetele täielikult e...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Retsensioon meeskonnalt [https://wiki.itcollege.ee/index.php/PC_KartKicker PC KartKicker]=&lt;br /&gt;
&lt;br /&gt;
==1. XML:== &lt;br /&gt;
XML fail valideerub vigadeta, kuid õppejõu nõuetele täielikult ei vasta. Puudu on üks dimensioon ning samuti esineb elemente, millel on üksainus atribuut (id). Elemente võiks olla natuke rohkem ehk xml võiks oleks sisutihedam.&lt;br /&gt;
&lt;br /&gt;
==2. XSD:==&lt;br /&gt;
Skeemifail annab validaatoris vigu&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Error - Line 15, 79: org.xml.sax.SAXParseException; lineNumber: 15; columnNumber: 79; s4s-elt-must-match.1: The content of &#039;priority&#039; must match (annotation?, (simpleType | complexType)?, (unique | key | keyref)*)). A problem was found starting at: attribute.&lt;br /&gt;
Error - Line 22, 82: org.xml.sax.SAXParseException; lineNumber: 22; columnNumber: 82; s4s-elt-must-match.1: The content of &#039;user&#039; must match (annotation?, (simpleType | complexType)?, (unique | key | keyref)*)). A problem was found starting at: attribute.&lt;br /&gt;
Error - Line 35, 76: org.xml.sax.SAXParseException; lineNumber: 35; columnNumber: 76; s4s-elt-must-match.1: The content of &#039;attachment&#039; must match (annotation?, (simpleType | complexType)?, (unique | key | keyref)*)). A problem was found starting at: attribute.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==3. XSLT:== &lt;br /&gt;
Esimene transformatsioon valideerub vigadeta, kuigi võiks jällegi olla sisutihedam (üks for-each loop). Teine transformatsioon paraku ei valideeru:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FatalError: javax.xml.transform.TransformerException: A location step was expected following the &#039;/&#039; or &#039;//&#039; token.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017&amp;diff=119719</id>
		<title>Kodutöö aines &quot;Võrgurakendused II: hajussüsteemide ehitamine&quot; 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017&amp;diff=119719"/>
		<updated>2017-03-27T18:40:26Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Meeskond: PC KartKicker */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
__NOINDEX__&lt;br /&gt;
&lt;br /&gt;
=Kodutöö aines &amp;quot;Võrgurakendused II: hajussüsteemide ehitamine&amp;quot; 2017=&lt;br /&gt;
==Eesmärk==&lt;br /&gt;
Saada praktiline kogemus hajussüsteemide ehitamisest XML(SOAP) või Rest veebiteenusel ja sellele klientrakenduse loomise abil ning süvendada meeskonnatööoskust. &lt;br /&gt;
*SOAP veebiteenuse puhul eeldatakse WCF tehnoloogia kasutamist. Vanema põlvkonna ASP.NET veebiteenuse loomine ei ole lubatud, kuna seda ei toeta ka Microsoft enam tänasel päeval.&lt;br /&gt;
*REST teenuste loomisel tuleks kasutada ASP.NET Web API võimalusi.&lt;br /&gt;
&lt;br /&gt;
Kaugem eesmärk on loomulikult hinne :).&lt;br /&gt;
&lt;br /&gt;
==Reeglid==&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendused (soovitavalt vähemalt kaks)endaloodud veebiteenusele&lt;br /&gt;
&lt;br /&gt;
Ühte projektimeeskonda kuulub 3..4 tudengit ning ühel teemal teostab projekti üks või mitu meeskonda. 1,2 ja viie liikmelised meeskonnad tuleks õppejõuga eraldi kooskõlastada.&lt;br /&gt;
&lt;br /&gt;
Töö käiku kajastatakse  http://wiki.itcollege.ee keskkonnas. Wikilehe täitmise eesmärke on kaks: nii on võimalik kirja panna kõik mõtted ja ideed (ning nendest jääb jälg) ning õppejõul on hiljem võimalik saada ülevaade iga projektimeeskonna liikme panusest.&lt;br /&gt;
&lt;br /&gt;
==Tähtajad==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;XML fail&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#XML_andmefail NB! Täpsem info]&lt;br /&gt;
** XML fail, stiilifail ja skeemifail peavad olema valmis ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;20. märts 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid XML-failide kohta peavad tehtud olema &#039;&#039;&#039;27. märts 2017&#039;&#039;&#039;.&lt;br /&gt;
** &#039;&#039;&#039;Meeskonnad on loonud omale enda wiki lehe, kuhu kirjeldavad meeskonna ja panevad nad üles oma tööd. Lisaks hakkavad kogunema ka sinna teiste gruppide poolt kirjutatavad retsensioonid. &amp;lt;ins&amp;gt;Meeskonnalehed lingitakse selle lehe lõppu Meeskonna pealkirja alla.&amp;lt;/ins&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Veebiteenus&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#Veebiteenus NB! Täpsem info]&lt;br /&gt;
** Veebiteenuse analüüs peab olema valmis, esitatud ja wikilehel kirjeldatud hiljemalt: &#039;&#039;&#039;17.aprill 2017&#039;&#039;&#039;&lt;br /&gt;
** Veebiteenus peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;29. mai 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid veebiteenuste kohta peavad tehtud olema &#039;&#039;&#039;08. juuni 2017&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--** Veebiteenus tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Klientrakendused&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#Klientrakendus NB! Täpsem info]&lt;br /&gt;
** Klientrakendused peavad olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;29. mai 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid klientrakenduste kohta peavad tehtud olema &#039;&#039;&#039;08. juuni 2017&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--** Klientrakendused tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--* &#039;&#039;&#039;Meeskonna kokkuvõttev aruanne&#039;&#039;&#039;&lt;br /&gt;
** Meeskonnatöö kokkuvõttev aruanne peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt 8.mai 2011&lt;br /&gt;
** Arvamused Meeskonnatöö kokkuvõtva aruande ja esitluse kohta tuleb esitada hiljemalt päev enne eksamit&lt;br /&gt;
** &#039;&#039;&#039;Meeskonna kokkuvõttev aruanne ja töö lõplik tulemus&#039;&#039;&#039; tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hindamine==&lt;br /&gt;
===Üldised kriteeriumid===&lt;br /&gt;
&lt;br /&gt;
Teostatuks loetakse projekt juhul, kui lähteülesanne on realiseeritud, lahendus on töötav, kuid esineb suuremaid vigu ning piirsituatsioonidega ei ole arvestatud.&lt;br /&gt;
&lt;br /&gt;
Maksimumtulemuse saavutamiseks peab projekt olema teostatud tehniliselt veatult ning varustatud dokumentatsiooniga, milles sisaldub  arendusprotsessi kirjeldus (peab selguma ka iga rühmaliikme panus projekti teostamisel), kasutajajuhend ning lahenduse kirjeldus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Maksimumtulemuse annab (vähemalt 4/6):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Majanduslik mõtlemine (kas loodav teenus ja rakendused oleks kasutatav ka ärilistel eesmärkidel)&lt;br /&gt;
* Mobiilrakendused &lt;br /&gt;
* AngularJS klientrakendus&lt;br /&gt;
* Kogukondade kaasamine&lt;br /&gt;
* Kasutajamugavus&lt;br /&gt;
* Läbimõeldud töökorraldus&lt;br /&gt;
* Lisavõimaluste realiseerimine (vt näidisteemad)&lt;br /&gt;
&lt;br /&gt;
===XML andmefail===&lt;br /&gt;
Ülesande täitmiseks tuleb luua XML fail andmete edastamiseks, selle XML faili skeemifail ning minimaalselt kaks sobivat XSL transformatsiooni faili loodud XML failis olevate andmete transformeerimiseks HTML formaati ja XML faili formaadi muutmiseks. Transformatsioonid peavad sisaldama midagi enamat, kui ainult üks for-each klausel. Transformatsiooni käigus peaks kasutama vajadusel parameetreid ning kindlasti ka erinevaid tingimuste kontrolle.&lt;br /&gt;
&lt;br /&gt;
XML-il peab olema vähemalt 4 loogilist dimensiooni.&lt;br /&gt;
 &amp;lt;dim1&amp;gt;&lt;br /&gt;
   &amp;lt;dim2&amp;gt;&lt;br /&gt;
     &amp;lt;dim3&amp;gt;&lt;br /&gt;
       &amp;lt;dim4&amp;gt;&lt;br /&gt;
       &amp;lt;/dim4&amp;gt;&lt;br /&gt;
     &amp;lt;/dim3&amp;gt;&lt;br /&gt;
   &amp;lt;/dim2&amp;gt;&lt;br /&gt;
 &amp;lt;/dim1&amp;gt;&lt;br /&gt;
Lisaks tuleb kasutada 3-el dimensioonil attribuute, mis one enamat, kui lihtsalt ID.&lt;br /&gt;
&lt;br /&gt;
Käesoleva ülesande käigus peab looma meeskonna ning selle wiki lehekülje&lt;br /&gt;
&lt;br /&gt;
===Veebiteenus===&lt;br /&gt;
Loodav veebiteenus peab võimaldama:&lt;br /&gt;
* Teenuse pakkumist&lt;br /&gt;
* &#039;&#039;&#039;Teenuse kasutajate tuvastamist ning haldamist&#039;&#039;&#039;&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes&lt;br /&gt;
* Teenuse poole pöördumiste arvu piiramist ja piirangute haldamist.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus peab toetama mitme kasutaja võimalust.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus tuleb luua kasutades &#039;&#039;Windows Communication Foundation&#039;&#039; või ASP.NET MVC  Web API tehnoloogiat&lt;br /&gt;
&lt;br /&gt;
Andmebaasis peab olema vähemalt 9 olemit ehk andmebaas on eeldus,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soovitav on luua teenus (FE) ja teenuse seadistamiseks ning kasutajate haldamiseks mõeldud rakendus (BE).&lt;br /&gt;
&lt;br /&gt;
===Klientrakendus===&lt;br /&gt;
Klientrakendus mõnele olemasolevale veebiteenusele, võib olla teostatud veebirakendusena, Silverlight, WPF või vormirakendusena.&lt;br /&gt;
&lt;br /&gt;
Variant1: teha klientrakendus enda loodud veebiteenusele &lt;br /&gt;
&lt;br /&gt;
Variant2: teha klientrakendus mõnele levinud veebiteenusele.&lt;br /&gt;
Näiteks: &lt;br /&gt;
* http://www.bing.com/developer&lt;br /&gt;
* http://www.flickr.com/services/api/response.soap.html&lt;br /&gt;
* http://developer.ebay.com/developercenter/windows/&lt;br /&gt;
* http://apiwiki.twitter.com/Getting-Started&lt;br /&gt;
&lt;br /&gt;
===Retsensioonid===&lt;br /&gt;
Retsensioon on üliõpilase iseseisva teadustöö kriitilise analüüsi põhjal koostatud argumenteeritud hinnang. Retsensioonis tuleb hinnata töö vastavust esitatud tingimustele, programmikoodi loetavust ning kommenteeritust, dokumentatsiooni ja kirjeldada puudusi. Retsensioonide põhjal on meeskondadel õigus oma projekte parandada enne määratud esitamistähtaja kättejõudmist.&lt;br /&gt;
&lt;br /&gt;
Retsensioon peab sisaldama minimaalselt...&lt;br /&gt;
* XML - ...200 sõna.&lt;br /&gt;
* Veebiteenus - ...600 sõna.&lt;br /&gt;
* Klientrakendus - ...600 sõna.&lt;br /&gt;
&lt;br /&gt;
Mõnelauselisest arvamusest ei piisa, kuna tegemist on grupi loodavate arvustustega, mitte individuaalsete arvustustega.&lt;br /&gt;
&lt;br /&gt;
==Konsultatsioonid==&lt;br /&gt;
 Igal projektimeeskonnal on piiramatu õigus saada õppejõu käest konsultatsiooni ja juhendamist oma&lt;br /&gt;
 töö tegemiseks, kas harjutuste ajal või pärast harjutusi ja loenguid. Eriaegade suhtes saab sõlmida&lt;br /&gt;
 õppejõuga kokkuleppeid kontaktidel&lt;br /&gt;
 mait.poska [ät] itcollege.ee või (+372 53 469 734)&lt;br /&gt;
 (teksti originaalautor Priit Raspel)&lt;br /&gt;
&lt;br /&gt;
=Teemad 2017 kevad=&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus mõnele olemasolevale või endaloodud veebiteenusele&lt;br /&gt;
&lt;br /&gt;
NB! XML andmefail ja veebiteenus ei pea olema omavahel seotud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Näidisteemad==&lt;br /&gt;
&lt;br /&gt;
===Nimede pakkumise teenus===&lt;br /&gt;
Mõte selles, et luua nimede baas, mille abil pakkuda rakenduse loojale sobiva algusega nimesid. Reaalne rakendus: &#039;&#039;autocompleter&#039;&#039; tarvis teenuse pakkumine&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua sobiva alguse järgi nimede pakkumise teenus:&lt;br /&gt;
* alates kahetähelisetest algustest pakkuda sobivad nimesid&lt;br /&gt;
* luua võimalus kasutajatel nimesid lisada&lt;br /&gt;
* luua võimalus administraatoril nimesid muuta/kustutada&lt;br /&gt;
* meeste ja naiste nimed peavad olema süsteemis eristatavad&lt;br /&gt;
* luua võimalus, mis võimaldab kuvada populaarseid nimesid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* luua võimalus, et nimi lisatakse baasi alles siis, kui administraatori õigustega inimene on selleks vastava loa andnud&lt;br /&gt;
&lt;br /&gt;
===Külastusstatistika teenus===&lt;br /&gt;
Mõte selles, et pakkuda teenust, kus kasutajal on võimalik registreerida külastused ning küsida oma külastusstatistikat.&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua külastusstatistika teenus:&lt;br /&gt;
* kasutaja saab teenuses registreerida külastusi&lt;br /&gt;
* kasutaja saab küsida külastusstatistikat päevade/kuude/kogu perioodi lõikes&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
&lt;br /&gt;
Lisavõimalused:&lt;br /&gt;
* luua võimalus registreerida alamlehtede külastusstatistikat&lt;br /&gt;
* luua võimalus külastusstatistikale lisaparameetrite lisamiseks (ip aadress, sirviku versioon jne)&lt;br /&gt;
&lt;br /&gt;
===Telefoniraamatu teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada kontakte ja nende seast otsida&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua telefoniraamatu teenus:&lt;br /&gt;
* kasutaja saab teenuses kontakte lisada ja kustutada&lt;br /&gt;
* kasutaja saab kontaktide nime/telefoninumbri jne abil otsida&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutajaid on võimalik lisada gruppidesse&lt;br /&gt;
* kasutajal on võimalik lisada vajalike kontaktandmete liike&lt;br /&gt;
* kasutajatel on võimalik jagada omavahel kontakte ja kontaktide grupper&lt;br /&gt;
&lt;br /&gt;
===RSS voogude kogumise ja uudiste kuvamise teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada talle huvipakkuvaid RSS vooge ja nendelt voogudelt uudiseid lugeda&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua RSS voogude haldusteenus:&lt;br /&gt;
* kasutaja saab teenuses RSS vooge lisada ja kustudada&lt;br /&gt;
* kasutaja saab pärida talle huvipakkuvate voogude viimaseid uudiseid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutaja saab RSS vooge vaadata eraldi või grupeeritult&lt;br /&gt;
* vooge peab puhverdama, kuna voogude lugemine võtab enamasti üsna palju aega &lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
= Meeskonnad 2017=&lt;br /&gt;
==Päevaõpe==&lt;br /&gt;
&lt;br /&gt;
===Meeskond: QView===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Semjon Greef&lt;br /&gt;
* Martin Nigul&lt;br /&gt;
* Martin Nõukas&lt;br /&gt;
* Margus Muru&lt;br /&gt;
* Lisandra Noor&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: QView]]&lt;br /&gt;
&lt;br /&gt;
Retsentsioon meeskonnale: [https://wiki.itcollege.ee/index.php/User_talk:Meeskond:_VeebiGurmaanid#M.C3.A4rkused: VeebiGurmaanid]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Redundant Rappers===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Taavi Kliss&lt;br /&gt;
*Kertu Nurmberg&lt;br /&gt;
*Anneli Asser&lt;br /&gt;
*Mart-Erki Nõumees&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: Redundant Rappers]]&lt;br /&gt;
&lt;br /&gt;
Meeskonna XML/XSD/XSLT : [https://wiki.itcollege.ee/index.php/Meeskond:_Redundant_Rappers#XML_.2F_XSD_.2F_XSLT]&lt;br /&gt;
&lt;br /&gt;
Meeskonna retsensioon meeskonnale Sense Of Direction: [https://wiki.itcollege.ee/index.php/Talk:Sense_Of_Direction]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Sense Of Direction===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Ilja Andrejev&lt;br /&gt;
*Aleksandr Babõkin&lt;br /&gt;
*Vladislav Lahtarin&lt;br /&gt;
*Vladislav Kovaltšuk&lt;br /&gt;
Meeskonna koduleht: [[Sense Of Direction]]&amp;lt;br&amp;gt;&lt;br /&gt;
XML/XSD/XSLT osa asub [https://wiki.itcollege.ee/index.php/Sense_Of_Direction#XML siin]&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon XML-failide kohta meeskonnale &amp;quot;Poly&amp;quot; [https://wiki.itcollege.ee/index.php/Sense_Of_Direction#Retsensioon_XML-failide_kohta_meeskonnale_.22Poly.22 siin]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/RK Meeskond: RK]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Raido Kivinurm&lt;br /&gt;
&lt;br /&gt;
Esimene osa: [https://wiki.itcollege.ee/index.php/RK#XML XML] / [https://wiki.itcollege.ee/index.php/RK#XSD XSD] / [https://wiki.itcollege.ee/index.php/RK#XSLT_HTML XSLT HTML] / [https://wiki.itcollege.ee/index.php/RK#XSLT_XML XSLT XML]&lt;br /&gt;
&amp;lt;BR&amp;gt; [https://wiki.itcollege.ee/index.php/RK#Retsensioonid Retsensioonid]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Team_Echo Meeskond: Echo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Vajak&lt;br /&gt;
* Janno Oolo&lt;br /&gt;
* Mari-Liis Oldja&lt;br /&gt;
* Arti Zirk&lt;br /&gt;
* Joosep Voolma&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Team_Echo#XML XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Meeskond:_Redundant_Rappers#Retsensioon_Team_Echo_poolt Retsensioon meeskonnale Redundant Rappers]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Bob%27s_Burgers Meeskond: Bob&#039;s Burgers]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Aleksei Kopõlov&lt;br /&gt;
*Sander Perens&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Bob%27s_Burgers#XML_Retsensioon_meeskonnale_VeebiGurmaanid Retsensioon meeskonnale &#039;&#039;&#039;VeebiGurmaanid&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/User:Meeskond:_VeebiGurmaanid Meeskond: VeebiGurmaanid]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Koit Kõrvel&lt;br /&gt;
* Marko Kask&lt;br /&gt;
* Melissa Eenmaa&lt;br /&gt;
* Joosep Koort&lt;br /&gt;
&lt;br /&gt;
Retsentsioon meeskonnale: [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_HelpOut HelpOut]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Muru Meeskond: Muru]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Murdho Savila&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Repi Meeskond: Repi]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Renet Pirso&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Blogify Retsensioon: BLOGIFY]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: HelpOut===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mikk Sarapuu&lt;br /&gt;
* Martin Paakspuu&lt;br /&gt;
* Kerdo Kullamäe&lt;br /&gt;
* Marvin Mardiat&lt;br /&gt;
* Piret Pomerants&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Meeskond:_HelpOut Meeskonna koduleht]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
* XML/XSLT/XSD retsensioon meeskonnale &#039;&#039;&#039;Falador&#039;&#039;&#039; asub [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_Falador siin]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/2017_Meeskond_Poly Meeskond: Poly]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kristian Kalm&lt;br /&gt;
* Roland Kontson&lt;br /&gt;
&lt;br /&gt;
=== Meeskond [https://wiki.itcollege.ee/index.php/Meeskond_%22Nope%22: Nope] ===&lt;br /&gt;
* Raido Vell&lt;br /&gt;
* Taavi Vesinurm&lt;br /&gt;
* Kaspar Kaal&lt;br /&gt;
* Lisette Noor&lt;br /&gt;
* Madis Roosioks&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:Bob%27s_Burgers: Bob&#039;s Burgers] &amp;lt;br/&amp;gt;&lt;br /&gt;
Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:Blogify: Blogify]&lt;br /&gt;
&lt;br /&gt;
===Meeskond [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab Alt + Tab]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Roots&lt;br /&gt;
* Roland Soosaar&lt;br /&gt;
* Krista Norak&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#Esimene_osa Esimene osa:] [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XML XML] | [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XSD XSD] | [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XSLT_HTML XSLT HTML] | [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XSLT_XML XSLT XML]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Kirde_sai Meeskond: Kirde sai]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Taavi Teearu&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Kirde_sai#XML.2FXSD.2FXSLT XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Unnamed Team===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Andreas Kirotar&lt;br /&gt;
*Jaan Kostõgov&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Unnamed Team]]&lt;br /&gt;
 &lt;br /&gt;
Meeskonna retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:2017_Meeskond_Poly Poly]&lt;br /&gt;
&lt;br /&gt;
=== Meeskond [https://wiki.itcollege.ee/index.php/%3F%3F%3F_Profit ??? Profit] ===&lt;br /&gt;
* Aivar Romandi&lt;br /&gt;
* Frank Karl Koppel&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Purgis Retsensioon meeskonnale Purgis]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Purgis===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Märt Lõhmus&lt;br /&gt;
* Kelli Lukas &lt;br /&gt;
Meeskonna koduleht: [[Purgis]]&amp;lt;br&amp;gt;&lt;br /&gt;
Esimene osa asub [https://wiki.itcollege.ee/index.php/Purgis#XML siin]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Meeskond:_Falador Falador]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Madis Lugus&lt;br /&gt;
* Taavi Metsvahi&lt;br /&gt;
* Kristjan Kivisild&lt;br /&gt;
Meeskonna koguleht: [[Meeskond: Falador]]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Meeskond:_Falador#XML.2FXSD.2FXSLT XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Blogify Blogify]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Hando Laasmägi&lt;br /&gt;
* Tarvo Tammejuur&lt;br /&gt;
* Cathy Toomast&lt;br /&gt;
* Tõnn Vaher&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Proovitud_abielu Proovitud abielu]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Berit Põldoja&lt;br /&gt;
*Elina Kuldkepp&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Proovitud_abielu#XML.2FXSD.2FXSLT XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Meeskond: [https://wiki.itcollege.ee/index.php/Mjart Mjart] ===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Märt Häkkinen&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Ott Ott]===&lt;br /&gt;
Liige:&lt;br /&gt;
*Ott Sõerumäe&lt;br /&gt;
&lt;br /&gt;
==Kaugõpe==&lt;br /&gt;
&lt;br /&gt;
===Meeskond: CoverMe===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Karit Kilgi&lt;br /&gt;
* Sten Kaasik&lt;br /&gt;
* Ragne Auling&lt;br /&gt;
* Silja Kralik&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: CoverMe]]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Team_SPOT Meeskond: SPOT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sigrid Pachel&lt;br /&gt;
* Oliver Tiks&lt;br /&gt;
Esitatud tööd:&lt;br /&gt;
# [https://wiki.itcollege.ee/index.php/Team_SPOT#XML_.2F_XSD_.2F_XSLT XML/XSD/XSLT] + [https://wiki.itcollege.ee/index.php/Talk:JRT retsensioon meeskonnale JRT]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/JRT Meeskond: JRT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Riho Uusjärv&lt;br /&gt;
* Jevgeni Gavrilov&lt;br /&gt;
* Tiit Kuuskmäe&lt;br /&gt;
&lt;br /&gt;
Retsensioon XML-failide kohta meeskonnale &amp;quot;PC KartKicker&amp;quot; [https://wiki.itcollege.ee/index.php/JRT#Retsensioon_JRT]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Retsensioon XML-failide kohta meeskonnale &amp;quot;Ninjas in pyjamas&amp;quot;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/JRT#Retsensioon_meeskonnale_.22Ninjas_in_pyjamas.22] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ticketer Meeskond: Ticketer]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Liina Abner&lt;br /&gt;
* Krista Rüütel&lt;br /&gt;
* Roland Türi&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ninjas_in_pyjamas Meeskond: Ninjas in Pyjamas]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Anna Linskaja&lt;br /&gt;
* Karen Grigorjan&lt;br /&gt;
* Sergei Hristoforov&lt;br /&gt;
* Artyom Likhachev&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Talupood Meeskond: Talutooted]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Matson&lt;br /&gt;
* Taavi Tilk&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talupood#XML XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/DevHelpVR Meeskond: DevHelp]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Martin Jääger&lt;br /&gt;
* Kristo Leemets&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon tiimile Ticketer, 26.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ticketer Talk:Ticketer]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/YAWS Meeskond: Yet Another Weather Station]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Andres Kepler&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/PC_KartKicker Meeskond: PC KartKicker]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
* Jan Eerik&lt;br /&gt;
XML failide retsensioon meeskonnale DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR Talk:DevHelpVR]&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017&amp;diff=119704</id>
		<title>Kodutöö aines &quot;Võrgurakendused II: hajussüsteemide ehitamine&quot; 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017&amp;diff=119704"/>
		<updated>2017-03-27T18:08:03Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Meeskond: PC KartKicker */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
__NOINDEX__&lt;br /&gt;
&lt;br /&gt;
=Kodutöö aines &amp;quot;Võrgurakendused II: hajussüsteemide ehitamine&amp;quot; 2017=&lt;br /&gt;
==Eesmärk==&lt;br /&gt;
Saada praktiline kogemus hajussüsteemide ehitamisest XML(SOAP) või Rest veebiteenusel ja sellele klientrakenduse loomise abil ning süvendada meeskonnatööoskust. &lt;br /&gt;
*SOAP veebiteenuse puhul eeldatakse WCF tehnoloogia kasutamist. Vanema põlvkonna ASP.NET veebiteenuse loomine ei ole lubatud, kuna seda ei toeta ka Microsoft enam tänasel päeval.&lt;br /&gt;
*REST teenuste loomisel tuleks kasutada ASP.NET Web API võimalusi.&lt;br /&gt;
&lt;br /&gt;
Kaugem eesmärk on loomulikult hinne :).&lt;br /&gt;
&lt;br /&gt;
==Reeglid==&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendused (soovitavalt vähemalt kaks)endaloodud veebiteenusele&lt;br /&gt;
&lt;br /&gt;
Ühte projektimeeskonda kuulub 3..4 tudengit ning ühel teemal teostab projekti üks või mitu meeskonda. 1,2 ja viie liikmelised meeskonnad tuleks õppejõuga eraldi kooskõlastada.&lt;br /&gt;
&lt;br /&gt;
Töö käiku kajastatakse  http://wiki.itcollege.ee keskkonnas. Wikilehe täitmise eesmärke on kaks: nii on võimalik kirja panna kõik mõtted ja ideed (ning nendest jääb jälg) ning õppejõul on hiljem võimalik saada ülevaade iga projektimeeskonna liikme panusest.&lt;br /&gt;
&lt;br /&gt;
==Tähtajad==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;XML fail&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#XML_andmefail NB! Täpsem info]&lt;br /&gt;
** XML fail, stiilifail ja skeemifail peavad olema valmis ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;20. märts 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid XML-failide kohta peavad tehtud olema &#039;&#039;&#039;27. märts 2017&#039;&#039;&#039;.&lt;br /&gt;
** &#039;&#039;&#039;Meeskonnad on loonud omale enda wiki lehe, kuhu kirjeldavad meeskonna ja panevad nad üles oma tööd. Lisaks hakkavad kogunema ka sinna teiste gruppide poolt kirjutatavad retsensioonid. &amp;lt;ins&amp;gt;Meeskonnalehed lingitakse selle lehe lõppu Meeskonna pealkirja alla.&amp;lt;/ins&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Veebiteenus&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#Veebiteenus NB! Täpsem info]&lt;br /&gt;
** Veebiteenuse analüüs peab olema valmis, esitatud ja wikilehel kirjeldatud hiljemalt: &#039;&#039;&#039;17.aprill 2017&#039;&#039;&#039;&lt;br /&gt;
** Veebiteenus peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;29. mai 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid veebiteenuste kohta peavad tehtud olema &#039;&#039;&#039;08. juuni 2017&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--** Veebiteenus tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Klientrakendused&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#Klientrakendus NB! Täpsem info]&lt;br /&gt;
** Klientrakendused peavad olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;29. mai 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid klientrakenduste kohta peavad tehtud olema &#039;&#039;&#039;08. juuni 2017&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--** Klientrakendused tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--* &#039;&#039;&#039;Meeskonna kokkuvõttev aruanne&#039;&#039;&#039;&lt;br /&gt;
** Meeskonnatöö kokkuvõttev aruanne peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt 8.mai 2011&lt;br /&gt;
** Arvamused Meeskonnatöö kokkuvõtva aruande ja esitluse kohta tuleb esitada hiljemalt päev enne eksamit&lt;br /&gt;
** &#039;&#039;&#039;Meeskonna kokkuvõttev aruanne ja töö lõplik tulemus&#039;&#039;&#039; tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hindamine==&lt;br /&gt;
===Üldised kriteeriumid===&lt;br /&gt;
&lt;br /&gt;
Teostatuks loetakse projekt juhul, kui lähteülesanne on realiseeritud, lahendus on töötav, kuid esineb suuremaid vigu ning piirsituatsioonidega ei ole arvestatud.&lt;br /&gt;
&lt;br /&gt;
Maksimumtulemuse saavutamiseks peab projekt olema teostatud tehniliselt veatult ning varustatud dokumentatsiooniga, milles sisaldub  arendusprotsessi kirjeldus (peab selguma ka iga rühmaliikme panus projekti teostamisel), kasutajajuhend ning lahenduse kirjeldus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Maksimumtulemuse annab (vähemalt 4/6):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Majanduslik mõtlemine (kas loodav teenus ja rakendused oleks kasutatav ka ärilistel eesmärkidel)&lt;br /&gt;
* Mobiilrakendused &lt;br /&gt;
* AngularJS klientrakendus&lt;br /&gt;
* Kogukondade kaasamine&lt;br /&gt;
* Kasutajamugavus&lt;br /&gt;
* Läbimõeldud töökorraldus&lt;br /&gt;
* Lisavõimaluste realiseerimine (vt näidisteemad)&lt;br /&gt;
&lt;br /&gt;
===XML andmefail===&lt;br /&gt;
Ülesande täitmiseks tuleb luua XML fail andmete edastamiseks, selle XML faili skeemifail ning minimaalselt kaks sobivat XSL transformatsiooni faili loodud XML failis olevate andmete transformeerimiseks HTML formaati ja XML faili formaadi muutmiseks. Transformatsioonid peavad sisaldama midagi enamat, kui ainult üks for-each klausel. Transformatsiooni käigus peaks kasutama vajadusel parameetreid ning kindlasti ka erinevaid tingimuste kontrolle.&lt;br /&gt;
&lt;br /&gt;
XML-il peab olema vähemalt 4 loogilist dimensiooni.&lt;br /&gt;
 &amp;lt;dim1&amp;gt;&lt;br /&gt;
   &amp;lt;dim2&amp;gt;&lt;br /&gt;
     &amp;lt;dim3&amp;gt;&lt;br /&gt;
       &amp;lt;dim4&amp;gt;&lt;br /&gt;
       &amp;lt;/dim4&amp;gt;&lt;br /&gt;
     &amp;lt;/dim3&amp;gt;&lt;br /&gt;
   &amp;lt;/dim2&amp;gt;&lt;br /&gt;
 &amp;lt;/dim1&amp;gt;&lt;br /&gt;
Lisaks tuleb kasutada 3-el dimensioonil attribuute, mis one enamat, kui lihtsalt ID.&lt;br /&gt;
&lt;br /&gt;
Käesoleva ülesande käigus peab looma meeskonna ning selle wiki lehekülje&lt;br /&gt;
&lt;br /&gt;
===Veebiteenus===&lt;br /&gt;
Loodav veebiteenus peab võimaldama:&lt;br /&gt;
* Teenuse pakkumist&lt;br /&gt;
* &#039;&#039;&#039;Teenuse kasutajate tuvastamist ning haldamist&#039;&#039;&#039;&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes&lt;br /&gt;
* Teenuse poole pöördumiste arvu piiramist ja piirangute haldamist.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus peab toetama mitme kasutaja võimalust.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus tuleb luua kasutades &#039;&#039;Windows Communication Foundation&#039;&#039; või ASP.NET MVC  Web API tehnoloogiat&lt;br /&gt;
&lt;br /&gt;
Andmebaasis peab olema vähemalt 9 olemit ehk andmebaas on eeldus,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soovitav on luua teenus (FE) ja teenuse seadistamiseks ning kasutajate haldamiseks mõeldud rakendus (BE).&lt;br /&gt;
&lt;br /&gt;
===Klientrakendus===&lt;br /&gt;
Klientrakendus mõnele olemasolevale veebiteenusele, võib olla teostatud veebirakendusena, Silverlight, WPF või vormirakendusena.&lt;br /&gt;
&lt;br /&gt;
Variant1: teha klientrakendus enda loodud veebiteenusele &lt;br /&gt;
&lt;br /&gt;
Variant2: teha klientrakendus mõnele levinud veebiteenusele.&lt;br /&gt;
Näiteks: &lt;br /&gt;
* http://www.bing.com/developer&lt;br /&gt;
* http://www.flickr.com/services/api/response.soap.html&lt;br /&gt;
* http://developer.ebay.com/developercenter/windows/&lt;br /&gt;
* http://apiwiki.twitter.com/Getting-Started&lt;br /&gt;
&lt;br /&gt;
===Retsensioonid===&lt;br /&gt;
Retsensioon on üliõpilase iseseisva teadustöö kriitilise analüüsi põhjal koostatud argumenteeritud hinnang. Retsensioonis tuleb hinnata töö vastavust esitatud tingimustele, programmikoodi loetavust ning kommenteeritust, dokumentatsiooni ja kirjeldada puudusi. Retsensioonide põhjal on meeskondadel õigus oma projekte parandada enne määratud esitamistähtaja kättejõudmist.&lt;br /&gt;
&lt;br /&gt;
Retsensioon peab sisaldama minimaalselt...&lt;br /&gt;
* XML - ...200 sõna.&lt;br /&gt;
* Veebiteenus - ...600 sõna.&lt;br /&gt;
* Klientrakendus - ...600 sõna.&lt;br /&gt;
&lt;br /&gt;
Mõnelauselisest arvamusest ei piisa, kuna tegemist on grupi loodavate arvustustega, mitte individuaalsete arvustustega.&lt;br /&gt;
&lt;br /&gt;
==Konsultatsioonid==&lt;br /&gt;
 Igal projektimeeskonnal on piiramatu õigus saada õppejõu käest konsultatsiooni ja juhendamist oma&lt;br /&gt;
 töö tegemiseks, kas harjutuste ajal või pärast harjutusi ja loenguid. Eriaegade suhtes saab sõlmida&lt;br /&gt;
 õppejõuga kokkuleppeid kontaktidel&lt;br /&gt;
 mait.poska [ät] itcollege.ee või (+372 53 469 734)&lt;br /&gt;
 (teksti originaalautor Priit Raspel)&lt;br /&gt;
&lt;br /&gt;
=Teemad 2017 kevad=&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus mõnele olemasolevale või endaloodud veebiteenusele&lt;br /&gt;
&lt;br /&gt;
NB! XML andmefail ja veebiteenus ei pea olema omavahel seotud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Näidisteemad==&lt;br /&gt;
&lt;br /&gt;
===Nimede pakkumise teenus===&lt;br /&gt;
Mõte selles, et luua nimede baas, mille abil pakkuda rakenduse loojale sobiva algusega nimesid. Reaalne rakendus: &#039;&#039;autocompleter&#039;&#039; tarvis teenuse pakkumine&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua sobiva alguse järgi nimede pakkumise teenus:&lt;br /&gt;
* alates kahetähelisetest algustest pakkuda sobivad nimesid&lt;br /&gt;
* luua võimalus kasutajatel nimesid lisada&lt;br /&gt;
* luua võimalus administraatoril nimesid muuta/kustutada&lt;br /&gt;
* meeste ja naiste nimed peavad olema süsteemis eristatavad&lt;br /&gt;
* luua võimalus, mis võimaldab kuvada populaarseid nimesid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* luua võimalus, et nimi lisatakse baasi alles siis, kui administraatori õigustega inimene on selleks vastava loa andnud&lt;br /&gt;
&lt;br /&gt;
===Külastusstatistika teenus===&lt;br /&gt;
Mõte selles, et pakkuda teenust, kus kasutajal on võimalik registreerida külastused ning küsida oma külastusstatistikat.&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua külastusstatistika teenus:&lt;br /&gt;
* kasutaja saab teenuses registreerida külastusi&lt;br /&gt;
* kasutaja saab küsida külastusstatistikat päevade/kuude/kogu perioodi lõikes&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
&lt;br /&gt;
Lisavõimalused:&lt;br /&gt;
* luua võimalus registreerida alamlehtede külastusstatistikat&lt;br /&gt;
* luua võimalus külastusstatistikale lisaparameetrite lisamiseks (ip aadress, sirviku versioon jne)&lt;br /&gt;
&lt;br /&gt;
===Telefoniraamatu teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada kontakte ja nende seast otsida&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua telefoniraamatu teenus:&lt;br /&gt;
* kasutaja saab teenuses kontakte lisada ja kustutada&lt;br /&gt;
* kasutaja saab kontaktide nime/telefoninumbri jne abil otsida&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutajaid on võimalik lisada gruppidesse&lt;br /&gt;
* kasutajal on võimalik lisada vajalike kontaktandmete liike&lt;br /&gt;
* kasutajatel on võimalik jagada omavahel kontakte ja kontaktide grupper&lt;br /&gt;
&lt;br /&gt;
===RSS voogude kogumise ja uudiste kuvamise teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada talle huvipakkuvaid RSS vooge ja nendelt voogudelt uudiseid lugeda&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua RSS voogude haldusteenus:&lt;br /&gt;
* kasutaja saab teenuses RSS vooge lisada ja kustudada&lt;br /&gt;
* kasutaja saab pärida talle huvipakkuvate voogude viimaseid uudiseid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutaja saab RSS vooge vaadata eraldi või grupeeritult&lt;br /&gt;
* vooge peab puhverdama, kuna voogude lugemine võtab enamasti üsna palju aega &lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
= Meeskonnad 2017=&lt;br /&gt;
==Päevaõpe==&lt;br /&gt;
&lt;br /&gt;
===Meeskond: QView===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Semjon Greef&lt;br /&gt;
* Martin Nigul&lt;br /&gt;
* Martin Nõukas&lt;br /&gt;
* Margus Muru&lt;br /&gt;
* Lisandra Noor&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: QView]]&lt;br /&gt;
&lt;br /&gt;
Retsentsioon meeskonnale: [https://wiki.itcollege.ee/index.php/User_talk:Meeskond:_VeebiGurmaanid#M.C3.A4rkused: VeebiGurmaanid]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Redundant Rappers===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Taavi Kliss&lt;br /&gt;
*Kertu Nurmberg&lt;br /&gt;
*Anneli Asser&lt;br /&gt;
*Mart-Erki Nõumees&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: Redundant Rappers]]&lt;br /&gt;
&lt;br /&gt;
Meeskonna XML/XSD/XSLT : [https://wiki.itcollege.ee/index.php/Meeskond:_Redundant_Rappers#XML_.2F_XSD_.2F_XSLT]&lt;br /&gt;
&lt;br /&gt;
Meeskonna retsensioon meeskonnale Sense Of Direction: [https://wiki.itcollege.ee/index.php/Talk:Sense_Of_Direction]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Sense Of Direction===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Ilja Andrejev&lt;br /&gt;
*Aleksandr Babõkin&lt;br /&gt;
*Vladislav Lahtarin&lt;br /&gt;
*Vladislav Kovaltšuk&lt;br /&gt;
Meeskonna koduleht: [[Sense Of Direction]]&amp;lt;br&amp;gt;&lt;br /&gt;
XML/XSD/XSLT osa asub [https://wiki.itcollege.ee/index.php/Sense_Of_Direction#XML siin]&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon XML-failide kohta meeskonnale &amp;quot;Poly&amp;quot; [https://wiki.itcollege.ee/index.php/Sense_Of_Direction#Retsensioon_XML-failide_kohta_meeskonnale_.22Poly.22 siin]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/RK Meeskond: RK]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Raido Kivinurm&lt;br /&gt;
&lt;br /&gt;
Esimene osa: [https://wiki.itcollege.ee/index.php/RK#XML XML] / [https://wiki.itcollege.ee/index.php/RK#XSD XSD] / [https://wiki.itcollege.ee/index.php/RK#XSLT_HTML XSLT HTML] / [https://wiki.itcollege.ee/index.php/RK#XSLT_XML XSLT XML]&lt;br /&gt;
&amp;lt;BR&amp;gt; [https://wiki.itcollege.ee/index.php/RK#Retsensioonid Retsensioonid]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Team_Echo Meeskond: Echo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Vajak&lt;br /&gt;
* Janno Oolo&lt;br /&gt;
* Mari-Liis Oldja&lt;br /&gt;
* Arti Zirk&lt;br /&gt;
* Joosep Voolma&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Team_Echo#XML XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Meeskond:_Redundant_Rappers#Retsensioon_Team_Echo_poolt Retsensioon meeskonnale Redundant Rappers]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Bob%27s_Burgers Meeskond: Bob&#039;s Burgers]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Aleksei Kopõlov&lt;br /&gt;
*Sander Perens&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Bob%27s_Burgers#XML_Retsensioon_meeskonnale_VeebiGurmaanid Retsensioon meeskonnale &#039;&#039;&#039;VeebiGurmaanid&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/User:Meeskond:_VeebiGurmaanid Meeskond: VeebiGurmaanid]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Koit Kõrvel&lt;br /&gt;
* Marko Kask&lt;br /&gt;
* Melissa Eenmaa&lt;br /&gt;
* Joosep Koort&lt;br /&gt;
&lt;br /&gt;
Retsentsioon meeskonnale: [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_HelpOut HelpOut]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Muru Meeskond: Muru]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Murdho Savila&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Repi Meeskond: Repi]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Renet Pirso&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Blogify Retsensioon: BLOGIFY]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: HelpOut===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mikk Sarapuu&lt;br /&gt;
* Martin Paakspuu&lt;br /&gt;
* Kerdo Kullamäe&lt;br /&gt;
* Marvin Mardiat&lt;br /&gt;
* Piret Pomerants&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Meeskond:_HelpOut Meeskonna koduleht]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
* XML/XSLT/XSD retsensioon meeskonnale &#039;&#039;&#039;Falador&#039;&#039;&#039; asub [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_Falador siin]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/2017_Meeskond_Poly Meeskond: Poly]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kristian Kalm&lt;br /&gt;
* Roland Kontson&lt;br /&gt;
&lt;br /&gt;
=== Meeskond [https://wiki.itcollege.ee/index.php/Meeskond_%22Nope%22: Nope] ===&lt;br /&gt;
* Raido Vell&lt;br /&gt;
* Taavi Vesinurm&lt;br /&gt;
* Kaspar Kaal&lt;br /&gt;
* Lisette Noor&lt;br /&gt;
* Madis Roosioks&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:Bob%27s_Burgers: Bob&#039;s Burgers]&lt;br /&gt;
&lt;br /&gt;
===Meeskond [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab Alt + Tab]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Roots&lt;br /&gt;
* Roland Soosaar&lt;br /&gt;
* Krista Norak&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#Esimene_osa Esimene osa:] [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XML XML] | [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XSD XSD] | [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XSLT_HTML XSLT HTML] | [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XSLT_XML XSLT XML]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Kirde_sai Meeskond: Kirde sai]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Taavi Teearu&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Kirde_sai#XML.2FXSD.2FXSLT XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Unnamed Team===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Andreas Kirotar&lt;br /&gt;
*Jaan Kostõgov&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Unnamed Team]]&lt;br /&gt;
 &lt;br /&gt;
Meeskonna retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:2017_Meeskond_Poly Poly]&lt;br /&gt;
&lt;br /&gt;
=== Meeskond [https://wiki.itcollege.ee/index.php/%3F%3F%3F_Profit ??? Profit] ===&lt;br /&gt;
* Aivar Romandi&lt;br /&gt;
* Frank Karl Koppel&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Purgis===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Märt Lõhmus&lt;br /&gt;
* Kelli Lukas &lt;br /&gt;
Meeskonna koduleht: [[Purgis]]&amp;lt;br&amp;gt;&lt;br /&gt;
Esimene osa asub [https://wiki.itcollege.ee/index.php/Purgis#XML siin]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Meeskond:_Falador Falador]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Madis Lugus&lt;br /&gt;
* Taavi Metsvahi&lt;br /&gt;
* Kristjan Kivisild&lt;br /&gt;
Meeskonna koguleht: [[Meeskond: Falador]]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Meeskond:_Falador#XML.2FXSD.2FXSLT XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Blogify Blogify]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Hando Laasmägi&lt;br /&gt;
* Tarvo Tammejuur&lt;br /&gt;
* Cathy Toomast&lt;br /&gt;
* Tõnn Vaher&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Proovitud_abielu Proovitud abielu]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Berit Põldoja&lt;br /&gt;
*Elina Kuldkepp&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Proovitud_abielu#XML.2FXSD.2FXSLT XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Meeskond: [https://wiki.itcollege.ee/index.php/Mjart Mjart] ===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Märt Häkkinen&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Ott Ott]===&lt;br /&gt;
Liige:&lt;br /&gt;
*Ott Sõerumäe&lt;br /&gt;
&lt;br /&gt;
==Kaugõpe==&lt;br /&gt;
&lt;br /&gt;
===Meeskond: CoverMe===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Karit Kilgi&lt;br /&gt;
* Sten Kaasik&lt;br /&gt;
* Ragne Auling&lt;br /&gt;
* Silja Kralik&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: CoverMe]]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Team_SPOT Meeskond: SPOT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sigrid Pachel&lt;br /&gt;
* Oliver Tiks&lt;br /&gt;
Esitatud tööd:&lt;br /&gt;
# [https://wiki.itcollege.ee/index.php/Team_SPOT#XML_.2F_XSD_.2F_XSLT XML/XSD/XSLT] + [https://wiki.itcollege.ee/index.php/Talk:JRT retsensioon meeskonnale JRT]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/JRT Meeskond: JRT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Riho Uusjärv&lt;br /&gt;
* Jevgeni Gavrilov&lt;br /&gt;
* Tiit Kuuskmäe&lt;br /&gt;
&lt;br /&gt;
Retsensioon XML-failide kohta meeskonnale &amp;quot;PC KartKicker&amp;quot; [https://wiki.itcollege.ee/index.php/JRT#Retsensioon_JRT]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Retsensioon XML-failide kohta meeskonnale &amp;quot;Ninjas in pyjamas&amp;quot;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/JRT#Retsensioon_meeskonnale_.22Ninjas_in_pyjamas.22] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ticketer Meeskond: Ticketer]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Liina Abner&lt;br /&gt;
* Krista Rüütel&lt;br /&gt;
* Roland Türi&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ninjas_in_pyjamas Meeskond: Ninjas in Pyjamas]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Anna Linskaja&lt;br /&gt;
* Karen Grigorjan&lt;br /&gt;
* Sergei Hristoforov&lt;br /&gt;
* Artyom Likhachev&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Talupood Meeskond: Talutooted]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Matson&lt;br /&gt;
* Taavi Tilk&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talupood#XML XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/DevHelpVR Meeskond: DevHelp]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Martin Jääger&lt;br /&gt;
* Kristo Leemets&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon tiimile Ticketer, 26.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ticketer Talk:Ticketer]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/YAWS Meeskond: Yet Another Weather Station]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Andres Kepler&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/PC_KartKicker Meeskond: PC KartKicker]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
* Jan Eerik&lt;br /&gt;
XML failide retsensioon tiimile DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR DevHelpVR]&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017&amp;diff=119703</id>
		<title>Kodutöö aines &quot;Võrgurakendused II: hajussüsteemide ehitamine&quot; 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017&amp;diff=119703"/>
		<updated>2017-03-27T18:07:39Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Meeskond: PC KartKicker */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
__NOINDEX__&lt;br /&gt;
&lt;br /&gt;
=Kodutöö aines &amp;quot;Võrgurakendused II: hajussüsteemide ehitamine&amp;quot; 2017=&lt;br /&gt;
==Eesmärk==&lt;br /&gt;
Saada praktiline kogemus hajussüsteemide ehitamisest XML(SOAP) või Rest veebiteenusel ja sellele klientrakenduse loomise abil ning süvendada meeskonnatööoskust. &lt;br /&gt;
*SOAP veebiteenuse puhul eeldatakse WCF tehnoloogia kasutamist. Vanema põlvkonna ASP.NET veebiteenuse loomine ei ole lubatud, kuna seda ei toeta ka Microsoft enam tänasel päeval.&lt;br /&gt;
*REST teenuste loomisel tuleks kasutada ASP.NET Web API võimalusi.&lt;br /&gt;
&lt;br /&gt;
Kaugem eesmärk on loomulikult hinne :).&lt;br /&gt;
&lt;br /&gt;
==Reeglid==&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendused (soovitavalt vähemalt kaks)endaloodud veebiteenusele&lt;br /&gt;
&lt;br /&gt;
Ühte projektimeeskonda kuulub 3..4 tudengit ning ühel teemal teostab projekti üks või mitu meeskonda. 1,2 ja viie liikmelised meeskonnad tuleks õppejõuga eraldi kooskõlastada.&lt;br /&gt;
&lt;br /&gt;
Töö käiku kajastatakse  http://wiki.itcollege.ee keskkonnas. Wikilehe täitmise eesmärke on kaks: nii on võimalik kirja panna kõik mõtted ja ideed (ning nendest jääb jälg) ning õppejõul on hiljem võimalik saada ülevaade iga projektimeeskonna liikme panusest.&lt;br /&gt;
&lt;br /&gt;
==Tähtajad==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;XML fail&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#XML_andmefail NB! Täpsem info]&lt;br /&gt;
** XML fail, stiilifail ja skeemifail peavad olema valmis ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;20. märts 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid XML-failide kohta peavad tehtud olema &#039;&#039;&#039;27. märts 2017&#039;&#039;&#039;.&lt;br /&gt;
** &#039;&#039;&#039;Meeskonnad on loonud omale enda wiki lehe, kuhu kirjeldavad meeskonna ja panevad nad üles oma tööd. Lisaks hakkavad kogunema ka sinna teiste gruppide poolt kirjutatavad retsensioonid. &amp;lt;ins&amp;gt;Meeskonnalehed lingitakse selle lehe lõppu Meeskonna pealkirja alla.&amp;lt;/ins&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Veebiteenus&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#Veebiteenus NB! Täpsem info]&lt;br /&gt;
** Veebiteenuse analüüs peab olema valmis, esitatud ja wikilehel kirjeldatud hiljemalt: &#039;&#039;&#039;17.aprill 2017&#039;&#039;&#039;&lt;br /&gt;
** Veebiteenus peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;29. mai 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid veebiteenuste kohta peavad tehtud olema &#039;&#039;&#039;08. juuni 2017&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--** Veebiteenus tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Klientrakendused&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#Klientrakendus NB! Täpsem info]&lt;br /&gt;
** Klientrakendused peavad olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;29. mai 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid klientrakenduste kohta peavad tehtud olema &#039;&#039;&#039;08. juuni 2017&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--** Klientrakendused tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--* &#039;&#039;&#039;Meeskonna kokkuvõttev aruanne&#039;&#039;&#039;&lt;br /&gt;
** Meeskonnatöö kokkuvõttev aruanne peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt 8.mai 2011&lt;br /&gt;
** Arvamused Meeskonnatöö kokkuvõtva aruande ja esitluse kohta tuleb esitada hiljemalt päev enne eksamit&lt;br /&gt;
** &#039;&#039;&#039;Meeskonna kokkuvõttev aruanne ja töö lõplik tulemus&#039;&#039;&#039; tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hindamine==&lt;br /&gt;
===Üldised kriteeriumid===&lt;br /&gt;
&lt;br /&gt;
Teostatuks loetakse projekt juhul, kui lähteülesanne on realiseeritud, lahendus on töötav, kuid esineb suuremaid vigu ning piirsituatsioonidega ei ole arvestatud.&lt;br /&gt;
&lt;br /&gt;
Maksimumtulemuse saavutamiseks peab projekt olema teostatud tehniliselt veatult ning varustatud dokumentatsiooniga, milles sisaldub  arendusprotsessi kirjeldus (peab selguma ka iga rühmaliikme panus projekti teostamisel), kasutajajuhend ning lahenduse kirjeldus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Maksimumtulemuse annab (vähemalt 4/6):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Majanduslik mõtlemine (kas loodav teenus ja rakendused oleks kasutatav ka ärilistel eesmärkidel)&lt;br /&gt;
* Mobiilrakendused &lt;br /&gt;
* AngularJS klientrakendus&lt;br /&gt;
* Kogukondade kaasamine&lt;br /&gt;
* Kasutajamugavus&lt;br /&gt;
* Läbimõeldud töökorraldus&lt;br /&gt;
* Lisavõimaluste realiseerimine (vt näidisteemad)&lt;br /&gt;
&lt;br /&gt;
===XML andmefail===&lt;br /&gt;
Ülesande täitmiseks tuleb luua XML fail andmete edastamiseks, selle XML faili skeemifail ning minimaalselt kaks sobivat XSL transformatsiooni faili loodud XML failis olevate andmete transformeerimiseks HTML formaati ja XML faili formaadi muutmiseks. Transformatsioonid peavad sisaldama midagi enamat, kui ainult üks for-each klausel. Transformatsiooni käigus peaks kasutama vajadusel parameetreid ning kindlasti ka erinevaid tingimuste kontrolle.&lt;br /&gt;
&lt;br /&gt;
XML-il peab olema vähemalt 4 loogilist dimensiooni.&lt;br /&gt;
 &amp;lt;dim1&amp;gt;&lt;br /&gt;
   &amp;lt;dim2&amp;gt;&lt;br /&gt;
     &amp;lt;dim3&amp;gt;&lt;br /&gt;
       &amp;lt;dim4&amp;gt;&lt;br /&gt;
       &amp;lt;/dim4&amp;gt;&lt;br /&gt;
     &amp;lt;/dim3&amp;gt;&lt;br /&gt;
   &amp;lt;/dim2&amp;gt;&lt;br /&gt;
 &amp;lt;/dim1&amp;gt;&lt;br /&gt;
Lisaks tuleb kasutada 3-el dimensioonil attribuute, mis one enamat, kui lihtsalt ID.&lt;br /&gt;
&lt;br /&gt;
Käesoleva ülesande käigus peab looma meeskonna ning selle wiki lehekülje&lt;br /&gt;
&lt;br /&gt;
===Veebiteenus===&lt;br /&gt;
Loodav veebiteenus peab võimaldama:&lt;br /&gt;
* Teenuse pakkumist&lt;br /&gt;
* &#039;&#039;&#039;Teenuse kasutajate tuvastamist ning haldamist&#039;&#039;&#039;&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes&lt;br /&gt;
* Teenuse poole pöördumiste arvu piiramist ja piirangute haldamist.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus peab toetama mitme kasutaja võimalust.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus tuleb luua kasutades &#039;&#039;Windows Communication Foundation&#039;&#039; või ASP.NET MVC  Web API tehnoloogiat&lt;br /&gt;
&lt;br /&gt;
Andmebaasis peab olema vähemalt 9 olemit ehk andmebaas on eeldus,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soovitav on luua teenus (FE) ja teenuse seadistamiseks ning kasutajate haldamiseks mõeldud rakendus (BE).&lt;br /&gt;
&lt;br /&gt;
===Klientrakendus===&lt;br /&gt;
Klientrakendus mõnele olemasolevale veebiteenusele, võib olla teostatud veebirakendusena, Silverlight, WPF või vormirakendusena.&lt;br /&gt;
&lt;br /&gt;
Variant1: teha klientrakendus enda loodud veebiteenusele &lt;br /&gt;
&lt;br /&gt;
Variant2: teha klientrakendus mõnele levinud veebiteenusele.&lt;br /&gt;
Näiteks: &lt;br /&gt;
* http://www.bing.com/developer&lt;br /&gt;
* http://www.flickr.com/services/api/response.soap.html&lt;br /&gt;
* http://developer.ebay.com/developercenter/windows/&lt;br /&gt;
* http://apiwiki.twitter.com/Getting-Started&lt;br /&gt;
&lt;br /&gt;
===Retsensioonid===&lt;br /&gt;
Retsensioon on üliõpilase iseseisva teadustöö kriitilise analüüsi põhjal koostatud argumenteeritud hinnang. Retsensioonis tuleb hinnata töö vastavust esitatud tingimustele, programmikoodi loetavust ning kommenteeritust, dokumentatsiooni ja kirjeldada puudusi. Retsensioonide põhjal on meeskondadel õigus oma projekte parandada enne määratud esitamistähtaja kättejõudmist.&lt;br /&gt;
&lt;br /&gt;
Retsensioon peab sisaldama minimaalselt...&lt;br /&gt;
* XML - ...200 sõna.&lt;br /&gt;
* Veebiteenus - ...600 sõna.&lt;br /&gt;
* Klientrakendus - ...600 sõna.&lt;br /&gt;
&lt;br /&gt;
Mõnelauselisest arvamusest ei piisa, kuna tegemist on grupi loodavate arvustustega, mitte individuaalsete arvustustega.&lt;br /&gt;
&lt;br /&gt;
==Konsultatsioonid==&lt;br /&gt;
 Igal projektimeeskonnal on piiramatu õigus saada õppejõu käest konsultatsiooni ja juhendamist oma&lt;br /&gt;
 töö tegemiseks, kas harjutuste ajal või pärast harjutusi ja loenguid. Eriaegade suhtes saab sõlmida&lt;br /&gt;
 õppejõuga kokkuleppeid kontaktidel&lt;br /&gt;
 mait.poska [ät] itcollege.ee või (+372 53 469 734)&lt;br /&gt;
 (teksti originaalautor Priit Raspel)&lt;br /&gt;
&lt;br /&gt;
=Teemad 2017 kevad=&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus mõnele olemasolevale või endaloodud veebiteenusele&lt;br /&gt;
&lt;br /&gt;
NB! XML andmefail ja veebiteenus ei pea olema omavahel seotud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Näidisteemad==&lt;br /&gt;
&lt;br /&gt;
===Nimede pakkumise teenus===&lt;br /&gt;
Mõte selles, et luua nimede baas, mille abil pakkuda rakenduse loojale sobiva algusega nimesid. Reaalne rakendus: &#039;&#039;autocompleter&#039;&#039; tarvis teenuse pakkumine&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua sobiva alguse järgi nimede pakkumise teenus:&lt;br /&gt;
* alates kahetähelisetest algustest pakkuda sobivad nimesid&lt;br /&gt;
* luua võimalus kasutajatel nimesid lisada&lt;br /&gt;
* luua võimalus administraatoril nimesid muuta/kustutada&lt;br /&gt;
* meeste ja naiste nimed peavad olema süsteemis eristatavad&lt;br /&gt;
* luua võimalus, mis võimaldab kuvada populaarseid nimesid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* luua võimalus, et nimi lisatakse baasi alles siis, kui administraatori õigustega inimene on selleks vastava loa andnud&lt;br /&gt;
&lt;br /&gt;
===Külastusstatistika teenus===&lt;br /&gt;
Mõte selles, et pakkuda teenust, kus kasutajal on võimalik registreerida külastused ning küsida oma külastusstatistikat.&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua külastusstatistika teenus:&lt;br /&gt;
* kasutaja saab teenuses registreerida külastusi&lt;br /&gt;
* kasutaja saab küsida külastusstatistikat päevade/kuude/kogu perioodi lõikes&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
&lt;br /&gt;
Lisavõimalused:&lt;br /&gt;
* luua võimalus registreerida alamlehtede külastusstatistikat&lt;br /&gt;
* luua võimalus külastusstatistikale lisaparameetrite lisamiseks (ip aadress, sirviku versioon jne)&lt;br /&gt;
&lt;br /&gt;
===Telefoniraamatu teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada kontakte ja nende seast otsida&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua telefoniraamatu teenus:&lt;br /&gt;
* kasutaja saab teenuses kontakte lisada ja kustutada&lt;br /&gt;
* kasutaja saab kontaktide nime/telefoninumbri jne abil otsida&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutajaid on võimalik lisada gruppidesse&lt;br /&gt;
* kasutajal on võimalik lisada vajalike kontaktandmete liike&lt;br /&gt;
* kasutajatel on võimalik jagada omavahel kontakte ja kontaktide grupper&lt;br /&gt;
&lt;br /&gt;
===RSS voogude kogumise ja uudiste kuvamise teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada talle huvipakkuvaid RSS vooge ja nendelt voogudelt uudiseid lugeda&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua RSS voogude haldusteenus:&lt;br /&gt;
* kasutaja saab teenuses RSS vooge lisada ja kustudada&lt;br /&gt;
* kasutaja saab pärida talle huvipakkuvate voogude viimaseid uudiseid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutaja saab RSS vooge vaadata eraldi või grupeeritult&lt;br /&gt;
* vooge peab puhverdama, kuna voogude lugemine võtab enamasti üsna palju aega &lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
= Meeskonnad 2017=&lt;br /&gt;
==Päevaõpe==&lt;br /&gt;
&lt;br /&gt;
===Meeskond: QView===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Semjon Greef&lt;br /&gt;
* Martin Nigul&lt;br /&gt;
* Martin Nõukas&lt;br /&gt;
* Margus Muru&lt;br /&gt;
* Lisandra Noor&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: QView]]&lt;br /&gt;
&lt;br /&gt;
Retsentsioon meeskonnale: [https://wiki.itcollege.ee/index.php/User_talk:Meeskond:_VeebiGurmaanid#M.C3.A4rkused: VeebiGurmaanid]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Redundant Rappers===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Taavi Kliss&lt;br /&gt;
*Kertu Nurmberg&lt;br /&gt;
*Anneli Asser&lt;br /&gt;
*Mart-Erki Nõumees&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: Redundant Rappers]]&lt;br /&gt;
&lt;br /&gt;
Meeskonna XML/XSD/XSLT : [https://wiki.itcollege.ee/index.php/Meeskond:_Redundant_Rappers#XML_.2F_XSD_.2F_XSLT]&lt;br /&gt;
&lt;br /&gt;
Meeskonna retsensioon meeskonnale Sense Of Direction: [https://wiki.itcollege.ee/index.php/Talk:Sense_Of_Direction]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Sense Of Direction===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Ilja Andrejev&lt;br /&gt;
*Aleksandr Babõkin&lt;br /&gt;
*Vladislav Lahtarin&lt;br /&gt;
*Vladislav Kovaltšuk&lt;br /&gt;
Meeskonna koduleht: [[Sense Of Direction]]&amp;lt;br&amp;gt;&lt;br /&gt;
XML/XSD/XSLT osa asub [https://wiki.itcollege.ee/index.php/Sense_Of_Direction#XML siin]&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon XML-failide kohta meeskonnale &amp;quot;Poly&amp;quot; [https://wiki.itcollege.ee/index.php/Sense_Of_Direction#Retsensioon_XML-failide_kohta_meeskonnale_.22Poly.22 siin]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/RK Meeskond: RK]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Raido Kivinurm&lt;br /&gt;
&lt;br /&gt;
Esimene osa: [https://wiki.itcollege.ee/index.php/RK#XML XML] / [https://wiki.itcollege.ee/index.php/RK#XSD XSD] / [https://wiki.itcollege.ee/index.php/RK#XSLT_HTML XSLT HTML] / [https://wiki.itcollege.ee/index.php/RK#XSLT_XML XSLT XML]&lt;br /&gt;
&amp;lt;BR&amp;gt; [https://wiki.itcollege.ee/index.php/RK#Retsensioonid Retsensioonid]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Team_Echo Meeskond: Echo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Vajak&lt;br /&gt;
* Janno Oolo&lt;br /&gt;
* Mari-Liis Oldja&lt;br /&gt;
* Arti Zirk&lt;br /&gt;
* Joosep Voolma&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Team_Echo#XML XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Meeskond:_Redundant_Rappers#Retsensioon_Team_Echo_poolt Retsensioon meeskonnale Redundant Rappers]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Bob%27s_Burgers Meeskond: Bob&#039;s Burgers]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Aleksei Kopõlov&lt;br /&gt;
*Sander Perens&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Bob%27s_Burgers#XML_Retsensioon_meeskonnale_VeebiGurmaanid Retsensioon meeskonnale &#039;&#039;&#039;VeebiGurmaanid&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/User:Meeskond:_VeebiGurmaanid Meeskond: VeebiGurmaanid]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Koit Kõrvel&lt;br /&gt;
* Marko Kask&lt;br /&gt;
* Melissa Eenmaa&lt;br /&gt;
* Joosep Koort&lt;br /&gt;
&lt;br /&gt;
Retsentsioon meeskonnale: [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_HelpOut HelpOut]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Muru Meeskond: Muru]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Murdho Savila&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Repi Meeskond: Repi]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Renet Pirso&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Blogify Retsensioon: BLOGIFY]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: HelpOut===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mikk Sarapuu&lt;br /&gt;
* Martin Paakspuu&lt;br /&gt;
* Kerdo Kullamäe&lt;br /&gt;
* Marvin Mardiat&lt;br /&gt;
* Piret Pomerants&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Meeskond:_HelpOut Meeskonna koduleht]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
* XML/XSLT/XSD retsensioon meeskonnale &#039;&#039;&#039;Falador&#039;&#039;&#039; asub [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_Falador siin]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/2017_Meeskond_Poly Meeskond: Poly]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kristian Kalm&lt;br /&gt;
* Roland Kontson&lt;br /&gt;
&lt;br /&gt;
=== Meeskond [https://wiki.itcollege.ee/index.php/Meeskond_%22Nope%22: Nope] ===&lt;br /&gt;
* Raido Vell&lt;br /&gt;
* Taavi Vesinurm&lt;br /&gt;
* Kaspar Kaal&lt;br /&gt;
* Lisette Noor&lt;br /&gt;
* Madis Roosioks&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:Bob%27s_Burgers: Bob&#039;s Burgers]&lt;br /&gt;
&lt;br /&gt;
===Meeskond [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab Alt + Tab]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Roots&lt;br /&gt;
* Roland Soosaar&lt;br /&gt;
* Krista Norak&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#Esimene_osa Esimene osa:] [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XML XML] | [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XSD XSD] | [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XSLT_HTML XSLT HTML] | [https://wiki.itcollege.ee/index.php/Alt_%2B_Tab#XSLT_XML XSLT XML]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Kirde_sai Meeskond: Kirde sai]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Taavi Teearu&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Kirde_sai#XML.2FXSD.2FXSLT XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Unnamed Team===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Andreas Kirotar&lt;br /&gt;
*Jaan Kostõgov&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Unnamed Team]]&lt;br /&gt;
 &lt;br /&gt;
Meeskonna retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Talk:2017_Meeskond_Poly Poly]&lt;br /&gt;
&lt;br /&gt;
=== Meeskond [https://wiki.itcollege.ee/index.php/%3F%3F%3F_Profit ??? Profit] ===&lt;br /&gt;
* Aivar Romandi&lt;br /&gt;
* Frank Karl Koppel&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Purgis===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Märt Lõhmus&lt;br /&gt;
* Kelli Lukas &lt;br /&gt;
Meeskonna koduleht: [[Purgis]]&amp;lt;br&amp;gt;&lt;br /&gt;
Esimene osa asub [https://wiki.itcollege.ee/index.php/Purgis#XML siin]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Meeskond:_Falador Falador]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Madis Lugus&lt;br /&gt;
* Taavi Metsvahi&lt;br /&gt;
* Kristjan Kivisild&lt;br /&gt;
Meeskonna koguleht: [[Meeskond: Falador]]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Meeskond:_Falador#XML.2FXSD.2FXSLT XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Blogify Blogify]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Hando Laasmägi&lt;br /&gt;
* Tarvo Tammejuur&lt;br /&gt;
* Cathy Toomast&lt;br /&gt;
* Tõnn Vaher&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Proovitud_abielu Proovitud abielu]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Berit Põldoja&lt;br /&gt;
*Elina Kuldkepp&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Proovitud_abielu#XML.2FXSD.2FXSLT XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Meeskond: [https://wiki.itcollege.ee/index.php/Mjart Mjart] ===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Märt Häkkinen&lt;br /&gt;
&lt;br /&gt;
===Meeskond: [https://wiki.itcollege.ee/index.php/Ott Ott]===&lt;br /&gt;
Liige:&lt;br /&gt;
*Ott Sõerumäe&lt;br /&gt;
&lt;br /&gt;
==Kaugõpe==&lt;br /&gt;
&lt;br /&gt;
===Meeskond: CoverMe===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Karit Kilgi&lt;br /&gt;
* Sten Kaasik&lt;br /&gt;
* Ragne Auling&lt;br /&gt;
* Silja Kralik&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: CoverMe]]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Team_SPOT Meeskond: SPOT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sigrid Pachel&lt;br /&gt;
* Oliver Tiks&lt;br /&gt;
Esitatud tööd:&lt;br /&gt;
# [https://wiki.itcollege.ee/index.php/Team_SPOT#XML_.2F_XSD_.2F_XSLT XML/XSD/XSLT] + [https://wiki.itcollege.ee/index.php/Talk:JRT retsensioon meeskonnale JRT]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/JRT Meeskond: JRT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Riho Uusjärv&lt;br /&gt;
* Jevgeni Gavrilov&lt;br /&gt;
* Tiit Kuuskmäe&lt;br /&gt;
&lt;br /&gt;
Retsensioon XML-failide kohta meeskonnale &amp;quot;PC KartKicker&amp;quot; [https://wiki.itcollege.ee/index.php/JRT#Retsensioon_JRT]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Retsensioon XML-failide kohta meeskonnale &amp;quot;Ninjas in pyjamas&amp;quot;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/JRT#Retsensioon_meeskonnale_.22Ninjas_in_pyjamas.22] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ticketer Meeskond: Ticketer]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Liina Abner&lt;br /&gt;
* Krista Rüütel&lt;br /&gt;
* Roland Türi&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ninjas_in_pyjamas Meeskond: Ninjas in Pyjamas]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Anna Linskaja&lt;br /&gt;
* Karen Grigorjan&lt;br /&gt;
* Sergei Hristoforov&lt;br /&gt;
* Artyom Likhachev&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Talupood Meeskond: Talutooted]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Matson&lt;br /&gt;
* Taavi Tilk&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talupood#XML XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/DevHelpVR Meeskond: DevHelp]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Martin Jääger&lt;br /&gt;
* Kristo Leemets&lt;br /&gt;
&lt;br /&gt;
XML failide retsensioon tiimile Ticketer, 26.03.2017: [https://wiki.itcollege.ee/index.php/Talk:Ticketer Talk:Ticketer]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/YAWS Meeskond: Yet Another Weather Station]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Andres Kepler&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/PC_KartKicker Meeskond: PC KartKicker]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
* Jan Eerik&lt;br /&gt;
XML failide retsensioon tiimile DevHelpVR, 27.03.2017: [https://wiki.itcollege.ee/index.php/Talk:DevHelpVR]&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=118941</id>
		<title>PC KartKicker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=118941"/>
		<updated>2017-03-20T10:09:30Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Meeskond */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
* Jan Eerik&lt;br /&gt;
&lt;br /&gt;
= Idee =&lt;br /&gt;
&lt;br /&gt;
Käesolev veebirakendus on asendamatu abimees arvuti kokkupanekul (võrdlemisi tugevalt inspireeritud https://pcpartpicker.com).&lt;br /&gt;
&lt;br /&gt;
Kuna teatavasti vajab arvuti töötamiseks kindlaid juppe mingis aktsepteeritud konfiguratsioonis, võimaldab meie rakendus välistada mitteühilduva raudvara &amp;quot;jõuga&amp;quot; ühildamist ja abistab kasutajal optimaalse konfiguratsiooni valimist.&lt;br /&gt;
&lt;br /&gt;
= Põhiline funktsionaalsus =&lt;br /&gt;
&lt;br /&gt;
* Kasutaja saab lisada üks kuni mitu arvutiskeemi&lt;br /&gt;
* Skeemile saab hakata ükshaaval lisama juppe (emaplaat, protsessor, mälud jne)&lt;br /&gt;
* Iga kord kui mingi jupp skeemi lisatakse, kitsendab see ülejäänud juppide valikut - näiteks LGA1151 liidesega emaplaadile ei õnnestu lisada AMD protsessorit jne&lt;br /&gt;
* Nii pooleliolevaid kui valminud skeeme saab salvestada&lt;br /&gt;
* Igal jupil on oma vaade koos tehnilise infoga&lt;br /&gt;
&lt;br /&gt;
= Nice to have =&lt;br /&gt;
&lt;br /&gt;
* Parima hinna kuvamine (nt Amazon, Newegg)&lt;br /&gt;
* Komponentide võrdlus&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 1: XML =&lt;br /&gt;
&lt;br /&gt;
== Teema ==&lt;br /&gt;
== XML==&lt;br /&gt;
== XML skeem (XSD) ==&lt;br /&gt;
== XSLT 1 ==&lt;br /&gt;
== XSLT 2 ==&lt;br /&gt;
== Ülesanne 1 retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 2: Veebirakendus =&lt;br /&gt;
= Ülesanne 3: Klientrakendus =&lt;br /&gt;
= (b)logi =&lt;br /&gt;
&lt;br /&gt;
* 20/03/2017: Loodud Wiki leht, jagatud ülesanded&lt;br /&gt;
* 20/03/2017: Projekti esimene osa valmis&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PC_KartKicker:&amp;diff=118939</id>
		<title>PC KartKicker:</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PC_KartKicker:&amp;diff=118939"/>
		<updated>2017-03-20T10:08:18Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{db-author}}&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=118938</id>
		<title>PC KartKicker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=118938"/>
		<updated>2017-03-20T10:05:49Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* (b)logi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Martin Kask &amp;lt;br&amp;gt;&lt;br /&gt;
Rain Saarmäe &amp;lt;br&amp;gt;&lt;br /&gt;
Jan Eerik &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Idee =&lt;br /&gt;
&lt;br /&gt;
Käesolev veebirakendus on asendamatu abimees arvuti kokkupanekul (võrdlemisi tugevalt inspireeritud https://pcpartpicker.com).&lt;br /&gt;
&lt;br /&gt;
Kuna teatavasti vajab arvuti töötamiseks kindlaid juppe mingis aktsepteeritud konfiguratsioonis, võimaldab meie rakendus välistada mitteühilduva raudvara &amp;quot;jõuga&amp;quot; ühildamist ja abistab kasutajal optimaalse konfiguratsiooni valimist.&lt;br /&gt;
&lt;br /&gt;
= Põhiline funktsionaalsus =&lt;br /&gt;
&lt;br /&gt;
* Kasutaja saab lisada üks kuni mitu arvutiskeemi&lt;br /&gt;
* Skeemile saab hakata ükshaaval lisama juppe (emaplaat, protsessor, mälud jne)&lt;br /&gt;
* Iga kord kui mingi jupp skeemi lisatakse, kitsendab see ülejäänud juppide valikut - näiteks LGA1151 liidesega emaplaadile ei õnnestu lisada AMD protsessorit jne&lt;br /&gt;
* Nii pooleliolevaid kui valminud skeeme saab salvestada&lt;br /&gt;
* Igal jupil on oma vaade koos tehnilise infoga&lt;br /&gt;
&lt;br /&gt;
= Nice to have =&lt;br /&gt;
&lt;br /&gt;
* Parima hinna kuvamine (nt Amazon, Newegg)&lt;br /&gt;
* Komponentide võrdlus&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 1: XML =&lt;br /&gt;
&lt;br /&gt;
== Teema ==&lt;br /&gt;
== XML==&lt;br /&gt;
== XML skeem (XSD) ==&lt;br /&gt;
== XSLT 1 ==&lt;br /&gt;
== XSLT 2 ==&lt;br /&gt;
== Ülesanne 1 retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 2: Veebirakendus =&lt;br /&gt;
= Ülesanne 3: Klientrakendus =&lt;br /&gt;
= (b)logi =&lt;br /&gt;
&lt;br /&gt;
* 20/03/2017: Loodud Wiki leht, jagatud ülesanded&lt;br /&gt;
* 20/03/2017: Projekti esimene osa valmis&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=118937</id>
		<title>PC KartKicker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PC_KartKicker&amp;diff=118937"/>
		<updated>2017-03-20T10:05:15Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: Created page with &amp;quot;= Meeskond =  Martin Kask &amp;lt;br&amp;gt; Rain Saarmäe &amp;lt;br&amp;gt; Jan Eerik &amp;lt;br&amp;gt;  = Idee =  Käesolev veebirakendus on asendamatu abimees arvuti kokkupanekul (võrdlemisi tugevalt inspireerit...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Martin Kask &amp;lt;br&amp;gt;&lt;br /&gt;
Rain Saarmäe &amp;lt;br&amp;gt;&lt;br /&gt;
Jan Eerik &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Idee =&lt;br /&gt;
&lt;br /&gt;
Käesolev veebirakendus on asendamatu abimees arvuti kokkupanekul (võrdlemisi tugevalt inspireeritud https://pcpartpicker.com).&lt;br /&gt;
&lt;br /&gt;
Kuna teatavasti vajab arvuti töötamiseks kindlaid juppe mingis aktsepteeritud konfiguratsioonis, võimaldab meie rakendus välistada mitteühilduva raudvara &amp;quot;jõuga&amp;quot; ühildamist ja abistab kasutajal optimaalse konfiguratsiooni valimist.&lt;br /&gt;
&lt;br /&gt;
= Põhiline funktsionaalsus =&lt;br /&gt;
&lt;br /&gt;
* Kasutaja saab lisada üks kuni mitu arvutiskeemi&lt;br /&gt;
* Skeemile saab hakata ükshaaval lisama juppe (emaplaat, protsessor, mälud jne)&lt;br /&gt;
* Iga kord kui mingi jupp skeemi lisatakse, kitsendab see ülejäänud juppide valikut - näiteks LGA1151 liidesega emaplaadile ei õnnestu lisada AMD protsessorit jne&lt;br /&gt;
* Nii pooleliolevaid kui valminud skeeme saab salvestada&lt;br /&gt;
* Igal jupil on oma vaade koos tehnilise infoga&lt;br /&gt;
&lt;br /&gt;
= Nice to have =&lt;br /&gt;
&lt;br /&gt;
* Parima hinna kuvamine (nt Amazon, Newegg)&lt;br /&gt;
* Komponentide võrdlus&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 1: XML =&lt;br /&gt;
&lt;br /&gt;
== Teema ==&lt;br /&gt;
== XML==&lt;br /&gt;
== XML skeem (XSD) ==&lt;br /&gt;
== XSLT 1 ==&lt;br /&gt;
== XSLT 2 ==&lt;br /&gt;
== Ülesanne 1 retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 2: Veebirakendus =&lt;br /&gt;
= Ülesanne 3: Klientrakendus =&lt;br /&gt;
= (b)logi =&lt;br /&gt;
&lt;br /&gt;
20/03/2017: Loodud Wiki leht, jagatud ülesanded&lt;br /&gt;
20/03/2017: Projekti esimene osa valmis&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PC_KartKicker:&amp;diff=118936</id>
		<title>PC KartKicker:</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PC_KartKicker:&amp;diff=118936"/>
		<updated>2017-03-20T10:05:05Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017&amp;diff=118935</id>
		<title>Kodutöö aines &quot;Võrgurakendused II: hajussüsteemide ehitamine&quot; 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017&amp;diff=118935"/>
		<updated>2017-03-20T10:04:46Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Meeskond: PC KartKicker */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
__NOINDEX__&lt;br /&gt;
&lt;br /&gt;
=Kodutöö aines &amp;quot;Võrgurakendused II: hajussüsteemide ehitamine&amp;quot; 2017=&lt;br /&gt;
==Eesmärk==&lt;br /&gt;
Saada praktiline kogemus hajussüsteemide ehitamisest XML(SOAP) või Rest veebiteenusel ja sellele klientrakenduse loomise abil ning süvendada meeskonnatööoskust. &lt;br /&gt;
*SOAP veebiteenuse puhul eeldatakse WCF tehnoloogia kasutamist. Vanema põlvkonna ASP.NET veebiteenuse loomine ei ole lubatud, kuna seda ei toeta ka Microsoft enam tänasel päeval.&lt;br /&gt;
*REST teenuste loomisel tuleks kasutada ASP.NET Web API võimalusi.&lt;br /&gt;
&lt;br /&gt;
Kaugem eesmärk on loomulikult hinne :).&lt;br /&gt;
&lt;br /&gt;
==Reeglid==&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendused (soovitavalt vähemalt kaks)endaloodud veebiteenusele&lt;br /&gt;
&lt;br /&gt;
Ühte projektimeeskonda kuulub 3..4 tudengit ning ühel teemal teostab projekti üks või mitu meeskonda. 1,2 ja viie liikmelised meeskonnad tuleks õppejõuga eraldi kooskõlastada.&lt;br /&gt;
&lt;br /&gt;
Töö käiku kajastatakse  http://wiki.itcollege.ee keskkonnas. Wikilehe täitmise eesmärke on kaks: nii on võimalik kirja panna kõik mõtted ja ideed (ning nendest jääb jälg) ning õppejõul on hiljem võimalik saada ülevaade iga projektimeeskonna liikme panusest.&lt;br /&gt;
&lt;br /&gt;
==Tähtajad==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;XML fail&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#XML_andmefail NB! Täpsem info]&lt;br /&gt;
** XML fail, stiilifail ja skeemifail peavad olema valmis ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;20. märts 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid XML-failide kohta peavad tehtud olema &#039;&#039;&#039;27. märts 2017&#039;&#039;&#039;.&lt;br /&gt;
** &#039;&#039;&#039;Meeskonnad on loonud omale enda wiki lehe, kuhu kirjeldavad meeskonna ja panevad nad üles oma tööd. Lisaks hakkavad kogunema ka sinna teiste gruppide poolt kirjutatavad retsensioonid. &amp;lt;ins&amp;gt;Meeskonnalehed lingitakse selle lehe lõppu Meeskonna pealkirja alla.&amp;lt;/ins&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Veebiteenus&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#Veebiteenus NB! Täpsem info]&lt;br /&gt;
** Veebiteenuse analüüs peab olema valmis, esitatud ja wikilehel kirjeldatud hiljemalt: &#039;&#039;&#039;17.aprill 2017&#039;&#039;&#039;&lt;br /&gt;
** Veebiteenus peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;29. mai 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid veebiteenuste kohta peavad tehtud olema &#039;&#039;&#039;08. juuni 2017&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--** Veebiteenus tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Klientrakendused&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017#Klientrakendus NB! Täpsem info]&lt;br /&gt;
** Klientrakendused peavad olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;29. mai 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid klientrakenduste kohta peavad tehtud olema &#039;&#039;&#039;08. juuni 2017&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--** Klientrakendused tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--* &#039;&#039;&#039;Meeskonna kokkuvõttev aruanne&#039;&#039;&#039;&lt;br /&gt;
** Meeskonnatöö kokkuvõttev aruanne peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt 8.mai 2011&lt;br /&gt;
** Arvamused Meeskonnatöö kokkuvõtva aruande ja esitluse kohta tuleb esitada hiljemalt päev enne eksamit&lt;br /&gt;
** &#039;&#039;&#039;Meeskonna kokkuvõttev aruanne ja töö lõplik tulemus&#039;&#039;&#039; tuleb esitleda!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hindamine==&lt;br /&gt;
===Üldised kriteeriumid===&lt;br /&gt;
&lt;br /&gt;
Teostatuks loetakse projekt juhul, kui lähteülesanne on realiseeritud, lahendus on töötav, kuid esineb suuremaid vigu ning piirsituatsioonidega ei ole arvestatud.&lt;br /&gt;
&lt;br /&gt;
Maksimumtulemuse saavutamiseks peab projekt olema teostatud tehniliselt veatult ning varustatud dokumentatsiooniga, milles sisaldub  arendusprotsessi kirjeldus (peab selguma ka iga rühmaliikme panus projekti teostamisel), kasutajajuhend ning lahenduse kirjeldus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Maksimumtulemuse annab (vähemalt 4/6):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Majanduslik mõtlemine (kas loodav teenus ja rakendused oleks kasutatav ka ärilistel eesmärkidel)&lt;br /&gt;
* Mobiilrakendused &lt;br /&gt;
* AngularJS klientrakendus&lt;br /&gt;
* Kogukondade kaasamine&lt;br /&gt;
* Kasutajamugavus&lt;br /&gt;
* Läbimõeldud töökorraldus&lt;br /&gt;
* Lisavõimaluste realiseerimine (vt näidisteemad)&lt;br /&gt;
&lt;br /&gt;
===XML andmefail===&lt;br /&gt;
Ülesande täitmiseks tuleb luua XML fail andmete edastamiseks, selle XML faili skeemifail ning minimaalselt kaks sobivat XSL transformatsiooni faili loodud XML failis olevate andmete transformeerimiseks HTML formaati ja XML faili formaadi muutmiseks. Transformatsioonid peavad sisaldama midagi enamat, kui ainult üks for-each klausel. Transformatsiooni käigus peaks kasutama vajadusel parameetreid ning kindlasti ka erinevaid tingimuste kontrolle.&lt;br /&gt;
&lt;br /&gt;
XML-il peab olema vähemalt 4 loogilist dimensiooni.&lt;br /&gt;
 &amp;lt;dim1&amp;gt;&lt;br /&gt;
   &amp;lt;dim2&amp;gt;&lt;br /&gt;
     &amp;lt;dim3&amp;gt;&lt;br /&gt;
       &amp;lt;dim4&amp;gt;&lt;br /&gt;
       &amp;lt;/dim4&amp;gt;&lt;br /&gt;
     &amp;lt;/dim3&amp;gt;&lt;br /&gt;
   &amp;lt;/dim2&amp;gt;&lt;br /&gt;
 &amp;lt;/dim1&amp;gt;&lt;br /&gt;
Lisaks tuleb kasutada 3-el dimensioonil attribuute, mis one enamat, kui lihtsalt ID.&lt;br /&gt;
&lt;br /&gt;
Käesoleva ülesande käigus peab looma meeskonna ning selle wiki lehekülje&lt;br /&gt;
&lt;br /&gt;
===Veebiteenus===&lt;br /&gt;
Loodav veebiteenus peab võimaldama:&lt;br /&gt;
* Teenuse pakkumist&lt;br /&gt;
* &#039;&#039;&#039;Teenuse kasutajate tuvastamist ning haldamist&#039;&#039;&#039;&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes&lt;br /&gt;
* Teenuse poole pöördumiste arvu piiramist ja piirangute haldamist.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus peab toetama mitme kasutaja võimalust.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus tuleb luua kasutades &#039;&#039;Windows Communication Foundation&#039;&#039; või ASP.NET MVC  Web API tehnoloogiat&lt;br /&gt;
&lt;br /&gt;
Andmebaasis peab olema vähemalt 9 olemit ehk andmebaas on eeldus,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soovitav on luua teenus (FE) ja teenuse seadistamiseks ning kasutajate haldamiseks mõeldud rakendus (BE).&lt;br /&gt;
&lt;br /&gt;
===Klientrakendus===&lt;br /&gt;
Klientrakendus mõnele olemasolevale veebiteenusele, võib olla teostatud veebirakendusena, Silverlight, WPF või vormirakendusena.&lt;br /&gt;
&lt;br /&gt;
Variant1: teha klientrakendus enda loodud veebiteenusele &lt;br /&gt;
&lt;br /&gt;
Variant2: teha klientrakendus mõnele levinud veebiteenusele.&lt;br /&gt;
Näiteks: &lt;br /&gt;
* http://www.bing.com/developer&lt;br /&gt;
* http://www.flickr.com/services/api/response.soap.html&lt;br /&gt;
* http://developer.ebay.com/developercenter/windows/&lt;br /&gt;
* http://apiwiki.twitter.com/Getting-Started&lt;br /&gt;
&lt;br /&gt;
===Retsensioonid===&lt;br /&gt;
Retsensioon on üliõpilase iseseisva teadustöö kriitilise analüüsi põhjal koostatud argumenteeritud hinnang. Retsensioonis tuleb hinnata töö vastavust esitatud tingimustele, programmikoodi loetavust ning kommenteeritust, dokumentatsiooni ja kirjeldada puudusi. Retsensioonide põhjal on meeskondadel õigus oma projekte parandada enne määratud esitamistähtaja kättejõudmist.&lt;br /&gt;
&lt;br /&gt;
Retsensioon peab sisaldama minimaalselt...&lt;br /&gt;
* XML - ...200 sõna.&lt;br /&gt;
* Veebiteenus - ...600 sõna.&lt;br /&gt;
* Klientrakendus - ...600 sõna.&lt;br /&gt;
&lt;br /&gt;
Mõnelauselisest arvamusest ei piisa, kuna tegemist on grupi loodavate arvustustega, mitte individuaalsete arvustustega.&lt;br /&gt;
&lt;br /&gt;
==Konsultatsioonid==&lt;br /&gt;
 Igal projektimeeskonnal on piiramatu õigus saada õppejõu käest konsultatsiooni ja juhendamist oma&lt;br /&gt;
 töö tegemiseks, kas harjutuste ajal või pärast harjutusi ja loenguid. Eriaegade suhtes saab sõlmida&lt;br /&gt;
 õppejõuga kokkuleppeid kontaktidel&lt;br /&gt;
 mait.poska [ät] itcollege.ee või (+372 53 469 734)&lt;br /&gt;
 (teksti originaalautor Priit Raspel)&lt;br /&gt;
&lt;br /&gt;
=Teemad 2017 kevad=&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus mõnele olemasolevale või endaloodud veebiteenusele&lt;br /&gt;
&lt;br /&gt;
NB! XML andmefail ja veebiteenus ei pea olema omavahel seotud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Näidisteemad==&lt;br /&gt;
&lt;br /&gt;
===Nimede pakkumise teenus===&lt;br /&gt;
Mõte selles, et luua nimede baas, mille abil pakkuda rakenduse loojale sobiva algusega nimesid. Reaalne rakendus: &#039;&#039;autocompleter&#039;&#039; tarvis teenuse pakkumine&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua sobiva alguse järgi nimede pakkumise teenus:&lt;br /&gt;
* alates kahetähelisetest algustest pakkuda sobivad nimesid&lt;br /&gt;
* luua võimalus kasutajatel nimesid lisada&lt;br /&gt;
* luua võimalus administraatoril nimesid muuta/kustutada&lt;br /&gt;
* meeste ja naiste nimed peavad olema süsteemis eristatavad&lt;br /&gt;
* luua võimalus, mis võimaldab kuvada populaarseid nimesid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* luua võimalus, et nimi lisatakse baasi alles siis, kui administraatori õigustega inimene on selleks vastava loa andnud&lt;br /&gt;
&lt;br /&gt;
===Külastusstatistika teenus===&lt;br /&gt;
Mõte selles, et pakkuda teenust, kus kasutajal on võimalik registreerida külastused ning küsida oma külastusstatistikat.&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua külastusstatistika teenus:&lt;br /&gt;
* kasutaja saab teenuses registreerida külastusi&lt;br /&gt;
* kasutaja saab küsida külastusstatistikat päevade/kuude/kogu perioodi lõikes&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
&lt;br /&gt;
Lisavõimalused:&lt;br /&gt;
* luua võimalus registreerida alamlehtede külastusstatistikat&lt;br /&gt;
* luua võimalus külastusstatistikale lisaparameetrite lisamiseks (ip aadress, sirviku versioon jne)&lt;br /&gt;
&lt;br /&gt;
===Telefoniraamatu teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada kontakte ja nende seast otsida&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua telefoniraamatu teenus:&lt;br /&gt;
* kasutaja saab teenuses kontakte lisada ja kustutada&lt;br /&gt;
* kasutaja saab kontaktide nime/telefoninumbri jne abil otsida&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutajaid on võimalik lisada gruppidesse&lt;br /&gt;
* kasutajal on võimalik lisada vajalike kontaktandmete liike&lt;br /&gt;
* kasutajatel on võimalik jagada omavahel kontakte ja kontaktide grupper&lt;br /&gt;
&lt;br /&gt;
===RSS voogude kogumise ja uudiste kuvamise teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada talle huvipakkuvaid RSS vooge ja nendelt voogudelt uudiseid lugeda&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua RSS voogude haldusteenus:&lt;br /&gt;
* kasutaja saab teenuses RSS vooge lisada ja kustudada&lt;br /&gt;
* kasutaja saab pärida talle huvipakkuvate voogude viimaseid uudiseid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutaja saab RSS vooge vaadata eraldi või grupeeritult&lt;br /&gt;
* vooge peab puhverdama, kuna voogude lugemine võtab enamasti üsna palju aega &lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
= Meeskonnad 2017=&lt;br /&gt;
==Päevaõpe==&lt;br /&gt;
&lt;br /&gt;
===Meeskond: QView===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Semjon Greef&lt;br /&gt;
* Martin Nigul&lt;br /&gt;
* Martin Nõukas&lt;br /&gt;
* Margus Muru&lt;br /&gt;
* Lisandra Noor&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: QView]]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Redundant Rappers===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Taavi Kliss&lt;br /&gt;
*Kertu Nurmberg&lt;br /&gt;
*Anneli Asser&lt;br /&gt;
*Mart-Erki Nõumees&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: Redundant Rappers]]&lt;br /&gt;
&lt;br /&gt;
Meeskonna XML/XSD/XSLT : [https://wiki.itcollege.ee/index.php/Meeskond:_Redundant_Rappers#XML_.2F_XSD_.2F_XSLT]&lt;br /&gt;
&lt;br /&gt;
Meeskonna retsensioon meeskonnale Sense Of Direction: [https://wiki.itcollege.ee/index.php/Talk:Sense_Of_Direction]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Sense Of Direction===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Ilja Andrejev&lt;br /&gt;
*Aleksandr Babõkin&lt;br /&gt;
*Vladislav Lahtarin&lt;br /&gt;
*Vladislav Kovaltšuk&lt;br /&gt;
Meeskonna koduleht: [[Sense Of Direction]]&amp;lt;br&amp;gt;&lt;br /&gt;
XML/XSD/XSLT osa asub [https://wiki.itcollege.ee/index.php/Sense_Of_Direction#XML siin]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/RK Meeskond: RK]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Raido Kivinurm&lt;br /&gt;
&lt;br /&gt;
Esimene osa: [https://wiki.itcollege.ee/index.php/RK#XML XML] / [https://wiki.itcollege.ee/index.php/RK#XSD XSD] / [https://wiki.itcollege.ee/index.php/RK#XSLT_HTML XSLT HTML] / [https://wiki.itcollege.ee/index.php/RK#XSLT_XML XSLT XML]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Team_Echo Meeskond: Echo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Vajak&lt;br /&gt;
* Janno Oolo&lt;br /&gt;
* Mari-Liis Oldja&lt;br /&gt;
* Arti Zirk&lt;br /&gt;
* Joosep Voolma&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Team_Echo#XML XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Talk:Meeskond:_Redundant_Rappers#Retsensioon_Team_Echo_poolt Retsensioon meeskonnale Redundant Rappers]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Bob%27s_Burgers Meeskond: Bob&#039;s Burgers]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Aleksei Kopõlov&lt;br /&gt;
*Sander Perens&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/User:Meeskond:_VeebiGurmaanid Meeskond: VeebiGurmaanid]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Koit Kõrvel&lt;br /&gt;
* Marko Kask&lt;br /&gt;
* Melissa Eenmaa&lt;br /&gt;
* Joosep Koort&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Muru Meeskond: Muru]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Murdho Savila&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Repi Meeskond: Repi]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Renet Pirso&lt;br /&gt;
&lt;br /&gt;
===Meeskond: HelpOut===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mikk Sarapuu&lt;br /&gt;
* Martin Paakspuu&lt;br /&gt;
* Kerdo Kullamäe&lt;br /&gt;
* Marvin Mardiat&lt;br /&gt;
* Piret Pomerants&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Meeskond:_HelpOut Meeskonna koduleht]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/2017_Meeskond_Poly Meeskond: Poly]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kristian Kalm&lt;br /&gt;
* Roland Kontson&lt;br /&gt;
&lt;br /&gt;
=== Meeskond [https://wiki.itcollege.ee/index.php/Meeskond_%22Nope%22: Nope] ===&lt;br /&gt;
* Raido Vell&lt;br /&gt;
* Taavi Vesinurm&lt;br /&gt;
* Kaspar Kaal&lt;br /&gt;
* Lisette Noor&lt;br /&gt;
* Madis Roosioks&lt;br /&gt;
&lt;br /&gt;
==Kaugõpe==&lt;br /&gt;
&lt;br /&gt;
===Meeskond: CoverMe===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Karit Kilgi&lt;br /&gt;
* Sten Kaasik&lt;br /&gt;
* Ragne Auling&lt;br /&gt;
* Silja Kralik&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: CoverMe]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Team_SPOT Meeskond: SPOT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sigrid Pachel&lt;br /&gt;
* Oliver Tiks&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/JRT Meeskond: JRT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Riho Uusjärv&lt;br /&gt;
* Jevgeni Gavrilov&lt;br /&gt;
* Tiit Kuuskmäe&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ticketer Meeskond: Ticketer]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Liina Abner&lt;br /&gt;
* Krista Rüütel&lt;br /&gt;
* Roland Türi&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ninjas_in_pyjamas Meeskond: Ninjas in Pyjamas]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Anna Linskaja&lt;br /&gt;
* Karen Grigorjan&lt;br /&gt;
* Sergei Hristoforov&lt;br /&gt;
* Artyom Likhachev&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Talupood Meeskond: Talutooted]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Matson&lt;br /&gt;
* Taavi Tilk&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/DevHelpVR Meeskond: DevHelp]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Martin Jääger&lt;br /&gt;
* Kristo Leemets&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/YAWS Meeskond: Yet Another Weather Station]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Andres Kepler&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/PC_KartKicker Meeskond: PC KartKicker]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
* Jan Eerik&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PC_KartKicker:&amp;diff=118934</id>
		<title>PC KartKicker:</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PC_KartKicker:&amp;diff=118934"/>
		<updated>2017-03-20T10:04:13Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Nice to have */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Martin Kask &amp;lt;br&amp;gt;&lt;br /&gt;
Rain Saarmäe &amp;lt;br&amp;gt;&lt;br /&gt;
Jan Eerik &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Idee =&lt;br /&gt;
&lt;br /&gt;
Käesolev veebirakendus on asendamatu abimees arvuti kokkupanekul (võrdlemisi tugevalt inspireeritud https://pcpartpicker.com).&lt;br /&gt;
&lt;br /&gt;
Kuna teatavasti vajab arvuti töötamiseks kindlaid juppe mingis aktsepteeritud konfiguratsioonis, võimaldab meie rakendus välistada mitteühilduva raudvara &amp;quot;jõuga&amp;quot; ühildamist ja abistab kasutajal optimaalse konfiguratsiooni valimist.&lt;br /&gt;
&lt;br /&gt;
= Põhiline funktsionaalsus =&lt;br /&gt;
&lt;br /&gt;
* Kasutaja saab lisada üks kuni mitu arvutiskeemi&lt;br /&gt;
* Skeemile saab hakata ükshaaval lisama juppe (emaplaat, protsessor, mälud jne)&lt;br /&gt;
* Iga kord kui mingi jupp skeemi lisatakse, kitsendab see ülejäänud juppide valikut - näiteks LGA1151 liidesega emaplaadile ei õnnestu lisada AMD protsessorit jne&lt;br /&gt;
* Nii pooleliolevaid kui valminud skeeme saab salvestada&lt;br /&gt;
* Igal jupil on oma vaade koos tehnilise infoga&lt;br /&gt;
&lt;br /&gt;
= Nice to have =&lt;br /&gt;
&lt;br /&gt;
* Parima hinna kuvamine (nt Amazon, Newegg)&lt;br /&gt;
* Komponentide võrdlus&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 1: XML =&lt;br /&gt;
&lt;br /&gt;
== Teema ==&lt;br /&gt;
== XML==&lt;br /&gt;
== XML skeem (XSD) ==&lt;br /&gt;
== XSLT 1 ==&lt;br /&gt;
== XSLT 2 ==&lt;br /&gt;
== Ülesanne 1 retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 2: Veebirakendus =&lt;br /&gt;
= Ülesanne 3: Klientrakendus =&lt;br /&gt;
= (b)logi =&lt;br /&gt;
&lt;br /&gt;
20/03/2017: Loodud Wiki leht, jagatud ülesanded&lt;br /&gt;
20/03/2017: Projekti esimene osa valmis&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PC_KartKicker:&amp;diff=118933</id>
		<title>PC KartKicker:</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PC_KartKicker:&amp;diff=118933"/>
		<updated>2017-03-20T10:01:32Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Põhiline funktsionaalsus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Martin Kask &amp;lt;br&amp;gt;&lt;br /&gt;
Rain Saarmäe &amp;lt;br&amp;gt;&lt;br /&gt;
Jan Eerik &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Idee =&lt;br /&gt;
&lt;br /&gt;
Käesolev veebirakendus on asendamatu abimees arvuti kokkupanekul (võrdlemisi tugevalt inspireeritud https://pcpartpicker.com).&lt;br /&gt;
&lt;br /&gt;
Kuna teatavasti vajab arvuti töötamiseks kindlaid juppe mingis aktsepteeritud konfiguratsioonis, võimaldab meie rakendus välistada mitteühilduva raudvara &amp;quot;jõuga&amp;quot; ühildamist ja abistab kasutajal optimaalse konfiguratsiooni valimist.&lt;br /&gt;
&lt;br /&gt;
= Põhiline funktsionaalsus =&lt;br /&gt;
&lt;br /&gt;
* Kasutaja saab lisada üks kuni mitu arvutiskeemi&lt;br /&gt;
* Skeemile saab hakata ükshaaval lisama juppe (emaplaat, protsessor, mälud jne)&lt;br /&gt;
* Iga kord kui mingi jupp skeemi lisatakse, kitsendab see ülejäänud juppide valikut - näiteks LGA1151 liidesega emaplaadile ei õnnestu lisada AMD protsessorit jne&lt;br /&gt;
* Nii pooleliolevaid kui valminud skeeme saab salvestada&lt;br /&gt;
* Igal jupil on oma vaade koos tehnilise infoga&lt;br /&gt;
&lt;br /&gt;
= Nice to have =&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 1: XML =&lt;br /&gt;
&lt;br /&gt;
== Teema ==&lt;br /&gt;
== XML==&lt;br /&gt;
== XML skeem (XSD) ==&lt;br /&gt;
== XSLT 1 ==&lt;br /&gt;
== XSLT 2 ==&lt;br /&gt;
== Ülesanne 1 retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 2: Veebirakendus =&lt;br /&gt;
= Ülesanne 3: Klientrakendus =&lt;br /&gt;
= (b)logi =&lt;br /&gt;
&lt;br /&gt;
20/03/2017: Loodud Wiki leht, jagatud ülesanded&lt;br /&gt;
20/03/2017: Projekti esimene osa valmis&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PC_KartKicker:&amp;diff=118932</id>
		<title>PC KartKicker:</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PC_KartKicker:&amp;diff=118932"/>
		<updated>2017-03-20T10:00:34Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Idee */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Martin Kask &amp;lt;br&amp;gt;&lt;br /&gt;
Rain Saarmäe &amp;lt;br&amp;gt;&lt;br /&gt;
Jan Eerik &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Idee =&lt;br /&gt;
&lt;br /&gt;
Käesolev veebirakendus on asendamatu abimees arvuti kokkupanekul (võrdlemisi tugevalt inspireeritud https://pcpartpicker.com).&lt;br /&gt;
&lt;br /&gt;
Kuna teatavasti vajab arvuti töötamiseks kindlaid juppe mingis aktsepteeritud konfiguratsioonis, võimaldab meie rakendus välistada mitteühilduva raudvara &amp;quot;jõuga&amp;quot; ühildamist ja abistab kasutajal optimaalse konfiguratsiooni valimist.&lt;br /&gt;
&lt;br /&gt;
= Põhiline funktsionaalsus =&lt;br /&gt;
&lt;br /&gt;
* Kasutaja saab lisada üks kuni mitu arvutiskeemi&lt;br /&gt;
* Skeemile saab hakata ükshaaval lisama juppe (emaplaat, protsessor, mälud jne)&lt;br /&gt;
* Iga kord kui mingi jupp skeemi lisatakse, kitsendab see ülejäänud juppide valikut - näiteks LGA1151 liidesega emaplaadile ei õnnestu lisada AMD protsessorit jne&lt;br /&gt;
* Pooleliolevat skeemi saab salvestada&lt;br /&gt;
* Igal jupil on oma vaade koos tehnilise infoga&lt;br /&gt;
&lt;br /&gt;
= Nice to have =&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 1: XML =&lt;br /&gt;
&lt;br /&gt;
== Teema ==&lt;br /&gt;
== XML==&lt;br /&gt;
== XML skeem (XSD) ==&lt;br /&gt;
== XSLT 1 ==&lt;br /&gt;
== XSLT 2 ==&lt;br /&gt;
== Ülesanne 1 retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 2: Veebirakendus =&lt;br /&gt;
= Ülesanne 3: Klientrakendus =&lt;br /&gt;
= (b)logi =&lt;br /&gt;
&lt;br /&gt;
20/03/2017: Loodud Wiki leht, jagatud ülesanded&lt;br /&gt;
20/03/2017: Projekti esimene osa valmis&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PC_KartKicker:&amp;diff=118931</id>
		<title>PC KartKicker:</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PC_KartKicker:&amp;diff=118931"/>
		<updated>2017-03-20T09:56:09Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* (b)logi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Martin Kask &amp;lt;br&amp;gt;&lt;br /&gt;
Rain Saarmäe &amp;lt;br&amp;gt;&lt;br /&gt;
Jan Eerik &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Idee =&lt;br /&gt;
&lt;br /&gt;
Käesolev veebirakendus on asendamatu abimees arvuti juppidest kokkupanekul (võrdlemisi tugevalt inspireeritud https://pcpartpicker.com).&lt;br /&gt;
&lt;br /&gt;
= Põhiline funktsionaalsus =&lt;br /&gt;
&lt;br /&gt;
* Kasutaja saab lisada üks kuni mitu arvutiskeemi&lt;br /&gt;
* Skeemile saab hakata ükshaaval lisama juppe (emaplaat, protsessor, mälud jne)&lt;br /&gt;
* Iga kord kui mingi jupp skeemi lisatakse, kitsendab see ülejäänud juppide valikut - näiteks LGA1151 liidesega emaplaadile ei õnnestu lisada AMD protsessorit jne&lt;br /&gt;
* Pooleliolevat skeemi saab salvestada&lt;br /&gt;
* Igal jupil on oma vaade koos tehnilise infoga&lt;br /&gt;
&lt;br /&gt;
= Nice to have =&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 1: XML =&lt;br /&gt;
&lt;br /&gt;
== Teema ==&lt;br /&gt;
== XML==&lt;br /&gt;
== XML skeem (XSD) ==&lt;br /&gt;
== XSLT 1 ==&lt;br /&gt;
== XSLT 2 ==&lt;br /&gt;
== Ülesanne 1 retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 2: Veebirakendus =&lt;br /&gt;
= Ülesanne 3: Klientrakendus =&lt;br /&gt;
= (b)logi =&lt;br /&gt;
&lt;br /&gt;
20/03/2017: Loodud Wiki leht, jagatud ülesanded&lt;br /&gt;
20/03/2017: Projekti esimene osa valmis&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PC_KartKicker:&amp;diff=118930</id>
		<title>PC KartKicker:</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PC_KartKicker:&amp;diff=118930"/>
		<updated>2017-03-20T09:52:17Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Martin Kask &amp;lt;br&amp;gt;&lt;br /&gt;
Rain Saarmäe &amp;lt;br&amp;gt;&lt;br /&gt;
Jan Eerik &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Idee =&lt;br /&gt;
&lt;br /&gt;
Käesolev veebirakendus on asendamatu abimees arvuti juppidest kokkupanekul (võrdlemisi tugevalt inspireeritud https://pcpartpicker.com).&lt;br /&gt;
&lt;br /&gt;
= Põhiline funktsionaalsus =&lt;br /&gt;
&lt;br /&gt;
* Kasutaja saab lisada üks kuni mitu arvutiskeemi&lt;br /&gt;
* Skeemile saab hakata ükshaaval lisama juppe (emaplaat, protsessor, mälud jne)&lt;br /&gt;
* Iga kord kui mingi jupp skeemi lisatakse, kitsendab see ülejäänud juppide valikut - näiteks LGA1151 liidesega emaplaadile ei õnnestu lisada AMD protsessorit jne&lt;br /&gt;
* Pooleliolevat skeemi saab salvestada&lt;br /&gt;
* Igal jupil on oma vaade koos tehnilise infoga&lt;br /&gt;
&lt;br /&gt;
= Nice to have =&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 1: XML =&lt;br /&gt;
&lt;br /&gt;
== Teema ==&lt;br /&gt;
== XML==&lt;br /&gt;
== XML skeem (XSD) ==&lt;br /&gt;
== XSLT 1 ==&lt;br /&gt;
== XSLT 2 ==&lt;br /&gt;
== Ülesanne 1 retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
= Ülesanne 2: Veebirakendus =&lt;br /&gt;
= Ülesanne 3: Klientrakendus =&lt;br /&gt;
= (b)logi =&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PC_KartKicker:&amp;diff=118929</id>
		<title>PC KartKicker:</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PC_KartKicker:&amp;diff=118929"/>
		<updated>2017-03-20T09:48:53Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Martin Kask &amp;lt;br&amp;gt;&lt;br /&gt;
Rain Saarmäe &amp;lt;br&amp;gt;&lt;br /&gt;
Jan Eerik &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Idee =&lt;br /&gt;
&lt;br /&gt;
Käesolev veebirakendus on asendamatu abimees arvuti juppidest kokkupanekul (võrdlemisi tugevalt inspireeritud https://pcpartpicker.com).&lt;br /&gt;
&lt;br /&gt;
= Põhiline funktsionaalsus =&lt;br /&gt;
&lt;br /&gt;
* Kasutaja saab lisada üks kuni mitu arvutiskeemi&lt;br /&gt;
* Skeemile saab hakata ükshaaval lisama juppe (emaplaat, protsessor, mälud jne)&lt;br /&gt;
* Iga kord kui mingi jupp skeemi lisatakse, kitsendab see ülejäänud juppide valikut - näiteks LGA1151 liidesega emaplaadile ei õnnestu lisada AMD protsessorit jne&lt;br /&gt;
* Pooleliolevat skeemi saab salvestada&lt;br /&gt;
* Igal jupil on oma vaade koos tehnilise infoga&lt;br /&gt;
&lt;br /&gt;
= Nice to have =&lt;br /&gt;
&lt;br /&gt;
==XML==&lt;br /&gt;
===Teema===&lt;br /&gt;
===XML===&lt;br /&gt;
===XML schema (XSD)===&lt;br /&gt;
===XSLT 1===&lt;br /&gt;
===XSLT 2===&lt;br /&gt;
&lt;br /&gt;
=Retsensioonid=&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PC_KartKicker:&amp;diff=118927</id>
		<title>PC KartKicker:</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PC_KartKicker:&amp;diff=118927"/>
		<updated>2017-03-20T09:48:16Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Idee */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Martin Kask &amp;lt;br&amp;gt;&lt;br /&gt;
Rain Saarmäe &amp;lt;br&amp;gt;&lt;br /&gt;
Jan Eerik &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Idee =&lt;br /&gt;
&lt;br /&gt;
Käesolev veebirakendus on asendamatu abimees arvuti juppidest kokkupanekul (võrdlemisi tugevalt inspireeritud https://pcpartpicker.com).&lt;br /&gt;
&lt;br /&gt;
= Põhiline funktsionaalsus =&lt;br /&gt;
&lt;br /&gt;
* Kasutaja saab lisada üks kuni mitu arvutiskeemi&lt;br /&gt;
* Skeemile saab hakata ükshaaval lisama juppe (emaplaat, protsessor, mälud jne)&lt;br /&gt;
* Iga kord kui mingi jupp skeemi lisatakse, kitsendab see ülejäänud juppide valikut - näiteks LGA1151 liidesega emaplaadile ei õnnestu lisada AMD protsessorit jne&lt;br /&gt;
* Pooleliolevat skeemi saab salvestada&lt;br /&gt;
* Igal jupil on oma vaade koos tehnilise infoga&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
==XML==&lt;br /&gt;
===Teema===&lt;br /&gt;
===XML===&lt;br /&gt;
===XML schema (XSD)===&lt;br /&gt;
===XSLT 1===&lt;br /&gt;
===XSLT 2===&lt;br /&gt;
&lt;br /&gt;
=Retsensioonid=&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PC_KartKicker:&amp;diff=118926</id>
		<title>PC KartKicker:</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PC_KartKicker:&amp;diff=118926"/>
		<updated>2017-03-20T09:42:03Z</updated>

		<summary type="html">&lt;p&gt;Jeerik: /* Idee */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Martin Kask &amp;lt;br&amp;gt;&lt;br /&gt;
Rain Saarmäe &amp;lt;br&amp;gt;&lt;br /&gt;
Jan Eerik &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Idee =&lt;br /&gt;
&lt;br /&gt;
Käesolev veebirakendus on asendamatu abimees arvuti juppidest kokkupanekul (võrdlemisi tugevalt inspireeritud https://pcpartpicker.com).&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
==XML==&lt;br /&gt;
===Teema===&lt;br /&gt;
===XML===&lt;br /&gt;
===XML schema (XSD)===&lt;br /&gt;
===XSLT 1===&lt;br /&gt;
===XSLT 2===&lt;br /&gt;
&lt;br /&gt;
=Retsensioonid=&lt;/div&gt;</summary>
		<author><name>Jeerik</name></author>
	</entry>
</feed>