<?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=Relken</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=Relken"/>
	<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php/Special:Contributions/Relken"/>
	<updated>2026-05-07T08:55:46Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=131609</id>
		<title>Meeskond:Curry</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=131609"/>
		<updated>2018-06-11T19:13:09Z</updated>

		<summary type="html">&lt;p&gt;Relken: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Liikmed=&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
=Analüüs=&lt;br /&gt;
==Projekti kirjeldus==&lt;br /&gt;
Curry näol on tegemist erinevate krüptorahade kauplemisplatvormiga, kus registreerunud kasutaja saab üles seada ostu- või müügitellimusi (edaspidi ordereid). Ostja määrab ära, millise maksimaalse hinna eest on nõus ühte krüptoraha valuutat teise eest ostma ning ka ostukoguse. Müüa seevastu ütleb, millise hinnaga soovib ühte valuutat teise vastu vahetada ja koguse. Süsteem viib automaatselt ostu-müügiorderid kokku ning kui hind on mõlemapoolselt sobilik, toimub tehing. Platvorm haldab ise kasutajakontol olevat rahakogust. Rakenduse peavaates on võimalik näha aktiivseid ordereid, kus müügiorderid reastatakse hinna järgi kasvavalt, ostuorderid kahanevalt. Projekti mahu hulka ei kuulu krüptovaluutade sisse- ja väljakande funktsionaalsus.&lt;br /&gt;
&lt;br /&gt;
===Andmemudeli skeem:===&lt;br /&gt;
[[File:Curry.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Üldised nõuded:==&lt;br /&gt;
* Veebiteenuse andmevahetus toimub JSON formaadis.&lt;br /&gt;
* Klientrakendus töötab kõikides enamlevinud veebibrauserites.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Must-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Kasutaja saab endale registreerimisega konto luua.&lt;br /&gt;
* Kasutaja saab enda andmeid (nimi, email, jne) muuta.&lt;br /&gt;
* Süsteemis on kindlaks määratud kindlad valuutapaarid, millede vahel kaubelda saab. Minimaalselt 1 valuutapaar ehk 2 erinevat valuutat.&lt;br /&gt;
* Kasutaja saab sisestada limiit müügiordereid, kus märgib ära millist valuutat mille vastu müüb, ning määrab hinna ning koguse.&lt;br /&gt;
* Kasutaja saab sisestada limiit ostuordereid, kus märgib ära millist valuutat soovib osta mõne teise valuuta eest ning määrab maksimaalse ostuhinna ning koguse.&lt;br /&gt;
* Süsteem leiab ostu-müügi orderite vahel kokku sobivad orderid, mis hinna poolest rahuldavad mõlemaid osapooli ning toimub automaatselt tehing – orderid loetakse  kas osaliselt või täielikult täidetuks ning tehing kantakse tehingute nimekirja. Vastavatel osapooltel toimub ka kontoseisu muutus.&lt;br /&gt;
* Orderite täitmine võib toimuda ka mitmes osas, kus ühe osapoole valuuta kogus erineb teise osapoole orderil märgitud kogusest. Sel juhul vähendatakse ühe osapoole orderi kogust toimunud tehingu mahu võrra.&lt;br /&gt;
* Kasutaja saab tühistada enda poolt üles seatud ordereid.&lt;br /&gt;
* Kasutaja saab vaadata rahakonto seisu, kui palju erinevaid valuutasid arvel on.&lt;br /&gt;
* Kasutaja saab vaadata enda orderite ja tehingute ajalugu.&lt;br /&gt;
* Iga toimunud tehingu pealt võetakse ka % teenustasu.&lt;br /&gt;
* Orderi loomise eelnevalt kontrollitakse, kas kasutaja rahakontol piisavalt vabu vahendeid tehingu toimimiseks ning kuni tehingu toimumiseni on vastav kogus valuutat kontol broneeritud. Reaalselt arvestatakse maha peale tehingu lõppu.&lt;br /&gt;
* Admin saab määrata, milliste süsteemis olevate valuutade vahel saab kaubelda.&lt;br /&gt;
* Admin saab muuta teenustasu % väärtust.&lt;br /&gt;
* Admin saab lukustada kasutajate kontosid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Nice-to-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Valuutade sisse -ja väljakanded.&lt;br /&gt;
* Graafiline kasutajaliides hinnaliikumise ja teiste näitajate kuvamiseks.&lt;br /&gt;
* Peale limiitorderite ka teiste orderitüüpide toetamine.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Juhend lõpptoote kasutamiseks:&#039;&#039;&#039;==&lt;br /&gt;
* Proovimaks administraator õigustes kasutaja funktsionaalsust, logi sisse kasutajanimega &#039;adminuser&#039; ning parooliga &#039;Kala1.maja&#039;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XML andmefail&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;Countries xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;Capitals&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Tallinn&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;100&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital2&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Riia&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;101&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital3&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Vilnius&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;102&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital4&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Helsingi&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;103&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Stockholm&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;104&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital6&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Kopenhaagen&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;105&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
  &amp;lt;/Capitals&amp;gt;&lt;br /&gt;
  &amp;lt;Towns&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Tartu&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1000&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town2&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Tampere&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1100&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town3&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Jelgava&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1300&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town4&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Kaunas&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1500&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;   &lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Norrköping&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1700&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town6&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Aalborg&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1700&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town7&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Pärnu&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1800&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town8&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Valmiera&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1900&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town9&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Malmö&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1400&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town10&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Linköping&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1200&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
  &amp;lt;/Towns&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Eesti&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town1&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town7&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country2&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country3&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Soome&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital4&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town2&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country3&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Läti&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital2&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town3&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town8&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country4&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country4&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Leedu&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital3&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town4&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country3&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country5&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Rootsi&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital5&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town9&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town10&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country6&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country2&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country6&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Taani&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town6&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
&amp;lt;/Countries&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XSD schema fail&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&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:simpleType name=&amp;quot;TypeName&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:restriction base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xs:minLength value=&amp;quot;3&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;
  &amp;lt;xs:simpleType name=&amp;quot;TypeArea&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:restriction base=&amp;quot;xs:integer&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xs:minInclusive value=&amp;quot;100&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;Countries&amp;quot;&amp;gt;&lt;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;Capitals&amp;quot;&amp;gt;&lt;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;Capital&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element type=&amp;quot;TypeName&amp;quot; name=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element type =&amp;quot;TypeArea&amp;quot; name=&amp;quot;Area&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&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;Towns&amp;quot;&amp;gt;&lt;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;Town&amp;quot;&amp;gt;&lt;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;Name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;Founded&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&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 maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;Country&amp;quot;&amp;gt;&lt;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;Name&amp;quot; type=&amp;quot;TypeName&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;Capital&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;refid&amp;quot; type=&amp;quot;xs:IDREF&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:element name=&amp;quot;CountryTowns&amp;quot;&amp;gt;&lt;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;Town&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;refid&amp;quot; type=&amp;quot;xs:IDREF&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:unique name=&amp;quot;TownUnique &amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:selector xpath=&amp;quot;Town&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:unique&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;NeighbouringCountries&amp;quot;&amp;gt;&lt;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;NeighbouringCountry&amp;quot;&amp;gt;&lt;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;Country&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;refid&amp;quot; type=&amp;quot;xs:IDREF&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:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&amp;quot; /&amp;gt;         &lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
          &amp;lt;xs:key name=&amp;quot;PK_Capitals&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Capital&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:key&amp;gt;&lt;br /&gt;
          &amp;lt;xs:keyref name=&amp;quot;FK_CountryCapitals&amp;quot; refer=&amp;quot;PK_Capitals&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country/Capital&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:keyref&amp;gt;&lt;br /&gt;
          &amp;lt;xs:key name=&amp;quot;PK_Towns&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Towns/Town&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:key&amp;gt;&lt;br /&gt;
          &amp;lt;xs:keyref name=&amp;quot;FK_CountryTowns&amp;quot; refer=&amp;quot;PK_Towns&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country/CountryTowns/Town&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:keyref&amp;gt;&lt;br /&gt;
          &amp;lt;xs:key name=&amp;quot;PK_Countries&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:key&amp;gt;&lt;br /&gt;
          &amp;lt;xs:keyref name=&amp;quot;FK_Countries&amp;quot; refer=&amp;quot;PK_Countries&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country/NeighbouringCountries/NeighbouringCountry/Country&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:keyref&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;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XSLT transformatsioon: XML -&amp;gt; HTML&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;capital&amp;quot; match=&amp;quot;Countries/Capitals/Capital&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;town&amp;quot; match=&amp;quot;Countries/Towns/Town&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;country&amp;quot; match=&amp;quot;Countries/Country&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;text-align:center&amp;quot;&amp;gt;Countries&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#9acd32&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Country name&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Capital&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Towns&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Neighbouring countries&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:for-each select=&amp;quot;Countries/Country&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tr&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;key(&#039;capital&#039;, Capital/@refid)&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;key(&#039;town&#039;, CountryTowns/Town/@refid)&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;position() != last()&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;key(&#039;country&#039;, NeighbouringCountries/NeighbouringCountry/Country/@refid)&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;position() != last()&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XSLT transformatsioon: XML -&amp;gt; XML&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;town&amp;quot; match=&amp;quot;Countries/Towns/Town&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;country&amp;quot; match=&amp;quot;Countries/Country&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Countries&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each select=&amp;quot;Countries/Country&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;Towns&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;key(&#039;town&#039;, CountryTowns/Town/@refid)&amp;quot;&amp;gt;          &lt;br /&gt;
            &amp;lt;Town&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:attribute name=&amp;quot;Founded&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;Founded&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/Town&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;      &lt;br /&gt;
        &amp;lt;/Towns&amp;gt;&lt;br /&gt;
        &amp;lt;NumberOfNeighbouringCountries&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;count(key(&#039;country&#039;, NeighbouringCountries/NeighbouringCountry/Country/@refid))&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/NumberOfNeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
    &amp;lt;/Countries&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Meie retsensioonid BestInShow meeskonnale=&lt;br /&gt;
&lt;br /&gt;
==Veebiteenus==&lt;br /&gt;
* Meeskonna BestInShow veebiteenused on loodud REST teenustena, toetamaks edaspidise rakenduse andmevahetust. Probleeme käivitamisel ei ole – Wiki lehel on äratoodud käivitamisjuhised. Teenused on ilusasti dokumenteeritud, ära on kirjeldatud iga teenuse juures tema võimalikud tagastusväärtused HTTP staatuskoodidena, olgu see näiteks et vastavad andmed leiti või ei leitud või oli hoopis tegemist vigase päringuga. Ilusasti töötab teenuste kirjeldamiseks mõeldud raamistik Swagger. Kogu veebiteenuse projekt on jaotatud loogilisteks alamprojektideks, kus eraldi on Business logic, Data Access layer, Domain. Kasutatud on kenasti kursuse käigus õpitud arhitektuurimustrit, kus on eraldi Service klassid, DTO-d, Factory-d, Repository-d, UnitOfWork jne. Teenuste kontrollerid on üldjuhul ’puhtad’, äriloogikat neisse kirjeldatud ei ole, vaid on edasi delegeeritud Service ja sealt edasi teistesse komponentidesse. Nii DTO-de kui ka Domain klassides on kasutatud andmeväljade juures annotatsioone, piiramaks andmebaasis väljade ning ka teenuse poolel sissetulevate andmete suurusi.&lt;br /&gt;
* Probleemina võib välja tuua, et igaüks võib luua endale ’admin’ kontot – kasutaja roll on kirjutatud DTO juurde ning saab vabalt postitada uue kasutaja admin õigustega. Rollide haldamiseks oleks soovitav kasutada eraldi klassi RoleManager. Autentimistokeni loomise käigus isegi kirjutatakse kasutaja rollid tema sisse, kuid kuna neid tegelikkuses Identity raamistiku mõistes ei ole, ei kirjutata ka sinna midagi. Selle kasutamine võimaldaks lihtsamini piirata, mis teenused mis rollidele kättesaadavad on. Küsimust tekitab SecurityControlleris Logout meetod, mis ei tee midagi kuid mille poole ka klientrakenduses pöördutakse. Kuna tokenipoolne autentimine on olemuselt stateless, ei saa vähemalt sedasi serveripoolelt välja logida. See on mõeldud cookie hävitamiseks, mida aga ka eelnevalt loodud ei ole.&lt;br /&gt;
* Norida saab sellega, et projektis läbivalt ei ole kasutatud Enum tüüpi väärtuseid, vaid on kirjutatud vajalikes kohtades väärtused lahtise stringina (!user.Role.Equals(&amp;quot;admin&amp;quot;)) või hoopis mõni asi numbrina (user.Status == 1). Üheltpoolt see võib põhjustada vigu, teiseltpoolt teeb teisel arendajal arusaamise keerulisemaks.&lt;br /&gt;
* Boonusena tooks välja, et kõik API poolsed requestid logitakse andmebaasi, kus on kirjas, mis teenuse poole pöörduti, milliselt aadressilt, kellaaeg ja kasutaja või selle puudumisel anonüümne isik. Selleks kasutatakse ActionFilter klassi, mis lisatakse ServiceFilter atribuudina igale kontrollerile juurde.&lt;br /&gt;
Kokkuvõttes on tehtud hea ja tubli töö, on näha nii projektist endast kui ka Wiki lehelt, et on asjaga pidevalt ja süsteemselt tegeletud ning vajalikud teadmised REST veebiteenuste loomiseks on omandatud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Klientrakendus==&lt;br /&gt;
* Meeskond BestInShow on loonud klientrakenduse tõukoerte registri kohta, kus kasutatakse ära enda poolt loodud REST veebiteenuseid. Rakendus on loodud Angular raamistikus ning kasutatud on selle viimast versiooni 6.0. Juba ainuüksi Angulari valimine on julge väljakutse, arvestades et käesoleva kursuse raames pidi selle osa täielikult iseseisvalt omandama.&lt;br /&gt;
* Meeskonna Wiki lehel oli olemas kena õpetus, kuidas rakendus käima panna, veebiteenus ja klientrakendus töötavad erinevates projektides. Kaasa oli pandud rakenduse toimimiseks vajalikud algandmed sql-failis, mis tuli pärast andmebaasi loomist sisse laadida. Mingeid tõrkeid käivitamisel ei esinenud. Olles esilehele jõudnud, pakutakse võimalust kas sisse logida või uus kasutaja luua. Selgub et, sisselogimata kasutaja suurt midagi muud teha ei saagi. Analüüsi funktsionaalsetes nõuetes on kirjeldatud, et registreerimata kasutaja saab sirvida kenneleid, tõugusid, pesakond ja koeri. Rakenduse juhendiga on kaasa pandud mõned valmiskasutajad koos vajalike paroolidega. Uue kasutaja registreerimine toimib hästi, kõikide väljade täidetust valideeritakse ning antakase teada probleemist, kui ei ole sobilikult täidetud või kui juba sama kasutajanimi esineb. Seejuures on hästi kasutatud nii registreerimisvormil kui ka muudes kohtades edukalt Bootstrap võimalusi. Sisseloginuna kuvatakse teade, et mul ei ole veel koeri kuid puudub ka nupp koerte lisamiseks. Koeri saab lisada, kui kasutada juba loodud kasutajakontot ’breeder’ rollis. Ei oska öelda, kas see peakski nii olema, kuid võiks eeldada, et tavaõigustes kasutaja peaks saama ka omale koera registreerida. Koera detailvaate kuvamise funktsionaalsus on jäänud realiseerimata (selgub koodile peale vaadates), toimib olemasoleva koera andmete muutmine. Loodud on võimalus oma koera teisele omanikule anda, selleks avaneb eraldi modal aken, kuhu tuleb sisse kirjutada uus omaniku kasutajanimi. Siinkohal on probleem, et peab teadma täpset teist kasutajanime, võiks olla näiteks dropdown menüüst valitav võimalike kasutajate hulga seast. Kui sisestada suvaline nimi, ei anta teada, et sellist kasutajanime ei eksisteerida, konsoolist olevast errorist saab aru et ei õnnestunud. ’Breeder’ ja ’Owner’ rolliga saab esitada taotluse uue kenneli loomiseks, kus saab määrata, mis tõugu koeri on võimalik seal kasvatada. Need taotlused jõuavad admin õigustes kasutaja töölauale ning kui taotlus saab aktsepteeritud, jõuab vastav kennel ka kennelite nimekirja. Tundub, et edasine funktsionaalsus kennelite osas on jäänud realiseerimata, vähemalt ei paista kusagilt välja et midagi nende kennelitega teha saaks, sinna koeri paigutada vms.&lt;br /&gt;
* Kõige häirivam probleem, on et brauseri refreshimisel läheb sisse loginud kasutaja jaoks rakendus katki – ’currentUser’ muutuja ei saa enam laadimisel väärtustamisest ning kui teistes komponentides viidatakse sellele muutujale, ei saada sealt enam väärtust kätte. See ’currentUser’ võiks olla Observable tüüpi ning komponenti laadimisel võiks ta olla väärtustatud olemasoleva localStorages talletatud tokeni seest dekodeerimisel väljaloetud kasutajanime järgi.&lt;br /&gt;
* Hea külg on, et rakenduse ülesehitusel on kasutatud loogilist komponentideks ja alamkomponentideks jagamist ning head arendusmustrit, kus on eraldi service-klassid API teenuste poole pöördumiseks, eraldi on rakenduses kasutatavad mudelid. Stiilifailid eraldi css failidena. Selline struktuuri järgimine teeb koodi lugemise ja vajaliku leidmise lihtsaks. Sisseloginud kasutaja jaoks, kel on olemas vastav token, pannakse interceptor meetodi abil iga päringuga päringu headeris automaatselt kaasa tema token. Implementeeritud on ’AuthGuard’ meetod, ehk piiratakse millised rakenduses olevad leheküljed on mõeldud vaatamiseks ainult sisseloginud kasutajale ehk neile kes omavad tokenit.&lt;br /&gt;
Kokkuvõttes on mõningatele puudustele vaatamata tehtud hea ning kiiduväärt töö.&lt;br /&gt;
&lt;br /&gt;
==XML osa==&lt;br /&gt;
* Meeskonna BestInShow XML failis olevate andmete koosseis tuleneb nende projekttööst, ehk on tegemist rahvusvahelise tõukoerte näitusega, kus on mitmes kihis ära näidatud erinevate tõugude esindatus ning välja on toodud igat tõugu esindavad koerad ning ja omaniku andmed ning riiklik päritolu. Loogilise dimensioone on rohkem kui 4 ehk see arvuline nõue on täidetud. Kasutatud on mitmes kohaks lisaks atribuuttunnuseid. Mitmed nimi-tüüpi väärtusi saab esitada on mitmekeelselt, kus vastava elemendi keele määratlemine käib atribuuttunnuse abil.&lt;br /&gt;
* XSD schemafail ja XML ise on omavahel kooskõlas, XSD-s on kasutatud kenasti piiravaid kriteeriume, et ühel objektil ei saa olla näiteks rohkem kui 2 nime ning on märgitud, millised atribuudid millisel objektil olema peavad.&lt;br /&gt;
* Realiseeritud on 2 on XSLT transformatsiooni, üks teeb HTML vormingus tabeli, teine teise XML struktuuriga faili. HTML transformatsioonis on esitatud erinevate võistlusklasside võitjad, tegemist väga ilusalt vormindatud tabeliga. Kasutatud on andmete kokkusaamiseks mitmeid if-tingimusi ning tsükleid, loendatud on igas võistlusklassis olevate osalejate arv ning välja toodud selle võitja. Teises teiseks XML transformatsioonis filtreeritakse välja ainult ’Best in Show’ ja ’Best of Breed’ võitnud koerad, tuuakse välja koeraomanik.&lt;br /&gt;
Kokkuvõttes on XML osa hästi tehtud ning paraja keerukusega.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Tegevuste logi:=&lt;br /&gt;
&#039;&#039;&#039;10.02.2018&#039;&#039;&#039; -&lt;br /&gt;
Meeskonna loomine, idee paikapanemine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;24.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Andmemudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;26.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Analüüsi ja funktsionaalsuse kirjutamine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;31.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Wiki lehe loomine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;02.04.2018&#039;&#039;&#039; -&lt;br /&gt;
Koodi kirjutamise alustamine, Giti repo loomine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;14.05.2018&#039;&#039;&#039; -&lt;br /&gt;
Angular klientrakenduse alustamine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;08.06.2018&#039;&#039;&#039; -&lt;br /&gt;
Lõpptoode valmis&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;09.06.2018&#039;&#039;&#039; -&lt;br /&gt;
XML töö valmis&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;11.06.2018&#039;&#039;&#039; -&lt;br /&gt;
retsensioonid tehtud&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=131605</id>
		<title>Meeskond:Curry</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=131605"/>
		<updated>2018-06-11T17:30:52Z</updated>

		<summary type="html">&lt;p&gt;Relken: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Liikmed=&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
=Analüüs=&lt;br /&gt;
==Projekti kirjeldus==&lt;br /&gt;
Curry näol on tegemist erinevate krüptorahade kauplemisplatvormiga, kus registreerunud kasutaja saab üles seada ostu- või müügitellimusi (edaspidi ordereid). Ostja määrab ära, millise maksimaalse hinna eest on nõus ühte krüptoraha valuutat teise eest ostma ning ka ostukoguse. Müüa seevastu ütleb, millise hinnaga soovib ühte valuutat teise vastu vahetada ja koguse. Süsteem viib automaatselt ostu-müügiorderid kokku ning kui hind on mõlemapoolselt sobilik, toimub tehing. Platvorm haldab ise kasutajakontol olevat rahakogust. Rakenduse peavaates on võimalik näha aktiivseid ordereid, kus müügiorderid reastatakse hinna järgi kasvavalt, ostuorderid kahanevalt. Projekti mahu hulka ei kuulu krüptovaluutade sisse- ja väljakande funktsionaalsus.&lt;br /&gt;
&lt;br /&gt;
===Andmemudeli skeem:===&lt;br /&gt;
[[File:Curry.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Üldised nõuded:==&lt;br /&gt;
* Veebiteenuse andmevahetus toimub JSON formaadis.&lt;br /&gt;
* Klientrakendus töötab kõikides enamlevinud veebibrauserites.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Must-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Kasutaja saab endale registreerimisega konto luua.&lt;br /&gt;
* Kasutaja saab enda andmeid (nimi, email, jne) muuta.&lt;br /&gt;
* Süsteemis on kindlaks määratud kindlad valuutapaarid, millede vahel kaubelda saab. Minimaalselt 1 valuutapaar ehk 2 erinevat valuutat.&lt;br /&gt;
* Kasutaja saab sisestada limiit müügiordereid, kus märgib ära millist valuutat mille vastu müüb, ning määrab hinna ning koguse.&lt;br /&gt;
* Kasutaja saab sisestada limiit ostuordereid, kus märgib ära millist valuutat soovib osta mõne teise valuuta eest ning määrab maksimaalse ostuhinna ning koguse.&lt;br /&gt;
* Süsteem leiab ostu-müügi orderite vahel kokku sobivad orderid, mis hinna poolest rahuldavad mõlemaid osapooli ning toimub automaatselt tehing – orderid loetakse  kas osaliselt või täielikult täidetuks ning tehing kantakse tehingute nimekirja. Vastavatel osapooltel toimub ka kontoseisu muutus.&lt;br /&gt;
* Orderite täitmine võib toimuda ka mitmes osas, kus ühe osapoole valuuta kogus erineb teise osapoole orderil märgitud kogusest. Sel juhul vähendatakse ühe osapoole orderi kogust toimunud tehingu mahu võrra.&lt;br /&gt;
* Kasutaja saab tühistada enda poolt üles seatud ordereid.&lt;br /&gt;
* Kasutaja saab vaadata rahakonto seisu, kui palju erinevaid valuutasid arvel on.&lt;br /&gt;
* Kasutaja saab vaadata enda orderite ja tehingute ajalugu.&lt;br /&gt;
* Iga toimunud tehingu pealt võetakse ka % teenustasu.&lt;br /&gt;
* Orderi loomise eelnevalt kontrollitakse, kas kasutaja rahakontol piisavalt vabu vahendeid tehingu toimimiseks ning kuni tehingu toimumiseni on vastav kogus valuutat kontol broneeritud. Reaalselt arvestatakse maha peale tehingu lõppu.&lt;br /&gt;
* Admin saab määrata, milliste süsteemis olevate valuutade vahel saab kaubelda.&lt;br /&gt;
* Admin saab muuta teenustasu % väärtust.&lt;br /&gt;
* Admin saab lukustada kasutajate kontosid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Nice-to-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Valuutade sisse -ja väljakanded.&lt;br /&gt;
* Graafiline kasutajaliides hinnaliikumise ja teiste näitajate kuvamiseks.&lt;br /&gt;
* Peale limiitorderite ka teiste orderitüüpide toetamine.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Juhend lõpptoote kasutamiseks:&#039;&#039;&#039;==&lt;br /&gt;
* Proovimaks administraator õigustes kasutaja funktsionaalsust, logi sisse kasutajanimega &#039;adminuser&#039; ning parooliga &#039;Kala1.maja&#039;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XML andmefail&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;Countries xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;Capitals&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Tallinn&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;100&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital2&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Riia&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;101&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital3&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Vilnius&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;102&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital4&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Helsingi&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;103&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Stockholm&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;104&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital6&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Kopenhaagen&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;105&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
  &amp;lt;/Capitals&amp;gt;&lt;br /&gt;
  &amp;lt;Towns&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Tartu&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1000&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town2&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Tampere&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1100&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town3&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Jelgava&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1300&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town4&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Kaunas&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1500&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;   &lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Norrköping&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1700&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town6&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Aalborg&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1700&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town7&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Pärnu&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1800&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town8&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Valmiera&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1900&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town9&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Malmö&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1400&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town10&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Linköping&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1200&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
  &amp;lt;/Towns&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Eesti&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town1&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town7&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country2&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country3&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Soome&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital4&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town2&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country3&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Läti&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital2&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town3&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town8&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country4&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country4&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Leedu&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital3&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town4&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country3&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country5&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Rootsi&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital5&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town9&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town10&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country6&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country2&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country6&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Taani&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town6&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
&amp;lt;/Countries&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XSD schema fail&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&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:simpleType name=&amp;quot;TypeName&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:restriction base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xs:minLength value=&amp;quot;3&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;
  &amp;lt;xs:simpleType name=&amp;quot;TypeArea&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:restriction base=&amp;quot;xs:integer&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xs:minInclusive value=&amp;quot;100&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;Countries&amp;quot;&amp;gt;&lt;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;Capitals&amp;quot;&amp;gt;&lt;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;Capital&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element type=&amp;quot;TypeName&amp;quot; name=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element type =&amp;quot;TypeArea&amp;quot; name=&amp;quot;Area&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&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;Towns&amp;quot;&amp;gt;&lt;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;Town&amp;quot;&amp;gt;&lt;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;Name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;Founded&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&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 maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;Country&amp;quot;&amp;gt;&lt;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;Name&amp;quot; type=&amp;quot;TypeName&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;Capital&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;refid&amp;quot; type=&amp;quot;xs:IDREF&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:element name=&amp;quot;CountryTowns&amp;quot;&amp;gt;&lt;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;Town&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;refid&amp;quot; type=&amp;quot;xs:IDREF&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:unique name=&amp;quot;TownUnique &amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:selector xpath=&amp;quot;Town&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:unique&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;NeighbouringCountries&amp;quot;&amp;gt;&lt;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;NeighbouringCountry&amp;quot;&amp;gt;&lt;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;Country&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;refid&amp;quot; type=&amp;quot;xs:IDREF&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:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&amp;quot; /&amp;gt;         &lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
          &amp;lt;xs:key name=&amp;quot;PK_Capitals&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Capital&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:key&amp;gt;&lt;br /&gt;
          &amp;lt;xs:keyref name=&amp;quot;FK_CountryCapitals&amp;quot; refer=&amp;quot;PK_Capitals&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country/Capital&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:keyref&amp;gt;&lt;br /&gt;
          &amp;lt;xs:key name=&amp;quot;PK_Towns&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Towns/Town&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:key&amp;gt;&lt;br /&gt;
          &amp;lt;xs:keyref name=&amp;quot;FK_CountryTowns&amp;quot; refer=&amp;quot;PK_Towns&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country/CountryTowns/Town&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:keyref&amp;gt;&lt;br /&gt;
          &amp;lt;xs:key name=&amp;quot;PK_Countries&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:key&amp;gt;&lt;br /&gt;
          &amp;lt;xs:keyref name=&amp;quot;FK_Countries&amp;quot; refer=&amp;quot;PK_Countries&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country/NeighbouringCountries/NeighbouringCountry/Country&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:keyref&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;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XSLT transformatsioon: XML -&amp;gt; HTML&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;capital&amp;quot; match=&amp;quot;Countries/Capitals/Capital&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;town&amp;quot; match=&amp;quot;Countries/Towns/Town&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;country&amp;quot; match=&amp;quot;Countries/Country&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;text-align:center&amp;quot;&amp;gt;Countries&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#9acd32&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Country name&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Capital&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Towns&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Neighbouring countries&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:for-each select=&amp;quot;Countries/Country&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tr&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;key(&#039;capital&#039;, Capital/@refid)&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;key(&#039;town&#039;, CountryTowns/Town/@refid)&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;position() != last()&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;key(&#039;country&#039;, NeighbouringCountries/NeighbouringCountry/Country/@refid)&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;position() != last()&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XSLT transformatsioon: XML -&amp;gt; XML&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;town&amp;quot; match=&amp;quot;Countries/Towns/Town&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;country&amp;quot; match=&amp;quot;Countries/Country&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Countries&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each select=&amp;quot;Countries/Country&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;Towns&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;key(&#039;town&#039;, CountryTowns/Town/@refid)&amp;quot;&amp;gt;          &lt;br /&gt;
            &amp;lt;Town&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:attribute name=&amp;quot;Founded&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;Founded&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/Town&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;      &lt;br /&gt;
        &amp;lt;/Towns&amp;gt;&lt;br /&gt;
        &amp;lt;NumberOfNeighbouringCountries&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;count(key(&#039;country&#039;, NeighbouringCountries/NeighbouringCountry/Country/@refid))&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/NumberOfNeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
    &amp;lt;/Countries&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Meie retsensioonid BestInShow meeskonnale=&lt;br /&gt;
&lt;br /&gt;
==Veebiteenus==&lt;br /&gt;
* Meeskonna BestInShow veebiteenused on loodud REST teenustena, toetamaks edaspidise rakenduse andmevahetust. Probleeme käivitamisel ei ole – Wiki lehel on äratoodud käivitamisjuhised. Teenused on ilusasti dokumenteeritud, ära on kirjeldatud iga teenuse juures tema võimalikud tagastusväärtused HTTP staatuskoodidena, olgu see näiteks et vastavad andmed leiti või ei leitud või oli hoopis tegemist vigase päringuga. Ilusasti töötab teenuste kirjeldamiseks mõeldud raamistik Swagger. Kogu veebiteenuse projekt on jaotatud loogilisteks alamprojektideks, kus eraldi on Business logic, Data Access layer, Domain. Kasutatud on kenasti kursuse käigus õpitud arhitektuurimustrit, kus on eraldi Service klassid, DTO-d, Factory-d, Repository-d, UnitOfWork jne. Teenuste kontrollerid on üldjuhul ’puhtad’, äriloogikat neisse kirjeldatud ei ole, vaid on edasi delegeeritud Service ja sealt edasi teistesse komponentidesse. Nii DTO-de kui ka Domain klassides on kasutatud andmeväljade juures annotatsioone, piiramaks andmebaasis väljade ning ka teenuse poolel sissetulevate andmete suurusi.&lt;br /&gt;
* Probleemina võib välja tuua, et igaüks võib luua endale ’admin’ kontot – kasutaja roll on kirjutatud DTO juurde ning saab vabalt postitada uue kasutaja admin õigustega. Rollide haldamiseks oleks soovitav kasutada eraldi klassi RoleManager. Autentimistokeni loomise käigus isegi kirjutatakse kasutaja rollid tema sisse, kuid kuna neid tegelikkuses identity raamistiku mõistes ei ole, ei kirjutata ka sinna midagi. Selle kasutamine võimaldaks lihtsamini piirata, mis teenused mis õigustele kättesaadavad on. Küsimust tekitab SecurityControlleris Logout meetod, mis ei tee midagi kuid mille poole ka klientrakenduses pöördutakse. Kuna tokenipoolne autentimine on olemuselt stateless, ei saa vähemalt sedasi serveripoolelt välja logida. See on mõeldud cookie hävitamiseks, mida aga ka eelnevalt loodud ei ole.&lt;br /&gt;
* Norida saab sellega, et projektis läbivalt ei ole kasutatud Enum tüüpi väärtuseid, vaid on kirjutatud vajalikes kohtades väärtused lahtise stringina (!user.Role.Equals(&amp;quot;admin&amp;quot;)) või hoopis mõni asi numbrina (user.Status == 1). Üheltpoolt see võib põhjustada vigu, teiseltpoolt teeb teisel arendajal arusaamise keerulisemaks.&lt;br /&gt;
* Boonusena tooks välja, et kõik API poolsed requestid logitakse andmebaasi, kus on kirjas, mis teenuse poole pöörduti, milliselt aadressilt, kellaaeg ja kasutaja või selle puudumisel anonüümne isik. Selleks kasutatakse ActionFilter klassi, mis lisatakse ServiceFilter atribuudina igale kontrollerile juurde.&lt;br /&gt;
Kokkuvõttes on tehtud hea ja tubli töö, on näha nii projektist endast kui ka Wiki lehelt, et on asjaga pidevalt ja süsteemselt tegeletud ning vajalikud teadmised REST veebiteenuste loomiseks on omandatud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Klientrakendus==&lt;br /&gt;
* Meeskond BestInShow on loonud klientrakenduse tõukoerte registri kohta, kus kasutatakse ära enda poolt loodud REST veebiteenuseid. Rakendus on loodud Angular raamistikus ning kasutatud on selle viimast versiooni 6.0. Juba ainuüksi Angulari valimine on julge väljakutse, arvestades et käesoleva kursuse raames pidi selle osa täielikult iseseisvalt omandama.&lt;br /&gt;
* Meeskonna Wiki lehel oli olemas kena õpetus, kuidas rakendus käima panna, veebiteenus ja klientrakendus töötavad erinevates projektides. Kaasa oli pandud rakenduse toimimiseks vajalikud algandmed sql-failis, mis tuli pärast andmebaasi loomist sisse laadida. Mingeid tõrkeid käivitamisel ei esinenud. Olles esilehele jõudnud, pakutakse võimalust kas sisse logida või uus kasutaja luua. Selgub et, sisselogimata kasutaja suurt midagi muud teha ei saagi. Analüüsi funktsionaalsetes nõuetes on kirjeldatud, et registreerimata kasutaja saab sirvida kenneleid, tõugusid, pesakond ja koeri. Rakenduse juhendiga on kaasa pandud mõned valmiskasutajad koos vajalike paroolidega. Uue kasutaja registreerimine toimib hästi, kõikide väljade täidetust valideeritakse ning antakase teada probleemist, kui ei ole sobilikult täidetud või kui juba sama kasutajanimi esineb. Seejuures on hästi kasutatud nii registreerimisvormil kui ka muudes kohtades edukalt Bootstrap võimalusi. Sisseloginuna kuvatakse teade, et mul ei ole veel koeri kuid puudub ka nupp koerte lisamiseks. Koeri saab lisada, kui kasutada juba loodud kasutajakontot ’breeder’ rollis. Ei oska öelda, kas see peakski nii olema, kuid võiks eeldada, et tavaõigustes kasutaja peaks saama ka omale koera registreerida. Koera detailvaate kuvamise funktsionaalsus on jäänud realiseerimata (selgub koodile peale vaadates), toimib olemasoleva koera andmete muutmine. Loodud on võimalus oma koera teisele omanikule anda, selleks avaneb eraldi modal aken, kuhu tuleb sisse kirjutada uus omaniku kasutajanimi. Siinkohal on probleem, et peab teadma täpset teist kasutajanime, võiks olla näiteks dropdown menüüst valitav võimalike kasutajate hulga seast. Kui sisestada suvaline nimi, ei anta teada, et sellist kasutajanime ei eksisteerida, konsoolist olevast errorist saab aru et ei õnnestunud. ’Breeder’ ja ’Owner’ rolliga saab esitada taotluse uue kenneli loomiseks, kus saab määrata, mis tõugu koeri on võimalik seal kasvatada. Need taotlused jõuavad admin õigustes kasutaja töölauale ning kui taotlus saab aktsepteeritud, jõuab vastav kennel ka kennelite nimekirja. Tundub, et edasine funktsionaalsus kennelite osas on jäänud realiseerimata, vähemalt ei paista kusagilt välja et midagi nende kennelitega teha saaks, sinna koeri paigutada vms.&lt;br /&gt;
* Kõige häirivam probleem, on et brauseri refreshimisel läheb sisse loginud kasutaja jaoks rakendus katki – ’currentUser’ muutuja ei saa enam laadimisel väärtustamisest ning kui teistes komponentides viidatakse sellele muutujale, ei saada sealt enam väärtust kätte. See ’currentUser’ võiks olla Observable tüüpi ning komponenti laadimisel võiks ta olla väärtustatud olemasoleva localStorages talletatud tokeni seest dekodeerimisel väljaloetud kasutajanime järgi.&lt;br /&gt;
* Hea külg on, et rakenduse ülesehitusel on kasutatud loogilist komponentideks ja alamkomponentideks jagamist ning head arendusmustrit, kus on eraldi service-klassid API teenuste poole pöördumiseks, eraldi on rakenduses kasutatavad mudelid. Stiilifailid eraldi css failidena. Selline struktuuri järgimine teeb koodi lugemise ja vajaliku leidmise lihtsaks. Sisseloginud kasutaja jaoks, kel on olemas vastav token, pannakse interceptor meetodi abil iga päringuga päringu headeris automaatselt kaasa tema token. Implementeeritud on ’AuthGuard’ meetod, ehk piiratakse millised rakenduses olevad leheküljed on mõeldud vaatamiseks ainult sisseloginud kasutajale ehk neile kes omavad tokenit.&lt;br /&gt;
Kokkuvõttes on mõningatele puudustele vaatamata tehtud hea ning kiiduväärt töö.&lt;br /&gt;
&lt;br /&gt;
==XML osa==&lt;br /&gt;
* Meeskonna BestInShow XML failis olevate andmete koosseis tuleneb nende projekttööst, ehk on tegemist rahvusvahelise tõukoerte näitusega, kus on mitmes kihis ära näidatud erinevate tõugude esindatus ning välja on toodud igat tõugu esindavad koerad ning ja omaniku andmed ning riiklik päritolu. Loogilise dimensioone on rohkem kui 4 ehk see arvuline nõue on täidetud. Kasutatud on mitmes kohaks lisaks atribuuttunnuseid. Mitmed nimi-tüüpi väärtusi saab esitada on mitmekeelselt, kus vastava elemendi keele määratlemine käib atribuuttunnuse abil.&lt;br /&gt;
* XSD schemafail ja XML ise on omavahel kooskõlas, XSD-s on kasutatud kenasti piiravaid kriteeriume, et ühel objektil ei saa olla näiteks rohkem kui 2 nime ning on märgitud, millised atribuudid millisel objektil olema peavad.&lt;br /&gt;
* Realiseeritud on 2 on XSLT transformatsiooni, üks teeb HTML vormingus tabeli, teine teise XML struktuuriga faili. HTML transformatsioonis on esitatud erinevate võistlusklasside võitjad, tegemist väga ilusalt vormindatud tabeliga. Kasutatud on andmete kokkusaamiseks mitmeid if-tingimusi ning tsükleid, loendatud on igas võistlusklassis olevate osalejate arv ning välja toodud selle võitja. Teises teiseks XML transformatsioonis filtreeritakse välja ainult ’Best in Show’ ja ’Best of Breed’ võitnud koerad, tuuakse välja koeraomanik.&lt;br /&gt;
Kokkuvõttes on XML osa hästi tehtud ning paraja keerukusega.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Tegevuste logi:=&lt;br /&gt;
&#039;&#039;&#039;10.02.2018&#039;&#039;&#039; -&lt;br /&gt;
Meeskonna loomine, idee paikapanemine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;24.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Andmemudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;26.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Analüüsi ja funktsionaalsuse kirjutamine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;31.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Wiki lehe loomine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;02.04.2018&#039;&#039;&#039; -&lt;br /&gt;
Koodi kirjutamise alustamine, Giti repo loomine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;14.05.2018&#039;&#039;&#039; -&lt;br /&gt;
Angular klientrakenduse alustamine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;08.06.2018&#039;&#039;&#039; -&lt;br /&gt;
Lõpptoode valmis&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;09.06.2018&#039;&#039;&#039; -&lt;br /&gt;
XML töö valmis&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;11.06.2018&#039;&#039;&#039; -&lt;br /&gt;
retsensioonid tehtud&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=131604</id>
		<title>Meeskond:Curry</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=131604"/>
		<updated>2018-06-11T17:30:12Z</updated>

		<summary type="html">&lt;p&gt;Relken: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Liikmed=&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
=Analüüs=&lt;br /&gt;
==Projekti kirjeldus==&lt;br /&gt;
Curry näol on tegemist erinevate krüptorahade kauplemisplatvormiga, kus registreerunud kasutaja saab üles seada ostu- või müügitellimusi (edaspidi ordereid). Ostja määrab ära, millise maksimaalse hinna eest on nõus ühte krüptoraha valuutat teise eest ostma ning ka ostukoguse. Müüa seevastu ütleb, millise hinnaga soovib ühte valuutat teise vastu vahetada ja koguse. Süsteem viib automaatselt ostu-müügiorderid kokku ning kui hind on mõlemapoolselt sobilik, toimub tehing. Platvorm haldab ise kasutajakontol olevat rahakogust. Rakenduse peavaates on võimalik näha aktiivseid ordereid, kus müügiorderid reastatakse hinna järgi kasvavalt, ostuorderid kahanevalt. Projekti mahu hulka ei kuulu krüptovaluutade sisse- ja väljakande funktsionaalsus.&lt;br /&gt;
&lt;br /&gt;
===Andmemudeli skeem:===&lt;br /&gt;
[[File:Curry.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Üldised nõuded:==&lt;br /&gt;
* Veebiteenuse andmevahetus toimub JSON formaadis.&lt;br /&gt;
* Klientrakendus töötab kõikides enamlevinud veebibrauserites.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Must-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Kasutaja saab endale registreerimisega konto luua.&lt;br /&gt;
* Kasutaja saab enda andmeid (nimi, email, jne) muuta.&lt;br /&gt;
* Süsteemis on kindlaks määratud kindlad valuutapaarid, millede vahel kaubelda saab. Minimaalselt 1 valuutapaar ehk 2 erinevat valuutat.&lt;br /&gt;
* Kasutaja saab sisestada limiit müügiordereid, kus märgib ära millist valuutat mille vastu müüb, ning määrab hinna ning koguse.&lt;br /&gt;
* Kasutaja saab sisestada limiit ostuordereid, kus märgib ära millist valuutat soovib osta mõne teise valuuta eest ning määrab maksimaalse ostuhinna ning koguse.&lt;br /&gt;
* Süsteem leiab ostu-müügi orderite vahel kokku sobivad orderid, mis hinna poolest rahuldavad mõlemaid osapooli ning toimub automaatselt tehing – orderid loetakse  kas osaliselt või täielikult täidetuks ning tehing kantakse tehingute nimekirja. Vastavatel osapooltel toimub ka kontoseisu muutus.&lt;br /&gt;
* Orderite täitmine võib toimuda ka mitmes osas, kus ühe osapoole valuuta kogus erineb teise osapoole orderil märgitud kogusest. Sel juhul vähendatakse ühe osapoole orderi kogust toimunud tehingu mahu võrra.&lt;br /&gt;
* Kasutaja saab tühistada enda poolt üles seatud ordereid.&lt;br /&gt;
* Kasutaja saab vaadata rahakonto seisu, kui palju erinevaid valuutasid arvel on.&lt;br /&gt;
* Kasutaja saab vaadata enda orderite ja tehingute ajalugu.&lt;br /&gt;
* Iga toimunud tehingu pealt võetakse ka % teenustasu.&lt;br /&gt;
* Orderi loomise eelnevalt kontrollitakse, kas kasutaja rahakontol piisavalt vabu vahendeid tehingu toimimiseks ning kuni tehingu toimumiseni on vastav kogus valuutat kontol broneeritud. Reaalselt arvestatakse maha peale tehingu lõppu.&lt;br /&gt;
* Admin saab määrata, milliste süsteemis olevate valuutade vahel saab kaubelda.&lt;br /&gt;
* Admin saab muuta teenustasu % väärtust.&lt;br /&gt;
* Admin saab lukustada kasutajate kontosid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Nice-to-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Valuutade sisse -ja väljakanded.&lt;br /&gt;
* Graafiline kasutajaliides hinnaliikumise ja teiste näitajate kuvamiseks.&lt;br /&gt;
* Peale limiitorderite ka teiste orderitüüpide toetamine.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Juhend lõpptoote kasutamiseks:&#039;&#039;&#039;==&lt;br /&gt;
* Proovimaks administraator õigustes kasutaja funktsionaalsust, logi sisse kasutajanimega &#039;adminuser&#039; ning parooliga &#039;Kala1.maja&#039;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XML andmefail&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;Countries xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;Capitals&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Tallinn&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;100&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital2&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Riia&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;101&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital3&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Vilnius&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;102&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital4&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Helsingi&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;103&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Stockholm&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;104&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital6&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Kopenhaagen&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;105&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
  &amp;lt;/Capitals&amp;gt;&lt;br /&gt;
  &amp;lt;Towns&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Tartu&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1000&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town2&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Tampere&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1100&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town3&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Jelgava&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1300&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town4&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Kaunas&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1500&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;   &lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Norrköping&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1700&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town6&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Aalborg&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1700&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town7&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Pärnu&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1800&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town8&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Valmiera&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1900&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town9&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Malmö&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1400&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town10&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Linköping&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1200&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
  &amp;lt;/Towns&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Eesti&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town1&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town7&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country2&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country3&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Soome&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital4&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town2&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country3&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Läti&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital2&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town3&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town8&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country4&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country4&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Leedu&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital3&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town4&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country3&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country5&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Rootsi&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital5&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town9&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town10&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country6&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country2&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country6&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Taani&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town6&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
&amp;lt;/Countries&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XSD schema fail&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&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:simpleType name=&amp;quot;TypeName&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:restriction base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xs:minLength value=&amp;quot;3&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;
  &amp;lt;xs:simpleType name=&amp;quot;TypeArea&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:restriction base=&amp;quot;xs:integer&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xs:minInclusive value=&amp;quot;100&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;Countries&amp;quot;&amp;gt;&lt;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;Capitals&amp;quot;&amp;gt;&lt;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;Capital&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element type=&amp;quot;TypeName&amp;quot; name=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element type =&amp;quot;TypeArea&amp;quot; name=&amp;quot;Area&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&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;Towns&amp;quot;&amp;gt;&lt;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;Town&amp;quot;&amp;gt;&lt;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;Name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;Founded&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&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 maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;Country&amp;quot;&amp;gt;&lt;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;Name&amp;quot; type=&amp;quot;TypeName&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;Capital&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;refid&amp;quot; type=&amp;quot;xs:IDREF&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:element name=&amp;quot;CountryTowns&amp;quot;&amp;gt;&lt;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;Town&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;refid&amp;quot; type=&amp;quot;xs:IDREF&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:unique name=&amp;quot;TownUnique &amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:selector xpath=&amp;quot;Town&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:unique&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;NeighbouringCountries&amp;quot;&amp;gt;&lt;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;NeighbouringCountry&amp;quot;&amp;gt;&lt;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;Country&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;refid&amp;quot; type=&amp;quot;xs:IDREF&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:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&amp;quot; /&amp;gt;         &lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
          &amp;lt;xs:key name=&amp;quot;PK_Capitals&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Capital&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:key&amp;gt;&lt;br /&gt;
          &amp;lt;xs:keyref name=&amp;quot;FK_CountryCapitals&amp;quot; refer=&amp;quot;PK_Capitals&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country/Capital&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:keyref&amp;gt;&lt;br /&gt;
          &amp;lt;xs:key name=&amp;quot;PK_Towns&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Towns/Town&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:key&amp;gt;&lt;br /&gt;
          &amp;lt;xs:keyref name=&amp;quot;FK_CountryTowns&amp;quot; refer=&amp;quot;PK_Towns&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country/CountryTowns/Town&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:keyref&amp;gt;&lt;br /&gt;
          &amp;lt;xs:key name=&amp;quot;PK_Countries&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:key&amp;gt;&lt;br /&gt;
          &amp;lt;xs:keyref name=&amp;quot;FK_Countries&amp;quot; refer=&amp;quot;PK_Countries&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country/NeighbouringCountries/NeighbouringCountry/Country&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:keyref&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;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XSLT transformatsioon: XML -&amp;gt; HTML&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;capital&amp;quot; match=&amp;quot;Countries/Capitals/Capital&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;town&amp;quot; match=&amp;quot;Countries/Towns/Town&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;country&amp;quot; match=&amp;quot;Countries/Country&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;text-align:center&amp;quot;&amp;gt;Countries&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#9acd32&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Country name&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Capital&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Towns&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Neighbouring countries&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:for-each select=&amp;quot;Countries/Country&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tr&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;key(&#039;capital&#039;, Capital/@refid)&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;key(&#039;town&#039;, CountryTowns/Town/@refid)&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;position() != last()&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;key(&#039;country&#039;, NeighbouringCountries/NeighbouringCountry/Country/@refid)&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;position() != last()&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XSLT transformatsioon: XML -&amp;gt; XML&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;town&amp;quot; match=&amp;quot;Countries/Towns/Town&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;country&amp;quot; match=&amp;quot;Countries/Country&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Countries&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each select=&amp;quot;Countries/Country&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;Towns&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;key(&#039;town&#039;, CountryTowns/Town/@refid)&amp;quot;&amp;gt;          &lt;br /&gt;
            &amp;lt;Town&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:attribute name=&amp;quot;Founded&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;Founded&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/Town&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;      &lt;br /&gt;
        &amp;lt;/Towns&amp;gt;&lt;br /&gt;
        &amp;lt;NumberOfNeighbouringCountries&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;count(key(&#039;country&#039;, NeighbouringCountries/NeighbouringCountry/Country/@refid))&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/NumberOfNeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
    &amp;lt;/Countries&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Meie retsensioonid BestInShow meeskonnale=&lt;br /&gt;
&lt;br /&gt;
==Veebiteenus==&lt;br /&gt;
* Meeskonna BestInShow veebiteenused on loodud REST teenustena, toetamaks edaspidise rakenduse andmevahetust. Probleeme käivitamisel ei ole – Wiki lehel on äratoodud käivitamisjuhised. Teenused on ilusasti dokumenteeritud, ära on kirjeldatud iga teenuse juures tema võimalikud tagastusväärtused HTTP staatuskoodidena, olgu see näiteks et vastavad andmed leiti või ei leitud või oli hoopis tegemist vigase päringuga. Ilusasti töötab teenuste kirjeldamiseks mõeldud raamistik Swagger. Kogu veebiteenuse projekt on jaotatud loogilisteks alamprojektideks, kus eraldi on Business logic, Data Access layer, Domain. Kasutatud on kenasti kursuse käigus õpitud arhitektuurimustrit, kus on eraldi Service klassid, DTO-d, Factory-d, Repository-d, UnitOfWork jne. Teenuste kontrollerid on üldjuhul ’puhtad’, äriloogikat neisse kirjeldatud ei ole, vaid on edasi delegeeritud Service ja sealt edasi teistesse komponentidesse. Nii DTO-de kui ka Domain klassides on kasutatud andmeväljade juures annotatsioone, piiramaks andmebaasis väljade ning ka teenuse poolel sissetulevate andmete suurusi.&lt;br /&gt;
* Probleemina võib välja tuua, et igaüks võib luua endale ’admin’ kontot – kasutaja roll on kirjutatud DTO juurde ning saab vabalt postitada uue kasutaja admin õigustega. Rollide haldamiseks oleks soovitav kasutada eraldi klassi RoleManager. Autentimistokeni loomise käigus isegi kirjutatakse kasutaja rollid tema sisse, kuid kuna neid tegelikkuses identity raamistiku mõistes ei ole, ei kirjutata ka sinna midagi. Selle kasutamine võimaldaks lihtsamini piirata, mis teenused mis õigustele kättesaadavad on. Küsimust tekitab SecurityControlleris Logout meetod, mis ei tee midagi kuid mille poole ka klientrakenduses pöördutakse. Kuna tokenipoolne autentimine on olemuselt stateless, ei saa vähemalt sedasi serveripoolelt välja logida. See on mõeldud cookie hävitamiseks, mida aga ka eelnevalt loodud ei ole.&lt;br /&gt;
* Norida saab sellega, et projektis läbivalt ei ole kasutatud Enum tüüpi väärtuseid, vaid on kirjutatud vajalikes kohtades väärtused lahtise stringina (!user.Role.Equals(&amp;quot;admin&amp;quot;)) või hoopis mõni asi numbrina (user.Status == 1). Üheltpoolt see võib põhjustada vigu, teiseltpoolt teeb teisel arendajal arusaamise keerulisemaks.&lt;br /&gt;
* Boonusena tooks välja, et kõik API poolsed requestid logitakse andmebaasi, kus on kirjas, mis teenuse poole pöörduti, milliselt aadressilt, kellaaeg ja kasutaja või selle puudumisel anonüümne isik. Selleks kasutatakse ActionFilter klassi, mis lisatakse ServiceFilter atribuudina igale kontrollerile juurde.&lt;br /&gt;
Kokkuvõttes on tehtud hea ja tubli töö, on näha nii projektist endast kui ka Wiki lehelt, et on asjaga pidevalt ja süsteemselt tegeletud ning vajalikud teadmised REST veebiteenuste loomiseks on omandatud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Klientrakendus==&lt;br /&gt;
* Meeskond BestInShow on loonud klientrakenduse tõukoerte registri kohta, kus kasutatakse ära enda poolt loodud REST veebiteenuseid. Rakendus on loodud Angular raamistikus ning kasutatud on selle viimast versiooni 6.0. Juba ainuüksi Angulari valimine on julge väljakutse, arvestades et käesoleva kursuse raames pidi selle osa täielikult iseseisvalt omandama.&lt;br /&gt;
* Meeskonna Wiki lehel oli olemas kena õpetus, kuidas rakendus käima panna, veebiteenus ja klientrakendus töötavad erinevates projektides. Kaasa oli pandud rakenduse toimimiseks vajalikud algandmed sql-failis, mis tuli pärast andmebaasi loomist sisse laadida. Mingeid tõrkeid käivitamisel ei esinenud. Olles esilehele jõudnud, pakutakse võimalust kas sisse logida või uus kasutaja luua. Selgub et, sisselogimata kasutaja suurt midagi muud teha ei saagi. Analüüsi funktsionaalsetes nõuetes on kirjeldatud, et registreerimata kasutaja saab sirvida kenneleid, tõugusid, pesakond ja koeri. Rakenduse juhendiga on kaasa pandud mõned valmiskasutajad koos vajalike paroolidega. Uue kasutaja registreerimine toimib hästi, kõikide väljade täidetust valideeritakse ning antakase teada probleemist, kui ei ole sobilikult täidetud või kui juba sama kasutajanimi esineb. Seejuures on hästi kasutatud nii registreerimisvormil kui ka muudes kohtades edukalt Bootstrap võimalusi. Sisseloginuna kuvatakse teade, et mul ei ole veel koeri kuid puudub ka nupp koerte lisamiseks. Koeri saab lisada, kui kasutada juba loodud kasutajakontot ’breeder’ rollis. Ei oska öelda, kas see peakski nii olema, kuid võiks eeldada, et tavaõigustes kasutaja peaks saama ka omale koera registreerida. Koera detailvaate kuvamise funktsionaalsus on jäänud realiseerimata (selgub koodile peale vaadates), toimib olemasoleva koera andmete muutmine. Loodud on võimalus oma koera teisele omanikule anda, selleks avaneb eraldi modal aken, kuhu tuleb sisse kirjutada uus omaniku kasutajanimi. Siinkohal on probleem, et peab teadma täpset teist kasutajanime, võiks olla näiteks dropdown menüüst valitav võimalike kasutajate hulga seast. Kui sisestada suvaline nimi, ei anta teada, et sellist kasutajanime ei eksisteerida, konsoolist olevast errorist saab aru et ei õnnestunud. ’Breeder’ ja ’Owner’ rolliga saab esitada taotluse uue kenneli loomiseks, kus saab määrata, mis tõugu koeri on võimalik seal kasvatada. Need taotlused jõuavad admin õigustes kasutaja töölauale ning kui taotlus saab aktsepteeritud, jõuab vastav kennel ka kennelite nimekirja. Tundub, et edasine funktsionaalsus kennelite osas on jäänud realiseerimata, vähemalt ei paista kusagilt välja et midagi nende kennelitega teha saaks, sinna koeri paigutada vms.&lt;br /&gt;
* Kõige häirivam probleem, on et brauseri refreshimisel läheb sisse loginud kasutaja jaoks rakendus katki – ’currentUser’ muutuja ei saa enam laadimisel väärtustamisest ning kui teistes komponentides viidatakse sellele muutujale, ei saada sealt enam väärtust kätte. See ’currentUser’ võiks olla Observable tüüpi ning komponenti laadimisel võiks ta olla väärtustatud olemasoleva localStorages talletatud tokeni seest dekodeerimisel väljaloetud kasutajanime järgi.&lt;br /&gt;
* Hea külg on, et rakenduse ülesehitusel on kasutatud loogilist komponentideks ja alamkomponentideks jagamist ning head arendusmustrit, kus on eraldi service-klassid API teenuste poole pöördumiseks, eraldi on rakenduses kasutatavad mudelid. Stiilifailid eraldi css failidena. Selline struktuuri järgimine teeb koodi lugemise ja vajaliku leidmise lihtsaks. Sisseloginud kasutaja jaoks, kel on olemas vastav token, pannakse interceptor meetodi abil iga päringuga päringu headeris automaatselt kaasa tema token. Implementeeritud on ’AuthGuard’ meetod, ehk piiratakse millised rakenduses olevad leheküljed on mõeldud vaatamiseks ainult sisseloginud kasutajale ehk neile kes omavad tokenit.&lt;br /&gt;
Kokkuvõttes on mõningatele puudustele vaatamata tehtud hea ning kiiduväärt töö.&lt;br /&gt;
&lt;br /&gt;
==XML osa==&lt;br /&gt;
* Meeskonna BestInShow XML failis olevate andmete koosseis tuleneb nende projekttööst, ehk on tegemist rahvusvahelise tõukoerte näitusega, kus on mitmes kihis ära näidatud erinevate tõugude esindatus ning välja on toodud igat tõugu esindavad koerad ning ja omaniku andmed ning riiklik päritolu. Loogilise dimensioone on rohkem kui 4 ehk see arvuline nõue on täidetud. Kasutatud on mitmes kohaks lisaks atribuuttunnuseid. Mitmed nimi-tüüpi väärtusi saab esitada on mitmekeelselt, kus vastava elemendi keele määratlemine käib atribuuttunnuse abil.&lt;br /&gt;
* XSD schemafail ja XML ise on omavahel kooskõlas, XSD-s on kasutatud kenasti piiravaid kriteeriume, et ühel objektil ei saa olla näiteks rohkem kui 2 nime ning on märgitud, millised atribuudid millisel objektil olema peavad.&lt;br /&gt;
* Realiseeritud on 2 on XSLT transformatsiooni, üks teeb HTML vormingus tabeli, teine teise XML struktuuriga faili. HTML transformatsioonis on esitatud erinevate võistlusklasside võitjad, tegemist väga ilusalt vormindatud tabeliga. Kasutatud on andmete kokkusaamiseks mitmeid if-tingimusi ning tsükleid, loendatud on igas võistlusklassis olevate osalejate arv ning välja toodud selle võitja. Teises teiseks XML transformatsioonis filtreeritakse välja ainult ’Best in Show’ ja ’Best of Breed’ võitnud koerad, tuuakse välja koeraomanik.&lt;br /&gt;
Kokkuvõttes on XML osa hästi tehtud ning paraja keerukusega.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Tegevuste logi:=&lt;br /&gt;
&#039;&#039;&#039;10.02.2018&#039;&#039;&#039; -&lt;br /&gt;
Meeskonna loomine, idee paikapanemine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;24.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Andmemudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;26.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Analüüsi ja funktsionaalsuse kirjutamine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;31.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Wiki lehe loomine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;02.04.2018&#039;&#039;&#039; -&lt;br /&gt;
Koodi kirjutamise alustamine, Giti repo loomine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;14.05.2018&#039;&#039;&#039; -&lt;br /&gt;
Angular klientrakenduse alustamine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;08.06.2018&#039;&#039;&#039; -&lt;br /&gt;
Lõpptoode valmis&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;09.06.2018&#039;&#039;&#039; -&lt;br /&gt;
XML töö valmis&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=131603</id>
		<title>Meeskond:Curry</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=131603"/>
		<updated>2018-06-11T17:29:43Z</updated>

		<summary type="html">&lt;p&gt;Relken: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Liikmed=&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
=Analüüs=&lt;br /&gt;
==Projekti kirjeldus==&lt;br /&gt;
Curry näol on tegemist erinevate krüptorahade kauplemisplatvormiga, kus registreerunud kasutaja saab üles seada ostu- või müügitellimusi (edaspidi ordereid). Ostja määrab ära, millise maksimaalse hinna eest on nõus ühte krüptoraha valuutat teise eest ostma ning ka ostukoguse. Müüa seevastu ütleb, millise hinnaga soovib ühte valuutat teise vastu vahetada ja koguse. Süsteem viib automaatselt ostu-müügiorderid kokku ning kui hind on mõlemapoolselt sobilik, toimub tehing. Platvorm haldab ise kasutajakontol olevat rahakogust. Rakenduse peavaates on võimalik näha aktiivseid ordereid, kus müügiorderid reastatakse hinna järgi kasvavalt, ostuorderid kahanevalt. Projekti mahu hulka ei kuulu krüptovaluutade sisse- ja väljakande funktsionaalsus.&lt;br /&gt;
&lt;br /&gt;
===Andmemudeli skeem:===&lt;br /&gt;
[[File:Curry.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Üldised nõuded:==&lt;br /&gt;
* Veebiteenuse andmevahetus toimub JSON formaadis.&lt;br /&gt;
* Klientrakendus töötab kõikides enamlevinud veebibrauserites.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Must-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Kasutaja saab endale registreerimisega konto luua.&lt;br /&gt;
* Kasutaja saab enda andmeid (nimi, email, jne) muuta.&lt;br /&gt;
* Süsteemis on kindlaks määratud kindlad valuutapaarid, millede vahel kaubelda saab. Minimaalselt 1 valuutapaar ehk 2 erinevat valuutat.&lt;br /&gt;
* Kasutaja saab sisestada limiit müügiordereid, kus märgib ära millist valuutat mille vastu müüb, ning määrab hinna ning koguse.&lt;br /&gt;
* Kasutaja saab sisestada limiit ostuordereid, kus märgib ära millist valuutat soovib osta mõne teise valuuta eest ning määrab maksimaalse ostuhinna ning koguse.&lt;br /&gt;
* Süsteem leiab ostu-müügi orderite vahel kokku sobivad orderid, mis hinna poolest rahuldavad mõlemaid osapooli ning toimub automaatselt tehing – orderid loetakse  kas osaliselt või täielikult täidetuks ning tehing kantakse tehingute nimekirja. Vastavatel osapooltel toimub ka kontoseisu muutus.&lt;br /&gt;
* Orderite täitmine võib toimuda ka mitmes osas, kus ühe osapoole valuuta kogus erineb teise osapoole orderil märgitud kogusest. Sel juhul vähendatakse ühe osapoole orderi kogust toimunud tehingu mahu võrra.&lt;br /&gt;
* Kasutaja saab tühistada enda poolt üles seatud ordereid.&lt;br /&gt;
* Kasutaja saab vaadata rahakonto seisu, kui palju erinevaid valuutasid arvel on.&lt;br /&gt;
* Kasutaja saab vaadata enda orderite ja tehingute ajalugu.&lt;br /&gt;
* Iga toimunud tehingu pealt võetakse ka % teenustasu.&lt;br /&gt;
* Orderi loomise eelnevalt kontrollitakse, kas kasutaja rahakontol piisavalt vabu vahendeid tehingu toimimiseks ning kuni tehingu toimumiseni on vastav kogus valuutat kontol broneeritud. Reaalselt arvestatakse maha peale tehingu lõppu.&lt;br /&gt;
* Admin saab määrata, milliste süsteemis olevate valuutade vahel saab kaubelda.&lt;br /&gt;
* Admin saab muuta teenustasu % väärtust.&lt;br /&gt;
* Admin saab lukustada kasutajate kontosid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Nice-to-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Valuutade sisse -ja väljakanded.&lt;br /&gt;
* Graafiline kasutajaliides hinnaliikumise ja teiste näitajate kuvamiseks.&lt;br /&gt;
* Peale limiitorderite ka teiste orderitüüpide toetamine.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Juhend lõpptoote kasutamiseks:&#039;&#039;&#039;==&lt;br /&gt;
* Proovimaks administraator õigustes kasutaja funktsionaalsust, logi sisse kasutajanimega &#039;adminuser&#039; ning parooliga &#039;Kala1.maja&#039;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XML andmefail&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;Countries xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;Capitals&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Tallinn&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;100&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital2&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Riia&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;101&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital3&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Vilnius&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;102&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital4&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Helsingi&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;103&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Stockholm&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;104&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital6&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Kopenhaagen&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;105&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
  &amp;lt;/Capitals&amp;gt;&lt;br /&gt;
  &amp;lt;Towns&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Tartu&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1000&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town2&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Tampere&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1100&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town3&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Jelgava&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1300&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town4&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Kaunas&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1500&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;   &lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Norrköping&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1700&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town6&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Aalborg&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1700&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town7&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Pärnu&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1800&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town8&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Valmiera&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1900&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town9&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Malmö&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1400&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town10&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Linköping&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1200&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
  &amp;lt;/Towns&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Eesti&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town1&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town7&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country2&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country3&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Soome&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital4&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town2&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country3&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Läti&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital2&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town3&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town8&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country4&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country4&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Leedu&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital3&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town4&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country3&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country5&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Rootsi&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital5&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town9&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town10&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country6&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country2&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country6&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Taani&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town6&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
&amp;lt;/Countries&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XSD schema fail&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&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:simpleType name=&amp;quot;TypeName&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:restriction base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xs:minLength value=&amp;quot;3&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;
  &amp;lt;xs:simpleType name=&amp;quot;TypeArea&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:restriction base=&amp;quot;xs:integer&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xs:minInclusive value=&amp;quot;100&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;Countries&amp;quot;&amp;gt;&lt;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;Capitals&amp;quot;&amp;gt;&lt;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;Capital&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element type=&amp;quot;TypeName&amp;quot; name=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element type =&amp;quot;TypeArea&amp;quot; name=&amp;quot;Area&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&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;Towns&amp;quot;&amp;gt;&lt;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;Town&amp;quot;&amp;gt;&lt;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;Name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;Founded&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&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 maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;Country&amp;quot;&amp;gt;&lt;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;Name&amp;quot; type=&amp;quot;TypeName&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;Capital&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;refid&amp;quot; type=&amp;quot;xs:IDREF&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:element name=&amp;quot;CountryTowns&amp;quot;&amp;gt;&lt;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;Town&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;refid&amp;quot; type=&amp;quot;xs:IDREF&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:unique name=&amp;quot;TownUnique &amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:selector xpath=&amp;quot;Town&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:unique&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;NeighbouringCountries&amp;quot;&amp;gt;&lt;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;NeighbouringCountry&amp;quot;&amp;gt;&lt;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;Country&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;refid&amp;quot; type=&amp;quot;xs:IDREF&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:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&amp;quot; /&amp;gt;         &lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
          &amp;lt;xs:key name=&amp;quot;PK_Capitals&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Capital&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:key&amp;gt;&lt;br /&gt;
          &amp;lt;xs:keyref name=&amp;quot;FK_CountryCapitals&amp;quot; refer=&amp;quot;PK_Capitals&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country/Capital&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:keyref&amp;gt;&lt;br /&gt;
          &amp;lt;xs:key name=&amp;quot;PK_Towns&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Towns/Town&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:key&amp;gt;&lt;br /&gt;
          &amp;lt;xs:keyref name=&amp;quot;FK_CountryTowns&amp;quot; refer=&amp;quot;PK_Towns&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country/CountryTowns/Town&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:keyref&amp;gt;&lt;br /&gt;
          &amp;lt;xs:key name=&amp;quot;PK_Countries&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:key&amp;gt;&lt;br /&gt;
          &amp;lt;xs:keyref name=&amp;quot;FK_Countries&amp;quot; refer=&amp;quot;PK_Countries&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country/NeighbouringCountries/NeighbouringCountry/Country&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:keyref&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;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XSLT transformatsioon: XML -&amp;gt; HTML&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;capital&amp;quot; match=&amp;quot;Countries/Capitals/Capital&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;town&amp;quot; match=&amp;quot;Countries/Towns/Town&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;country&amp;quot; match=&amp;quot;Countries/Country&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;text-align:center&amp;quot;&amp;gt;Countries&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#9acd32&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Country name&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Capital&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Towns&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Neighbouring countries&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:for-each select=&amp;quot;Countries/Country&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tr&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;key(&#039;capital&#039;, Capital/@refid)&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;key(&#039;town&#039;, CountryTowns/Town/@refid)&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;position() != last()&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;key(&#039;country&#039;, NeighbouringCountries/NeighbouringCountry/Country/@refid)&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;position() != last()&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XSLT transformatsioon: XML -&amp;gt; XML&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;town&amp;quot; match=&amp;quot;Countries/Towns/Town&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;country&amp;quot; match=&amp;quot;Countries/Country&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Countries&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each select=&amp;quot;Countries/Country&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;Towns&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;key(&#039;town&#039;, CountryTowns/Town/@refid)&amp;quot;&amp;gt;          &lt;br /&gt;
            &amp;lt;Town&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:attribute name=&amp;quot;Founded&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;Founded&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/Town&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;      &lt;br /&gt;
        &amp;lt;/Towns&amp;gt;&lt;br /&gt;
        &amp;lt;NumberOfNeighbouringCountries&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;count(key(&#039;country&#039;, NeighbouringCountries/NeighbouringCountry/Country/@refid))&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/NumberOfNeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
    &amp;lt;/Countries&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Meie retsensioonid BestInShow meeskonnale=&lt;br /&gt;
&lt;br /&gt;
==Veebiteenus==&lt;br /&gt;
* Meeskonna BestInShow veebiteenused on loodud REST teenustena, toetamaks edaspidise rakenduse andmevahetust. Probleeme käivitamisel ei ole – Wiki lehel on äratoodud käivitamisjuhised. Teenused on ilusasti dokumenteeritud, ära on kirjeldatud iga teenuse juures tema võimalikud tagastusväärtused HTTP staatuskoodidena, olgu see näiteks et vastavad andmed leiti või ei leitud või oli hoopis tegemist vigase päringuga. Ilusasti töötab teenuste kirjeldamiseks mõeldud raamistik Swagger. Kogu veebiteenuse projekt on jaotatud loogilisteks alamprojektideks, kus eraldi on Business logic, Data Access layer, Domain. Kasutatud on kenasti kursuse käigus õpitud arhitektuurimustrit, kus on eraldi Service klassid, DTO-d, Factory-d, Repository-d, UnitOfWork jne. Teenuste kontrollerid on üldjuhul ’puhtad’, äriloogikat neisse kirjeldatud ei ole, vaid on edasi delegeeritud Service ja sealt edasi teistesse komponentidesse. Nii DTO-de kui ka Domain klassides on kasutatud andmeväljade juures annotatsioone, piiramaks andmebaasis väljade ning ka teenuse poolel sissetulevate andmete suurusi.&lt;br /&gt;
* Probleemina võib välja tuua, et igaüks võib luua endale ’admin’ kontot – kasutaja roll on kirjutatud DTO juurde ning saab vabalt postitada uue kasutaja admin õigustega. Rollide haldamiseks oleks soovitav kasutada eraldi klassi RoleManager. Autentimistokeni loomise käigus isegi kirjutatakse kasutaja rollid tema sisse, kuid kuna neid tegelikkuses identity raamistiku mõistes ei ole, ei kirjutata ka sinna midagi. Selle kasutamine võimaldaks lihtsamini piirata, mis teenused mis õigustele kättesaadavad on. Küsimust tekitab SecurityControlleris Logout meetod, mis ei tee midagi kuid mille poole ka klientrakenduses pöördutakse. Kuna tokenipoolne autentimine on olemuselt stateless, ei saa vähemalt sedasi serveripoolelt välja logida. See on mõeldud cookie hävitamiseks, mida aga ka eelnevalt loodud ei ole.&lt;br /&gt;
* Norida saab sellega, et projektis läbivalt ei ole kasutatud Enum tüüpi väärtuseid, vaid on kirjutatud vajalikes kohtades väärtused lahtise stringina (!user.Role.Equals(&amp;quot;admin&amp;quot;)) või hoopis mõni asi numbrina (user.Status == 1). Üheltpoolt see võib põhjustada vigu, teiseltpoolt teeb teisel arendajal arusaamise keerulisemaks.&lt;br /&gt;
* Boonusena tooks välja, et kõik API poolsed requestid logitakse andmebaasi, kus on kirjas, mis teenuse poole pöörduti, milliselt aadressilt, kellaaeg ja kasutaja või selle puudumisel anonüümne isik. Selleks kasutatakse ActionFilter klassi, mis lisatakse ServiceFilter atribuudina igale kontrollerile juurde.&lt;br /&gt;
Kokkuvõttes on tehtud hea ja tubli töö, on näha nii projektist endast kui ka Wiki lehelt, et on asjaga pidevalt ja süsteemselt tegeletud ning vajalikud teadmised REST veebiteenuste loomiseks on omandatud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Klientrakendus==&lt;br /&gt;
* Meeskond BestInShow on loonud klientrakenduse tõukoerte registri kohta, kus kasutatakse ära enda poolt loodud REST veebiteenuseid. Rakendus on loodud Angular raamistikus ning kasutatud on selle viimast versiooni 6.0. Juba ainuüksi Angulari valimine on julge väljakutse, arvestades et käesoleva kursuse raames pidi selle osa täielikult iseseisvalt omandama.&lt;br /&gt;
* Meeskonna Wiki lehel oli olemas kena õpetus, kuidas rakendus käima panna, veebiteenus ja klientrakendus töötavad erinevates projektides. Kaasa oli pandud rakenduse toimimiseks vajalikud algandmed sql-failis, mis tuli pärast andmebaasi loomist sisse laadida. Mingeid tõrkeid käivitamisel ei esinenud. Olles esilehele jõudnud, pakutakse võimalust kas sisse logida või uus kasutaja luua. Selgub et, sisselogimata kasutaja suurt midagi muud teha ei saagi. Analüüsi funktsionaalsetes nõuetes on kirjeldatud, et registreerimata kasutaja saab sirvida kenneleid, tõugusid, pesakond ja koeri. Rakenduse juhendiga on kaasa pandud mõned valmiskasutajad koos vajalike paroolidega. Uue kasutaja registreerimine toimib hästi, kõikide väljade täidetust valideeritakse ning antakase teada probleemist, kui ei ole sobilikult täidetud või kui juba sama kasutajanimi esineb. Seejuures on hästi kasutatud nii registreerimisvormil kui ka muudes kohtades edukalt Bootstrap võimalusi. Sisseloginuna kuvatakse teade, et mul ei ole veel koeri kuid puudub ka nupp koerte lisamiseks. Koeri saab lisada, kui kasutada juba loodud kasutajakontot ’breeder’ rollis. Ei oska öelda, kas see peakski nii olema, kuid võiks eeldada, et tavaõigustes kasutaja peaks saama ka omale koera registreerida. Koera detailvaate kuvamise funktsionaalsus on jäänud realiseerimata (selgub koodile peale vaadates), toimib olemasoleva koera andmete muutmine. Loodud on võimalus oma koera teisele omanikule anda, selleks avaneb eraldi modal aken, kuhu tuleb sisse kirjutada uus omaniku kasutajanimi. Siinkohal on probleem, et peab teadma täpset teist kasutajanime, võiks olla näiteks dropdown menüüst valitav võimalike kasutajate hulga seast. Kui sisestada suvaline nimi, ei anta teada, et sellist kasutajanime ei eksisteerida, konsoolist olevast errorist saab aru et ei õnnestunud. ’Breeder’ ja ’Owner’ rolliga saab esitada taotluse uue kenneli loomiseks, kus saab määrata, mis tõugu koeri on võimalik seal kasvatada. Need taotlused jõuavad admin õigustes kasutaja töölauale ning kui taotlus saab aktsepteeritud, jõuab vastav kennel ka kennelite nimekirja. Tundub, et edasine funktsionaalsus kennelite osas on jäänud realiseerimata, vähemalt ei paista kusagilt välja et midagi nende kennelitega teha saaks, sinna koeri paigutada vms.&lt;br /&gt;
* Kõige häirivam probleem, on et brauseri refreshimisel läheb sisse loginud kasutaja jaoks rakendus katki – ’currentUser’ muutuja ei saa enam laadimisel väärtustamisest ning kui teistes komponentides viidatakse sellele muutujale, ei saada sealt enam väärtust kätte. See ’currentUser’ võiks olla Observable tüüpi ning komponenti laadimisel võiks ta olla väärtustatud olemasoleva localStorages talletatud tokeni seest dekodeerimisel väljaloetud kasutajanime järgi.&lt;br /&gt;
* Hea külg on, et rakenduse ülesehitusel on kasutatud loogilist komponentideks ja alamkomponentideks jagamist ning head arendusmustrit, kus on eraldi service-klassid API teenuste poole pöördumiseks, eraldi on rakenduses kasutatavad mudelid. Stiilifailid eraldi css failidena. Selline struktuuri järgimine teeb koodi lugemise ja vajaliku leidmise lihtsaks. Sisseloginud kasutaja jaoks, kel on olemas vastav token, pannakse interceptor meetodi abil iga päringuga päringu headeris automaatselt kaasa tema token. Implementeeritud on ’AuthGuard’ meetod, ehk piiratakse millised rakenduses olevad leheküljed on mõeldud vaatamiseks ainult sisseloginud kasutajale ehk neile kes omavad tokenit.&lt;br /&gt;
Kokkuvõttes on mõningatele puudustele vaatamata tehtud hea ning kiiduväärt töö.&lt;br /&gt;
&lt;br /&gt;
==XML osa==&lt;br /&gt;
* Meeskonna BestInShow XML failis olevate andmete koosseis tuleneb nende projekttööst, ehk on tegemist rahvusvahelise tõukoerte näitusega, kus on mitmes kihis ära näidatud erinevate tõugude esindatus ning välja on toodud igat tõugu esindavad koerad ning ja omaniku andmed ning riiklik päritolu. Loogilise dimensioone on rohkem kui 4 ehk see arvuline nõue on täidetud. Kasutatud on mitmes kohaks lisaks atribuuttunnuseid. Mitmed nimi-tüüpi väärtusi saab esitada on mitmekeelselt, kus vastava elemendi keele määratlemine käib atribuuttunnuse abil.&lt;br /&gt;
XSD schemafail ja XML ise on omavahel kooskõlas, XSD-s on kasutatud kenasti piiravaid kriteeriume, et ühel objektil ei saa olla näiteks rohkem kui 2 nime ning on märgitud, millised atribuudid millisel objektil olema peavad.&lt;br /&gt;
* Realiseeritud on 2 on XSLT transformatsiooni, üks teeb HTML vormingus tabeli, teine teise XML struktuuriga faili. HTML transformatsioonis on esitatud erinevate võistlusklasside võitjad, tegemist väga ilusalt vormindatud tabeliga. Kasutatud on andmete kokkusaamiseks mitmeid if-tingimusi ning tsükleid, loendatud on igas võistlusklassis olevate osalejate arv ning välja toodud selle võitja. Teises teiseks XML transformatsioonis filtreeritakse välja ainult ’Best in Show’ ja ’Best of Breed’ võitnud koerad, tuuakse välja koeraomanik.&lt;br /&gt;
Kokkuvõttes on XML osa hästi tehtud ning paraja keerukusega.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Tegevuste logi:=&lt;br /&gt;
&#039;&#039;&#039;10.02.2018&#039;&#039;&#039; -&lt;br /&gt;
Meeskonna loomine, idee paikapanemine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;24.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Andmemudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;26.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Analüüsi ja funktsionaalsuse kirjutamine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;31.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Wiki lehe loomine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;02.04.2018&#039;&#039;&#039; -&lt;br /&gt;
Koodi kirjutamise alustamine, Giti repo loomine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;14.05.2018&#039;&#039;&#039; -&lt;br /&gt;
Angular klientrakenduse alustamine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;08.06.2018&#039;&#039;&#039; -&lt;br /&gt;
Lõpptoode valmis&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;09.06.2018&#039;&#039;&#039; -&lt;br /&gt;
XML töö valmis&lt;/div&gt;</summary>
		<author><name>Relken</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_2018&amp;diff=131602</id>
		<title>Kodutöö aines &quot;Võrgurakendused II: hajussüsteemide ehitamine&quot; 2018</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_2018&amp;diff=131602"/>
		<updated>2018-06-11T17:28:06Z</updated>

		<summary type="html">&lt;p&gt;Relken: &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; 2018=&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 API2/ASP.NET Core 2.0/WCF 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;
&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_2018#Veebiteenus NB! Täpsem info]&lt;br /&gt;
** Veebiteenuse analüüs peab olema valmis, esitatud ja wikilehel kirjeldatud hiljemalt: &#039;&#039;&#039;01.aprill 2018&#039;&#039;&#039;. Lisaks on  &#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;
** Veebiteenus peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;27. mai 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid veebiteenuste kohta peavad tehtud olema &#039;&#039;&#039;03. juuni 2018&#039;&#039;&#039;.&lt;br /&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_2018#Klientrakendus NB! Täpsem info]&lt;br /&gt;
** Klientrakendused peavad olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;27. mai 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid klientrakenduste kohta peavad tehtud olema &#039;&#039;&#039;03. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
&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_2018#XML_andmefail NB! Täpsem info]&lt;br /&gt;
** XML fail, stiilifail ja skeemifail peavad olema valmis ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;01. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid XML-failide kohta peavad tehtud olema &#039;&#039;&#039;05.juuni 2018&#039;&#039;&#039;.&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), paigaldusjuhend ning lahenduse kirjeldus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Maksimumtulemuse annab (vähemalt 4/7):&#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;
* Mobiilirakendused/Angularis/reactis loodud 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;
* Korraliku arhitektuuriga kirjutatud kood&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;
===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(ASP.NET veebirakendus või hoopis Angulari või Reacti baasil), töölauarakendusena(WPF) või mobiilse rakendusena(Xamarin)&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;
Kaitsmisele tuleks registreerida järjest(st iga järgmine lisab vajaliku 15min ajaakna) ja suvalisis kellaaegasid ei hakka kuhugi vahele kirjutama&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;05.06.2018&#039;&#039;&#039;&lt;br /&gt;
*15:00 - Miisiks&lt;br /&gt;
*15:15 - Maagikud &lt;br /&gt;
*15:30 - GoFood&lt;br /&gt;
*15:45 - Raavo V2™&lt;br /&gt;
*16:00 - LearnToDrive&lt;br /&gt;
Sellele päevale rohkem aegu juurde lisada ei saa&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Allpool olevate päevadele võib vabalt aegasid juurde lisada 15min sammga. Reegel on, et aegu lisame järjest&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;06.06.2018&#039;&#039;&#039;&lt;br /&gt;
*17:00 - Raamaturiiul&lt;br /&gt;
*17:15 - Pakiraam&lt;br /&gt;
*..&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;09.06.2018&#039;&#039;&#039;&lt;br /&gt;
*16:00 - MealPlannerSolo(Triin Oja)&lt;br /&gt;
*16:15 - Beer Pressure&lt;br /&gt;
*16:30 - &amp;amp;lt;div&amp;amp;gt;&lt;br /&gt;
*16:45 - NutriCheck&lt;br /&gt;
*17:00 - JääTuli&lt;br /&gt;
*17:15 - Ophelia&lt;br /&gt;
*17:30 - Kuldne Loojang&lt;br /&gt;
*17:45 - Hammas&lt;br /&gt;
*18:00 - VariousArtists&lt;br /&gt;
*18:15 - Pillar Of Autumn&lt;br /&gt;
*18:30 - Curry&lt;br /&gt;
*18:45 - WatchWinders&lt;br /&gt;
*19:00 - MOT&lt;br /&gt;
*19:15 - AmateurBB&lt;br /&gt;
*19:30 - Autolugu&lt;br /&gt;
*19:45 - VRII2018&lt;br /&gt;
&lt;br /&gt;
=Teemad 2018 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;
&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 2018=&lt;br /&gt;
==Päevaõpe==&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/HairSaloon Meeskond: HairSaloon]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kaido Henrik Elias&lt;br /&gt;
* Arvo Paomees&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/VariousArtists Meeskond: VariousArtists]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Ruudi Vinter&lt;br /&gt;
* Madis Roosioks&lt;br /&gt;
* Pavel Fleišer&lt;br /&gt;
&lt;br /&gt;
Lõpptoode: [https://drive.google.com/open?id=1Pq8Lhrs3G5mGiTje70ww-zMBNB5cXnRh ZIP]&lt;br /&gt;
&lt;br /&gt;
TFS: [https://variousartists.visualstudio.com/VariousArtists/_versionControl/changesets siin]&lt;br /&gt;
&lt;br /&gt;
XML: [https://wiki.itcollege.ee/index.php/VariousArtists#XML siin]&lt;br /&gt;
&lt;br /&gt;
Retsensioonid: [https://wiki.itcollege.ee/index.php/VariousArtists#Retsensioonid siin]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Maagikud Meeskond: Maagikud]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Kristina Rästas&lt;br /&gt;
*Simo Jaanus&lt;br /&gt;
*Artur Tammiste&lt;br /&gt;
*Rauno Lõhmus&lt;br /&gt;
Lõpptoote [http://enos.itcollege.ee/~sjaanus/c/Airport_solution.zip link]&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse ja klientrakenduse retsensioon tiimile Raavo V2 asub [https://docs.google.com/document/d/1fxmdLa94Do1u5WlmPQjSd4mMmdbDw5WmDne547jqQc4/edit siin]&lt;br /&gt;
&lt;br /&gt;
XML retsensioon tiimile LTD asub [https://docs.google.com/document/d/15rMhpqyG5XHsvOCZJp88ucHkiMa5Non6BbYwBBKT2_Y/edit siin]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/RaamatuRiiul Meeskond: RaamatuRiiul]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Alo Avi&lt;br /&gt;
* Arnika Rästa&lt;br /&gt;
* Marite Rammo&lt;br /&gt;
&#039;&#039;&#039;Meie XML:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/RaamatuRiiul#XML XML]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie veebiteenuse, klientrakenduse ja XML retsensioonid meeskonnale Miisiiks:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:Miisiiks retsensioonid]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie veebiteenus ning klientrakendus.&#039;&#039;&#039; [https://www.dropbox.com/s/ugbvx4j4zdlbp68/RaamatuRiiul.7z?dl=0 Zip]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Autolugu Meeskond: Autolugu]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Margus Põlma&lt;br /&gt;
* Karl Erik Õunapuu&lt;br /&gt;
&lt;br /&gt;
Veebiteenus: [http://enos.itcollege.ee/~mpolma/vr2/API.zip]&lt;br /&gt;
&lt;br /&gt;
Klientrakendus: [https://github.com/karlerikounapuu/autolugu-front]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/VRII2018 Meeskond: VRII2018]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kaspar Kaal&lt;br /&gt;
* Teet Adamson&lt;br /&gt;
* Rahel Kangur&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond_Raavo_V2%E2%84%A2 Meeskond: Raavo V2™]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Peeter Fridolin&lt;br /&gt;
* Kristo Leesmann&lt;br /&gt;
* Rando Rommot&lt;br /&gt;
&lt;br /&gt;
Projekti retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Meeskond_Raavo_V2™#Retsentsioonid Maagikud]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Pillarofautumn Meeskond: Pillar of Autumn ]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Taavi Põder&lt;br /&gt;
* Taavi Vesinurm (Meeskonnast lahkunud)&lt;br /&gt;
* Raido Vell&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode API ja klientrakendus:&#039;&#039;&#039; [https://github.com/taavip9/Veebirakendused-II Lõpptoode]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/jaatuli Meeskond: JääTuli]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Tarmo Luugus&lt;br /&gt;
*Leho Kivistik&lt;br /&gt;
*Hannes Mäeorg&lt;br /&gt;
*Marten Tammeleht&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/JustABot Meeskond: JustABot]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Argo Hansen&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond_Pakiraam Meeskond: Pakiraam]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Kristo Naeris&lt;br /&gt;
*Indro Kottise&lt;br /&gt;
&lt;br /&gt;
Klientrakendus [https://github.com/knaeris/VR2Klient siin] ja veebiteenus [https://github.com/knaeris/VR2Projekt siin]&lt;br /&gt;
&lt;br /&gt;
Retsensioon meeskonna Raavo v2 klientrakendusele : [https://wiki.itcollege.ee/index.php/Meeskond_Pakiraam#Retsensioonid Retsensioon]&lt;br /&gt;
&lt;br /&gt;
Retsensioon meeskonna Raavo v2 veebiteenusele:&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/GoFood Meeskond: GoFood]===&lt;br /&gt;
Liikmed: &lt;br /&gt;
&lt;br /&gt;
* Rando Kurel&lt;br /&gt;
* Henrik Prangel&lt;br /&gt;
* Markus Mänd&lt;br /&gt;
* Edgar Tereping&lt;br /&gt;
* Jane Kaldma&lt;br /&gt;
&lt;br /&gt;
Lõpptoode: [https://wiki.itcollege.ee/index.php/GoFood#Projektikood lõpptoote leiab siit]&lt;br /&gt;
&lt;br /&gt;
Meie rühma kirjutatud retsentsioonid rühmale Maagikud:[https://wiki.itcollege.ee/index.php/GoFood#Retsensioon_rühmale_Maagikud  Retsensioon]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/LTD Meeskond: LearnToDrive]===&lt;br /&gt;
&#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
*Eve Ormisson&lt;br /&gt;
*Carlos Kirtsi&lt;br /&gt;
&lt;br /&gt;
Projekt [https://wiki.itcollege.ee/index.php/LTD#Kood_ise asub siin, kliendina kasutame JustInCaseWPFi]&lt;br /&gt;
&lt;br /&gt;
Projekti retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/LTD#Projekti_retsensioon Maagikud]&lt;br /&gt;
&lt;br /&gt;
XML osa retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/LTD#XML_retsensioon RaamatuRiiul]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Miisiiks Meeskond: Miisiiks]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Christo Aruste&lt;br /&gt;
*Heleriin Malkov&lt;br /&gt;
*Tõnis Prants&lt;br /&gt;
&lt;br /&gt;
[https://www.dropbox.com/s/e2vu3ukgckyc2x5/MiisiiksWS.zip?dl=0 Veebiteenus]&lt;br /&gt;
&lt;br /&gt;
Veebiteenus v2 (05.06): [https://www.dropbox.com/s/4acyvc9c7h08xl6/MiisiiksWS-v2.rar?dl=0 Veebiteenus]&lt;br /&gt;
&lt;br /&gt;
[https://www.dropbox.com/s/iwtheohp5mn0lek/MiisiiksC.zip?dl=0 Klientrakendus]&lt;br /&gt;
&lt;br /&gt;
Klientrakendus v2 (05.06): [https://www.dropbox.com/s/m6ijv2yyqthebgr/MiisiiksC2-v2.rar?dl=0 Klientrakendus]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Miisiiks#XML XML]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Retsensioonid meeskonnale Raavo V2™&lt;br /&gt;
&lt;br /&gt;
Veebiteenus: [https://wiki.itcollege.ee/index.php/Miisiiks#Veebiteenuse_retsensioon Retsensioon]&lt;br /&gt;
&lt;br /&gt;
Klientrakendus: [https://wiki.itcollege.ee/index.php/Miisiiks#Klientrakenduse_retsensioon Retsensioon]&lt;br /&gt;
&lt;br /&gt;
XML: [https://wiki.itcollege.ee/index.php/Miisiiks#XML_retsensioon  XML]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/VR2_div Meeskond: &amp;amp;lt;div&amp;amp;gt;]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Kaarel Pärtel&lt;br /&gt;
*Marek Juhanson&lt;br /&gt;
*Kai Kallastu&lt;br /&gt;
&lt;br /&gt;
Retsensioonid rühmale [https://wiki.itcollege.ee/index.php/Miisiiks Miisiiks™]: [https://docs.google.com/document/d/1gQmas-Fay_XHHhLInKM92152vYeFdFflDIRozN63mxA/edit?usp=sharing veebiteenus, klientrakendus ja XML]&lt;br /&gt;
&lt;br /&gt;
==Kaugõpe==&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/BestInShow Meeskond: BestInShow]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Liina Abner&lt;br /&gt;
* Marju Pütsepp&lt;br /&gt;
* Liisi Taimre&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode veebiteenus:&#039;&#039;&#039; [https://www.dropbox.com/s/j5ixmwmx45kxcyo/BestInShow.zip?dl=0 https://www.dropbox.com/s/j5ixmwmx45kxcyo/BestInShow.zip?dl=0]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Kasutusjuhend:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/BestInShow#Kasutusjuhend https://wiki.itcollege.ee/index.php/BestInShow#Kasutusjuhend]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode klient:&#039;&#039;&#039; [https://bitbucket.org/Marjup/bestinshow/ https://bitbucket.org/Marjup/bestinshow/]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML failid:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/BestInShow#XML_failid Schema, XML ja XSLT HTML ja XML transformatsiooniks]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Retsensioon veebiteenusele:&#039;&#039;&#039;[https://docs.google.com/document/d/1C2pLotWV5dNU7TdBTTwZr9Lrh6VGtsN0FDzCzBWUBWg/edit?usp=sharing Retsensioon projektile WatchWinders]&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon klientrakendusele: TODO retsenseerime projekti WatchWinders&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon XML-ile: TODO retsenseerime projekti WatchWinders&amp;lt;br&amp;gt;&lt;br /&gt;
BestInShow meeskonda retsenseerib [https://wiki.itcollege.ee/index.php/Meeskond:Curry#Meie_retsensioonid_BestInShow_meeskonnale &#039;&#039;&#039;Curry&#039;&#039;&#039;]&amp;lt;br&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/AssistDesq Meeskond: AssistDesq]===&lt;br /&gt;
Liikmed: &lt;br /&gt;
* Karen Grigorjan&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/WatchWinders Meeskond: WatchWinders]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Toomas Juhkov&lt;br /&gt;
* Kunnar Kukk&lt;br /&gt;
* Tiit Kuuskmäe&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/WatchWinders#Link_klientrakendusele_ja_API-le Link klientrakendusele ja API-le]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://drive.google.com/file/d/1OtzOCPiWixsrbHcGCcdHgXIgz3_fsC7h/view Retsensioon grupi &amp;quot;Kuldne Loojang&amp;quot; veebiteenusele]&lt;br /&gt;
&lt;br /&gt;
===[[ Kuldneloojang | Meeskond: Kuldne loojang]]===&lt;br /&gt;
&#039;&#039;&#039;Liikmed&#039;&#039;&#039;:&lt;br /&gt;
* Andrus Seiman&lt;br /&gt;
* Marko Belzetski&lt;br /&gt;
* Priit Tiganik&lt;br /&gt;
* Kristjan Peterson (loobus)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode:&#039;&#039;&#039;&lt;br /&gt;
algselt üles laetud 02.06.2018, bugide parandusi lisatud 04.06.2018&lt;br /&gt;
* [https://www.dropbox.com/s/4h9bvq4k6388fmo/loojang.zip?dl=0 .zip fail rakendus ja klient koos] &lt;br /&gt;
* [https://bitbucket.org/itcollegeprojects/loojang-app veebirakenduse repo] &lt;br /&gt;
* [https://bitbucket.org/itcollegeprojects/loojang-client klientrakenduse repo] &lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Kuldneloojang#XML_.C3.BClesande_kirjeldus XML:  link meie Wiki lehele]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie tehtud retsensioonid:&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Kuldneloojang#Veebiteenusele veebiteenuse retsensioon meeskonna Curry tööle.]&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Kuldneloojang#Klientrakendusele klientrakenduse retsensioon meeskonna Curry tööle.]&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Kuldneloojang#XML-ile XML retsensioon meeskonna Curry tööle.]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ophelia Meeskond: Ophelia]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Siim Kallari&lt;br /&gt;
* Andres Kepler (loobus)&lt;br /&gt;
* Jorma Rebane&lt;br /&gt;
&lt;br /&gt;
[https://www.dropbox.com/s/v63fkbjnd5umqqm/Ophelia.zip?dl=0 Lõpptoote link]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Ophelia#L.C3.B5pptoote_kasutusjuhend Kasutusjuhend(Kaasas ka lõpptootes)]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Ophelia#XML_.C3.9Clesanne XML Ülesanne]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Ophelia#Klientrakenduse_retsensioon_meeskonnale_MealPlannerSolo Klientrakenduse retsensioon meeskonnale MealPlannerSolo]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/SharpRestoVRII Meeskond: SharpRestoVRII]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Andres Aava (lahkunud liige)&lt;br /&gt;
* Henri Annilo&lt;br /&gt;
* Jaan Koolmeister&lt;br /&gt;
* Lauri Üksti&lt;br /&gt;
&lt;br /&gt;
Lähtekood: [http://enos.itcollege.ee/~luksti/CSharp/CSharpResto.zip CSharpResto]&lt;br /&gt;
&lt;br /&gt;
XML: [https://wiki.itcollege.ee/index.php/SharpRestoVRII#XML Wikis]&lt;br /&gt;
&lt;br /&gt;
Retsensioonid: [https://wiki.itcollege.ee/index.php/SharpRestoVRII#Retsensioon_meeskonnale_Hammas Meeskonnale Hammas]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/BeerPressure Meeskond: BeerPressure]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sigrid Aasma&lt;br /&gt;
* Evelin Jõgi&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Marko Nõu&lt;br /&gt;
&#039;&#039;&#039;Projekt:&#039;&#039;&#039; [https://github.com/sikumiku/TaisKohtApi TaisKohtApi]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode:&#039;&#039;&#039; [https://github.com/sikumiku/TaisKohtApi/archive/61438e187a1a972410c8a3bc6274d69489d00aa6.zip GitHub commit]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;XML:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/BeerPressure#XML.2FXSD.2FXSLT Beer Pressure XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud XML failide retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:MOT#XML_retsensioon_by_meeskond_BeerPressure: Team MOT retsensioon]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud veebiteenuse retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:MOT#Veebiteenuse_retsensensioon_by_meeskond_BeerPressure: Team MOT retsensioon]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud klientrakenduse retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:Kuldneloojang#Klientrakenduse_retsensensioon_by_meeskond_BeerPressure: Team Kuldneloojang retsensioon]&lt;br /&gt;
&lt;br /&gt;
===[[ Memorize | Meeskond: Memorize]]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Madis Uudam&lt;br /&gt;
* Olle Mikk&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/UCanDo Meeskond: UCanDo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mart Raus&lt;br /&gt;
* Ando Kiidron (loobus)&lt;br /&gt;
* Liina Saar&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode: &#039;&#039;&#039; [https://drive.google.com/drive/folders/1GIgiG5NvmnnKoQYmWWbfV_9Nhs2dezz8?usp=sharing UCanDo] &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Veebiteenuse retsensioon: &#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse retsensioon: &#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML retsensioon: &#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/MOT Meeskond: MOT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Merike Meizner&lt;br /&gt;
* Helen Oppar (loobus)&lt;br /&gt;
* Hardi Tiitus&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode: &#039;&#039;&#039;  http://enos.itcollege.ee/~mmeizner/MOT/ &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud veebiteenuse, klientrakenduse ja XML&#039;i retsensioon:&#039;&#039;&#039; [https://docs.google.com/document/d/16WL12wmvQ_TPcY_-4pG_kjwtstQoX5meEYcigE4Febw/edit?usp=sharing: Team Raavo V2]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond:_MealPlanner Meeskond: MealPlanner]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Triin Oja&lt;br /&gt;
*Rein Remsu&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond:Curry Meeskond: Curry]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode: &#039;&#039;&#039;  [http://enos.itcollege.ee/~pploom/VR2/ link] &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Meie retsensioon BestInShow meeskonnale: &#039;&#039;&#039;  [https://wiki.itcollege.ee/index.php/Meeskond:Curry#Meie_retsensioonid_BestInShow_meeskonnale link] &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML: &#039;&#039;&#039;  [https://wiki.itcollege.ee/index.php/Meeskond:Curry#XML_andmefail link] &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XSD: &#039;&#039;&#039;  [https://wiki.itcollege.ee/index.php/Meeskond:Curry#XSD_schema_fail link] &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XSLT1: &#039;&#039;&#039;  [https://wiki.itcollege.ee/index.php/Meeskond:Curry#XSLT_transformatsioon:_XML_-.3E_HTML link] &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XSLT2: &#039;&#039;&#039;  [https://wiki.itcollege.ee/index.php/Meeskond:Curry#XSLT_transformatsioon:_XML_-.3E_XML link] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Curry meeskonna veebiteenust, klientrakendust ja XML-i retsenseerib meeskond KuldneLoojang. Curryle kirjutatud retsensioonid [https://wiki.itcollege.ee/index.php/Kuldneloojang#Meie_tehtud_retsensioonid asuvad siin: link]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Hammas Meeskond: Hammas]===&lt;br /&gt;
&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sten Lunden&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode:&#039;&#039;&#039; [https://ildtest.azurewebsites.net azure]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Projekt:&#039;&#039;&#039; [https://github.com/lundens/ild-core github]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Hammas#XML wiki]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Veebiteenuse retsensioon&#039;&#039;&#039; meeskonnale [https://wiki.itcollege.ee/index.php/Hammas#Veebiteenuse_retsensioon_meeskonnale_GoFood GoFood]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse retsensioon&#039;&#039;&#039; meeskonnale [https://wiki.itcollege.ee/index.php/Hammas#Klientrakenduse_retsensioon_meeskonnale_GoFood GoFood]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML retsensioon&#039;&#039;&#039; meeskonnale [https://wiki.itcollege.ee/index.php/Hammas#XMLi_retsensioon_meeskonnale_MealPlannerSolo MealPlannerSolo]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/LabLite Meeskond: LabLite]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Alex Kaska&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/AmateurBB Meeskond: AmateurBB]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Taavi Kivimaa&lt;br /&gt;
&#039;&#039;&#039;Veebiteenus:&#039;&#039;&#039; [https://github.com/Tafkinz/AmateurBB/tree/BB-1 GitHub]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Klientrakendus:&#039;&#039;&#039; [https://github.com/Tafkinz/frontend GitHub]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/AmateurBB wiki]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Veebiteenuse retsensioon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse retsensioon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML retsensioon&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/MealPlannerSolo Meeskond: MealPlannerSolo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Triin Oja&lt;br /&gt;
&#039;&#039;&#039;[https://wiki.itcollege.ee/index.php/MealPlannerSolo#XML_andmefail XML]&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[http://enos.itcollege.ee/~troja/VRII2018/ Veebiteenus ja klientrakendus]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/NutriCheck Meeskond: NutriCheck]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Artyom Likhachev&lt;br /&gt;
&#039;&#039;&#039;Project:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;[https://www.dropbox.com/s/irgev5w9ofifg5m/vr2_service-v3.zip?dl=0 Veebiteenus]&lt;br /&gt;
&amp;lt;br/&amp;gt;[https://www.dropbox.com/s/7kn1u6z2481ligm/WebClient.zip?dl=0 Klientrakendus]&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;XML:&#039;&#039;&#039; TODO&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Retsensioon:&#039;&#039;&#039; TODO&lt;/div&gt;</summary>
		<author><name>Relken</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_2018&amp;diff=131601</id>
		<title>Kodutöö aines &quot;Võrgurakendused II: hajussüsteemide ehitamine&quot; 2018</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_2018&amp;diff=131601"/>
		<updated>2018-06-11T17:26:22Z</updated>

		<summary type="html">&lt;p&gt;Relken: &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; 2018=&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 API2/ASP.NET Core 2.0/WCF 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;
&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_2018#Veebiteenus NB! Täpsem info]&lt;br /&gt;
** Veebiteenuse analüüs peab olema valmis, esitatud ja wikilehel kirjeldatud hiljemalt: &#039;&#039;&#039;01.aprill 2018&#039;&#039;&#039;. Lisaks on  &#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;
** Veebiteenus peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;27. mai 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid veebiteenuste kohta peavad tehtud olema &#039;&#039;&#039;03. juuni 2018&#039;&#039;&#039;.&lt;br /&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_2018#Klientrakendus NB! Täpsem info]&lt;br /&gt;
** Klientrakendused peavad olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;27. mai 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid klientrakenduste kohta peavad tehtud olema &#039;&#039;&#039;03. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
&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_2018#XML_andmefail NB! Täpsem info]&lt;br /&gt;
** XML fail, stiilifail ja skeemifail peavad olema valmis ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;01. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid XML-failide kohta peavad tehtud olema &#039;&#039;&#039;05.juuni 2018&#039;&#039;&#039;.&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), paigaldusjuhend ning lahenduse kirjeldus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Maksimumtulemuse annab (vähemalt 4/7):&#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;
* Mobiilirakendused/Angularis/reactis loodud 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;
* Korraliku arhitektuuriga kirjutatud kood&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;
===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(ASP.NET veebirakendus või hoopis Angulari või Reacti baasil), töölauarakendusena(WPF) või mobiilse rakendusena(Xamarin)&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;
Kaitsmisele tuleks registreerida järjest(st iga järgmine lisab vajaliku 15min ajaakna) ja suvalisis kellaaegasid ei hakka kuhugi vahele kirjutama&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;05.06.2018&#039;&#039;&#039;&lt;br /&gt;
*15:00 - Miisiks&lt;br /&gt;
*15:15 - Maagikud &lt;br /&gt;
*15:30 - GoFood&lt;br /&gt;
*15:45 - Raavo V2™&lt;br /&gt;
*16:00 - LearnToDrive&lt;br /&gt;
Sellele päevale rohkem aegu juurde lisada ei saa&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Allpool olevate päevadele võib vabalt aegasid juurde lisada 15min sammga. Reegel on, et aegu lisame järjest&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;06.06.2018&#039;&#039;&#039;&lt;br /&gt;
*17:00 - Raamaturiiul&lt;br /&gt;
*17:15 - Pakiraam&lt;br /&gt;
*..&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;09.06.2018&#039;&#039;&#039;&lt;br /&gt;
*16:00 - MealPlannerSolo(Triin Oja)&lt;br /&gt;
*16:15 - Beer Pressure&lt;br /&gt;
*16:30 - &amp;amp;lt;div&amp;amp;gt;&lt;br /&gt;
*16:45 - NutriCheck&lt;br /&gt;
*17:00 - JääTuli&lt;br /&gt;
*17:15 - Ophelia&lt;br /&gt;
*17:30 - Kuldne Loojang&lt;br /&gt;
*17:45 - Hammas&lt;br /&gt;
*18:00 - VariousArtists&lt;br /&gt;
*18:15 - Pillar Of Autumn&lt;br /&gt;
*18:30 - Curry&lt;br /&gt;
*18:45 - WatchWinders&lt;br /&gt;
*19:00 - MOT&lt;br /&gt;
*19:15 - AmateurBB&lt;br /&gt;
*19:30 - Autolugu&lt;br /&gt;
*19:45 - VRII2018&lt;br /&gt;
&lt;br /&gt;
=Teemad 2018 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;
&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 2018=&lt;br /&gt;
==Päevaõpe==&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/HairSaloon Meeskond: HairSaloon]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kaido Henrik Elias&lt;br /&gt;
* Arvo Paomees&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/VariousArtists Meeskond: VariousArtists]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Ruudi Vinter&lt;br /&gt;
* Madis Roosioks&lt;br /&gt;
* Pavel Fleišer&lt;br /&gt;
&lt;br /&gt;
Lõpptoode: [https://drive.google.com/open?id=1Pq8Lhrs3G5mGiTje70ww-zMBNB5cXnRh ZIP]&lt;br /&gt;
&lt;br /&gt;
TFS: [https://variousartists.visualstudio.com/VariousArtists/_versionControl/changesets siin]&lt;br /&gt;
&lt;br /&gt;
XML: [https://wiki.itcollege.ee/index.php/VariousArtists#XML siin]&lt;br /&gt;
&lt;br /&gt;
Retsensioonid: [https://wiki.itcollege.ee/index.php/VariousArtists#Retsensioonid siin]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Maagikud Meeskond: Maagikud]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Kristina Rästas&lt;br /&gt;
*Simo Jaanus&lt;br /&gt;
*Artur Tammiste&lt;br /&gt;
*Rauno Lõhmus&lt;br /&gt;
Lõpptoote [http://enos.itcollege.ee/~sjaanus/c/Airport_solution.zip link]&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse ja klientrakenduse retsensioon tiimile Raavo V2 asub [https://docs.google.com/document/d/1fxmdLa94Do1u5WlmPQjSd4mMmdbDw5WmDne547jqQc4/edit siin]&lt;br /&gt;
&lt;br /&gt;
XML retsensioon tiimile LTD asub [https://docs.google.com/document/d/15rMhpqyG5XHsvOCZJp88ucHkiMa5Non6BbYwBBKT2_Y/edit siin]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/RaamatuRiiul Meeskond: RaamatuRiiul]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Alo Avi&lt;br /&gt;
* Arnika Rästa&lt;br /&gt;
* Marite Rammo&lt;br /&gt;
&#039;&#039;&#039;Meie XML:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/RaamatuRiiul#XML XML]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie veebiteenuse, klientrakenduse ja XML retsensioonid meeskonnale Miisiiks:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:Miisiiks retsensioonid]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie veebiteenus ning klientrakendus.&#039;&#039;&#039; [https://www.dropbox.com/s/ugbvx4j4zdlbp68/RaamatuRiiul.7z?dl=0 Zip]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Autolugu Meeskond: Autolugu]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Margus Põlma&lt;br /&gt;
* Karl Erik Õunapuu&lt;br /&gt;
&lt;br /&gt;
Veebiteenus: [http://enos.itcollege.ee/~mpolma/vr2/API.zip]&lt;br /&gt;
&lt;br /&gt;
Klientrakendus: [https://github.com/karlerikounapuu/autolugu-front]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/VRII2018 Meeskond: VRII2018]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kaspar Kaal&lt;br /&gt;
* Teet Adamson&lt;br /&gt;
* Rahel Kangur&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond_Raavo_V2%E2%84%A2 Meeskond: Raavo V2™]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Peeter Fridolin&lt;br /&gt;
* Kristo Leesmann&lt;br /&gt;
* Rando Rommot&lt;br /&gt;
&lt;br /&gt;
Projekti retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Meeskond_Raavo_V2™#Retsentsioonid Maagikud]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Pillarofautumn Meeskond: Pillar of Autumn ]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Taavi Põder&lt;br /&gt;
* Taavi Vesinurm (Meeskonnast lahkunud)&lt;br /&gt;
* Raido Vell&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode API ja klientrakendus:&#039;&#039;&#039; [https://github.com/taavip9/Veebirakendused-II Lõpptoode]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/jaatuli Meeskond: JääTuli]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Tarmo Luugus&lt;br /&gt;
*Leho Kivistik&lt;br /&gt;
*Hannes Mäeorg&lt;br /&gt;
*Marten Tammeleht&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/JustABot Meeskond: JustABot]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Argo Hansen&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond_Pakiraam Meeskond: Pakiraam]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Kristo Naeris&lt;br /&gt;
*Indro Kottise&lt;br /&gt;
&lt;br /&gt;
Klientrakendus [https://github.com/knaeris/VR2Klient siin] ja veebiteenus [https://github.com/knaeris/VR2Projekt siin]&lt;br /&gt;
&lt;br /&gt;
Retsensioon meeskonna Raavo v2 klientrakendusele : [https://wiki.itcollege.ee/index.php/Meeskond_Pakiraam#Retsensioonid Retsensioon]&lt;br /&gt;
&lt;br /&gt;
Retsensioon meeskonna Raavo v2 veebiteenusele:&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/GoFood Meeskond: GoFood]===&lt;br /&gt;
Liikmed: &lt;br /&gt;
&lt;br /&gt;
* Rando Kurel&lt;br /&gt;
* Henrik Prangel&lt;br /&gt;
* Markus Mänd&lt;br /&gt;
* Edgar Tereping&lt;br /&gt;
* Jane Kaldma&lt;br /&gt;
&lt;br /&gt;
Lõpptoode: [https://wiki.itcollege.ee/index.php/GoFood#Projektikood lõpptoote leiab siit]&lt;br /&gt;
&lt;br /&gt;
Meie rühma kirjutatud retsentsioonid rühmale Maagikud:[https://wiki.itcollege.ee/index.php/GoFood#Retsensioon_rühmale_Maagikud  Retsensioon]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/LTD Meeskond: LearnToDrive]===&lt;br /&gt;
&#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
*Eve Ormisson&lt;br /&gt;
*Carlos Kirtsi&lt;br /&gt;
&lt;br /&gt;
Projekt [https://wiki.itcollege.ee/index.php/LTD#Kood_ise asub siin, kliendina kasutame JustInCaseWPFi]&lt;br /&gt;
&lt;br /&gt;
Projekti retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/LTD#Projekti_retsensioon Maagikud]&lt;br /&gt;
&lt;br /&gt;
XML osa retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/LTD#XML_retsensioon RaamatuRiiul]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Miisiiks Meeskond: Miisiiks]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Christo Aruste&lt;br /&gt;
*Heleriin Malkov&lt;br /&gt;
*Tõnis Prants&lt;br /&gt;
&lt;br /&gt;
[https://www.dropbox.com/s/e2vu3ukgckyc2x5/MiisiiksWS.zip?dl=0 Veebiteenus]&lt;br /&gt;
&lt;br /&gt;
Veebiteenus v2 (05.06): [https://www.dropbox.com/s/4acyvc9c7h08xl6/MiisiiksWS-v2.rar?dl=0 Veebiteenus]&lt;br /&gt;
&lt;br /&gt;
[https://www.dropbox.com/s/iwtheohp5mn0lek/MiisiiksC.zip?dl=0 Klientrakendus]&lt;br /&gt;
&lt;br /&gt;
Klientrakendus v2 (05.06): [https://www.dropbox.com/s/m6ijv2yyqthebgr/MiisiiksC2-v2.rar?dl=0 Klientrakendus]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Miisiiks#XML XML]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Retsensioonid meeskonnale Raavo V2™&lt;br /&gt;
&lt;br /&gt;
Veebiteenus: [https://wiki.itcollege.ee/index.php/Miisiiks#Veebiteenuse_retsensioon Retsensioon]&lt;br /&gt;
&lt;br /&gt;
Klientrakendus: [https://wiki.itcollege.ee/index.php/Miisiiks#Klientrakenduse_retsensioon Retsensioon]&lt;br /&gt;
&lt;br /&gt;
XML: [https://wiki.itcollege.ee/index.php/Miisiiks#XML_retsensioon  XML]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/VR2_div Meeskond: &amp;amp;lt;div&amp;amp;gt;]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Kaarel Pärtel&lt;br /&gt;
*Marek Juhanson&lt;br /&gt;
*Kai Kallastu&lt;br /&gt;
&lt;br /&gt;
Retsensioonid rühmale [https://wiki.itcollege.ee/index.php/Miisiiks Miisiiks™]: [https://docs.google.com/document/d/1gQmas-Fay_XHHhLInKM92152vYeFdFflDIRozN63mxA/edit?usp=sharing veebiteenus, klientrakendus ja XML]&lt;br /&gt;
&lt;br /&gt;
==Kaugõpe==&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/BestInShow Meeskond: BestInShow]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Liina Abner&lt;br /&gt;
* Marju Pütsepp&lt;br /&gt;
* Liisi Taimre&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode veebiteenus:&#039;&#039;&#039; [https://www.dropbox.com/s/j5ixmwmx45kxcyo/BestInShow.zip?dl=0 https://www.dropbox.com/s/j5ixmwmx45kxcyo/BestInShow.zip?dl=0]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Kasutusjuhend:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/BestInShow#Kasutusjuhend https://wiki.itcollege.ee/index.php/BestInShow#Kasutusjuhend]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode klient:&#039;&#039;&#039; [https://bitbucket.org/Marjup/bestinshow/ https://bitbucket.org/Marjup/bestinshow/]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML failid:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/BestInShow#XML_failid Schema, XML ja XSLT HTML ja XML transformatsiooniks]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Retsensioon veebiteenusele:&#039;&#039;&#039;[https://docs.google.com/document/d/1C2pLotWV5dNU7TdBTTwZr9Lrh6VGtsN0FDzCzBWUBWg/edit?usp=sharing Retsensioon projektile WatchWinders]&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon klientrakendusele: TODO retsenseerime projekti WatchWinders&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon XML-ile: TODO retsenseerime projekti WatchWinders&amp;lt;br&amp;gt;&lt;br /&gt;
BestInShow meeskonda retsenseerib &#039;&#039;&#039;Curry&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Meeskond:Curry#Meie_retsensioonid_BestInShow_meeskonnale link]&amp;lt;br&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/AssistDesq Meeskond: AssistDesq]===&lt;br /&gt;
Liikmed: &lt;br /&gt;
* Karen Grigorjan&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/WatchWinders Meeskond: WatchWinders]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Toomas Juhkov&lt;br /&gt;
* Kunnar Kukk&lt;br /&gt;
* Tiit Kuuskmäe&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/WatchWinders#Link_klientrakendusele_ja_API-le Link klientrakendusele ja API-le]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://drive.google.com/file/d/1OtzOCPiWixsrbHcGCcdHgXIgz3_fsC7h/view Retsensioon grupi &amp;quot;Kuldne Loojang&amp;quot; veebiteenusele]&lt;br /&gt;
&lt;br /&gt;
===[[ Kuldneloojang | Meeskond: Kuldne loojang]]===&lt;br /&gt;
&#039;&#039;&#039;Liikmed&#039;&#039;&#039;:&lt;br /&gt;
* Andrus Seiman&lt;br /&gt;
* Marko Belzetski&lt;br /&gt;
* Priit Tiganik&lt;br /&gt;
* Kristjan Peterson (loobus)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode:&#039;&#039;&#039;&lt;br /&gt;
algselt üles laetud 02.06.2018, bugide parandusi lisatud 04.06.2018&lt;br /&gt;
* [https://www.dropbox.com/s/4h9bvq4k6388fmo/loojang.zip?dl=0 .zip fail rakendus ja klient koos] &lt;br /&gt;
* [https://bitbucket.org/itcollegeprojects/loojang-app veebirakenduse repo] &lt;br /&gt;
* [https://bitbucket.org/itcollegeprojects/loojang-client klientrakenduse repo] &lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Kuldneloojang#XML_.C3.BClesande_kirjeldus XML:  link meie Wiki lehele]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie tehtud retsensioonid:&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Kuldneloojang#Veebiteenusele veebiteenuse retsensioon meeskonna Curry tööle.]&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Kuldneloojang#Klientrakendusele klientrakenduse retsensioon meeskonna Curry tööle.]&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Kuldneloojang#XML-ile XML retsensioon meeskonna Curry tööle.]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ophelia Meeskond: Ophelia]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Siim Kallari&lt;br /&gt;
* Andres Kepler (loobus)&lt;br /&gt;
* Jorma Rebane&lt;br /&gt;
&lt;br /&gt;
[https://www.dropbox.com/s/v63fkbjnd5umqqm/Ophelia.zip?dl=0 Lõpptoote link]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Ophelia#L.C3.B5pptoote_kasutusjuhend Kasutusjuhend(Kaasas ka lõpptootes)]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Ophelia#XML_.C3.9Clesanne XML Ülesanne]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Ophelia#Klientrakenduse_retsensioon_meeskonnale_MealPlannerSolo Klientrakenduse retsensioon meeskonnale MealPlannerSolo]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/SharpRestoVRII Meeskond: SharpRestoVRII]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Andres Aava (lahkunud liige)&lt;br /&gt;
* Henri Annilo&lt;br /&gt;
* Jaan Koolmeister&lt;br /&gt;
* Lauri Üksti&lt;br /&gt;
&lt;br /&gt;
Lähtekood: [http://enos.itcollege.ee/~luksti/CSharp/CSharpResto.zip CSharpResto]&lt;br /&gt;
&lt;br /&gt;
XML: [https://wiki.itcollege.ee/index.php/SharpRestoVRII#XML Wikis]&lt;br /&gt;
&lt;br /&gt;
Retsensioonid: [https://wiki.itcollege.ee/index.php/SharpRestoVRII#Retsensioon_meeskonnale_Hammas Meeskonnale Hammas]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/BeerPressure Meeskond: BeerPressure]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sigrid Aasma&lt;br /&gt;
* Evelin Jõgi&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Marko Nõu&lt;br /&gt;
&#039;&#039;&#039;Projekt:&#039;&#039;&#039; [https://github.com/sikumiku/TaisKohtApi TaisKohtApi]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode:&#039;&#039;&#039; [https://github.com/sikumiku/TaisKohtApi/archive/61438e187a1a972410c8a3bc6274d69489d00aa6.zip GitHub commit]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;XML:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/BeerPressure#XML.2FXSD.2FXSLT Beer Pressure XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud XML failide retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:MOT#XML_retsensioon_by_meeskond_BeerPressure: Team MOT retsensioon]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud veebiteenuse retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:MOT#Veebiteenuse_retsensensioon_by_meeskond_BeerPressure: Team MOT retsensioon]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud klientrakenduse retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:Kuldneloojang#Klientrakenduse_retsensensioon_by_meeskond_BeerPressure: Team Kuldneloojang retsensioon]&lt;br /&gt;
&lt;br /&gt;
===[[ Memorize | Meeskond: Memorize]]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Madis Uudam&lt;br /&gt;
* Olle Mikk&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/UCanDo Meeskond: UCanDo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mart Raus&lt;br /&gt;
* Ando Kiidron (loobus)&lt;br /&gt;
* Liina Saar&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode: &#039;&#039;&#039; [https://drive.google.com/drive/folders/1GIgiG5NvmnnKoQYmWWbfV_9Nhs2dezz8?usp=sharing UCanDo] &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Veebiteenuse retsensioon: &#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse retsensioon: &#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML retsensioon: &#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/MOT Meeskond: MOT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Merike Meizner&lt;br /&gt;
* Helen Oppar (loobus)&lt;br /&gt;
* Hardi Tiitus&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode: &#039;&#039;&#039;  http://enos.itcollege.ee/~mmeizner/MOT/ &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud veebiteenuse, klientrakenduse ja XML&#039;i retsensioon:&#039;&#039;&#039; [https://docs.google.com/document/d/16WL12wmvQ_TPcY_-4pG_kjwtstQoX5meEYcigE4Febw/edit?usp=sharing: Team Raavo V2]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond:_MealPlanner Meeskond: MealPlanner]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Triin Oja&lt;br /&gt;
*Rein Remsu&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond:Curry Meeskond: Curry]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode: &#039;&#039;&#039;  [http://enos.itcollege.ee/~pploom/VR2/ link] &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Meie retsensioon BestInShow meeskonnale: &#039;&#039;&#039;  [https://wiki.itcollege.ee/index.php/Meeskond:Curry#Meie_retsensioonid_BestInShow_meeskonnale link] &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML: &#039;&#039;&#039;  [https://wiki.itcollege.ee/index.php/Meeskond:Curry#XML_andmefail link] &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XSD: &#039;&#039;&#039;  [https://wiki.itcollege.ee/index.php/Meeskond:Curry#XSD_schema_fail link] &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XSLT1: &#039;&#039;&#039;  [https://wiki.itcollege.ee/index.php/Meeskond:Curry#XSLT_transformatsioon:_XML_-.3E_HTML link] &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XSLT2: &#039;&#039;&#039;  [https://wiki.itcollege.ee/index.php/Meeskond:Curry#XSLT_transformatsioon:_XML_-.3E_XML link] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Curry meeskonna veebiteenust, klientrakendust ja XML-i retsenseerib meeskond KuldneLoojang. Curryle kirjutatud retsensioonid [https://wiki.itcollege.ee/index.php/Kuldneloojang#Meie_tehtud_retsensioonid asuvad siin: link]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Hammas Meeskond: Hammas]===&lt;br /&gt;
&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sten Lunden&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode:&#039;&#039;&#039; [https://ildtest.azurewebsites.net azure]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Projekt:&#039;&#039;&#039; [https://github.com/lundens/ild-core github]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Hammas#XML wiki]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Veebiteenuse retsensioon&#039;&#039;&#039; meeskonnale [https://wiki.itcollege.ee/index.php/Hammas#Veebiteenuse_retsensioon_meeskonnale_GoFood GoFood]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse retsensioon&#039;&#039;&#039; meeskonnale [https://wiki.itcollege.ee/index.php/Hammas#Klientrakenduse_retsensioon_meeskonnale_GoFood GoFood]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML retsensioon&#039;&#039;&#039; meeskonnale [https://wiki.itcollege.ee/index.php/Hammas#XMLi_retsensioon_meeskonnale_MealPlannerSolo MealPlannerSolo]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/LabLite Meeskond: LabLite]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Alex Kaska&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/AmateurBB Meeskond: AmateurBB]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Taavi Kivimaa&lt;br /&gt;
&#039;&#039;&#039;Veebiteenus:&#039;&#039;&#039; [https://github.com/Tafkinz/AmateurBB/tree/BB-1 GitHub]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Klientrakendus:&#039;&#039;&#039; [https://github.com/Tafkinz/frontend GitHub]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/AmateurBB wiki]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Veebiteenuse retsensioon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse retsensioon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML retsensioon&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/MealPlannerSolo Meeskond: MealPlannerSolo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Triin Oja&lt;br /&gt;
&#039;&#039;&#039;[https://wiki.itcollege.ee/index.php/MealPlannerSolo#XML_andmefail XML]&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[http://enos.itcollege.ee/~troja/VRII2018/ Veebiteenus ja klientrakendus]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/NutriCheck Meeskond: NutriCheck]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Artyom Likhachev&lt;br /&gt;
&#039;&#039;&#039;Project:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;[https://www.dropbox.com/s/irgev5w9ofifg5m/vr2_service-v3.zip?dl=0 Veebiteenus]&lt;br /&gt;
&amp;lt;br/&amp;gt;[https://www.dropbox.com/s/7kn1u6z2481ligm/WebClient.zip?dl=0 Klientrakendus]&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;XML:&#039;&#039;&#039; TODO&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Retsensioon:&#039;&#039;&#039; TODO&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=131600</id>
		<title>Meeskond:Curry</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=131600"/>
		<updated>2018-06-11T17:20:44Z</updated>

		<summary type="html">&lt;p&gt;Relken: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Liikmed=&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
=Analüüs=&lt;br /&gt;
==Projekti kirjeldus==&lt;br /&gt;
Curry näol on tegemist erinevate krüptorahade kauplemisplatvormiga, kus registreerunud kasutaja saab üles seada ostu- või müügitellimusi (edaspidi ordereid). Ostja määrab ära, millise maksimaalse hinna eest on nõus ühte krüptoraha valuutat teise eest ostma ning ka ostukoguse. Müüa seevastu ütleb, millise hinnaga soovib ühte valuutat teise vastu vahetada ja koguse. Süsteem viib automaatselt ostu-müügiorderid kokku ning kui hind on mõlemapoolselt sobilik, toimub tehing. Platvorm haldab ise kasutajakontol olevat rahakogust. Rakenduse peavaates on võimalik näha aktiivseid ordereid, kus müügiorderid reastatakse hinna järgi kasvavalt, ostuorderid kahanevalt. Projekti mahu hulka ei kuulu krüptovaluutade sisse- ja väljakande funktsionaalsus.&lt;br /&gt;
&lt;br /&gt;
===Andmemudeli skeem:===&lt;br /&gt;
[[File:Curry.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Üldised nõuded:==&lt;br /&gt;
* Veebiteenuse andmevahetus toimub JSON formaadis.&lt;br /&gt;
* Klientrakendus töötab kõikides enamlevinud veebibrauserites.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Must-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Kasutaja saab endale registreerimisega konto luua.&lt;br /&gt;
* Kasutaja saab enda andmeid (nimi, email, jne) muuta.&lt;br /&gt;
* Süsteemis on kindlaks määratud kindlad valuutapaarid, millede vahel kaubelda saab. Minimaalselt 1 valuutapaar ehk 2 erinevat valuutat.&lt;br /&gt;
* Kasutaja saab sisestada limiit müügiordereid, kus märgib ära millist valuutat mille vastu müüb, ning määrab hinna ning koguse.&lt;br /&gt;
* Kasutaja saab sisestada limiit ostuordereid, kus märgib ära millist valuutat soovib osta mõne teise valuuta eest ning määrab maksimaalse ostuhinna ning koguse.&lt;br /&gt;
* Süsteem leiab ostu-müügi orderite vahel kokku sobivad orderid, mis hinna poolest rahuldavad mõlemaid osapooli ning toimub automaatselt tehing – orderid loetakse  kas osaliselt või täielikult täidetuks ning tehing kantakse tehingute nimekirja. Vastavatel osapooltel toimub ka kontoseisu muutus.&lt;br /&gt;
* Orderite täitmine võib toimuda ka mitmes osas, kus ühe osapoole valuuta kogus erineb teise osapoole orderil märgitud kogusest. Sel juhul vähendatakse ühe osapoole orderi kogust toimunud tehingu mahu võrra.&lt;br /&gt;
* Kasutaja saab tühistada enda poolt üles seatud ordereid.&lt;br /&gt;
* Kasutaja saab vaadata rahakonto seisu, kui palju erinevaid valuutasid arvel on.&lt;br /&gt;
* Kasutaja saab vaadata enda orderite ja tehingute ajalugu.&lt;br /&gt;
* Iga toimunud tehingu pealt võetakse ka % teenustasu.&lt;br /&gt;
* Orderi loomise eelnevalt kontrollitakse, kas kasutaja rahakontol piisavalt vabu vahendeid tehingu toimimiseks ning kuni tehingu toimumiseni on vastav kogus valuutat kontol broneeritud. Reaalselt arvestatakse maha peale tehingu lõppu.&lt;br /&gt;
* Admin saab määrata, milliste süsteemis olevate valuutade vahel saab kaubelda.&lt;br /&gt;
* Admin saab muuta teenustasu % väärtust.&lt;br /&gt;
* Admin saab lukustada kasutajate kontosid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Nice-to-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Valuutade sisse -ja väljakanded.&lt;br /&gt;
* Graafiline kasutajaliides hinnaliikumise ja teiste näitajate kuvamiseks.&lt;br /&gt;
* Peale limiitorderite ka teiste orderitüüpide toetamine.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Juhend lõpptoote kasutamiseks:&#039;&#039;&#039;==&lt;br /&gt;
* Proovimaks administraator õigustes kasutaja funktsionaalsust, logi sisse kasutajanimega &#039;adminuser&#039; ning parooliga &#039;Kala1.maja&#039;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XML andmefail&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;Countries xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;Capitals&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Tallinn&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;100&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital2&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Riia&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;101&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital3&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Vilnius&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;102&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital4&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Helsingi&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;103&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Stockholm&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;104&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital6&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Kopenhaagen&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;105&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
  &amp;lt;/Capitals&amp;gt;&lt;br /&gt;
  &amp;lt;Towns&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Tartu&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1000&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town2&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Tampere&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1100&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town3&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Jelgava&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1300&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town4&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Kaunas&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1500&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;   &lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Norrköping&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1700&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town6&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Aalborg&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1700&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town7&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Pärnu&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1800&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town8&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Valmiera&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1900&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town9&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Malmö&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1400&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town10&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Linköping&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1200&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
  &amp;lt;/Towns&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Eesti&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town1&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town7&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country2&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country3&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Soome&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital4&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town2&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country3&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Läti&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital2&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town3&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town8&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country4&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country4&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Leedu&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital3&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town4&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country3&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country5&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Rootsi&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital5&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town9&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town10&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country6&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country2&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country6&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Taani&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town6&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
&amp;lt;/Countries&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XSD schema fail&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&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:simpleType name=&amp;quot;TypeName&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:restriction base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xs:minLength value=&amp;quot;3&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;
  &amp;lt;xs:simpleType name=&amp;quot;TypeArea&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:restriction base=&amp;quot;xs:integer&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xs:minInclusive value=&amp;quot;100&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;Countries&amp;quot;&amp;gt;&lt;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;Capitals&amp;quot;&amp;gt;&lt;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;Capital&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element type=&amp;quot;TypeName&amp;quot; name=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element type =&amp;quot;TypeArea&amp;quot; name=&amp;quot;Area&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&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;Towns&amp;quot;&amp;gt;&lt;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;Town&amp;quot;&amp;gt;&lt;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;Name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;Founded&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&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 maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;Country&amp;quot;&amp;gt;&lt;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;Name&amp;quot; type=&amp;quot;TypeName&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;Capital&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;refid&amp;quot; type=&amp;quot;xs:IDREF&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:element name=&amp;quot;CountryTowns&amp;quot;&amp;gt;&lt;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;Town&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;refid&amp;quot; type=&amp;quot;xs:IDREF&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:unique name=&amp;quot;TownUnique &amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:selector xpath=&amp;quot;Town&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:unique&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;NeighbouringCountries&amp;quot;&amp;gt;&lt;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;NeighbouringCountry&amp;quot;&amp;gt;&lt;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;Country&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;refid&amp;quot; type=&amp;quot;xs:IDREF&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:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&amp;quot; /&amp;gt;         &lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
          &amp;lt;xs:key name=&amp;quot;PK_Capitals&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Capital&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:key&amp;gt;&lt;br /&gt;
          &amp;lt;xs:keyref name=&amp;quot;FK_CountryCapitals&amp;quot; refer=&amp;quot;PK_Capitals&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country/Capital&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:keyref&amp;gt;&lt;br /&gt;
          &amp;lt;xs:key name=&amp;quot;PK_Towns&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Towns/Town&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:key&amp;gt;&lt;br /&gt;
          &amp;lt;xs:keyref name=&amp;quot;FK_CountryTowns&amp;quot; refer=&amp;quot;PK_Towns&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country/CountryTowns/Town&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:keyref&amp;gt;&lt;br /&gt;
          &amp;lt;xs:key name=&amp;quot;PK_Countries&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:key&amp;gt;&lt;br /&gt;
          &amp;lt;xs:keyref name=&amp;quot;FK_Countries&amp;quot; refer=&amp;quot;PK_Countries&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country/NeighbouringCountries/NeighbouringCountry/Country&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:keyref&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;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XSLT transformatsioon: XML -&amp;gt; HTML&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;capital&amp;quot; match=&amp;quot;Countries/Capitals/Capital&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;town&amp;quot; match=&amp;quot;Countries/Towns/Town&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;country&amp;quot; match=&amp;quot;Countries/Country&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;text-align:center&amp;quot;&amp;gt;Countries&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#9acd32&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Country name&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Capital&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Towns&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Neighbouring countries&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:for-each select=&amp;quot;Countries/Country&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tr&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;key(&#039;capital&#039;, Capital/@refid)&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;key(&#039;town&#039;, CountryTowns/Town/@refid)&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;position() != last()&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;key(&#039;country&#039;, NeighbouringCountries/NeighbouringCountry/Country/@refid)&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;position() != last()&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XSLT transformatsioon: XML -&amp;gt; XML&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;town&amp;quot; match=&amp;quot;Countries/Towns/Town&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;country&amp;quot; match=&amp;quot;Countries/Country&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Countries&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each select=&amp;quot;Countries/Country&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;Towns&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;key(&#039;town&#039;, CountryTowns/Town/@refid)&amp;quot;&amp;gt;          &lt;br /&gt;
            &amp;lt;Town&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:attribute name=&amp;quot;Founded&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;Founded&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/Town&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;      &lt;br /&gt;
        &amp;lt;/Towns&amp;gt;&lt;br /&gt;
        &amp;lt;NumberOfNeighbouringCountries&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;count(key(&#039;country&#039;, NeighbouringCountries/NeighbouringCountry/Country/@refid))&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/NumberOfNeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
    &amp;lt;/Countries&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Meie retsensioonid BestInShow meeskonnale=&lt;br /&gt;
&lt;br /&gt;
==Veebiteenus==&lt;br /&gt;
* Meeskonna BestInShow veebiteenused on loodud REST teenustena, toetamaks edaspidise rakenduse andmevahetust. Probleeme käivitamisel ei ole – Wiki lehel on äratoodud käivitamisjuhised. Teenused on ilusasti dokumenteeritud, ära on kirjeldatud iga teenuse juures tema võimalikud tagastusväärtused HTTP staatuskoodidena, olgu see näiteks et vastavad andmed leiti või ei leitud või oli hoopis tegemist vigase päringuga. Ilusasti töötab teenuste kirjeldamiseks mõeldud raamistik Swagger. Kogu veebiteenuse projekt on jaotatud loogilisteks alamprojektideks, kus eraldi on Business logic, Data Access layer, Domain. Kasutatud on kenasti kursuse käigus õpitud arhitektuurimustrit, kus on eraldi Service klassid, DTO-d, Factory-d, Repository-d, UnitOfWork jne. Teenuste kontrollerid on üldjuhul ’puhtad’, äriloogikat neisse kirjeldatud ei ole, vaid on edasi delegeeritud Service ja sealt edasi teistesse komponentidesse. Nii DTO-de kui ka Domain klassides on kasutatud andmeväljade juures annotatsioone, piiramaks andmebaasis väljade ning ka teenuse poolel sissetulevate andmete suurusi.&lt;br /&gt;
* Probleemina võib välja tuua, et igaüks võib luua endale ’admin’ kontot – kasutaja roll on kirjutatud DTO juurde ning saab vabalt postitada uue kasutaja admin õigustega. Rollide haldamiseks oleks soovitav kasutada eraldi klassi RoleManager. Autentimistokeni loomise käigus isegi kirjutatakse kasutaja rollid tema sisse, kuid kuna neid tegelikkuses identity raamistiku mõistes ei ole, ei kirjutata ka sinna midagi. Selle kasutamine võimaldaks lihtsamini piirata, mis teenused mis õigustele kättesaadavad on. Küsimust tekitab SecurityControlleris Logout meetod, mis ei tee midagi kuid mille poole ka klientrakenduses pöördutakse. Kuna tokenipoolne autentimine on olemuselt stateless, ei saa vähemalt sedasi serveripoolelt välja logida. See on mõeldud cookie hävitamiseks, mida aga ka eelnevalt loodud ei ole.&lt;br /&gt;
Norida saab sellega, et projektis läbivalt ei ole kasutatud Enum tüüpi väärtuseid, vaid on kirjutatud vajalikes kohtades väärtused lahtise stringina (!user.Role.Equals(&amp;quot;admin&amp;quot;)) või hoopis mõni asi numbrina (user.Status == 1). Üheltpoolt see võib põhjustada vigu, teiseltpoolt teeb teisel arendajal arusaamise keerulisemaks.&lt;br /&gt;
* Boonusena tooks välja, et kõik API poolsed requestid logitakse andmebaasi, kus on kirjas, mis teenuse poole pöörduti, milliselt aadressilt, kellaaeg ja kasutaja või selle puudumisel anonüümne isik. Selleks kasutatakse ActionFilter klassi, mis lisatakse ServiceFilter atribuudina igale kontrollerile juurde.&lt;br /&gt;
Kokkuvõttes on tehtud hea ja tubli töö, on näha nii projektist endast kui ka Wiki lehelt, et on asjaga pidevalt ja süsteemselt tegeletud ning vajalikud teadmised REST veebiteenuste loomiseks on omandatud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Klientrakendus==&lt;br /&gt;
* Meeskond BestInShow on loonud klientrakenduse tõukoerte registri kohta, kus kasutatakse ära enda poolt loodud REST veebiteenuseid. Rakendus on loodud Angular raamistikus ning kasutatud on selle viimast versiooni 6.0. Juba ainuüksi Angulari valimine on julge väljakutse, arvestades et käesoleva kursuse raames pidi selle osa täielikult iseseisvalt omandama.&lt;br /&gt;
* Meeskonna Wiki lehel oli olemas kena õpetus, kuidas rakendus käima panna, veebiteenus ja klientrakendus töötavad erinevates projektides. Kaasa oli pandud rakenduse toimimiseks vajalikud algandmed sql-failis, mis tuli pärast andmebaasi loomist sisse laadida. Mingeid tõrkeid käivitamisel ei esinenud. Olles esilehele jõudnud, pakutakse võimalust kas sisse logida või uus kasutaja luua. Selgub et, sisselogimata kasutaja suurt midagi muud teha ei saagi. Analüüsi funktsionaalsetes nõuetes on kirjeldatud, et registreerimata kasutaja saab sirvida kenneleid, tõugusid, pesakond ja koeri. Rakenduse juhendiga on kaasa pandud mõned valmiskasutajad koos vajalike paroolidega. Uue kasutaja registreerimine toimib hästi, kõikide väljade täidetust valideeritakse ning antakase teada probleemist, kui ei ole sobilikult täidetud või kui juba sama kasutajanimi esineb. Seejuures on hästi kasutatud nii registreerimisvormil kui ka muudes kohtades edukalt Bootstrap võimalusi. Sisseloginuna kuvatakse teade, et mul ei ole veel koeri kuid puudub ka nupp koerte lisamiseks. Koeri saab lisada, kui kasutada juba loodud kasutajakontot ’breeder’ rollis. Ei oska öelda, kas see peakski nii olema, kuid võiks eeldada, et tavaõigustes kasutaja peaks saama ka omale koera registreerida. Koera detailvaate kuvamise funktsionaalsus on jäänud realiseerimata (selgub koodile peale vaadates), toimib olemasoleva koera andmete muutmine. Loodud on võimalus oma koera teisele omanikule anda, selleks avaneb eraldi modal aken, kuhu tuleb sisse kirjutada uus omaniku kasutajanimi. Siinkohal on probleem, et peab teadma täpset teist kasutajanime, võiks olla näiteks dropdown menüüst valitav võimalike kasutajate hulga seast. Kui sisestada suvaline nimi, ei anta teada, et sellist kasutajanime ei eksisteerida, konsoolist olevast errorist saab aru et ei õnnestunud. ’Breeder’ ja ’Owner’ rolliga saab esitada taotluse uue kenneli loomiseks, kus saab määrata, mis tõugu koeri on võimalik seal kasvatada. Need taotlused jõuavad admin õigustes kasutaja töölauale ning kui taotlus saab aktsepteeritud, jõuab vastav kennel ka kennelite nimekirja. Tundub, et edasine funktsionaalsus kennelite osas on jäänud realiseerimata, vähemalt ei paista kusagilt välja et midagi nende kennelitega teha saaks, sinna koeri paigutada vms.&lt;br /&gt;
* Kõige häirivam probleem, on et brauseri refreshimisel läheb sisse loginud kasutaja jaoks rakendus katki – ’currentUser’ muutuja ei saa enam laadimisel väärtustamisest ning kui teistes komponentides viidatakse sellele muutujale, ei saada sealt enam väärtust kätte. See ’currentUser’ võiks olla Observable tüüpi ning komponenti laadimisel võiks ta olla väärtustatud olemasoleva localStorages talletatud tokeni seest dekodeerimisel väljaloetud kasutajanime järgi.&lt;br /&gt;
* Hea külg on, et rakenduse ülesehitusel on kasutatud loogilist komponentideks ja alamkomponentideks jagamist ning head arendusmustrit, kus on eraldi service-klassid API teenuste poole pöördumiseks, eraldi on rakenduses kasutatavad mudelid. Stiilifailid eraldi css failidena. Selline struktuuri järgimine teeb koodi lugemise ja vajaliku leidmise lihtsaks. Sisseloginud kasutaja jaoks, kel on olemas vastav token, pannakse interceptor meetodi abil iga päringuga päringu headeris automaatselt kaasa tema token. Implementeeritud on ’AuthGuard’ meetod, ehk piiratakse millised rakenduses olevad leheküljed on mõeldud vaatamiseks ainult sisseloginud kasutajale ehk neile kes omavad tokenit.&lt;br /&gt;
Kokkuvõttes on mõningatele puudustele vaatamata tehtud hea ning kiiduväärt töö.&lt;br /&gt;
&lt;br /&gt;
==XML osa==&lt;br /&gt;
* Meeskonna BestInShow XML failis olevate andmete koosseis tuleneb nende projekttööst, ehk on tegemist rahvusvahelise tõukoerte näitusega, kus on mitmes kihis ära näidatud erinevate tõugude esindatus ning välja on toodud igat tõugu esindavad koerad ning ja omaniku andmed ning riiklik päritolu. Loogilise dimensioone on rohkem kui 4 ehk see arvuline nõue on täidetud. Kasutatud on mitmes kohaks lisaks atribuuttunnuseid. Mitmed nimi-tüüpi väärtusi saab esitada on mitmekeelselt, kus vastava elemendi keele määratlemine käib atribuuttunnuse abil.&lt;br /&gt;
XSD schemafail ja XML ise on omavahel kooskõlas, XSD-s on kasutatud kenasti piiravaid kriteeriume, et ühel objektil ei saa olla näiteks rohkem kui 2 nime ning on märgitud, millised atribuudid millisel objektil olema peavad.&lt;br /&gt;
* Realiseeritud on 2 on XSLT transformatsiooni, üks teeb HTML vormingus tabeli, teine teise XML struktuuriga faili. HTML transformatsioonis on esitatud erinevate võistlusklasside võitjad, tegemist väga ilusalt vormindatud tabeliga. Kasutatud on andmete kokkusaamiseks mitmeid if-tingimusi ning tsükleid, loendatud on igas võistlusklassis olevate osalejate arv ning välja toodud selle võitja. Teises teiseks XML transformatsioonis filtreeritakse välja ainult ’Best in Show’ ja ’Best of Breed’ võitnud koerad, tuuakse välja koeraomanik.&lt;br /&gt;
Kokkuvõttes on XML osa hästi tehtud ning paraja keerukusega.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Tegevuste logi:=&lt;br /&gt;
&#039;&#039;&#039;10.02.2018&#039;&#039;&#039; -&lt;br /&gt;
Meeskonna loomine, idee paikapanemine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;24.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Andmemudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;26.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Analüüsi ja funktsionaalsuse kirjutamine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;31.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Wiki lehe loomine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;02.04.2018&#039;&#039;&#039; -&lt;br /&gt;
Koodi kirjutamise alustamine, Giti repo loomine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;14.05.2018&#039;&#039;&#039; -&lt;br /&gt;
Angular klientrakenduse alustamine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;08.06.2018&#039;&#039;&#039; -&lt;br /&gt;
Lõpptoode valmis&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;09.06.2018&#039;&#039;&#039; -&lt;br /&gt;
XML töö valmis&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=131599</id>
		<title>Meeskond:Curry</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=131599"/>
		<updated>2018-06-11T17:20:03Z</updated>

		<summary type="html">&lt;p&gt;Relken: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Liikmed=&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
=Analüüs=&lt;br /&gt;
==Projekti kirjeldus==&lt;br /&gt;
Curry näol on tegemist erinevate krüptorahade kauplemisplatvormiga, kus registreerunud kasutaja saab üles seada ostu- või müügitellimusi (edaspidi ordereid). Ostja määrab ära, millise maksimaalse hinna eest on nõus ühte krüptoraha valuutat teise eest ostma ning ka ostukoguse. Müüa seevastu ütleb, millise hinnaga soovib ühte valuutat teise vastu vahetada ja koguse. Süsteem viib automaatselt ostu-müügiorderid kokku ning kui hind on mõlemapoolselt sobilik, toimub tehing. Platvorm haldab ise kasutajakontol olevat rahakogust. Rakenduse peavaates on võimalik näha aktiivseid ordereid, kus müügiorderid reastatakse hinna järgi kasvavalt, ostuorderid kahanevalt. Projekti mahu hulka ei kuulu krüptovaluutade sisse- ja väljakande funktsionaalsus.&lt;br /&gt;
&lt;br /&gt;
===Andmemudeli skeem:===&lt;br /&gt;
[[File:Curry.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Üldised nõuded:==&lt;br /&gt;
* Veebiteenuse andmevahetus toimub JSON formaadis.&lt;br /&gt;
* Klientrakendus töötab kõikides enamlevinud veebibrauserites.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Must-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Kasutaja saab endale registreerimisega konto luua.&lt;br /&gt;
* Kasutaja saab enda andmeid (nimi, email, jne) muuta.&lt;br /&gt;
* Süsteemis on kindlaks määratud kindlad valuutapaarid, millede vahel kaubelda saab. Minimaalselt 1 valuutapaar ehk 2 erinevat valuutat.&lt;br /&gt;
* Kasutaja saab sisestada limiit müügiordereid, kus märgib ära millist valuutat mille vastu müüb, ning määrab hinna ning koguse.&lt;br /&gt;
* Kasutaja saab sisestada limiit ostuordereid, kus märgib ära millist valuutat soovib osta mõne teise valuuta eest ning määrab maksimaalse ostuhinna ning koguse.&lt;br /&gt;
* Süsteem leiab ostu-müügi orderite vahel kokku sobivad orderid, mis hinna poolest rahuldavad mõlemaid osapooli ning toimub automaatselt tehing – orderid loetakse  kas osaliselt või täielikult täidetuks ning tehing kantakse tehingute nimekirja. Vastavatel osapooltel toimub ka kontoseisu muutus.&lt;br /&gt;
* Orderite täitmine võib toimuda ka mitmes osas, kus ühe osapoole valuuta kogus erineb teise osapoole orderil märgitud kogusest. Sel juhul vähendatakse ühe osapoole orderi kogust toimunud tehingu mahu võrra.&lt;br /&gt;
* Kasutaja saab tühistada enda poolt üles seatud ordereid.&lt;br /&gt;
* Kasutaja saab vaadata rahakonto seisu, kui palju erinevaid valuutasid arvel on.&lt;br /&gt;
* Kasutaja saab vaadata enda orderite ja tehingute ajalugu.&lt;br /&gt;
* Iga toimunud tehingu pealt võetakse ka % teenustasu.&lt;br /&gt;
* Orderi loomise eelnevalt kontrollitakse, kas kasutaja rahakontol piisavalt vabu vahendeid tehingu toimimiseks ning kuni tehingu toimumiseni on vastav kogus valuutat kontol broneeritud. Reaalselt arvestatakse maha peale tehingu lõppu.&lt;br /&gt;
* Admin saab määrata, milliste süsteemis olevate valuutade vahel saab kaubelda.&lt;br /&gt;
* Admin saab muuta teenustasu % väärtust.&lt;br /&gt;
* Admin saab lukustada kasutajate kontosid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Nice-to-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Valuutade sisse -ja väljakanded.&lt;br /&gt;
* Graafiline kasutajaliides hinnaliikumise ja teiste näitajate kuvamiseks.&lt;br /&gt;
* Peale limiitorderite ka teiste orderitüüpide toetamine.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Juhend lõpptoote kasutamiseks:&#039;&#039;&#039;==&lt;br /&gt;
* Proovimaks administraator õigustes kasutaja funktsionaalsust, logi sisse kasutajanimega &#039;adminuser&#039; ning parooliga &#039;Kala1.maja&#039;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XML andmefail&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;Countries xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;Capitals&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Tallinn&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;100&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital2&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Riia&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;101&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital3&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Vilnius&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;102&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital4&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Helsingi&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;103&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Stockholm&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;104&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital6&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Kopenhaagen&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;105&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
  &amp;lt;/Capitals&amp;gt;&lt;br /&gt;
  &amp;lt;Towns&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Tartu&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1000&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town2&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Tampere&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1100&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town3&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Jelgava&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1300&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town4&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Kaunas&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1500&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;   &lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Norrköping&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1700&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town6&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Aalborg&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1700&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town7&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Pärnu&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1800&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town8&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Valmiera&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1900&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town9&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Malmö&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1400&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town10&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Linköping&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1200&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
  &amp;lt;/Towns&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Eesti&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town1&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town7&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country2&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country3&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Soome&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital4&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town2&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country3&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Läti&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital2&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town3&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town8&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country4&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country4&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Leedu&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital3&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town4&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country3&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country5&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Rootsi&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital5&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town9&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town10&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country6&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country2&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country6&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Taani&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town6&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
&amp;lt;/Countries&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XSD schema fail&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&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:simpleType name=&amp;quot;TypeName&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:restriction base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xs:minLength value=&amp;quot;3&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;
  &amp;lt;xs:simpleType name=&amp;quot;TypeArea&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:restriction base=&amp;quot;xs:integer&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xs:minInclusive value=&amp;quot;100&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;Countries&amp;quot;&amp;gt;&lt;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;Capitals&amp;quot;&amp;gt;&lt;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;Capital&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element type=&amp;quot;TypeName&amp;quot; name=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element type =&amp;quot;TypeArea&amp;quot; name=&amp;quot;Area&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&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;Towns&amp;quot;&amp;gt;&lt;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;Town&amp;quot;&amp;gt;&lt;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;Name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;Founded&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&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 maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;Country&amp;quot;&amp;gt;&lt;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;Name&amp;quot; type=&amp;quot;TypeName&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;Capital&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;refid&amp;quot; type=&amp;quot;xs:IDREF&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:element name=&amp;quot;CountryTowns&amp;quot;&amp;gt;&lt;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;Town&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;refid&amp;quot; type=&amp;quot;xs:IDREF&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:unique name=&amp;quot;TownUnique &amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:selector xpath=&amp;quot;Town&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:unique&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;NeighbouringCountries&amp;quot;&amp;gt;&lt;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;NeighbouringCountry&amp;quot;&amp;gt;&lt;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;Country&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;refid&amp;quot; type=&amp;quot;xs:IDREF&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:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&amp;quot; /&amp;gt;         &lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
          &amp;lt;xs:key name=&amp;quot;PK_Capitals&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Capital&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:key&amp;gt;&lt;br /&gt;
          &amp;lt;xs:keyref name=&amp;quot;FK_CountryCapitals&amp;quot; refer=&amp;quot;PK_Capitals&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country/Capital&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:keyref&amp;gt;&lt;br /&gt;
          &amp;lt;xs:key name=&amp;quot;PK_Towns&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Towns/Town&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:key&amp;gt;&lt;br /&gt;
          &amp;lt;xs:keyref name=&amp;quot;FK_CountryTowns&amp;quot; refer=&amp;quot;PK_Towns&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country/CountryTowns/Town&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:keyref&amp;gt;&lt;br /&gt;
          &amp;lt;xs:key name=&amp;quot;PK_Countries&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:key&amp;gt;&lt;br /&gt;
          &amp;lt;xs:keyref name=&amp;quot;FK_Countries&amp;quot; refer=&amp;quot;PK_Countries&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country/NeighbouringCountries/NeighbouringCountry/Country&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:keyref&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;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XSLT transformatsioon: XML -&amp;gt; HTML&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;capital&amp;quot; match=&amp;quot;Countries/Capitals/Capital&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;town&amp;quot; match=&amp;quot;Countries/Towns/Town&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;country&amp;quot; match=&amp;quot;Countries/Country&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;text-align:center&amp;quot;&amp;gt;Countries&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#9acd32&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Country name&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Capital&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Towns&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Neighbouring countries&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:for-each select=&amp;quot;Countries/Country&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tr&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;key(&#039;capital&#039;, Capital/@refid)&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;key(&#039;town&#039;, CountryTowns/Town/@refid)&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;position() != last()&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;key(&#039;country&#039;, NeighbouringCountries/NeighbouringCountry/Country/@refid)&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;position() != last()&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XSLT transformatsioon: XML -&amp;gt; XML&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;town&amp;quot; match=&amp;quot;Countries/Towns/Town&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;country&amp;quot; match=&amp;quot;Countries/Country&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Countries&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each select=&amp;quot;Countries/Country&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;Towns&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;key(&#039;town&#039;, CountryTowns/Town/@refid)&amp;quot;&amp;gt;          &lt;br /&gt;
            &amp;lt;Town&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:attribute name=&amp;quot;Founded&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;Founded&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/Town&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;      &lt;br /&gt;
        &amp;lt;/Towns&amp;gt;&lt;br /&gt;
        &amp;lt;NumberOfNeighbouringCountries&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;count(key(&#039;country&#039;, NeighbouringCountries/NeighbouringCountry/Country/@refid))&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/NumberOfNeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
    &amp;lt;/Countries&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Meie retsensioonid BestInShow meeskonnale=&lt;br /&gt;
&lt;br /&gt;
==Veebiteenus==&lt;br /&gt;
* Meeskonna BestInShow veebiteenused on loodud REST teenustena, toetamaks edaspidise rakenduse andmevahetust. Probleeme käivitamisel ei ole – Wiki lehel on äratoodud käivitamisjuhised. Teenused on ilusasti dokumenteeritud, ära on kirjeldatud iga teenuse juures tema võimalikud tagastusväärtused HTTP staatuskoodidena, olgu see näiteks et vastavad andmed leiti või ei leitud või oli hoopis tegemist vigase päringuga. Ilusasti töötab teenuste kirjeldamiseks mõeldud raamistik Swagger. Kogu veebiteenuse projekt on jaotatud loogilisteks alamprojektideks, kus eraldi on Business logic, Data Access layer, Domain. Kasutatud on kenasti kursuse käigus õpitud arhitektuurimustrit, kus on eraldi Service klassid, DTO-d, Factory-d, Repository-d, UnitOfWork jne. Teenuste kontrollerid on üldjuhul ’puhtad’, äriloogikat neisse kirjeldatud ei ole, vaid on edasi delegeeritud Service ja sealt edasi teistesse komponentidesse. Nii DTO-de kui ka Domain klassides on kasutatud andmeväljade juures annotatsioone, piiramaks andmebaasis väljade ning ka teenuse poolel sissetulevate andmete suurusi.&lt;br /&gt;
* Probleemina võib välja tuua, et igaüks võib luua endale ’admin’ kontot – kasutaja roll on kirjutatud DTO juurde ning saab vabalt postitada uue kasutaja admin õigustega. Rollide haldamiseks oleks soovitav kasutada eraldi klassi RoleManager. Autentimistokeni loomise käigus isegi kirjutatakse kasutaja rollid tema sisse, kuid kuna neid tegelikkuses identity raamistiku mõistes ei ole, ei kirjutata ka sinna midagi. Selle kasutamine võimaldaks lihtsamini piirata, mis teenused mis õigustele kättesaadavad on. Küsimust tekitab SecurityControlleris Logout meetod, mis ei tee midagi kuid mille poole ka klientrakenduses pöördutakse. Kuna tokenipoolne autentimine on olemuselt stateless, ei saa vähemalt sedasi serveripoolelt välja logida. See on mõeldud cookie hävitamiseks, mida aga ka eelnevalt loodud ei ole.&lt;br /&gt;
Norida saab sellega, et projektis läbivalt ei ole kasutatud Enum tüüpi väärtuseid, vaid on kirjutatud vajalikes kohtades väärtused lahtise stringina (!user.Role.Equals(&amp;quot;admin&amp;quot;)) või hoopis mõni asi numbrina (user.Status == 1). Üheltpoolt see võib põhjustada vigu, teiseltpoolt teeb teisel arendajal arusaamise keerulisemaks.&lt;br /&gt;
* Boonusena tooks välja, et kõik API poolsed requestid logitakse andmebaasi, kus on kirjas, mis teenuse poole pöörduti, milliselt aadressilt, kellaaeg ja kasutaja või selle puudumisel anonüümne isik. Selleks kasutatakse ActionFilter klassi, mis lisatakse ServiceFilter atribuudina igale kontrollerile juurde.&lt;br /&gt;
Kokkuvõttes on tehtud hea ja tubli töö, on näha nii projektist endast kui ka Wiki lehelt, et on asjaga pidevalt ja süsteemselt tegeletud ning vajalikud teadmised REST veebiteenuste loomiseks on omandatud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Klientrakendus==&lt;br /&gt;
* Meeskond BestInShow on loonud klientrakenduse tõukoerte registri kohta, kus kasutatakse ära enda poolt loodud REST veebiteenuseid. Rakendus on loodud Angular raamistikus ning kasutatud on selle viimast versiooni 6.0. Juba ainuüksi Angulari valimine on julge väljakutse, arvestades et käesoleva kursuse raames pidi selle osa täielikult iseseisvalt omandama.&lt;br /&gt;
* Meeskonna Wiki lehel oli olemas kena õpetus, kuidas rakendus käima panna, veebiteenus ja klientrakendus töötavad erinevates projektides. Kaasa oli pandud rakenduse toimimiseks vajalikud algandmed sql-failis, mis tuli pärast andmebaasi loomist sisse laadida. Mingeid tõrkeid käivitamisel ei esinenud. Olles esilehele jõudnud, pakutakse võimalust kas sisse logida või uus kasutaja luua. Selgub et, sisselogimata kasutaja suurt midagi muud teha ei saagi. Analüüsi funktsionaalsetes nõuetes on kirjeldatud, et registreerimata kasutaja saab sirvida kenneleid, tõugusid, pesakond ja koeri. Rakenduse juhendiga on kaasa pandud mõned valmiskasutajad koos vajalike paroolidega. Uue kasutaja registreerimine toimib hästi, kõikide väljade täidetust valideeritakse ning antakase teada probleemist, kui ei ole sobilikult täidetud või kui juba sama kasutajanimi esineb. Seejuures on hästi kasutatud nii registreerimisvormil kui ka muudes kohtades edukalt Bootstrap võimalusi. Sisseloginuna kuvatakse teade, et mul ei ole veel koeri kuid puudub ka nupp koerte lisamiseks. Koeri saab lisada, kui kasutada juba loodud kasutajakontot ’breeder’ rollis. Ei oska öelda, kas see peakski nii olema, kuid võiks eeldada, et tavaõigustes kasutaja peaks saama ka omale koera registreerida. Koera detailvaate kuvamise funktsionaalsus on jäänud realiseerimata (selgub koodile peale vaadates), toimib olemasoleva koera andmete muutmine. Loodud on võimalus oma koera teisele omanikule anda, selleks avaneb eraldi modal aken, kuhu tuleb sisse kirjutada uus omaniku kasutajanimi. Siinkohal on probleem, et peab teadma täpset teist kasutajanime, võiks olla näiteks dropdown menüüst valitav võimalike kasutajate hulga seast. Kui sisestada suvaline nimi, ei anta teada, et sellist kasutajanime ei eksisteerida, konsoolist olevast errorist saab aru et ei õnnestunud. ’Breeder’ ja ’Owner’ rolliga saab esitada taotluse uue kenneli loomiseks, kus saab määrata, mis tõugu koeri on võimalik seal kasvatada. Need taotlused jõuavad admin õigustes kasutaja töölauale ning kui taotlus saab aktsepteeritud, jõuab vastav kennel ka kennelite nimekirja. Tundub, et edasine funktsionaalsus kennelite osas on jäänud realiseerimata, vähemalt ei paista kusagilt välja et midagi nende kennelitega teha saaks, sinna koeri paigutada vms.&lt;br /&gt;
* Kõige häirivam probleem, on et brauseri refreshimisel läheb sisse loginud kasutaja jaoks rakendus katki – ’currentUser’ muutuja ei saa enam laadimisel väärtustamisest ning kui teistes komponentides viidatakse sellele muutujale, ei saada sealt enam väärtust kätte. See ’currentUser’ võiks olla Observable tüüpi ning komponenti laadimisel võiks ta olla väärtustatud olemasoleva localStorages talletatud tokeni seest dekodeerimisel väljaloetud kasutajanime järgi.&lt;br /&gt;
* Hea külg on, et rakenduse ülesehitusel on kasutatud loogilist komponentideks ja alamkomponentideks jagamist ning head arendusmustrit, kus on eraldi service-klassid API teenuste poole pöördumiseks, eraldi on rakenduses kasutatavad mudelid. Stiilifailid eraldi css failidena. Selline struktuuri järgimine teeb koodi lugemise ja vajaliku leidmise lihtsaks. Sisseloginud kasutaja jaoks, kel on olemas vastav token, pannakse interceptor meetodi abil iga päringuga päringu headeris automaatselt kaasa tema token. Implementeeritud on ’AuthGuard’ meetod, ehk piiratakse millised rakenduses olevad leheküljed on mõeldud vaatamiseks ainult sisseloginud kasutajale ehk neile kes omavad tokenit.&lt;br /&gt;
Kokkuvõttes on mõningatele puudustele vaatamata tehtud hea ning kiiduväärt töö.&lt;br /&gt;
&lt;br /&gt;
==XML osa==&lt;br /&gt;
* Meeskonna BestInShow XML failis olevate andmete koosseis tuleneb nende projekttööst, ehk on tegemist rahvusvahelise tõukoerte näitusega, kus on mitmes kihis ära näidatud erinevate tõugude esindatus ning välja on toodud igat tõugu esindavad koerad ning ja omaniku andmed ning riiklik päritolu. Loogilise dimensioone on rohkem kui 4 ehk see arvuline nõue on täidetud. Kasutatud on mitmes kohaks lisaks atribuuttunnuseid. Mitmed nimi-tüüpi väärtusi saab esitada on mitmekeelselt, kus vastava elemendi keele määratlemine käib atribuuttunnuse abil.&lt;br /&gt;
XSD schemafail ja XML ise on omavahel kooskõlas, XSD-s on kasutatud kenasti piiravaid kriteeriume, et ühel objektil ei saa olla näiteks rohkem kui 2 nime ning on märgitud, millised atribuudid millisel objektil olema peavad.&lt;br /&gt;
* Realiseeritud on 2 on XSLT transformatsiooni, üks teeb HTML vormingus tabeli, teine teise XML struktuuriga faili. HTML transformatsioonis on esitatud erinevate võistlusklasside võitjad, tegemist väga ilusalt vormindatud tabeliga. Kasutatud on andmete kokkusaamiseks mitmeid if-tingimusi ning tsükleid, loendatud on igas võistlusklassis olevate osalejate arv ning välja toodud selle võitja. Teises teiseks XML transformatsioonis filtreeritakse välja ainult ’Best in Show’ ja ’Best of Breed’ võitnud koerad, tuuakse välja koeraomanik.&lt;br /&gt;
Kokkuvõttes on XML osa hästi tehtud ning paraja keerukusega.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Tegevuste logi:==&lt;br /&gt;
&#039;&#039;&#039;10.02.2018&#039;&#039;&#039; -&lt;br /&gt;
Meeskonna loomine, idee paikapanemine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;24.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Andmemudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;26.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Analüüsi ja funktsionaalsuse kirjutamine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;31.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Wiki lehe loomine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;02.04.2018&#039;&#039;&#039; -&lt;br /&gt;
Koodi kirjutamise alustamine, Giti repo loomine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;14.05.2018&#039;&#039;&#039; -&lt;br /&gt;
Angular klientrakenduse alustamine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;08.06.2018&#039;&#039;&#039; -&lt;br /&gt;
Lõpptoode valmis&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;09.06.2018&#039;&#039;&#039; -&lt;br /&gt;
XML töö valmis&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=131555</id>
		<title>Meeskond:Curry</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=131555"/>
		<updated>2018-06-09T14:33:53Z</updated>

		<summary type="html">&lt;p&gt;Relken: /* XSLT transformatsioon: XML -&amp;gt; HTML */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Liikmed=&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
=Analüüs=&lt;br /&gt;
==Projekti kirjeldus==&lt;br /&gt;
Curry näol on tegemist erinevate krüptorahade kauplemisplatvormiga, kus registreerunud kasutaja saab üles seada ostu- või müügitellimusi (edaspidi ordereid). Ostja määrab ära, millise maksimaalse hinna eest on nõus ühte krüptoraha valuutat teise eest ostma ning ka ostukoguse. Müüa seevastu ütleb, millise hinnaga soovib ühte valuutat teise vastu vahetada ja koguse. Süsteem viib automaatselt ostu-müügiorderid kokku ning kui hind on mõlemapoolselt sobilik, toimub tehing. Platvorm haldab ise kasutajakontol olevat rahakogust. Rakenduse peavaates on võimalik näha aktiivseid ordereid, kus müügiorderid reastatakse hinna järgi kasvavalt, ostuorderid kahanevalt. Projekti mahu hulka ei kuulu krüptovaluutade sisse- ja väljakande funktsionaalsus.&lt;br /&gt;
&lt;br /&gt;
===Andmemudeli skeem:===&lt;br /&gt;
[[File:Curry.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Üldised nõuded:==&lt;br /&gt;
* Veebiteenuse andmevahetus toimub JSON formaadis.&lt;br /&gt;
* Klientrakendus töötab kõikides enamlevinud veebibrauserites.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Must-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Kasutaja saab endale registreerimisega konto luua.&lt;br /&gt;
* Kasutaja saab enda andmeid (nimi, email, jne) muuta.&lt;br /&gt;
* Süsteemis on kindlaks määratud kindlad valuutapaarid, millede vahel kaubelda saab. Minimaalselt 1 valuutapaar ehk 2 erinevat valuutat.&lt;br /&gt;
* Kasutaja saab sisestada limiit müügiordereid, kus märgib ära millist valuutat mille vastu müüb, ning määrab hinna ning koguse.&lt;br /&gt;
* Kasutaja saab sisestada limiit ostuordereid, kus märgib ära millist valuutat soovib osta mõne teise valuuta eest ning määrab maksimaalse ostuhinna ning koguse.&lt;br /&gt;
* Süsteem leiab ostu-müügi orderite vahel kokku sobivad orderid, mis hinna poolest rahuldavad mõlemaid osapooli ning toimub automaatselt tehing – orderid loetakse  kas osaliselt või täielikult täidetuks ning tehing kantakse tehingute nimekirja. Vastavatel osapooltel toimub ka kontoseisu muutus.&lt;br /&gt;
* Orderite täitmine võib toimuda ka mitmes osas, kus ühe osapoole valuuta kogus erineb teise osapoole orderil märgitud kogusest. Sel juhul vähendatakse ühe osapoole orderi kogust toimunud tehingu mahu võrra.&lt;br /&gt;
* Kasutaja saab tühistada enda poolt üles seatud ordereid.&lt;br /&gt;
* Kasutaja saab vaadata rahakonto seisu, kui palju erinevaid valuutasid arvel on.&lt;br /&gt;
* Kasutaja saab vaadata enda orderite ja tehingute ajalugu.&lt;br /&gt;
* Iga toimunud tehingu pealt võetakse ka % teenustasu.&lt;br /&gt;
* Orderi loomise eelnevalt kontrollitakse, kas kasutaja rahakontol piisavalt vabu vahendeid tehingu toimimiseks ning kuni tehingu toimumiseni on vastav kogus valuutat kontol broneeritud. Reaalselt arvestatakse maha peale tehingu lõppu.&lt;br /&gt;
* Admin saab määrata, milliste süsteemis olevate valuutade vahel saab kaubelda.&lt;br /&gt;
* Admin saab muuta teenustasu % väärtust.&lt;br /&gt;
* Admin saab lukustada kasutajate kontosid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Nice-to-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Valuutade sisse -ja väljakanded.&lt;br /&gt;
* Graafiline kasutajaliides hinnaliikumise ja teiste näitajate kuvamiseks.&lt;br /&gt;
* Peale limiitorderite ka teiste orderitüüpide toetamine.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Juhend lõpptoote kasutamiseks:&#039;&#039;&#039;==&lt;br /&gt;
* Proovimaks administraator õigustes kasutaja funktsionaalsust, logi sisse kasutajanimega &#039;adminuser&#039; ning parooliga &#039;Kala1.maja&#039;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XML andmefail&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;Countries xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;Capitals&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Tallinn&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;100&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital2&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Riia&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;101&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital3&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Vilnius&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;102&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital4&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Helsingi&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;103&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Stockholm&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;104&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital6&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Kopenhaagen&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;105&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
  &amp;lt;/Capitals&amp;gt;&lt;br /&gt;
  &amp;lt;Towns&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Tartu&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1000&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town2&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Tampere&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1100&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town3&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Jelgava&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1300&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town4&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Kaunas&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1500&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;   &lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Norrköping&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1700&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town6&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Aalborg&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1700&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town7&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Pärnu&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1800&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town8&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Valmiera&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1900&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town9&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Malmö&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1400&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town10&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Linköping&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1200&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
  &amp;lt;/Towns&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Eesti&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town1&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town7&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country2&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country3&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Soome&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital4&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town2&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country3&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Läti&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital2&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town3&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town8&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country4&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country4&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Leedu&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital3&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town4&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country3&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country5&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Rootsi&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital5&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town9&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town10&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country6&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country2&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country6&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Taani&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town6&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
&amp;lt;/Countries&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XSD schema fail&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&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:simpleType name=&amp;quot;TypeName&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:restriction base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xs:minLength value=&amp;quot;3&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;
  &amp;lt;xs:simpleType name=&amp;quot;TypeArea&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:restriction base=&amp;quot;xs:integer&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xs:minInclusive value=&amp;quot;100&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;Countries&amp;quot;&amp;gt;&lt;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;Capitals&amp;quot;&amp;gt;&lt;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;Capital&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element type=&amp;quot;TypeName&amp;quot; name=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element type =&amp;quot;TypeArea&amp;quot; name=&amp;quot;Area&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&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;Towns&amp;quot;&amp;gt;&lt;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;Town&amp;quot;&amp;gt;&lt;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;Name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;Founded&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&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 maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;Country&amp;quot;&amp;gt;&lt;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;Name&amp;quot; type=&amp;quot;TypeName&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;Capital&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;refid&amp;quot; type=&amp;quot;xs:IDREF&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:element name=&amp;quot;CountryTowns&amp;quot;&amp;gt;&lt;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;Town&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;refid&amp;quot; type=&amp;quot;xs:IDREF&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:unique name=&amp;quot;TownUnique &amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:selector xpath=&amp;quot;Town&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:unique&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;NeighbouringCountries&amp;quot;&amp;gt;&lt;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;NeighbouringCountry&amp;quot;&amp;gt;&lt;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;Country&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;refid&amp;quot; type=&amp;quot;xs:IDREF&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:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&amp;quot; /&amp;gt;         &lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
          &amp;lt;xs:key name=&amp;quot;PK_Capitals&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Capital&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:key&amp;gt;&lt;br /&gt;
          &amp;lt;xs:keyref name=&amp;quot;FK_CountryCapitals&amp;quot; refer=&amp;quot;PK_Capitals&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country/Capital&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:keyref&amp;gt;&lt;br /&gt;
          &amp;lt;xs:key name=&amp;quot;PK_Towns&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Towns/Town&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:key&amp;gt;&lt;br /&gt;
          &amp;lt;xs:keyref name=&amp;quot;FK_CountryTowns&amp;quot; refer=&amp;quot;PK_Towns&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country/CountryTowns/Town&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:keyref&amp;gt;&lt;br /&gt;
          &amp;lt;xs:key name=&amp;quot;PK_Countries&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:key&amp;gt;&lt;br /&gt;
          &amp;lt;xs:keyref name=&amp;quot;FK_Countries&amp;quot; refer=&amp;quot;PK_Countries&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country/NeighbouringCountries/NeighbouringCountry/Country&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:keyref&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;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XSLT transformatsioon: XML -&amp;gt; HTML&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;capital&amp;quot; match=&amp;quot;Countries/Capitals/Capital&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;town&amp;quot; match=&amp;quot;Countries/Towns/Town&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;country&amp;quot; match=&amp;quot;Countries/Country&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;text-align:center&amp;quot;&amp;gt;Countries&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#9acd32&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Country name&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Capital&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Towns&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Neighbouring countries&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:for-each select=&amp;quot;Countries/Country&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tr&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;key(&#039;capital&#039;, Capital/@refid)&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;key(&#039;town&#039;, CountryTowns/Town/@refid)&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;position() != last()&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;key(&#039;country&#039;, NeighbouringCountries/NeighbouringCountry/Country/@refid)&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;position() != last()&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XSLT transformatsioon: XML -&amp;gt; XML&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;town&amp;quot; match=&amp;quot;Countries/Towns/Town&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;country&amp;quot; match=&amp;quot;Countries/Country&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Countries&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each select=&amp;quot;Countries/Country&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;Towns&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;key(&#039;town&#039;, CountryTowns/Town/@refid)&amp;quot;&amp;gt;          &lt;br /&gt;
            &amp;lt;Town&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:attribute name=&amp;quot;Founded&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;Founded&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/Town&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;      &lt;br /&gt;
        &amp;lt;/Towns&amp;gt;&lt;br /&gt;
        &amp;lt;NumberOfNeighbouringCountries&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;count(key(&#039;country&#039;, NeighbouringCountries/NeighbouringCountry/Country/@refid))&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/NumberOfNeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
    &amp;lt;/Countries&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Tegevuste logi:==&lt;br /&gt;
&#039;&#039;&#039;10.02.2018&#039;&#039;&#039; -&lt;br /&gt;
Meeskonna loomine, idee paikapanemine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;24.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Andmemudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;26.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Analüüsi ja funktsionaalsuse kirjutamine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;31.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Wiki lehe loomine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;02.04.2018&#039;&#039;&#039; -&lt;br /&gt;
Koodi kirjutamise alustamine, Giti repo loomine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;14.05.2018&#039;&#039;&#039; -&lt;br /&gt;
Angular klientrakenduse alustamine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;08.06.2018&#039;&#039;&#039; -&lt;br /&gt;
Lõpptoode valmis&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;09.06.2018&#039;&#039;&#039; -&lt;br /&gt;
XML töö valmis&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=131554</id>
		<title>Meeskond:Curry</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=131554"/>
		<updated>2018-06-09T14:32:42Z</updated>

		<summary type="html">&lt;p&gt;Relken: /* XSLT transformatsioon: XML -&amp;gt; HTML */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Liikmed=&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
=Analüüs=&lt;br /&gt;
==Projekti kirjeldus==&lt;br /&gt;
Curry näol on tegemist erinevate krüptorahade kauplemisplatvormiga, kus registreerunud kasutaja saab üles seada ostu- või müügitellimusi (edaspidi ordereid). Ostja määrab ära, millise maksimaalse hinna eest on nõus ühte krüptoraha valuutat teise eest ostma ning ka ostukoguse. Müüa seevastu ütleb, millise hinnaga soovib ühte valuutat teise vastu vahetada ja koguse. Süsteem viib automaatselt ostu-müügiorderid kokku ning kui hind on mõlemapoolselt sobilik, toimub tehing. Platvorm haldab ise kasutajakontol olevat rahakogust. Rakenduse peavaates on võimalik näha aktiivseid ordereid, kus müügiorderid reastatakse hinna järgi kasvavalt, ostuorderid kahanevalt. Projekti mahu hulka ei kuulu krüptovaluutade sisse- ja väljakande funktsionaalsus.&lt;br /&gt;
&lt;br /&gt;
===Andmemudeli skeem:===&lt;br /&gt;
[[File:Curry.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Üldised nõuded:==&lt;br /&gt;
* Veebiteenuse andmevahetus toimub JSON formaadis.&lt;br /&gt;
* Klientrakendus töötab kõikides enamlevinud veebibrauserites.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Must-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Kasutaja saab endale registreerimisega konto luua.&lt;br /&gt;
* Kasutaja saab enda andmeid (nimi, email, jne) muuta.&lt;br /&gt;
* Süsteemis on kindlaks määratud kindlad valuutapaarid, millede vahel kaubelda saab. Minimaalselt 1 valuutapaar ehk 2 erinevat valuutat.&lt;br /&gt;
* Kasutaja saab sisestada limiit müügiordereid, kus märgib ära millist valuutat mille vastu müüb, ning määrab hinna ning koguse.&lt;br /&gt;
* Kasutaja saab sisestada limiit ostuordereid, kus märgib ära millist valuutat soovib osta mõne teise valuuta eest ning määrab maksimaalse ostuhinna ning koguse.&lt;br /&gt;
* Süsteem leiab ostu-müügi orderite vahel kokku sobivad orderid, mis hinna poolest rahuldavad mõlemaid osapooli ning toimub automaatselt tehing – orderid loetakse  kas osaliselt või täielikult täidetuks ning tehing kantakse tehingute nimekirja. Vastavatel osapooltel toimub ka kontoseisu muutus.&lt;br /&gt;
* Orderite täitmine võib toimuda ka mitmes osas, kus ühe osapoole valuuta kogus erineb teise osapoole orderil märgitud kogusest. Sel juhul vähendatakse ühe osapoole orderi kogust toimunud tehingu mahu võrra.&lt;br /&gt;
* Kasutaja saab tühistada enda poolt üles seatud ordereid.&lt;br /&gt;
* Kasutaja saab vaadata rahakonto seisu, kui palju erinevaid valuutasid arvel on.&lt;br /&gt;
* Kasutaja saab vaadata enda orderite ja tehingute ajalugu.&lt;br /&gt;
* Iga toimunud tehingu pealt võetakse ka % teenustasu.&lt;br /&gt;
* Orderi loomise eelnevalt kontrollitakse, kas kasutaja rahakontol piisavalt vabu vahendeid tehingu toimimiseks ning kuni tehingu toimumiseni on vastav kogus valuutat kontol broneeritud. Reaalselt arvestatakse maha peale tehingu lõppu.&lt;br /&gt;
* Admin saab määrata, milliste süsteemis olevate valuutade vahel saab kaubelda.&lt;br /&gt;
* Admin saab muuta teenustasu % väärtust.&lt;br /&gt;
* Admin saab lukustada kasutajate kontosid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Nice-to-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Valuutade sisse -ja väljakanded.&lt;br /&gt;
* Graafiline kasutajaliides hinnaliikumise ja teiste näitajate kuvamiseks.&lt;br /&gt;
* Peale limiitorderite ka teiste orderitüüpide toetamine.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Juhend lõpptoote kasutamiseks:&#039;&#039;&#039;==&lt;br /&gt;
* Proovimaks administraator õigustes kasutaja funktsionaalsust, logi sisse kasutajanimega &#039;adminuser&#039; ning parooliga &#039;Kala1.maja&#039;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XML andmefail&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;Countries xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;Capitals&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Tallinn&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;100&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital2&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Riia&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;101&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital3&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Vilnius&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;102&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital4&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Helsingi&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;103&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Stockholm&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;104&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital6&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Kopenhaagen&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;105&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
  &amp;lt;/Capitals&amp;gt;&lt;br /&gt;
  &amp;lt;Towns&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Tartu&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1000&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town2&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Tampere&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1100&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town3&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Jelgava&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1300&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town4&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Kaunas&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1500&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;   &lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Norrköping&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1700&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town6&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Aalborg&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1700&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town7&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Pärnu&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1800&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town8&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Valmiera&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1900&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town9&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Malmö&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1400&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town10&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Linköping&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1200&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
  &amp;lt;/Towns&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Eesti&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town1&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town7&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country2&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country3&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Soome&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital4&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town2&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country3&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Läti&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital2&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town3&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town8&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country4&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country4&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Leedu&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital3&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town4&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country3&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country5&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Rootsi&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital5&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town9&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town10&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country6&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country2&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country6&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Taani&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town6&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
&amp;lt;/Countries&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XSD schema fail&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&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:simpleType name=&amp;quot;TypeName&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:restriction base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xs:minLength value=&amp;quot;3&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;
  &amp;lt;xs:simpleType name=&amp;quot;TypeArea&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:restriction base=&amp;quot;xs:integer&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xs:minInclusive value=&amp;quot;100&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;Countries&amp;quot;&amp;gt;&lt;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;Capitals&amp;quot;&amp;gt;&lt;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;Capital&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element type=&amp;quot;TypeName&amp;quot; name=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element type =&amp;quot;TypeArea&amp;quot; name=&amp;quot;Area&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&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;Towns&amp;quot;&amp;gt;&lt;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;Town&amp;quot;&amp;gt;&lt;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;Name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;Founded&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&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 maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;Country&amp;quot;&amp;gt;&lt;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;Name&amp;quot; type=&amp;quot;TypeName&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;Capital&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;refid&amp;quot; type=&amp;quot;xs:IDREF&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:element name=&amp;quot;CountryTowns&amp;quot;&amp;gt;&lt;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;Town&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;refid&amp;quot; type=&amp;quot;xs:IDREF&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:unique name=&amp;quot;TownUnique &amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:selector xpath=&amp;quot;Town&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:unique&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;NeighbouringCountries&amp;quot;&amp;gt;&lt;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;NeighbouringCountry&amp;quot;&amp;gt;&lt;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;Country&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;refid&amp;quot; type=&amp;quot;xs:IDREF&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:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&amp;quot; /&amp;gt;         &lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
          &amp;lt;xs:key name=&amp;quot;PK_Capitals&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Capital&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:key&amp;gt;&lt;br /&gt;
          &amp;lt;xs:keyref name=&amp;quot;FK_CountryCapitals&amp;quot; refer=&amp;quot;PK_Capitals&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country/Capital&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:keyref&amp;gt;&lt;br /&gt;
          &amp;lt;xs:key name=&amp;quot;PK_Towns&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Towns/Town&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:key&amp;gt;&lt;br /&gt;
          &amp;lt;xs:keyref name=&amp;quot;FK_CountryTowns&amp;quot; refer=&amp;quot;PK_Towns&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country/CountryTowns/Town&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:keyref&amp;gt;&lt;br /&gt;
          &amp;lt;xs:key name=&amp;quot;PK_Countries&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:key&amp;gt;&lt;br /&gt;
          &amp;lt;xs:keyref name=&amp;quot;FK_Countries&amp;quot; refer=&amp;quot;PK_Countries&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country/NeighbouringCountries/NeighbouringCountry/Country&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:keyref&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;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XSLT transformatsioon: XML -&amp;gt; HTML&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;capital&amp;quot; match=&amp;quot;Countries/Capitals/Capital&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;town&amp;quot; match=&amp;quot;Countries/Towns/Town&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;country&amp;quot; match=&amp;quot;Countries/Country&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;text-align:center&amp;quot;&amp;gt;Countries&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#9acd32&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Country name&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Capital&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Towns&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Neighbouring countries&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:for-each select=&amp;quot;Countries/Country&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tr&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;key(&#039;capital&#039;, Capital/@refid)&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;key(&#039;town&#039;, CountryTowns/Town/@refid)&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;position() != last()&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;key(&#039;country&#039;, NeighbouringCountries/NeighbouringCountry/Country/@refid)&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;position() != last()&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XSLT transformatsioon: XML -&amp;gt; XML&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;town&amp;quot; match=&amp;quot;Countries/Towns/Town&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;country&amp;quot; match=&amp;quot;Countries/Country&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Countries&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each select=&amp;quot;Countries/Country&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;Towns&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;key(&#039;town&#039;, CountryTowns/Town/@refid)&amp;quot;&amp;gt;          &lt;br /&gt;
            &amp;lt;Town&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:attribute name=&amp;quot;Founded&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;Founded&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/Town&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;      &lt;br /&gt;
        &amp;lt;/Towns&amp;gt;&lt;br /&gt;
        &amp;lt;NumberOfNeighbouringCountries&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;count(key(&#039;country&#039;, NeighbouringCountries/NeighbouringCountry/Country/@refid))&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/NumberOfNeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
    &amp;lt;/Countries&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Tegevuste logi:==&lt;br /&gt;
&#039;&#039;&#039;10.02.2018&#039;&#039;&#039; -&lt;br /&gt;
Meeskonna loomine, idee paikapanemine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;24.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Andmemudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;26.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Analüüsi ja funktsionaalsuse kirjutamine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;31.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Wiki lehe loomine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;02.04.2018&#039;&#039;&#039; -&lt;br /&gt;
Koodi kirjutamise alustamine, Giti repo loomine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;14.05.2018&#039;&#039;&#039; -&lt;br /&gt;
Angular klientrakenduse alustamine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;08.06.2018&#039;&#039;&#039; -&lt;br /&gt;
Lõpptoode valmis&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;09.06.2018&#039;&#039;&#039; -&lt;br /&gt;
XML töö valmis&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=131550</id>
		<title>Meeskond:Curry</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=131550"/>
		<updated>2018-06-09T14:02:05Z</updated>

		<summary type="html">&lt;p&gt;Relken: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Liikmed=&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
=Analüüs=&lt;br /&gt;
==Projekti kirjeldus==&lt;br /&gt;
Curry näol on tegemist erinevate krüptorahade kauplemisplatvormiga, kus registreerunud kasutaja saab üles seada ostu- või müügitellimusi (edaspidi ordereid). Ostja määrab ära, millise maksimaalse hinna eest on nõus ühte krüptoraha valuutat teise eest ostma ning ka ostukoguse. Müüa seevastu ütleb, millise hinnaga soovib ühte valuutat teise vastu vahetada ja koguse. Süsteem viib automaatselt ostu-müügiorderid kokku ning kui hind on mõlemapoolselt sobilik, toimub tehing. Platvorm haldab ise kasutajakontol olevat rahakogust. Rakenduse peavaates on võimalik näha aktiivseid ordereid, kus müügiorderid reastatakse hinna järgi kasvavalt, ostuorderid kahanevalt. Projekti mahu hulka ei kuulu krüptovaluutade sisse- ja väljakande funktsionaalsus.&lt;br /&gt;
&lt;br /&gt;
===Andmemudeli skeem:===&lt;br /&gt;
[[File:Curry.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Üldised nõuded:==&lt;br /&gt;
* Veebiteenuse andmevahetus toimub JSON formaadis.&lt;br /&gt;
* Klientrakendus töötab kõikides enamlevinud veebibrauserites.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Must-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Kasutaja saab endale registreerimisega konto luua.&lt;br /&gt;
* Kasutaja saab enda andmeid (nimi, email, jne) muuta.&lt;br /&gt;
* Süsteemis on kindlaks määratud kindlad valuutapaarid, millede vahel kaubelda saab. Minimaalselt 1 valuutapaar ehk 2 erinevat valuutat.&lt;br /&gt;
* Kasutaja saab sisestada limiit müügiordereid, kus märgib ära millist valuutat mille vastu müüb, ning määrab hinna ning koguse.&lt;br /&gt;
* Kasutaja saab sisestada limiit ostuordereid, kus märgib ära millist valuutat soovib osta mõne teise valuuta eest ning määrab maksimaalse ostuhinna ning koguse.&lt;br /&gt;
* Süsteem leiab ostu-müügi orderite vahel kokku sobivad orderid, mis hinna poolest rahuldavad mõlemaid osapooli ning toimub automaatselt tehing – orderid loetakse  kas osaliselt või täielikult täidetuks ning tehing kantakse tehingute nimekirja. Vastavatel osapooltel toimub ka kontoseisu muutus.&lt;br /&gt;
* Orderite täitmine võib toimuda ka mitmes osas, kus ühe osapoole valuuta kogus erineb teise osapoole orderil märgitud kogusest. Sel juhul vähendatakse ühe osapoole orderi kogust toimunud tehingu mahu võrra.&lt;br /&gt;
* Kasutaja saab tühistada enda poolt üles seatud ordereid.&lt;br /&gt;
* Kasutaja saab vaadata rahakonto seisu, kui palju erinevaid valuutasid arvel on.&lt;br /&gt;
* Kasutaja saab vaadata enda orderite ja tehingute ajalugu.&lt;br /&gt;
* Iga toimunud tehingu pealt võetakse ka % teenustasu.&lt;br /&gt;
* Orderi loomise eelnevalt kontrollitakse, kas kasutaja rahakontol piisavalt vabu vahendeid tehingu toimimiseks ning kuni tehingu toimumiseni on vastav kogus valuutat kontol broneeritud. Reaalselt arvestatakse maha peale tehingu lõppu.&lt;br /&gt;
* Admin saab määrata, milliste süsteemis olevate valuutade vahel saab kaubelda.&lt;br /&gt;
* Admin saab muuta teenustasu % väärtust.&lt;br /&gt;
* Admin saab lukustada kasutajate kontosid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Nice-to-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Valuutade sisse -ja väljakanded.&lt;br /&gt;
* Graafiline kasutajaliides hinnaliikumise ja teiste näitajate kuvamiseks.&lt;br /&gt;
* Peale limiitorderite ka teiste orderitüüpide toetamine.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Juhend lõpptoote kasutamiseks:&#039;&#039;&#039;==&lt;br /&gt;
* Proovimaks administraator õigustes kasutaja funktsionaalsust, logi sisse kasutajanimega &#039;adminuser&#039; ning parooliga &#039;Kala1.maja&#039;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XML andmefail&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;Countries xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;Capitals&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Tallinn&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;100&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital2&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Riia&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;101&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital3&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Vilnius&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;102&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital4&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Helsingi&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;103&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Stockholm&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;104&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital6&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Kopenhaagen&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;105&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
  &amp;lt;/Capitals&amp;gt;&lt;br /&gt;
  &amp;lt;Towns&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Tartu&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1000&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town2&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Tampere&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1100&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town3&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Jelgava&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1300&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town4&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Kaunas&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1500&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;   &lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Norrköping&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1700&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town6&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Aalborg&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1700&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town7&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Pärnu&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1800&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town8&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Valmiera&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1900&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town9&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Malmö&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1400&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town10&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Linköping&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1200&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
  &amp;lt;/Towns&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Eesti&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town1&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town7&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country2&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country3&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Soome&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital4&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town2&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country3&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Läti&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital2&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town3&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town8&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country4&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country4&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Leedu&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital3&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town4&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country3&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country5&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Rootsi&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital5&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town9&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town10&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country6&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country2&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country6&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Taani&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town6&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
&amp;lt;/Countries&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XSD schema fail&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&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:simpleType name=&amp;quot;TypeName&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:restriction base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xs:minLength value=&amp;quot;3&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;
  &amp;lt;xs:simpleType name=&amp;quot;TypeArea&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:restriction base=&amp;quot;xs:integer&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xs:minInclusive value=&amp;quot;100&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;Countries&amp;quot;&amp;gt;&lt;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;Capitals&amp;quot;&amp;gt;&lt;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;Capital&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element type=&amp;quot;TypeName&amp;quot; name=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element type =&amp;quot;TypeArea&amp;quot; name=&amp;quot;Area&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&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;Towns&amp;quot;&amp;gt;&lt;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;Town&amp;quot;&amp;gt;&lt;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;Name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;Founded&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&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 maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;Country&amp;quot;&amp;gt;&lt;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;Name&amp;quot; type=&amp;quot;TypeName&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;Capital&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;refid&amp;quot; type=&amp;quot;xs:IDREF&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:element name=&amp;quot;CountryTowns&amp;quot;&amp;gt;&lt;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;Town&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;refid&amp;quot; type=&amp;quot;xs:IDREF&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:unique name=&amp;quot;TownUnique &amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:selector xpath=&amp;quot;Town&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:unique&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;NeighbouringCountries&amp;quot;&amp;gt;&lt;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;NeighbouringCountry&amp;quot;&amp;gt;&lt;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;Country&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;refid&amp;quot; type=&amp;quot;xs:IDREF&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:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&amp;quot; /&amp;gt;         &lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
          &amp;lt;xs:key name=&amp;quot;PK_Capitals&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Capital&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:key&amp;gt;&lt;br /&gt;
          &amp;lt;xs:keyref name=&amp;quot;FK_CountryCapitals&amp;quot; refer=&amp;quot;PK_Capitals&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country/Capital&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:keyref&amp;gt;&lt;br /&gt;
          &amp;lt;xs:key name=&amp;quot;PK_Towns&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Towns/Town&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:key&amp;gt;&lt;br /&gt;
          &amp;lt;xs:keyref name=&amp;quot;FK_CountryTowns&amp;quot; refer=&amp;quot;PK_Towns&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country/CountryTowns/Town&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:keyref&amp;gt;&lt;br /&gt;
          &amp;lt;xs:key name=&amp;quot;PK_Countries&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:key&amp;gt;&lt;br /&gt;
          &amp;lt;xs:keyref name=&amp;quot;FK_Countries&amp;quot; refer=&amp;quot;PK_Countries&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country/NeighbouringCountries/NeighbouringCountry/Country&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:keyref&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;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XSLT transformatsioon: XML -&amp;gt; HTML&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
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; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;capital&amp;quot; match=&amp;quot;Countries/Capitals/Capital&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;town&amp;quot; match=&amp;quot;Countries/Towns/Town&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;country&amp;quot; match=&amp;quot;Countries/Country&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;text-align:center&amp;quot;&amp;gt;Countries&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#9acd32&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Country name&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Capital&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Towns&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Neighbouring countries&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:for-each select=&amp;quot;Countries/Country&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tr&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;key(&#039;capital&#039;, Capital/@refid)&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;key(&#039;town&#039;, CountryTowns/Town/@refid)&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;position() != last()&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;key(&#039;country&#039;, NeighbouringCountries/NeighbouringCountry/Country/@refid)&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;position() != last()&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XSLT transformatsioon: XML -&amp;gt; XML&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;town&amp;quot; match=&amp;quot;Countries/Towns/Town&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;country&amp;quot; match=&amp;quot;Countries/Country&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Countries&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each select=&amp;quot;Countries/Country&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;Towns&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;key(&#039;town&#039;, CountryTowns/Town/@refid)&amp;quot;&amp;gt;          &lt;br /&gt;
            &amp;lt;Town&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:attribute name=&amp;quot;Founded&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;Founded&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/Town&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;      &lt;br /&gt;
        &amp;lt;/Towns&amp;gt;&lt;br /&gt;
        &amp;lt;NumberOfNeighbouringCountries&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;count(key(&#039;country&#039;, NeighbouringCountries/NeighbouringCountry/Country/@refid))&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/NumberOfNeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
    &amp;lt;/Countries&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Tegevuste logi:==&lt;br /&gt;
&#039;&#039;&#039;10.02.2018&#039;&#039;&#039; -&lt;br /&gt;
Meeskonna loomine, idee paikapanemine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;24.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Andmemudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;26.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Analüüsi ja funktsionaalsuse kirjutamine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;31.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Wiki lehe loomine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;02.04.2018&#039;&#039;&#039; -&lt;br /&gt;
Koodi kirjutamise alustamine, Giti repo loomine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;14.05.2018&#039;&#039;&#039; -&lt;br /&gt;
Angular klientrakenduse alustamine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;08.06.2018&#039;&#039;&#039; -&lt;br /&gt;
Lõpptoode valmis&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;09.06.2018&#039;&#039;&#039; -&lt;br /&gt;
XML töö valmis&lt;/div&gt;</summary>
		<author><name>Relken</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_2018&amp;diff=131549</id>
		<title>Kodutöö aines &quot;Võrgurakendused II: hajussüsteemide ehitamine&quot; 2018</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_2018&amp;diff=131549"/>
		<updated>2018-06-09T13:57:28Z</updated>

		<summary type="html">&lt;p&gt;Relken: &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; 2018=&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 API2/ASP.NET Core 2.0/WCF 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;
&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_2018#Veebiteenus NB! Täpsem info]&lt;br /&gt;
** Veebiteenuse analüüs peab olema valmis, esitatud ja wikilehel kirjeldatud hiljemalt: &#039;&#039;&#039;01.aprill 2018&#039;&#039;&#039;. Lisaks on  &#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;
** Veebiteenus peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;27. mai 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid veebiteenuste kohta peavad tehtud olema &#039;&#039;&#039;03. juuni 2018&#039;&#039;&#039;.&lt;br /&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_2018#Klientrakendus NB! Täpsem info]&lt;br /&gt;
** Klientrakendused peavad olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;27. mai 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid klientrakenduste kohta peavad tehtud olema &#039;&#039;&#039;03. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
&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_2018#XML_andmefail NB! Täpsem info]&lt;br /&gt;
** XML fail, stiilifail ja skeemifail peavad olema valmis ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;01. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid XML-failide kohta peavad tehtud olema &#039;&#039;&#039;05.juuni 2018&#039;&#039;&#039;.&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), paigaldusjuhend ning lahenduse kirjeldus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Maksimumtulemuse annab (vähemalt 4/7):&#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;
* Mobiilirakendused/Angularis/reactis loodud 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;
* Korraliku arhitektuuriga kirjutatud kood&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;
===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(ASP.NET veebirakendus või hoopis Angulari või Reacti baasil), töölauarakendusena(WPF) või mobiilse rakendusena(Xamarin)&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;
Kaitsmisele tuleks registreerida järjest(st iga järgmine lisab vajaliku 15min ajaakna) ja suvalisis kellaaegasid ei hakka kuhugi vahele kirjutama&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;05.06.2018&#039;&#039;&#039;&lt;br /&gt;
*15:00 - Miisiks&lt;br /&gt;
*15:15 - Maagikud &lt;br /&gt;
*15:30 - GoFood&lt;br /&gt;
*15:45 - Raavo V2™&lt;br /&gt;
*16:00 - LearnToDrive&lt;br /&gt;
Sellele päevale rohkem aegu juurde lisada ei saa&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Allpool olevate päevadele võib vabalt aegasid juurde lisada 15min sammga. Reegel on, et aegu lisame järjest&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;06.06.2018&#039;&#039;&#039;&lt;br /&gt;
*17:00 - Raamaturiiul&lt;br /&gt;
*17:15 - Pakiraam&lt;br /&gt;
*..&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;09.06.2018&#039;&#039;&#039;&lt;br /&gt;
*16:00 - MealPlannerSolo(Triin Oja)&lt;br /&gt;
*16:15 - Beer Pressure&lt;br /&gt;
*16:30 - &amp;amp;lt;div&amp;amp;gt;&lt;br /&gt;
*16:45 - NutriCheck&lt;br /&gt;
*17:00 - JääTuli&lt;br /&gt;
*17:15 - Ophelia&lt;br /&gt;
*17:30 - Kuldne Loojang&lt;br /&gt;
*17:45 - Hammas&lt;br /&gt;
*18:00 - VariousArtists&lt;br /&gt;
*18:15 - Pillar Of Autumn&lt;br /&gt;
*18:30 - Curry&lt;br /&gt;
*18:45 - WatchWinders&lt;br /&gt;
*19:00 - MOT&lt;br /&gt;
*19:15 - AmateurBB&lt;br /&gt;
*19:30 - Autolugu&lt;br /&gt;
&lt;br /&gt;
=Teemad 2018 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;
&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 2018=&lt;br /&gt;
==Päevaõpe==&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/HairSaloon Meeskond: HairSaloon]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kaido Henrik Elias&lt;br /&gt;
* Arvo Paomees&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/VariousArtists Meeskond: VariousArtists]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Ruudi Vinter&lt;br /&gt;
* Madis Roosioks&lt;br /&gt;
* Pavel Fleišer&lt;br /&gt;
&lt;br /&gt;
Lõpptoode: [https://drive.google.com/open?id=1Pq8Lhrs3G5mGiTje70ww-zMBNB5cXnRh ZIP]&lt;br /&gt;
&lt;br /&gt;
TFS: [https://variousartists.visualstudio.com/VariousArtists/_versionControl/changesets siin]&lt;br /&gt;
&lt;br /&gt;
XML: [https://wiki.itcollege.ee/index.php/VariousArtists#XML siin]&lt;br /&gt;
&lt;br /&gt;
Retsensioonid: [https://wiki.itcollege.ee/index.php/VariousArtists#Retsensioonid siin]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Maagikud Meeskond: Maagikud]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Kristina Rästas&lt;br /&gt;
*Simo Jaanus&lt;br /&gt;
*Artur Tammiste&lt;br /&gt;
*Rauno Lõhmus&lt;br /&gt;
Lõpptoote [http://enos.itcollege.ee/~sjaanus/c/Airport_solution.zip link]&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse ja klientrakenduse retsensioon tiimile Raavo V2 asub [https://docs.google.com/document/d/1fxmdLa94Do1u5WlmPQjSd4mMmdbDw5WmDne547jqQc4/edit siin]&lt;br /&gt;
&lt;br /&gt;
XML retsensioon tiimile LTD asub [https://docs.google.com/document/d/15rMhpqyG5XHsvOCZJp88ucHkiMa5Non6BbYwBBKT2_Y/edit siin]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/RaamatuRiiul Meeskond: RaamatuRiiul]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Alo Avi&lt;br /&gt;
* Arnika Rästa&lt;br /&gt;
* Marite Rammo&lt;br /&gt;
&#039;&#039;&#039;Meie XML:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/RaamatuRiiul#XML XML]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie veebiteenuse, klientrakenduse ja XML retsensioonid meeskonnale Miisiiks:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:Miisiiks retsensioonid]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie veebiteenus ning klientrakendus.&#039;&#039;&#039; [https://www.dropbox.com/s/ugbvx4j4zdlbp68/RaamatuRiiul.7z?dl=0 Zip]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Autolugu Meeskond: Autolugu]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Margus Põlma&lt;br /&gt;
* Karl Erik Õunapuu&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/VRII2018 Meeskond: VRII2018]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kaspar Kaal&lt;br /&gt;
* Teet Adamson&lt;br /&gt;
* Rahel Kangur&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond_Raavo_V2%E2%84%A2 Meeskond: Raavo V2™]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Peeter Fridolin&lt;br /&gt;
* Kristo Leesmann&lt;br /&gt;
* Rando Rommot&lt;br /&gt;
&lt;br /&gt;
Projekti retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Meeskond_Raavo_V2™#Retsentsioonid Maagikud]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Pillarofautumn Meeskond: Pillar of Autumn ]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Taavi Põder&lt;br /&gt;
* Taavi Vesinurm (Meeskonnast lahkunud)&lt;br /&gt;
* Raido Vell&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode API ja klientrakendus:&#039;&#039;&#039; [https://github.com/taavip9/Veebirakendused-II Lõpptoode]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/jaatuli Meeskond: JääTuli]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Tarmo Luugus&lt;br /&gt;
*Leho Kivistik&lt;br /&gt;
*Hannes Mäeorg&lt;br /&gt;
*Marten Tammeleht&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/JustABot Meeskond: JustABot]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Argo Hansen&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond_Pakiraam Meeskond: Pakiraam]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Kristo Naeris&lt;br /&gt;
*Indro Kottise&lt;br /&gt;
&lt;br /&gt;
Klientrakendus [https://github.com/knaeris/VR2Klient siin] ja veebiteenus [https://github.com/knaeris/VR2Projekt siin]&lt;br /&gt;
&lt;br /&gt;
Retsensioon meeskonna Raavo v2 klientrakendusele : [https://wiki.itcollege.ee/index.php/Meeskond_Pakiraam#Retsensioonid Retsensioon]&lt;br /&gt;
&lt;br /&gt;
Retsensioon meeskonna Raavo v2 veebiteenusele:&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/GoFood Meeskond: GoFood]===&lt;br /&gt;
Liikmed: &lt;br /&gt;
&lt;br /&gt;
* Rando Kurel&lt;br /&gt;
* Henrik Prangel&lt;br /&gt;
* Markus Mänd&lt;br /&gt;
* Edgar Tereping&lt;br /&gt;
* Jane Kaldma&lt;br /&gt;
&lt;br /&gt;
Lõpptoode: [https://wiki.itcollege.ee/index.php/GoFood#Projektikood lõpptoote leiab siit]&lt;br /&gt;
&lt;br /&gt;
Meie rühma kirjutatud retsentsioonid rühmale Maagikud:[https://wiki.itcollege.ee/index.php/GoFood#Retsensioon_rühmale_Maagikud  Retsensioon]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/LTD Meeskond: LearnToDrive]===&lt;br /&gt;
&#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
*Eve Ormisson&lt;br /&gt;
*Carlos Kirtsi&lt;br /&gt;
&lt;br /&gt;
Projekt [https://wiki.itcollege.ee/index.php/LTD#Kood_ise asub siin, kliendina kasutame JustInCaseWPFi]&lt;br /&gt;
&lt;br /&gt;
Projekti retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/LTD#Projekti_retsensioon Maagikud]&lt;br /&gt;
&lt;br /&gt;
XML osa retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/LTD#XML_retsensioon RaamatuRiiul]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Miisiiks Meeskond: Miisiiks]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Christo Aruste&lt;br /&gt;
*Heleriin Malkov&lt;br /&gt;
*Tõnis Prants&lt;br /&gt;
&lt;br /&gt;
[https://www.dropbox.com/s/e2vu3ukgckyc2x5/MiisiiksWS.zip?dl=0 Veebiteenus]&lt;br /&gt;
&lt;br /&gt;
Veebiteenus v2 (05.06): [https://www.dropbox.com/s/4acyvc9c7h08xl6/MiisiiksWS-v2.rar?dl=0 Veebiteenus]&lt;br /&gt;
&lt;br /&gt;
[https://www.dropbox.com/s/iwtheohp5mn0lek/MiisiiksC.zip?dl=0 Klientrakendus]&lt;br /&gt;
&lt;br /&gt;
Klientrakendus v2 (05.06): [https://www.dropbox.com/s/m6ijv2yyqthebgr/MiisiiksC2-v2.rar?dl=0 Klientrakendus]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Miisiiks#XML XML]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Retsensioonid meeskonnale Raavo V2™&lt;br /&gt;
&lt;br /&gt;
Veebiteenus: [https://wiki.itcollege.ee/index.php/Miisiiks#Veebiteenuse_retsensioon Retsensioon]&lt;br /&gt;
&lt;br /&gt;
Klientrakendus: [https://wiki.itcollege.ee/index.php/Miisiiks#Klientrakenduse_retsensioon Retsensioon]&lt;br /&gt;
&lt;br /&gt;
XML: [https://wiki.itcollege.ee/index.php/Miisiiks#XML_retsensioon  XML]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/VR2_div Meeskond: &amp;amp;lt;div&amp;amp;gt;]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Kaarel Pärtel&lt;br /&gt;
*Marek Juhanson&lt;br /&gt;
*Kai Kallastu&lt;br /&gt;
&lt;br /&gt;
Retsensioonid rühmale [https://wiki.itcollege.ee/index.php/Miisiiks Miisiiks™]: [https://docs.google.com/document/d/1gQmas-Fay_XHHhLInKM92152vYeFdFflDIRozN63mxA/edit?usp=sharing veebiteenus, klientrakendus ja XML]&lt;br /&gt;
&lt;br /&gt;
==Kaugõpe==&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/BestInShow Meeskond: BestInShow]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Liina Abner&lt;br /&gt;
* Marju Pütsepp&lt;br /&gt;
* Liisi Taimre&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode veebiteenus:&#039;&#039;&#039; [https://www.dropbox.com/s/j5ixmwmx45kxcyo/BestInShow.zip?dl=0 https://www.dropbox.com/s/j5ixmwmx45kxcyo/BestInShow.zip?dl=0]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Kasutusjuhend:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/BestInShow#Kasutusjuhend https://wiki.itcollege.ee/index.php/BestInShow#Kasutusjuhend]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode klient:&#039;&#039;&#039; [https://bitbucket.org/Marjup/bestinshow/ https://bitbucket.org/Marjup/bestinshow/]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML failid:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/BestInShow#XML_failid Schema, XML ja XSLT HTML ja XML transformatsiooniks]&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon veebiteenusele: TODO&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon klientrakendusele: TODO&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon XML-ile: TODO&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/AssistDesq Meeskond: AssistDesq]===&lt;br /&gt;
Liikmed: &lt;br /&gt;
* Karen Grigorjan&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/WatchWinders Meeskond: WatchWinders]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Toomas Juhkov&lt;br /&gt;
* Kunnar Kukk&lt;br /&gt;
* Tiit Kuuskmäe&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/WatchWinders#Link_klientrakendusele_ja_API-le Link klientrakendusele ja API-le]&lt;br /&gt;
&lt;br /&gt;
===[[ Kuldneloojang | Meeskond: Kuldne loojang]]===&lt;br /&gt;
&#039;&#039;&#039;Liikmed&#039;&#039;&#039;:&lt;br /&gt;
* Andrus Seiman&lt;br /&gt;
* Marko Belzetski&lt;br /&gt;
* Priit Tiganik&lt;br /&gt;
* Kristjan Peterson (loobus)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode:&#039;&#039;&#039;&lt;br /&gt;
algselt üles laetud 02.06.2018, bugide parandusi lisatud 04.06.2018&lt;br /&gt;
* [https://www.dropbox.com/s/4h9bvq4k6388fmo/loojang.zip?dl=0 .zip fail rakendus ja klient koos] &lt;br /&gt;
* [https://bitbucket.org/itcollegeprojects/loojang-app veebirakenduse repo] &lt;br /&gt;
* [https://bitbucket.org/itcollegeprojects/loojang-client klientrakenduse repo] &lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Kuldneloojang#XML_.C3.BClesande_kirjeldus XML:  link meie Wiki lehele]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid:&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Kuldneloojang#Veebiteenusele veebiteenuse retsensioon meeskonna Curry tööle. &#039;&#039;&#039;(TEGEMISEL)&#039;&#039;&#039;]&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Kuldneloojang#Klientrakendusele klientrakenduse retsensioon meeskonna Curry tööle.]&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Kuldneloojang#XML-ile XML retsensioon meeskonna Curry tööle. &#039;&#039;&#039;(TEGEMISEL)&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ophelia Meeskond: Ophelia]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Siim Kallari&lt;br /&gt;
* Andres Kepler (loobus)&lt;br /&gt;
* Jorma Rebane&lt;br /&gt;
&lt;br /&gt;
[https://www.dropbox.com/s/v63fkbjnd5umqqm/Ophelia.zip?dl=0 Lõpptoote link]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Ophelia#L.C3.B5pptoote_kasutusjuhend Kasutusjuhend(Kaasas ka lõpptootes)]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Ophelia#XML_.C3.9Clesanne XML Ülesanne]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/SharpRestoVRII Meeskond: SharpRestoVRII]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Andres Aava (lahkunud liige)&lt;br /&gt;
* Henri Annilo&lt;br /&gt;
* Jaan Koolmeister&lt;br /&gt;
* Lauri Üksti&lt;br /&gt;
&lt;br /&gt;
Lähtekood: [http://enos.itcollege.ee/~luksti/CSharp/CSharpResto.zip CSharpResto]&lt;br /&gt;
&lt;br /&gt;
Retsensioonid:&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/BeerPressure Meeskond: BeerPressure]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sigrid Aasma&lt;br /&gt;
* Evelin Jõgi&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Marko Nõu&lt;br /&gt;
&#039;&#039;&#039;Projekt:&#039;&#039;&#039; [https://github.com/sikumiku/TaisKohtApi TaisKohtApi]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode:&#039;&#039;&#039; [https://github.com/sikumiku/TaisKohtApi/archive/61438e187a1a972410c8a3bc6274d69489d00aa6.zip GitHub commit]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;XML:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/BeerPressure#XML.2FXSD.2FXSLT Beer Pressure XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud XML failide retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:MOT#XML_retsensioon_by_meeskond_BeerPressure: Team MOT retsensioon]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud veebiteenuse retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:MOT#Veebiteenuse_retsensensioon_by_meeskond_BeerPressure: Team MOT retsensioon]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud klientrakenduse retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:Kuldneloojang#Klientrakenduse_retsensensioon_by_meeskond_BeerPressure: Team Kuldneloojang retsensioon]&lt;br /&gt;
&lt;br /&gt;
===[[ Memorize | Meeskond: Memorize]]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Madis Uudam&lt;br /&gt;
* Olle Mikk&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/UCanDo Meeskond: UCanDo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mart Raus&lt;br /&gt;
* Ando Kiidron (loobus)&lt;br /&gt;
* Liina Saar&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode: &#039;&#039;&#039; [https://drive.google.com/drive/folders/1GIgiG5NvmnnKoQYmWWbfV_9Nhs2dezz8?usp=sharing UCanDo] &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Veebiteenuse retsensioon: &#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse retsensioon: &#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML retsensioon: &#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/MOT Meeskond: MOT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Merike Meizner&lt;br /&gt;
* Helen Oppar (loobus)&lt;br /&gt;
* Hardi Tiitus&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode: &#039;&#039;&#039;  http://enos.itcollege.ee/~mmeizner/MOT/ &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud veebiteenuse, klientrakenduse ja XML&#039;i retsensioon:&#039;&#039;&#039; [https://docs.google.com/document/d/16WL12wmvQ_TPcY_-4pG_kjwtstQoX5meEYcigE4Febw/edit?usp=sharing: Team Raavo V2]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond:_MealPlanner Meeskond: MealPlanner]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Triin Oja&lt;br /&gt;
*Rein Remsu&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond:Curry Meeskond: Curry]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode: &#039;&#039;&#039;  [http://enos.itcollege.ee/~pploom/VR2/ link] &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML: &#039;&#039;&#039;  [https://wiki.itcollege.ee/index.php/Meeskond:Curry#XML_andmefail link] &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XSD: &#039;&#039;&#039;  [https://wiki.itcollege.ee/index.php/Meeskond:Curry#XSD_schema_fail link] &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XSLT1: &#039;&#039;&#039;  [https://wiki.itcollege.ee/index.php/Meeskond:Curry#XSLT_transformatsioon:_XML_-.3E_HTML link] &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XSLT2: &#039;&#039;&#039;  [https://wiki.itcollege.ee/index.php/Meeskond:Curry#XSLT_transformatsioon:_XML_-.3E_XML link] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Curry meeskonna veebiteenust, klientrakendust ja XML-i retsenseerib meeskond KuldneLoojang. Curryle kirjutatud retsensioonid [https://wiki.itcollege.ee/index.php/Kuldneloojang#Meie_tehtud_retsensioonid asuvad siin: link]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Hammas Meeskond: Hammas]===&lt;br /&gt;
&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sten Lunden&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode:&#039;&#039;&#039; [https://ildtest.azurewebsites.net azure]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Projekt:&#039;&#039;&#039; [https://github.com/lundens/ild-core github]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Hammas#XML wiki]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Veebiteenuse retsensioon&#039;&#039;&#039; meeskonnale [https://wiki.itcollege.ee/index.php/Hammas#Veebiteenuse_retsensioon_meeskonnale_GoFood GoFood]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse retsensioon&#039;&#039;&#039; meeskonnale [https://wiki.itcollege.ee/index.php/Hammas#Klientrakenduse_retsensioon_meeskonnale_GoFood GoFood]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML retsensioon&#039;&#039;&#039; meeskonnale [https://wiki.itcollege.ee/index.php/Hammas#XMLi_retsensioon_meeskonnale_MealPlannerSolo MealPlannerSolo]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/LabLite Meeskond: LabLite]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Alex Kaska&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/AmateurBB Meeskond: AmateurBB]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Taavi Kivimaa&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/MealPlannerSolo Meeskond: MealPlannerSolo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Triin Oja&lt;br /&gt;
&#039;&#039;&#039;[https://wiki.itcollege.ee/index.php/MealPlannerSolo#XML_andmefail XML]&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[http://enos.itcollege.ee/~troja/VRII2018/ Veebiteenus ja klientrakendus]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/NutriCheck Meeskond: NutriCheck]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Artyom Likhachev&lt;br /&gt;
&#039;&#039;&#039;Project:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;[https://www.dropbox.com/s/z9snrydbl5e8jp2/vr2_service-v2.zip?dl=0 Veebiteenus]&lt;br /&gt;
&amp;lt;br/&amp;gt;[https://www.dropbox.com/s/7kn1u6z2481ligm/WebClient.zip?dl=0 Klientrakendus]&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=131548</id>
		<title>Meeskond:Curry</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=131548"/>
		<updated>2018-06-09T13:53:03Z</updated>

		<summary type="html">&lt;p&gt;Relken: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Liikmed=&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
=Analüüs=&lt;br /&gt;
==Projekti kirjeldus==&lt;br /&gt;
Curry näol on tegemist erinevate krüptorahade kauplemisplatvormiga, kus registreerunud kasutaja saab üles seada ostu- või müügitellimusi (edaspidi ordereid). Ostja määrab ära, millise maksimaalse hinna eest on nõus ühte krüptoraha valuutat teise eest ostma ning ka ostukoguse. Müüa seevastu ütleb, millise hinnaga soovib ühte valuutat teise vastu vahetada ja koguse. Süsteem viib automaatselt ostu-müügiorderid kokku ning kui hind on mõlemapoolselt sobilik, toimub tehing. Platvorm haldab ise kasutajakontol olevat rahakogust. Rakenduse peavaates on võimalik näha aktiivseid ordereid, kus müügiorderid reastatakse hinna järgi kasvavalt, ostuorderid kahanevalt. Projekti mahu hulka ei kuulu krüptovaluutade sisse- ja väljakande funktsionaalsus.&lt;br /&gt;
&lt;br /&gt;
===Andmemudeli skeem:===&lt;br /&gt;
[[File:Curry.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Üldised nõuded:==&lt;br /&gt;
* Veebiteenuse andmevahetus toimub JSON formaadis.&lt;br /&gt;
* Klientrakendus töötab kõikides enamlevinud veebibrauserites.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Must-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Kasutaja saab endale registreerimisega konto luua.&lt;br /&gt;
* Kasutaja saab enda andmeid (nimi, email, jne) muuta.&lt;br /&gt;
* Süsteemis on kindlaks määratud kindlad valuutapaarid, millede vahel kaubelda saab. Minimaalselt 1 valuutapaar ehk 2 erinevat valuutat.&lt;br /&gt;
* Kasutaja saab sisestada limiit müügiordereid, kus märgib ära millist valuutat mille vastu müüb, ning määrab hinna ning koguse.&lt;br /&gt;
* Kasutaja saab sisestada limiit ostuordereid, kus märgib ära millist valuutat soovib osta mõne teise valuuta eest ning määrab maksimaalse ostuhinna ning koguse.&lt;br /&gt;
* Süsteem leiab ostu-müügi orderite vahel kokku sobivad orderid, mis hinna poolest rahuldavad mõlemaid osapooli ning toimub automaatselt tehing – orderid loetakse  kas osaliselt või täielikult täidetuks ning tehing kantakse tehingute nimekirja. Vastavatel osapooltel toimub ka kontoseisu muutus.&lt;br /&gt;
* Orderite täitmine võib toimuda ka mitmes osas, kus ühe osapoole valuuta kogus erineb teise osapoole orderil märgitud kogusest. Sel juhul vähendatakse ühe osapoole orderi kogust toimunud tehingu mahu võrra.&lt;br /&gt;
* Kasutaja saab tühistada enda poolt üles seatud ordereid.&lt;br /&gt;
* Kasutaja saab vaadata rahakonto seisu, kui palju erinevaid valuutasid arvel on.&lt;br /&gt;
* Kasutaja saab vaadata enda orderite ja tehingute ajalugu.&lt;br /&gt;
* Iga toimunud tehingu pealt võetakse ka % teenustasu.&lt;br /&gt;
* Orderi loomise eelnevalt kontrollitakse, kas kasutaja rahakontol piisavalt vabu vahendeid tehingu toimimiseks ning kuni tehingu toimumiseni on vastav kogus valuutat kontol broneeritud. Reaalselt arvestatakse maha peale tehingu lõppu.&lt;br /&gt;
* Admin saab määrata, milliste süsteemis olevate valuutade vahel saab kaubelda.&lt;br /&gt;
* Admin saab muuta teenustasu % väärtust.&lt;br /&gt;
* Admin saab lukustada kasutajate kontosid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Nice-to-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Valuutade sisse -ja väljakanded.&lt;br /&gt;
* Graafiline kasutajaliides hinnaliikumise ja teiste näitajate kuvamiseks.&lt;br /&gt;
* Peale limiitorderite ka teiste orderitüüpide toetamine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XML andmefail&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;Countries xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;Capitals&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Tallinn&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;100&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital2&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Riia&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;101&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital3&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Vilnius&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;102&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital4&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Helsingi&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;103&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Stockholm&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;104&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
    &amp;lt;Capital id=&amp;quot;capital6&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Kopenhaagen&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Area&amp;gt;105&amp;lt;/Area&amp;gt;&lt;br /&gt;
    &amp;lt;/Capital&amp;gt;&lt;br /&gt;
  &amp;lt;/Capitals&amp;gt;&lt;br /&gt;
  &amp;lt;Towns&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Tartu&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1000&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town2&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Tampere&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1100&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town3&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Jelgava&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1300&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town4&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Kaunas&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1500&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;   &lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Norrköping&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1700&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town6&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Aalborg&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1700&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town7&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Pärnu&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1800&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town8&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Valmiera&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1900&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town9&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Malmö&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1400&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
    &amp;lt;Town id=&amp;quot;town10&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Linköping&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Founded&amp;gt;1200&amp;lt;/Founded&amp;gt;&lt;br /&gt;
    &amp;lt;/Town&amp;gt;&lt;br /&gt;
  &amp;lt;/Towns&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Eesti&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town1&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town7&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country2&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country3&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Soome&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital4&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town2&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country3&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Läti&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital2&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town3&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town8&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country4&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country4&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Leedu&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital3&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town4&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country3&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country5&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Rootsi&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital5&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town9&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town10&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country6&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country2&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
  &amp;lt;Country id=&amp;quot;country6&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;Taani&amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;Capital refid=&amp;quot;capital1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;CountryTowns&amp;gt;&lt;br /&gt;
      &amp;lt;Town refid=&amp;quot;town6&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/CountryTowns&amp;gt;&lt;br /&gt;
    &amp;lt;NeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;NeighbouringCountry&amp;gt;&lt;br /&gt;
        &amp;lt;Country refid =&amp;quot;country5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/NeighbouringCountry&amp;gt;&lt;br /&gt;
    &amp;lt;/NeighbouringCountries&amp;gt;&lt;br /&gt;
  &amp;lt;/Country&amp;gt;&lt;br /&gt;
&amp;lt;/Countries&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XSD schema fail&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&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:simpleType name=&amp;quot;TypeName&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:restriction base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xs:minLength value=&amp;quot;3&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;
  &amp;lt;xs:simpleType name=&amp;quot;TypeArea&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:restriction base=&amp;quot;xs:integer&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xs:minInclusive value=&amp;quot;100&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;Countries&amp;quot;&amp;gt;&lt;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;Capitals&amp;quot;&amp;gt;&lt;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;Capital&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element type=&amp;quot;TypeName&amp;quot; name=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element type =&amp;quot;TypeArea&amp;quot; name=&amp;quot;Area&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&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;Towns&amp;quot;&amp;gt;&lt;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;Town&amp;quot;&amp;gt;&lt;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;Name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;Founded&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&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 maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;Country&amp;quot;&amp;gt;&lt;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;Name&amp;quot; type=&amp;quot;TypeName&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;Capital&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;refid&amp;quot; type=&amp;quot;xs:IDREF&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:element name=&amp;quot;CountryTowns&amp;quot;&amp;gt;&lt;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;Town&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;refid&amp;quot; type=&amp;quot;xs:IDREF&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:unique name=&amp;quot;TownUnique &amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:selector xpath=&amp;quot;Town&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:unique&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;NeighbouringCountries&amp;quot;&amp;gt;&lt;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;NeighbouringCountry&amp;quot;&amp;gt;&lt;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;Country&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;refid&amp;quot; type=&amp;quot;xs:IDREF&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:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:ID&amp;quot; /&amp;gt;         &lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
          &amp;lt;xs:key name=&amp;quot;PK_Capitals&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Capital&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:key&amp;gt;&lt;br /&gt;
          &amp;lt;xs:keyref name=&amp;quot;FK_CountryCapitals&amp;quot; refer=&amp;quot;PK_Capitals&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country/Capital&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:keyref&amp;gt;&lt;br /&gt;
          &amp;lt;xs:key name=&amp;quot;PK_Towns&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Towns/Town&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:key&amp;gt;&lt;br /&gt;
          &amp;lt;xs:keyref name=&amp;quot;FK_CountryTowns&amp;quot; refer=&amp;quot;PK_Towns&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country/CountryTowns/Town&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:keyref&amp;gt;&lt;br /&gt;
          &amp;lt;xs:key name=&amp;quot;PK_Countries&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:key&amp;gt;&lt;br /&gt;
          &amp;lt;xs:keyref name=&amp;quot;FK_Countries&amp;quot; refer=&amp;quot;PK_Countries&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xs:selector xpath=&amp;quot;Countries/Country/NeighbouringCountries/NeighbouringCountry/Country&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xs:field xpath=&amp;quot;@refid&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:keyref&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;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XSLT transformatsioon: XML -&amp;gt; HTML&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
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; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;capital&amp;quot; match=&amp;quot;Countries/Capitals/Capital&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;town&amp;quot; match=&amp;quot;Countries/Towns/Town&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;country&amp;quot; match=&amp;quot;Countries/Country&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;h2 style=&amp;quot;text-align:center&amp;quot;&amp;gt;Countries&amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;table align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#9acd32&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Country name&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Capital&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Towns&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th style=&amp;quot;text-align:left&amp;quot;&amp;gt;Neighbouring countries&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:for-each select=&amp;quot;Countries/Country&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tr&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;key(&#039;capital&#039;, Capital/@refid)&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;key(&#039;town&#039;, CountryTowns/Town/@refid)&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;position() != last()&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;td&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;key(&#039;country&#039;, NeighbouringCountries/NeighbouringCountry/Country/@refid)&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;position() != last()&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XSLT transformatsioon: XML -&amp;gt; XML&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;town&amp;quot; match=&amp;quot;Countries/Towns/Town&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:key name=&amp;quot;country&amp;quot; match=&amp;quot;Countries/Country&amp;quot; use=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Countries&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each select=&amp;quot;Countries/Country&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;Towns&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;key(&#039;town&#039;, CountryTowns/Town/@refid)&amp;quot;&amp;gt;          &lt;br /&gt;
            &amp;lt;Town&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:attribute name=&amp;quot;Founded&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;Founded&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;Name&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/Town&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;      &lt;br /&gt;
        &amp;lt;/Towns&amp;gt;&lt;br /&gt;
        &amp;lt;NumberOfNeighbouringCountries&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;count(key(&#039;country&#039;, NeighbouringCountries/NeighbouringCountry/Country/@refid))&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/NumberOfNeighbouringCountries&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
    &amp;lt;/Countries&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Tegevuste logi:==&lt;br /&gt;
&#039;&#039;&#039;10.02.2018&#039;&#039;&#039; -&lt;br /&gt;
Meeskonna loomine, idee paikapanemine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;24.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Andmemudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;26.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Analüüsi ja funktsionaalsuse kirjutamine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;31.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Wiki lehe loomine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;02.04.2018&#039;&#039;&#039; -&lt;br /&gt;
Koodi kirjutamise alustamine, Giti repo loomine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;14.05.2018&#039;&#039;&#039; -&lt;br /&gt;
Angular klientrakenduse alustamine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;08.06.2018&#039;&#039;&#039; -&lt;br /&gt;
Lõpptoode valmis&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;09.06.2018&#039;&#039;&#039; -&lt;br /&gt;
XML töö valmis&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=131544</id>
		<title>Meeskond:Curry</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=131544"/>
		<updated>2018-06-09T13:45:27Z</updated>

		<summary type="html">&lt;p&gt;Relken: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Liikmed=&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
=Analüüs=&lt;br /&gt;
==Projekti kirjeldus==&lt;br /&gt;
Curry näol on tegemist erinevate krüptorahade kauplemisplatvormiga, kus registreerunud kasutaja saab üles seada ostu- või müügitellimusi (edaspidi ordereid). Ostja määrab ära, millise maksimaalse hinna eest on nõus ühte krüptoraha valuutat teise eest ostma ning ka ostukoguse. Müüa seevastu ütleb, millise hinnaga soovib ühte valuutat teise vastu vahetada ja koguse. Süsteem viib automaatselt ostu-müügiorderid kokku ning kui hind on mõlemapoolselt sobilik, toimub tehing. Platvorm haldab ise kasutajakontol olevat rahakogust. Rakenduse peavaates on võimalik näha aktiivseid ordereid, kus müügiorderid reastatakse hinna järgi kasvavalt, ostuorderid kahanevalt. Projekti mahu hulka ei kuulu krüptovaluutade sisse- ja väljakande funktsionaalsus.&lt;br /&gt;
&lt;br /&gt;
===Andmemudeli skeem:===&lt;br /&gt;
[[File:Curry.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Üldised nõuded:==&lt;br /&gt;
* Veebiteenuse andmevahetus toimub JSON formaadis.&lt;br /&gt;
* Klientrakendus töötab kõikides enamlevinud veebibrauserites.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Must-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Kasutaja saab endale registreerimisega konto luua.&lt;br /&gt;
* Kasutaja saab enda andmeid (nimi, email, jne) muuta.&lt;br /&gt;
* Süsteemis on kindlaks määratud kindlad valuutapaarid, millede vahel kaubelda saab. Minimaalselt 1 valuutapaar ehk 2 erinevat valuutat.&lt;br /&gt;
* Kasutaja saab sisestada limiit müügiordereid, kus märgib ära millist valuutat mille vastu müüb, ning määrab hinna ning koguse.&lt;br /&gt;
* Kasutaja saab sisestada limiit ostuordereid, kus märgib ära millist valuutat soovib osta mõne teise valuuta eest ning määrab maksimaalse ostuhinna ning koguse.&lt;br /&gt;
* Süsteem leiab ostu-müügi orderite vahel kokku sobivad orderid, mis hinna poolest rahuldavad mõlemaid osapooli ning toimub automaatselt tehing – orderid loetakse  kas osaliselt või täielikult täidetuks ning tehing kantakse tehingute nimekirja. Vastavatel osapooltel toimub ka kontoseisu muutus.&lt;br /&gt;
* Orderite täitmine võib toimuda ka mitmes osas, kus ühe osapoole valuuta kogus erineb teise osapoole orderil märgitud kogusest. Sel juhul vähendatakse ühe osapoole orderi kogust toimunud tehingu mahu võrra.&lt;br /&gt;
* Kasutaja saab tühistada enda poolt üles seatud ordereid.&lt;br /&gt;
* Kasutaja saab vaadata rahakonto seisu, kui palju erinevaid valuutasid arvel on.&lt;br /&gt;
* Kasutaja saab vaadata enda orderite ja tehingute ajalugu.&lt;br /&gt;
* Iga toimunud tehingu pealt võetakse ka % teenustasu.&lt;br /&gt;
* Orderi loomise eelnevalt kontrollitakse, kas kasutaja rahakontol piisavalt vabu vahendeid tehingu toimimiseks ning kuni tehingu toimumiseni on vastav kogus valuutat kontol broneeritud. Reaalselt arvestatakse maha peale tehingu lõppu.&lt;br /&gt;
* Admin saab määrata, milliste süsteemis olevate valuutade vahel saab kaubelda.&lt;br /&gt;
* Admin saab muuta teenustasu % väärtust.&lt;br /&gt;
* Admin saab lukustada kasutajate kontosid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Nice-to-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Valuutade sisse -ja väljakanded.&lt;br /&gt;
* Graafiline kasutajaliides hinnaliikumise ja teiste näitajate kuvamiseks.&lt;br /&gt;
* Peale limiitorderite ka teiste orderitüüpide toetamine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;XML andmefail&#039;&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
==Tegevuste logi:==&lt;br /&gt;
&#039;&#039;&#039;10.02.2018&#039;&#039;&#039; -&lt;br /&gt;
Meeskonna loomine, idee paikapanemine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;24.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Andmemudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;26.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Analüüsi ja funktsionaalsuse kirjutamine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;31.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Wiki lehe loomine.&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=130151</id>
		<title>Meeskond:Curry</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=130151"/>
		<updated>2018-03-31T18:22:05Z</updated>

		<summary type="html">&lt;p&gt;Relken: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Liikmed=&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
=Analüüs=&lt;br /&gt;
==Projekti kirjeldus==&lt;br /&gt;
Curry näol on tegemist erinevate krüptorahade kauplemisplatvormiga, kus registreerunud kasutaja saab üles seada ostu- või müügitellimusi (edaspidi ordereid). Ostja määrab ära, millise maksimaalse hinna eest on nõus ühte krüptoraha valuutat teise eest ostma ning ka ostukoguse. Müüa seevastu ütleb, millise hinnaga soovib ühte valuutat teise vastu vahetada ja koguse. Süsteem viib automaatselt ostu-müügiorderid kokku ning kui hind on mõlemapoolselt sobilik, toimub tehing. Platvorm haldab ise kasutajakontol olevat rahakogust. Rakenduse peavaates on võimalik näha aktiivseid ordereid, kus müügiorderid reastatakse hinna järgi kasvavalt, ostuorderid kahanevalt. Projekti mahu hulka ei kuulu krüptovaluutade sisse- ja väljakande funktsionaalsus.&lt;br /&gt;
&lt;br /&gt;
===Andmemudeli skeem:===&lt;br /&gt;
[[File:Curry.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Üldised nõuded:==&lt;br /&gt;
* Veebiteenuse andmevahetus toimub JSON formaadis.&lt;br /&gt;
* Klientrakendus töötab kõikides enamlevinud veebibrauserites.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Must-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Kasutaja saab endale registreerimisega konto luua.&lt;br /&gt;
* Kasutaja saab enda andmeid (nimi, email, jne) muuta.&lt;br /&gt;
* Süsteemis on kindlaks määratud kindlad valuutapaarid, millede vahel kaubelda saab. Minimaalselt 1 valuutapaar ehk 2 erinevat valuutat.&lt;br /&gt;
* Kasutaja saab sisestada limiit müügiordereid, kus märgib ära millist valuutat mille vastu müüb, ning määrab hinna ning koguse.&lt;br /&gt;
* Kasutaja saab sisestada limiit ostuordereid, kus märgib ära millist valuutat soovib osta mõne teise valuuta eest ning määrab maksimaalse ostuhinna ning koguse.&lt;br /&gt;
* Süsteem leiab ostu-müügi orderite vahel kokku sobivad orderid, mis hinna poolest rahuldavad mõlemaid osapooli ning toimub automaatselt tehing – orderid loetakse  kas osaliselt või täielikult täidetuks ning tehing kantakse tehingute nimekirja. Vastavatel osapooltel toimub ka kontoseisu muutus.&lt;br /&gt;
* Orderite täitmine võib toimuda ka mitmes osas, kus ühe osapoole valuuta kogus erineb teise osapoole orderil märgitud kogusest. Sel juhul vähendatakse ühe osapoole orderi kogust toimunud tehingu mahu võrra.&lt;br /&gt;
* Kasutaja saab tühistada enda poolt üles seatud ordereid.&lt;br /&gt;
* Kasutaja saab vaadata rahakonto seisu, kui palju erinevaid valuutasid arvel on.&lt;br /&gt;
* Kasutaja saab vaadata enda orderite ja tehingute ajalugu.&lt;br /&gt;
* Iga toimunud tehingu pealt võetakse ka % teenustasu.&lt;br /&gt;
* Orderi loomise eelnevalt kontrollitakse, kas kasutaja rahakontol piisavalt vabu vahendeid tehingu toimimiseks ning kuni tehingu toimumiseni on vastav kogus valuutat kontol broneeritud. Reaalselt arvestatakse maha peale tehingu lõppu.&lt;br /&gt;
* Admin saab määrata, milliste süsteemis olevate valuutade vahel saab kaubelda.&lt;br /&gt;
* Admin saab muuta teenustasu % väärtust.&lt;br /&gt;
* Admin saab lukustada kasutajate kontosid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Nice-to-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Valuutade sisse -ja väljakanded.&lt;br /&gt;
* Graafiline kasutajaliides hinnaliikumise ja teiste näitajate kuvamiseks.&lt;br /&gt;
* Peale limiitorderite ka teiste orderitüüpide toetamine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Tegevuste logi:==&lt;br /&gt;
&#039;&#039;&#039;10.02.2018&#039;&#039;&#039; -&lt;br /&gt;
Meeskonna loomine, idee paikapanemine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;24.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Andmemudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;26.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Analüüsi ja funktsionaalsuse kirjutamine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;31.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Wiki lehe loomine.&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=130150</id>
		<title>Meeskond:Curry</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=130150"/>
		<updated>2018-03-31T18:21:35Z</updated>

		<summary type="html">&lt;p&gt;Relken: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Liikmed=&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
=Analüüs=&lt;br /&gt;
==Kirjeldus==&lt;br /&gt;
Curry näol on tegemist erinevate krüptorahade kauplemisplatvormiga, kus registreerunud kasutaja saab üles seada ostu- või müügitellimusi (edaspidi ordereid). Ostja määrab ära, millise maksimaalse hinna eest on nõus ühte krüptoraha valuutat teise eest ostma ning ka ostukoguse. Müüa seevastu ütleb, millise hinnaga soovib ühte valuutat teise vastu vahetada ja koguse. Süsteem viib automaatselt ostu-müügiorderid kokku ning kui hind on mõlemapoolselt sobilik, toimub tehing. Platvorm haldab ise kasutajakontol olevat rahakogust. Rakenduse peavaates on võimalik näha aktiivseid ordereid, kus müügiorderid reastatakse hinna järgi kasvavalt, ostuorderid kahanevalt. Projekti mahu hulka ei kuulu krüptovaluutade sisse- ja väljakande funktsionaalsus.&lt;br /&gt;
&lt;br /&gt;
===Andmemudeli skeem:===&lt;br /&gt;
[[File:Curry.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Üldised nõuded:==&lt;br /&gt;
* Veebiteenuse andmevahetus toimub JSON formaadis.&lt;br /&gt;
* Klientrakendus töötab kõikides enamlevinud veebibrauserites.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Must-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Kasutaja saab endale registreerimisega konto luua.&lt;br /&gt;
* Kasutaja saab enda andmeid (nimi, email, jne) muuta.&lt;br /&gt;
* Süsteemis on kindlaks määratud kindlad valuutapaarid, millede vahel kaubelda saab. Minimaalselt 1 valuutapaar ehk 2 erinevat valuutat.&lt;br /&gt;
* Kasutaja saab sisestada limiit müügiordereid, kus märgib ära millist valuutat mille vastu müüb, ning määrab hinna ning koguse.&lt;br /&gt;
* Kasutaja saab sisestada limiit ostuordereid, kus märgib ära millist valuutat soovib osta mõne teise valuuta eest ning määrab maksimaalse ostuhinna ning koguse.&lt;br /&gt;
* Süsteem leiab ostu-müügi orderite vahel kokku sobivad orderid, mis hinna poolest rahuldavad mõlemaid osapooli ning toimub automaatselt tehing – orderid loetakse  kas osaliselt või täielikult täidetuks ning tehing kantakse tehingute nimekirja. Vastavatel osapooltel toimub ka kontoseisu muutus.&lt;br /&gt;
* Orderite täitmine võib toimuda ka mitmes osas, kus ühe osapoole valuuta kogus erineb teise osapoole orderil märgitud kogusest. Sel juhul vähendatakse ühe osapoole orderi kogust toimunud tehingu mahu võrra.&lt;br /&gt;
* Kasutaja saab tühistada enda poolt üles seatud ordereid.&lt;br /&gt;
* Kasutaja saab vaadata rahakonto seisu, kui palju erinevaid valuutasid arvel on.&lt;br /&gt;
* Kasutaja saab vaadata enda orderite ja tehingute ajalugu.&lt;br /&gt;
* Iga toimunud tehingu pealt võetakse ka % teenustasu.&lt;br /&gt;
* Orderi loomise eelnevalt kontrollitakse, kas kasutaja rahakontol piisavalt vabu vahendeid tehingu toimimiseks ning kuni tehingu toimumiseni on vastav kogus valuutat kontol broneeritud. Reaalselt arvestatakse maha peale tehingu lõppu.&lt;br /&gt;
* Admin saab määrata, milliste süsteemis olevate valuutade vahel saab kaubelda.&lt;br /&gt;
* Admin saab muuta teenustasu % väärtust.&lt;br /&gt;
* Admin saab lukustada kasutajate kontosid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Nice-to-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Valuutade sisse -ja väljakanded.&lt;br /&gt;
* Graafiline kasutajaliides hinnaliikumise ja teiste näitajate kuvamiseks.&lt;br /&gt;
* Peale limiitorderite ka teiste orderitüüpide toetamine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Tegevuste logi:==&lt;br /&gt;
&#039;&#039;&#039;10.02.2018&#039;&#039;&#039; -&lt;br /&gt;
Meeskonna loomine, idee paikapanemine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;24.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Andmemudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;26.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Analüüsi ja funktsionaalsuse kirjutamine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;31.03.2018&#039;&#039;&#039; -&lt;br /&gt;
Wiki lehe loomine.&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=130147</id>
		<title>Meeskond:Curry</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=130147"/>
		<updated>2018-03-31T18:17:06Z</updated>

		<summary type="html">&lt;p&gt;Relken: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Liikmed=&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
=Analüüs=&lt;br /&gt;
==Kirjeldus==&lt;br /&gt;
Curry näol on tegemist erinevate krüptorahade kauplemisplatvormiga, kus registreerunud kasutaja saab üles seada ostu- või müügitellimusi (edaspidi ordereid). Ostja määrab ära, millise maksimaalse hinna eest on nõus ühte krüptoraha valuutat teise eest ostma ning ka ostukoguse. Müüa seevastu ütleb, millise hinnaga soovib ühte valuutat teise vastu vahetada ja koguse. Süsteem viib automaatselt ostu-müügiorderid kokku ning kui hind on mõlemapoolselt sobilik, toimub tehing. Platvorm haldab ise kasutajakontol olevat rahakogust. Rakenduse peavaates on võimalik näha aktiivseid ordereid, kus müügiorderid reastatakse hinna järgi kasvavalt, ostuorderid kahanevalt. Projekti mahu hulka ei kuulu krüptovaluutade sisse- ja väljakande funktsionaalsus.&lt;br /&gt;
&lt;br /&gt;
===Andmemudeli skeem:===&lt;br /&gt;
[[File:Curry.png|700px]]&lt;br /&gt;
&lt;br /&gt;
==Üldised nõuded:==&lt;br /&gt;
* Veebiteenuse andmevahetus toimub JSON formaadis.&lt;br /&gt;
* Klientrakendus töötab kõikides enamlevinud veebibrauserites.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Must-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Kasutaja saab endale registreerimisega konto luua.&lt;br /&gt;
* Kasutaja saab enda andmeid (nimi, email, jne) muuta.&lt;br /&gt;
* Süsteemis on kindlaks määratud kindlad valuutapaarid, millede vahel kaubelda saab. Minimaalselt 1 valuutapaar ehk 2 erinevat valuutat.&lt;br /&gt;
* Kasutaja saab sisestada limiit müügiordereid, kus märgib ära millist valuutat mille vastu müüb, ning määrab hinna ning koguse.&lt;br /&gt;
* Kasutaja saab sisestada limiit ostuordereid, kus märgib ära millist valuutat soovib osta mõne teise valuuta eest ning määrab maksimaalse ostuhinna ning koguse.&lt;br /&gt;
* Süsteem leiab ostu-müügi orderite vahel kokku sobivad orderid, mis hinna poolest rahuldavad mõlemaid osapooli ning toimub automaatselt tehing – orderid loetakse  kas osaliselt või täielikult täidetuks ning tehing kantakse tehingute nimekirja. Vastavatel osapooltel toimub ka kontoseisu muutus.&lt;br /&gt;
* Orderite täitmine võib toimuda ka mitmes osas, kus ühe osapoole valuuta kogus erineb teise osapoole orderil märgitud kogusest. Sel juhul vähendatakse ühe osapoole orderi kogust toimunud tehingu mahu võrra.&lt;br /&gt;
* Kasutaja saab tühistada enda poolt üles seatud ordereid.&lt;br /&gt;
* Kasutaja saab vaadata rahakonto seisu, kui palju erinevaid valuutasid arvel on.&lt;br /&gt;
* Kasutaja saab vaadata enda orderite ja tehingute ajalugu.&lt;br /&gt;
* Iga toimunud tehingu pealt võetakse ka % teenustasu.&lt;br /&gt;
* Orderi loomise eelnevalt kontrollitakse, kas kasutaja rahakontol piisavalt vabu vahendeid tehingu toimimiseks ning kuni tehingu toimumiseni on vastav kogus valuutat kontol broneeritud. Reaalselt arvestatakse maha peale tehingu lõppu.&lt;br /&gt;
* Admin saab määrata, milliste süsteemis olevate valuutade vahel saab kaubelda.&lt;br /&gt;
* Admin saab muuta teenustasu % väärtust.&lt;br /&gt;
* Admin saab lukustada kasutajate kontosid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Nice-to-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Valuutade sisse -ja väljakanded.&lt;br /&gt;
* Graafiline kasutajaliides hinnaliikumise ja teiste näitajate kuvamiseks.&lt;br /&gt;
* Peale limiitorderite ka teiste orderitüüpide toetamine.&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=130146</id>
		<title>Meeskond:Curry</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=130146"/>
		<updated>2018-03-31T18:16:10Z</updated>

		<summary type="html">&lt;p&gt;Relken: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Liikmed=&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
=Analüüs=&lt;br /&gt;
==Kirjeldus==&lt;br /&gt;
Curry näol on tegemist erinevate krüptorahade kauplemisplatvormiga, kus registreerunud kasutaja saab üles seada ostu- või müügitellimusi (edaspidi ordereid). Ostja määrab ära, millise maksimaalse hinna eest on nõus ühte krüptoraha valuutat teise eest ostma ning ka ostukoguse. Müüa seevastu ütleb, millise hinnaga soovib ühte valuutat teise vastu vahetada ja koguse. Süsteem viib automaatselt ostu-müügiorderid kokku ning kui hind on mõlemapoolselt sobilik, toimub tehing. Platvorm haldab ise kasutajakontol olevat rahakogust. Rakenduse peavaates on võimalik näha aktiivseid ordereid, kus müügiorderid reastatakse hinna järgi kasvavalt, ostuorderid kahanevalt. Projekti mahu hulka ei kuulu krüptovaluutade sisse- ja väljakande funktsionaalsus.&lt;br /&gt;
&lt;br /&gt;
[[File:Curry.png|700px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&#039;&#039;Curry andmemudel&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Üldised nõuded:==&lt;br /&gt;
* Veebiteenuse andmevahetus toimub JSON formaadis.&lt;br /&gt;
* Klientrakendus töötab kõikides enamlevinud veebibrauserites.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Must-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Kasutaja saab endale registreerimisega konto luua.&lt;br /&gt;
* Kasutaja saab enda andmeid (nimi, email, jne) muuta.&lt;br /&gt;
* Süsteemis on kindlaks määratud kindlad valuutapaarid, millede vahel kaubelda saab. Minimaalselt 1 valuutapaar ehk 2 erinevat valuutat.&lt;br /&gt;
* Kasutaja saab sisestada limiit müügiordereid, kus märgib ära millist valuutat mille vastu müüb, ning määrab hinna ning koguse.&lt;br /&gt;
* Kasutaja saab sisestada limiit ostuordereid, kus märgib ära millist valuutat soovib osta mõne teise valuuta eest ning määrab maksimaalse ostuhinna ning koguse.&lt;br /&gt;
* Süsteem leiab ostu-müügi orderite vahel kokku sobivad orderid, mis hinna poolest rahuldavad mõlemaid osapooli ning toimub automaatselt tehing – orderid loetakse  kas osaliselt või täielikult täidetuks ning tehing kantakse tehingute nimekirja. Vastavatel osapooltel toimub ka kontoseisu muutus.&lt;br /&gt;
* Orderite täitmine võib toimuda ka mitmes osas, kus ühe osapoole valuuta kogus erineb teise osapoole orderil märgitud kogusest. Sel juhul vähendatakse ühe osapoole orderi kogust toimunud tehingu mahu võrra.&lt;br /&gt;
* Kasutaja saab tühistada enda poolt üles seatud ordereid.&lt;br /&gt;
* Kasutaja saab vaadata rahakonto seisu, kui palju erinevaid valuutasid arvel on.&lt;br /&gt;
* Kasutaja saab vaadata enda orderite ja tehingute ajalugu.&lt;br /&gt;
* Iga toimunud tehingu pealt võetakse ka % teenustasu.&lt;br /&gt;
* Orderi loomise eelnevalt kontrollitakse, kas kasutaja rahakontol piisavalt vabu vahendeid tehingu toimimiseks ning kuni tehingu toimumiseni on vastav kogus valuutat kontol broneeritud. Reaalselt arvestatakse maha peale tehingu lõppu.&lt;br /&gt;
* Admin saab määrata, milliste süsteemis olevate valuutade vahel saab kaubelda.&lt;br /&gt;
* Admin saab muuta teenustasu % väärtust.&lt;br /&gt;
* Admin saab lukustada kasutajate kontosid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Nice-to-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Valuutade sisse -ja väljakanded.&lt;br /&gt;
* Graafiline kasutajaliides hinnaliikumise ja teiste näitajate kuvamiseks.&lt;br /&gt;
* Peale limiitorderite ka teiste orderitüüpide toetamine.&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=130145</id>
		<title>Meeskond:Curry</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=130145"/>
		<updated>2018-03-31T18:15:44Z</updated>

		<summary type="html">&lt;p&gt;Relken: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Liikmed=&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
=Analüüs=&lt;br /&gt;
==Kirjeldus==&lt;br /&gt;
Curry näol on tegemist erinevate krüptorahade kauplemisplatvormiga, kus registreerunud kasutaja saab üles seada ostu- või müügitellimusi (edaspidi ordereid). Ostja määrab ära, millise maksimaalse hinna eest on nõus ühte krüptoraha valuutat teise eest ostma ning ka ostukoguse. Müüa seevastu ütleb, millise hinnaga soovib ühte valuutat teise vastu vahetada ja koguse. Süsteem viib automaatselt ostu-müügiorderid kokku ning kui hind on mõlemapoolselt sobilik, toimub tehing. Platvorm haldab ise kasutajakontol olevat rahakogust. Rakenduse peavaates on võimalik näha aktiivseid ordereid, kus müügiorderid reastatakse hinna järgi kasvavalt, ostuorderid kahanevalt. Projekti mahu hulka ei kuulu krüptovaluutade sisse- ja väljakande funktsionaalsus.&lt;br /&gt;
&lt;br /&gt;
[[File:Curry.png|700px]]&lt;br /&gt;
&#039;&#039;Curry andmemudel&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Üldised nõuded:==&lt;br /&gt;
* Veebiteenuse andmevahetus toimub JSON formaadis.&lt;br /&gt;
* Klientrakendus töötab kõikides enamlevinud veebibrauserites.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Must-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Kasutaja saab endale registreerimisega konto luua.&lt;br /&gt;
* Kasutaja saab enda andmeid (nimi, email, jne) muuta.&lt;br /&gt;
* Süsteemis on kindlaks määratud kindlad valuutapaarid, millede vahel kaubelda saab. Minimaalselt 1 valuutapaar ehk 2 erinevat valuutat.&lt;br /&gt;
* Kasutaja saab sisestada limiit müügiordereid, kus märgib ära millist valuutat mille vastu müüb, ning määrab hinna ning koguse.&lt;br /&gt;
* Kasutaja saab sisestada limiit ostuordereid, kus märgib ära millist valuutat soovib osta mõne teise valuuta eest ning määrab maksimaalse ostuhinna ning koguse.&lt;br /&gt;
* Süsteem leiab ostu-müügi orderite vahel kokku sobivad orderid, mis hinna poolest rahuldavad mõlemaid osapooli ning toimub automaatselt tehing – orderid loetakse  kas osaliselt või täielikult täidetuks ning tehing kantakse tehingute nimekirja. Vastavatel osapooltel toimub ka kontoseisu muutus.&lt;br /&gt;
* Orderite täitmine võib toimuda ka mitmes osas, kus ühe osapoole valuuta kogus erineb teise osapoole orderil märgitud kogusest. Sel juhul vähendatakse ühe osapoole orderi kogust toimunud tehingu mahu võrra.&lt;br /&gt;
* Kasutaja saab tühistada enda poolt üles seatud ordereid.&lt;br /&gt;
* Kasutaja saab vaadata rahakonto seisu, kui palju erinevaid valuutasid arvel on.&lt;br /&gt;
* Kasutaja saab vaadata enda orderite ja tehingute ajalugu.&lt;br /&gt;
* Iga toimunud tehingu pealt võetakse ka % teenustasu.&lt;br /&gt;
* Orderi loomise eelnevalt kontrollitakse, kas kasutaja rahakontol piisavalt vabu vahendeid tehingu toimimiseks ning kuni tehingu toimumiseni on vastav kogus valuutat kontol broneeritud. Reaalselt arvestatakse maha peale tehingu lõppu.&lt;br /&gt;
* Admin saab määrata, milliste süsteemis olevate valuutade vahel saab kaubelda.&lt;br /&gt;
* Admin saab muuta teenustasu % väärtust.&lt;br /&gt;
* Admin saab lukustada kasutajate kontosid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Nice-to-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Valuutade sisse -ja väljakanded.&lt;br /&gt;
* Graafiline kasutajaliides hinnaliikumise ja teiste näitajate kuvamiseks.&lt;br /&gt;
* Peale limiitorderite ka teiste orderitüüpide toetamine.&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=130144</id>
		<title>Meeskond:Curry</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=130144"/>
		<updated>2018-03-31T18:15:15Z</updated>

		<summary type="html">&lt;p&gt;Relken: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Liikmed=&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
=Analüüs=&lt;br /&gt;
==Kirjeldus==&lt;br /&gt;
Curry näol on tegemist erinevate krüptorahade kauplemisplatvormiga, kus registreerunud kasutaja saab üles seada ostu- või müügitellimusi (edaspidi ordereid). Ostja määrab ära, millise maksimaalse hinna eest on nõus ühte krüptoraha valuutat teise eest ostma ning ka ostukoguse. Müüa seevastu ütleb, millise hinnaga soovib ühte valuutat teise vastu vahetada ja koguse. Süsteem viib automaatselt ostu-müügiorderid kokku ning kui hind on mõlemapoolselt sobilik, toimub tehing. Platvorm haldab ise kasutajakontol olevat rahakogust. Rakenduse peavaates on võimalik näha aktiivseid ordereid, kus müügiorderid reastatakse hinna järgi kasvavalt, ostuorderid kahanevalt. Projekti mahu hulka ei kuulu krüptovaluutade sisse- ja väljakande funktsionaalsus.&lt;br /&gt;
&lt;br /&gt;
[[File:Curry.png|700px]]&lt;br /&gt;
&lt;br /&gt;
==Üldised nõuded:==&lt;br /&gt;
* Veebiteenuse andmevahetus toimub JSON formaadis.&lt;br /&gt;
* Klientrakendus töötab kõikides enamlevinud veebibrauserites.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Must-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Kasutaja saab endale registreerimisega konto luua.&lt;br /&gt;
* Kasutaja saab enda andmeid (nimi, email, jne) muuta.&lt;br /&gt;
* Süsteemis on kindlaks määratud kindlad valuutapaarid, millede vahel kaubelda saab. Minimaalselt 1 valuutapaar ehk 2 erinevat valuutat.&lt;br /&gt;
* Kasutaja saab sisestada limiit müügiordereid, kus märgib ära millist valuutat mille vastu müüb, ning määrab hinna ning koguse.&lt;br /&gt;
* Kasutaja saab sisestada limiit ostuordereid, kus märgib ära millist valuutat soovib osta mõne teise valuuta eest ning määrab maksimaalse ostuhinna ning koguse.&lt;br /&gt;
* Süsteem leiab ostu-müügi orderite vahel kokku sobivad orderid, mis hinna poolest rahuldavad mõlemaid osapooli ning toimub automaatselt tehing – orderid loetakse  kas osaliselt või täielikult täidetuks ning tehing kantakse tehingute nimekirja. Vastavatel osapooltel toimub ka kontoseisu muutus.&lt;br /&gt;
* Orderite täitmine võib toimuda ka mitmes osas, kus ühe osapoole valuuta kogus erineb teise osapoole orderil märgitud kogusest. Sel juhul vähendatakse ühe osapoole orderi kogust toimunud tehingu mahu võrra.&lt;br /&gt;
* Kasutaja saab tühistada enda poolt üles seatud ordereid.&lt;br /&gt;
* Kasutaja saab vaadata rahakonto seisu, kui palju erinevaid valuutasid arvel on.&lt;br /&gt;
* Kasutaja saab vaadata enda orderite ja tehingute ajalugu.&lt;br /&gt;
* Iga toimunud tehingu pealt võetakse ka % teenustasu.&lt;br /&gt;
* Orderi loomise eelnevalt kontrollitakse, kas kasutaja rahakontol piisavalt vabu vahendeid tehingu toimimiseks ning kuni tehingu toimumiseni on vastav kogus valuutat kontol broneeritud. Reaalselt arvestatakse maha peale tehingu lõppu.&lt;br /&gt;
* Admin saab määrata, milliste süsteemis olevate valuutade vahel saab kaubelda.&lt;br /&gt;
* Admin saab muuta teenustasu % väärtust.&lt;br /&gt;
* Admin saab lukustada kasutajate kontosid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Nice-to-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Valuutade sisse -ja väljakanded.&lt;br /&gt;
* Graafiline kasutajaliides hinnaliikumise ja teiste näitajate kuvamiseks.&lt;br /&gt;
* Peale limiitorderite ka teiste orderitüüpide toetamine.&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=130143</id>
		<title>Meeskond:Curry</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=130143"/>
		<updated>2018-03-31T18:15:04Z</updated>

		<summary type="html">&lt;p&gt;Relken: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Liikmed=&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
=Analüüs=&lt;br /&gt;
==Kirjeldus==&lt;br /&gt;
Curry näol on tegemist erinevate krüptorahade kauplemisplatvormiga, kus registreerunud kasutaja saab üles seada ostu- või müügitellimusi (edaspidi ordereid). Ostja määrab ära, millise maksimaalse hinna eest on nõus ühte krüptoraha valuutat teise eest ostma ning ka ostukoguse. Müüa seevastu ütleb, millise hinnaga soovib ühte valuutat teise vastu vahetada ja koguse. Süsteem viib automaatselt ostu-müügiorderid kokku ning kui hind on mõlemapoolselt sobilik, toimub tehing. Platvorm haldab ise kasutajakontol olevat rahakogust. Rakenduse peavaates on võimalik näha aktiivseid ordereid, kus müügiorderid reastatakse hinna järgi kasvavalt, ostuorderid kahanevalt. Projekti mahu hulka ei kuulu krüptovaluutade sisse- ja väljakande funktsionaalsus.&lt;br /&gt;
&lt;br /&gt;
[[File:Curry.png|500px]]&lt;br /&gt;
&lt;br /&gt;
==Üldised nõuded:==&lt;br /&gt;
* Veebiteenuse andmevahetus toimub JSON formaadis.&lt;br /&gt;
* Klientrakendus töötab kõikides enamlevinud veebibrauserites.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Must-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Kasutaja saab endale registreerimisega konto luua.&lt;br /&gt;
* Kasutaja saab enda andmeid (nimi, email, jne) muuta.&lt;br /&gt;
* Süsteemis on kindlaks määratud kindlad valuutapaarid, millede vahel kaubelda saab. Minimaalselt 1 valuutapaar ehk 2 erinevat valuutat.&lt;br /&gt;
* Kasutaja saab sisestada limiit müügiordereid, kus märgib ära millist valuutat mille vastu müüb, ning määrab hinna ning koguse.&lt;br /&gt;
* Kasutaja saab sisestada limiit ostuordereid, kus märgib ära millist valuutat soovib osta mõne teise valuuta eest ning määrab maksimaalse ostuhinna ning koguse.&lt;br /&gt;
* Süsteem leiab ostu-müügi orderite vahel kokku sobivad orderid, mis hinna poolest rahuldavad mõlemaid osapooli ning toimub automaatselt tehing – orderid loetakse  kas osaliselt või täielikult täidetuks ning tehing kantakse tehingute nimekirja. Vastavatel osapooltel toimub ka kontoseisu muutus.&lt;br /&gt;
* Orderite täitmine võib toimuda ka mitmes osas, kus ühe osapoole valuuta kogus erineb teise osapoole orderil märgitud kogusest. Sel juhul vähendatakse ühe osapoole orderi kogust toimunud tehingu mahu võrra.&lt;br /&gt;
* Kasutaja saab tühistada enda poolt üles seatud ordereid.&lt;br /&gt;
* Kasutaja saab vaadata rahakonto seisu, kui palju erinevaid valuutasid arvel on.&lt;br /&gt;
* Kasutaja saab vaadata enda orderite ja tehingute ajalugu.&lt;br /&gt;
* Iga toimunud tehingu pealt võetakse ka % teenustasu.&lt;br /&gt;
* Orderi loomise eelnevalt kontrollitakse, kas kasutaja rahakontol piisavalt vabu vahendeid tehingu toimimiseks ning kuni tehingu toimumiseni on vastav kogus valuutat kontol broneeritud. Reaalselt arvestatakse maha peale tehingu lõppu.&lt;br /&gt;
* Admin saab määrata, milliste süsteemis olevate valuutade vahel saab kaubelda.&lt;br /&gt;
* Admin saab muuta teenustasu % väärtust.&lt;br /&gt;
* Admin saab lukustada kasutajate kontosid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Nice-to-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Valuutade sisse -ja väljakanded.&lt;br /&gt;
* Graafiline kasutajaliides hinnaliikumise ja teiste näitajate kuvamiseks.&lt;br /&gt;
* Peale limiitorderite ka teiste orderitüüpide toetamine.&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=130141</id>
		<title>Meeskond:Curry</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=130141"/>
		<updated>2018-03-31T18:14:26Z</updated>

		<summary type="html">&lt;p&gt;Relken: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Liikmed=&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
=Analüüs=&lt;br /&gt;
==Kirjeldus==&lt;br /&gt;
Curry näol on tegemist erinevate krüptorahade kauplemisplatvormiga, kus registreerunud kasutaja saab üles seada ostu- või müügitellimusi (edaspidi ordereid). Ostja määrab ära, millise maksimaalse hinna eest on nõus ühte krüptoraha valuutat teise eest ostma ning ka ostukoguse. Müüa seevastu ütleb, millise hinnaga soovib ühte valuutat teise vastu vahetada ja koguse. Süsteem viib automaatselt ostu-müügiorderid kokku ning kui hind on mõlemapoolselt sobilik, toimub tehing. Platvorm haldab ise kasutajakontol olevat rahakogust. Rakenduse peavaates on võimalik näha aktiivseid ordereid, kus müügiorderid reastatakse hinna järgi kasvavalt, ostuorderid kahanevalt. Projekti mahu hulka ei kuulu krüptovaluutade sisse- ja väljakande funktsionaalsus.&lt;br /&gt;
&lt;br /&gt;
[[File:Curry.png][500px]]&lt;br /&gt;
&lt;br /&gt;
==Üldised nõuded:==&lt;br /&gt;
* Veebiteenuse andmevahetus toimub JSON formaadis.&lt;br /&gt;
* Klientrakendus töötab kõikides enamlevinud veebibrauserites.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Must-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Kasutaja saab endale registreerimisega konto luua.&lt;br /&gt;
* Kasutaja saab enda andmeid (nimi, email, jne) muuta.&lt;br /&gt;
* Süsteemis on kindlaks määratud kindlad valuutapaarid, millede vahel kaubelda saab. Minimaalselt 1 valuutapaar ehk 2 erinevat valuutat.&lt;br /&gt;
* Kasutaja saab sisestada limiit müügiordereid, kus märgib ära millist valuutat mille vastu müüb, ning määrab hinna ning koguse.&lt;br /&gt;
* Kasutaja saab sisestada limiit ostuordereid, kus märgib ära millist valuutat soovib osta mõne teise valuuta eest ning määrab maksimaalse ostuhinna ning koguse.&lt;br /&gt;
* Süsteem leiab ostu-müügi orderite vahel kokku sobivad orderid, mis hinna poolest rahuldavad mõlemaid osapooli ning toimub automaatselt tehing – orderid loetakse  kas osaliselt või täielikult täidetuks ning tehing kantakse tehingute nimekirja. Vastavatel osapooltel toimub ka kontoseisu muutus.&lt;br /&gt;
* Orderite täitmine võib toimuda ka mitmes osas, kus ühe osapoole valuuta kogus erineb teise osapoole orderil märgitud kogusest. Sel juhul vähendatakse ühe osapoole orderi kogust toimunud tehingu mahu võrra.&lt;br /&gt;
* Kasutaja saab tühistada enda poolt üles seatud ordereid.&lt;br /&gt;
* Kasutaja saab vaadata rahakonto seisu, kui palju erinevaid valuutasid arvel on.&lt;br /&gt;
* Kasutaja saab vaadata enda orderite ja tehingute ajalugu.&lt;br /&gt;
* Iga toimunud tehingu pealt võetakse ka % teenustasu.&lt;br /&gt;
* Orderi loomise eelnevalt kontrollitakse, kas kasutaja rahakontol piisavalt vabu vahendeid tehingu toimimiseks ning kuni tehingu toimumiseni on vastav kogus valuutat kontol broneeritud. Reaalselt arvestatakse maha peale tehingu lõppu.&lt;br /&gt;
* Admin saab määrata, milliste süsteemis olevate valuutade vahel saab kaubelda.&lt;br /&gt;
* Admin saab muuta teenustasu % väärtust.&lt;br /&gt;
* Admin saab lukustada kasutajate kontosid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Nice-to-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Valuutade sisse -ja väljakanded.&lt;br /&gt;
* Graafiline kasutajaliides hinnaliikumise ja teiste näitajate kuvamiseks.&lt;br /&gt;
* Peale limiitorderite ka teiste orderitüüpide toetamine.&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:Curry.png&amp;diff=130139</id>
		<title>File:Curry.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:Curry.png&amp;diff=130139"/>
		<updated>2018-03-31T18:13:39Z</updated>

		<summary type="html">&lt;p&gt;Relken: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=130137</id>
		<title>Meeskond:Curry</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=130137"/>
		<updated>2018-03-31T18:09:44Z</updated>

		<summary type="html">&lt;p&gt;Relken: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Liikmed=&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
=Analüüs=&lt;br /&gt;
==Kirjeldus==&lt;br /&gt;
Curry näol on tegemist erinevate krüptorahade kauplemisplatvormiga, kus registreerunud kasutaja saab üles seada ostu- või müügitellimusi (edaspidi ordereid). Ostja määrab ära, millise maksimaalse hinna eest on nõus ühte krüptoraha valuutat teise eest ostma ning ka ostukoguse. Müüa seevastu ütleb, millise hinnaga soovib ühte valuutat teise vastu vahetada ja koguse. Süsteem viib automaatselt ostu-müügiorderid kokku ning kui hind on mõlemapoolselt sobilik, toimub tehing. Platvorm haldab ise kasutajakontol olevat rahakogust. Rakenduse peavaates on võimalik näha aktiivseid ordereid, kus müügiorderid reastatakse hinna järgi kasvavalt, ostuorderid kahanevalt. Projekti mahu hulka ei kuulu krüptovaluutade sisse- ja väljakande funktsionaalsus.&lt;br /&gt;
&lt;br /&gt;
[[File:Curry.png]]&lt;br /&gt;
&lt;br /&gt;
==Üldised nõuded:==&lt;br /&gt;
* Veebiteenuse andmevahetus toimub JSON formaadis.&lt;br /&gt;
* Klientrakendus töötab kõikides enamlevinud veebibrauserites.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Must-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Kasutaja saab endale registreerimisega konto luua.&lt;br /&gt;
* Kasutaja saab enda andmeid (nimi, email, jne) muuta.&lt;br /&gt;
* Süsteemis on kindlaks määratud kindlad valuutapaarid, millede vahel kaubelda saab. Minimaalselt 1 valuutapaar ehk 2 erinevat valuutat.&lt;br /&gt;
* Kasutaja saab sisestada limiit müügiordereid, kus märgib ära millist valuutat mille vastu müüb, ning määrab hinna ning koguse.&lt;br /&gt;
* Kasutaja saab sisestada limiit ostuordereid, kus märgib ära millist valuutat soovib osta mõne teise valuuta eest ning määrab maksimaalse ostuhinna ning koguse.&lt;br /&gt;
* Süsteem leiab ostu-müügi orderite vahel kokku sobivad orderid, mis hinna poolest rahuldavad mõlemaid osapooli ning toimub automaatselt tehing – orderid loetakse  kas osaliselt või täielikult täidetuks ning tehing kantakse tehingute nimekirja. Vastavatel osapooltel toimub ka kontoseisu muutus.&lt;br /&gt;
* Orderite täitmine võib toimuda ka mitmes osas, kus ühe osapoole valuuta kogus erineb teise osapoole orderil märgitud kogusest. Sel juhul vähendatakse ühe osapoole orderi kogust toimunud tehingu mahu võrra.&lt;br /&gt;
* Kasutaja saab tühistada enda poolt üles seatud ordereid.&lt;br /&gt;
* Kasutaja saab vaadata rahakonto seisu, kui palju erinevaid valuutasid arvel on.&lt;br /&gt;
* Kasutaja saab vaadata enda orderite ja tehingute ajalugu.&lt;br /&gt;
* Iga toimunud tehingu pealt võetakse ka % teenustasu.&lt;br /&gt;
* Orderi loomise eelnevalt kontrollitakse, kas kasutaja rahakontol piisavalt vabu vahendeid tehingu toimimiseks ning kuni tehingu toimumiseni on vastav kogus valuutat kontol broneeritud. Reaalselt arvestatakse maha peale tehingu lõppu.&lt;br /&gt;
* Admin saab määrata, milliste süsteemis olevate valuutade vahel saab kaubelda.&lt;br /&gt;
* Admin saab muuta teenustasu % väärtust.&lt;br /&gt;
* Admin saab lukustada kasutajate kontosid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Nice-to-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Valuutade sisse -ja väljakanded.&lt;br /&gt;
* Graafiline kasutajaliides hinnaliikumise ja teiste näitajate kuvamiseks.&lt;br /&gt;
* Peale limiitorderite ka teiste orderitüüpide toetamine.&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=130136</id>
		<title>Meeskond:Curry</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=130136"/>
		<updated>2018-03-31T18:09:24Z</updated>

		<summary type="html">&lt;p&gt;Relken: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Liikmed=&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
=Analüüs=&lt;br /&gt;
==Kirjeldus==&lt;br /&gt;
Curry näol on tegemist erinevate krüptorahade kauplemisplatvormiga, kus registreerunud kasutaja saab üles seada ostu- või müügitellimusi (edaspidi ordereid). Ostja määrab ära, millise maksimaalse hinna eest on nõus ühte krüptoraha valuutat teise eest ostma ning ka ostukoguse. Müüa seevastu ütleb, millise hinnaga soovib ühte valuutat teise vastu vahetada ja koguse. Süsteem viib automaatselt ostu-müügiorderid kokku ning kui hind on mõlemapoolselt sobilik, toimub tehing. Platvorm haldab ise kasutajakontol olevat rahakogust. Rakenduse peavaates on võimalik näha aktiivseid ordereid, kus müügiorderid reastatakse hinna järgi kasvavalt, ostuorderid kahanevalt. Projekti mahu hulka ei kuulu krüptovaluutade sisse- ja väljakande funktsionaalsus.&lt;br /&gt;
&lt;br /&gt;
[[File:C:/Dev/VRII/Curry.png]]&lt;br /&gt;
&lt;br /&gt;
==Üldised nõuded:==&lt;br /&gt;
* Veebiteenuse andmevahetus toimub JSON formaadis.&lt;br /&gt;
* Klientrakendus töötab kõikides enamlevinud veebibrauserites.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Must-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Kasutaja saab endale registreerimisega konto luua.&lt;br /&gt;
* Kasutaja saab enda andmeid (nimi, email, jne) muuta.&lt;br /&gt;
* Süsteemis on kindlaks määratud kindlad valuutapaarid, millede vahel kaubelda saab. Minimaalselt 1 valuutapaar ehk 2 erinevat valuutat.&lt;br /&gt;
* Kasutaja saab sisestada limiit müügiordereid, kus märgib ära millist valuutat mille vastu müüb, ning määrab hinna ning koguse.&lt;br /&gt;
* Kasutaja saab sisestada limiit ostuordereid, kus märgib ära millist valuutat soovib osta mõne teise valuuta eest ning määrab maksimaalse ostuhinna ning koguse.&lt;br /&gt;
* Süsteem leiab ostu-müügi orderite vahel kokku sobivad orderid, mis hinna poolest rahuldavad mõlemaid osapooli ning toimub automaatselt tehing – orderid loetakse  kas osaliselt või täielikult täidetuks ning tehing kantakse tehingute nimekirja. Vastavatel osapooltel toimub ka kontoseisu muutus.&lt;br /&gt;
* Orderite täitmine võib toimuda ka mitmes osas, kus ühe osapoole valuuta kogus erineb teise osapoole orderil märgitud kogusest. Sel juhul vähendatakse ühe osapoole orderi kogust toimunud tehingu mahu võrra.&lt;br /&gt;
* Kasutaja saab tühistada enda poolt üles seatud ordereid.&lt;br /&gt;
* Kasutaja saab vaadata rahakonto seisu, kui palju erinevaid valuutasid arvel on.&lt;br /&gt;
* Kasutaja saab vaadata enda orderite ja tehingute ajalugu.&lt;br /&gt;
* Iga toimunud tehingu pealt võetakse ka % teenustasu.&lt;br /&gt;
* Orderi loomise eelnevalt kontrollitakse, kas kasutaja rahakontol piisavalt vabu vahendeid tehingu toimimiseks ning kuni tehingu toimumiseni on vastav kogus valuutat kontol broneeritud. Reaalselt arvestatakse maha peale tehingu lõppu.&lt;br /&gt;
* Admin saab määrata, milliste süsteemis olevate valuutade vahel saab kaubelda.&lt;br /&gt;
* Admin saab muuta teenustasu % väärtust.&lt;br /&gt;
* Admin saab lukustada kasutajate kontosid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Nice-to-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Valuutade sisse -ja väljakanded.&lt;br /&gt;
* Graafiline kasutajaliides hinnaliikumise ja teiste näitajate kuvamiseks.&lt;br /&gt;
* Peale limiitorderite ka teiste orderitüüpide toetamine.&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=130134</id>
		<title>Meeskond:Curry</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=130134"/>
		<updated>2018-03-31T18:05:32Z</updated>

		<summary type="html">&lt;p&gt;Relken: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Liikmed=&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
=Analüüs=&lt;br /&gt;
==Kirjeldus==&lt;br /&gt;
Curry näol on tegemist erinevate krüptorahade kauplemisplatvormiga, kus registreerunud kasutaja saab üles seada ostu- või müügitellimusi (edaspidi ordereid). Ostja määrab ära, millise maksimaalse hinna eest on nõus ühte krüptoraha valuutat teise eest ostma ning ka ostukoguse. Müüa seevastu ütleb, millise hinnaga soovib ühte valuutat teise vastu vahetada ja koguse. Süsteem viib automaatselt ostu-müügiorderid kokku ning kui hind on mõlemapoolselt sobilik, toimub tehing. Platvorm haldab ise kasutajakontol olevat rahakogust. Rakenduse peavaates on võimalik näha aktiivseid ordereid, kus müügiorderid reastatakse hinna järgi kasvavalt, ostuorderid kahanevalt. Projekti mahu hulka ei kuulu krüptovaluutade sisse- ja väljakande funktsionaalsus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Üldised nõuded:==&lt;br /&gt;
* Veebiteenuse andmevahetus toimub JSON formaadis.&lt;br /&gt;
* Klientrakendus töötab kõikides enamlevinud veebibrauserites.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Must-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Kasutaja saab endale registreerimisega konto luua.&lt;br /&gt;
* Kasutaja saab enda andmeid (nimi, email, jne) muuta.&lt;br /&gt;
* Süsteemis on kindlaks määratud kindlad valuutapaarid, millede vahel kaubelda saab. Minimaalselt 1 valuutapaar ehk 2 erinevat valuutat.&lt;br /&gt;
* Kasutaja saab sisestada limiit müügiordereid, kus märgib ära millist valuutat mille vastu müüb, ning määrab hinna ning koguse.&lt;br /&gt;
* Kasutaja saab sisestada limiit ostuordereid, kus märgib ära millist valuutat soovib osta mõne teise valuuta eest ning määrab maksimaalse ostuhinna ning koguse.&lt;br /&gt;
* Süsteem leiab ostu-müügi orderite vahel kokku sobivad orderid, mis hinna poolest rahuldavad mõlemaid osapooli ning toimub automaatselt tehing – orderid loetakse  kas osaliselt või täielikult täidetuks ning tehing kantakse tehingute nimekirja. Vastavatel osapooltel toimub ka kontoseisu muutus.&lt;br /&gt;
* Orderite täitmine võib toimuda ka mitmes osas, kus ühe osapoole valuuta kogus erineb teise osapoole orderil märgitud kogusest. Sel juhul vähendatakse ühe osapoole orderi kogust toimunud tehingu mahu võrra.&lt;br /&gt;
* Kasutaja saab tühistada enda poolt üles seatud ordereid.&lt;br /&gt;
* Kasutaja saab vaadata rahakonto seisu, kui palju erinevaid valuutasid arvel on.&lt;br /&gt;
* Kasutaja saab vaadata enda orderite ja tehingute ajalugu.&lt;br /&gt;
* Iga toimunud tehingu pealt võetakse ka % teenustasu.&lt;br /&gt;
* Orderi loomise eelnevalt kontrollitakse, kas kasutaja rahakontol piisavalt vabu vahendeid tehingu toimimiseks ning kuni tehingu toimumiseni on vastav kogus valuutat kontol broneeritud. Reaalselt arvestatakse maha peale tehingu lõppu.&lt;br /&gt;
* Admin saab määrata, milliste süsteemis olevate valuutade vahel saab kaubelda.&lt;br /&gt;
* Admin saab muuta teenustasu % väärtust.&lt;br /&gt;
* Admin saab lukustada kasutajate kontosid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Nice-to-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Valuutade sisse -ja väljakanded.&lt;br /&gt;
* Graafiline kasutaaliides hinnaliikumise ja teiste näitajate kuvamiseks.&lt;br /&gt;
* Peale limiitorderite ka teiste orderitüüpide toetamine.&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=130133</id>
		<title>Meeskond:Curry</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=130133"/>
		<updated>2018-03-31T17:56:31Z</updated>

		<summary type="html">&lt;p&gt;Relken: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Liikmed=&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
=Analüüs=&lt;br /&gt;
==Kirjeldus==&lt;br /&gt;
Curry näol on tegemist erinevate krüptorahade kauplemisplatvormiga, kus registreerunud kasutaja saab üles seada ostu- või müügitellimusi (edaspidi ordereid). Ostja määrab ära, millise maksimaalse hinna eest on nõus ühte krüptoraha valuutat teise eest ostma ning ka ostukoguse. Müüa seevastu ütleb, millise hinnaga soovib ühte valuutat teise vastu vahetada ja koguse. Süsteem viib automaatselt ostu-müügiorderid kokku ning kui hind on mõlemapoolselt sobilik, toimub tehing. Platvorm haldab ise kasutajakontol olevat rahakogust. Rakenduse peavaates on võimalik näha aktiivseid ordereid, kus müügiorderid reastatakse hinna järgi kasvavalt, ostuorderid kahanevalt. Projekti mahu hulka ei kuulu krüptovaluutade sisse- ja väljakande funktsionaalsus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Üldised nõuded:==&lt;br /&gt;
* Veebiteenuse andmevahetus toimub JSON formaadis.&lt;br /&gt;
* Klientrakendus töötab kõikides enamlevinud veebibrauserites.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Must-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Kasutaja saab endale registreerimisega konto luua.&lt;br /&gt;
* Kasutaja saab enda andmeid (nimi, email, jne) muuta.&lt;br /&gt;
* Süsteemis on kindlaks määratud kindlad valuutapaarid, millede vahel kaubelda saab. Minimaalselt 1 valuutapaar ehk 2 erinevat valuutat.&lt;br /&gt;
* Kasutaja saab sisestada limiit müügiordereid, kus märgib ära millist valuutat mille vastu müüb, ning määrab hinna ning koguse.&lt;br /&gt;
* Kasutaja saab sisestada limiit ostuordereid, kus märgib ära millist valuutat soovib osta mõne teise valuuta eest ning määrab maksimaalse ostuhinna ning koguse.&lt;br /&gt;
* Süsteem leiab ostu-müügi orderite vahel kokku sobivad orderid, mis hinna poolest rahuldavad mõlemaid osapooli ning toimub automaatselt tehing – orderid loetakse  kas osaliselt või täielikult täidetuks ning tehing kantakse tehingute nimekirja. Vastavatel osapooltel toimub ka kontoseisu muutus.&lt;br /&gt;
* Orderite täitmine võib toimuda ka mitmes osas, kus ühe osapoole valuuta kogus erineb teise osapoole orderil märgitud kogusest. Sel juhul vähendatakse ühe osapoole orderi kogust toimunud tehingu mahu võrra.&lt;br /&gt;
* Kasutaja saab tühistada enda poolt üles seatud ordereid.&lt;br /&gt;
* Kasutaja saab vaadata rahakonto seisu, kui palju erinevaid valuutasid arvel on.&lt;br /&gt;
* Kasutaja saab vaadata enda orderite ja tehingute ajalugu.&lt;br /&gt;
* Iga toimunud tehingu pealt võetakse ka % teenustasu.&lt;br /&gt;
* Orderi loomise eelnevalt kontrollitakse, kas kasutaja rahakontol piisavalt vabu vahendeid tehingu toimimiseks ning kuni tehingu toimumiseni on vastav kogus valuutat kontol broneeritud. Reaalselt arvestatakse maha peale tehingu lõppu.&lt;br /&gt;
* Admin saab määrata, milliste süsteemis olevate valuutade vahel saab kaubelda.&lt;br /&gt;
* Admin saab muuta teenustasu % väärtust.&lt;br /&gt;
* Admin saab lukustada kasutajate kontosid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Nice-to-have funktsionaalsus:&#039;&#039;&#039;==&lt;br /&gt;
* Valuutade sisse -ja väljakanded.&lt;br /&gt;
* Graafiline kasutaaliides hinnaliikumise ja teiste näitajate kuvamiseks.&lt;br /&gt;
* Peale limiitorderite ka teiste orderitüüpide toetamine.&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=130131</id>
		<title>Meeskond:Curry</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=130131"/>
		<updated>2018-03-31T17:52:19Z</updated>

		<summary type="html">&lt;p&gt;Relken: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Liikmed=&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
=Analüüs=&lt;br /&gt;
==Kirjeldus==&lt;br /&gt;
Curry näol on tegemist erinevate krüptorahade kauplemisplatvormiga, kus registreerunud kasutaja saab üles seada ostu- või müügitellimusi (edaspidi ordereid). Ostja määrab ära, millise maksimaalse hinna eest on nõus ühte krüptoraha valuutat teise eest ostma ning ka ostukoguse. Müüa seevastu ütleb, millise hinnaga soovib ühte valuutat teise vastu vahetada ja koguse. Süsteem viib automaatselt ostu-müügiorderid kokku ning kui hind on mõlemapoolselt sobilik, toimub tehing. Platvorm haldab ise kasutajakontol olevat rahakogust. Rakenduse peavaates on võimalik näha aktiivseid ordereid, kus müügiorderid reastatakse hinna järgi kasvavalt, ostuorderid kahanevalt. Projekti mahu hulka ei kuulu krüptovaluutade sisse- ja väljakande funktsionaalsus.&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=130130</id>
		<title>Meeskond:Curry</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=130130"/>
		<updated>2018-03-31T17:50:56Z</updated>

		<summary type="html">&lt;p&gt;Relken: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Liikmed=&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
=Analüüs=&lt;br /&gt;
==Kirjeldus==&lt;br /&gt;
Curry näol on tegemist erinevate krüptorahade kauplemisplatvormiga, kus registreerunud kasutaja saab üles seada ostu- või müügiordereid. Ostja määrab ära, millise maksimaalse hinna eest on nõus ühte krüptoraha valuutat teise eest ostma ning ka ostukoguse. Müüa seevastu ütleb, millise hinnaga soovib ühte valuutat teise vastu vahetada ja koguse. Süsteem viib automaatselt ostu-müügiorderid kokku ning kui hind on mõlemapoolselt sobilik, toimub tehing. Platvorm haldab ise kasutajakontol olevat rahakogust. Rakenduse peavaates on võimalik näha aktiivseid ordereid, kus müügiorderid reastatakse hinna järgi kasvavalt, ostuorderid kahanevalt. Projekti mahu hulka ei kuulu krüptovaluutade sisse- ja väljakande funktsionaalsus.&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=130129</id>
		<title>Meeskond:Curry</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond:Curry&amp;diff=130129"/>
		<updated>2018-03-31T17:50:01Z</updated>

		<summary type="html">&lt;p&gt;Relken: Created page with &amp;quot;=Liikmed= * Rain Elken * Peeter Ploom&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Liikmed=&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;/div&gt;</summary>
		<author><name>Relken</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_2018&amp;diff=130128</id>
		<title>Kodutöö aines &quot;Võrgurakendused II: hajussüsteemide ehitamine&quot; 2018</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_2018&amp;diff=130128"/>
		<updated>2018-03-31T17:46:31Z</updated>

		<summary type="html">&lt;p&gt;Relken: /* Kaugõpe */&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; 2018=&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 API2/ASP.NET Core 2.0/WCF 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;
&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_2018#Veebiteenus NB! Täpsem info]&lt;br /&gt;
** Veebiteenuse analüüs peab olema valmis, esitatud ja wikilehel kirjeldatud hiljemalt: &#039;&#039;&#039;01.aprill 2018&#039;&#039;&#039;. Lisaks on  &#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;
** Veebiteenus peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;27. mai 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid veebiteenuste kohta peavad tehtud olema &#039;&#039;&#039;03. juuni 2018&#039;&#039;&#039;.&lt;br /&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_2018#Klientrakendus NB! Täpsem info]&lt;br /&gt;
** Klientrakendused peavad olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;27. mai 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid klientrakenduste kohta peavad tehtud olema &#039;&#039;&#039;03. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
&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_2018#XML_andmefail NB! Täpsem info]&lt;br /&gt;
** XML fail, stiilifail ja skeemifail peavad olema valmis ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;01. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid XML-failide kohta peavad tehtud olema &#039;&#039;&#039;05.juuni 2018&#039;&#039;&#039;.&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), paigaldusjuhend ning lahenduse kirjeldus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Maksimumtulemuse annab (vähemalt 4/7):&#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;
* Mobiilirakendused/Angularis/reactis loodud 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;
* Korraliku arhitektuuriga kirjutatud kood&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;
===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(ASP.NET veebirakendus või hoopis Angulari või Reacti baasil), töölauarakendusena(WPF) või mobiilse rakendusena(Xamarin)&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;
&lt;br /&gt;
=Teemad 2018 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;
&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 2018=&lt;br /&gt;
==Päevaõpe==&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/HairSaloon Meeskond: HairSaloon]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kaido Henrik Elias&lt;br /&gt;
* Arvo Paomees&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/VariousArtists Meeskond: VariousArtists]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Ruudi Vinter&lt;br /&gt;
* Madis Roosioks&lt;br /&gt;
* Madis Heinsoo&lt;br /&gt;
* Pavel Fleišer&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Maagikud Meeskond: Maagikud]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Kristina Rästas&lt;br /&gt;
*Simo Jaanus&lt;br /&gt;
*Artur Tammiste&lt;br /&gt;
*Rauno Lõhmus&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/RaamatuRiiul Meeskond: RaamatuRiiul]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Alo Avi&lt;br /&gt;
* Arnika Rästa&lt;br /&gt;
* Marite Rammo&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Autolugu Meeskond: Autolugu]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Margus Põlma&lt;br /&gt;
* Karl Erik Õunapuu&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/VRII2018 Meeskond: VRII2018]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kaspar Kaal&lt;br /&gt;
* Teet Adamson&lt;br /&gt;
* Rahel Kangur&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond_Raavo_V2%E2%84%A2 Meeskond: Raavo V2™]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Peeter Fridolin&lt;br /&gt;
* Kristo Leesmann&lt;br /&gt;
* Rando Rommot&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/PillarOfAutumn Meeskond: Pillar of Autumn ]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Taavi Põder&lt;br /&gt;
* Taavi Vesinurm&lt;br /&gt;
* Raido Vell&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/jaatuli Meeskond: JääTuli]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Tarmo Luugus&lt;br /&gt;
*Leho Kivistik&lt;br /&gt;
*Hannes Mäeorg&lt;br /&gt;
*Marten Tammeleht&lt;br /&gt;
&lt;br /&gt;
==Kaugõpe==&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/BSIS Meeskond: BSIS]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Germo Väli&lt;br /&gt;
* siin on vaba koht kui on huvi projekti vastu&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/BestInShow Meeskond: BestInShow]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Liina Abner&lt;br /&gt;
* Marju Pütsepp&lt;br /&gt;
* Liisi Taimre&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/WatchWinders Meeskond: WatchWinders]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Toomas Juhkov&lt;br /&gt;
* Kunnar Kukk&lt;br /&gt;
* Tiit Kuuskmäe&lt;br /&gt;
&lt;br /&gt;
===[[ Kuldneloojang | Meeskond: Kuldne loojang]]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Andrus Seiman&lt;br /&gt;
* Marko Belzetski&lt;br /&gt;
* Priit Tiganik&lt;br /&gt;
* Kristjan Peterson&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ophelia Meeskond: Ophelia]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Siim Kallari&lt;br /&gt;
* Andres Kepler&lt;br /&gt;
* Jorma Rebane&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/BeerPressure Meeskond: BeerPressure]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sigrid Aasma&lt;br /&gt;
* Evelin Jõgi&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Marko Nõu&lt;br /&gt;
&#039;&#039;&#039;Projekti TFS:&#039;&#039;&#039; TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud XML retsensioon:&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud veebiteenuse retsensioon:&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud klientrakenduse retsensioon:&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===[[ Memorize | Meeskond: Memorize]]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Madis Uudam&lt;br /&gt;
* Olle Mikk&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/UCanDo Meeskond: UCanDo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mart Raus&lt;br /&gt;
* Ando Kiidron&lt;br /&gt;
* Liina Saar&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TFS:&#039;&#039;&#039; Coming...&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/MOT Meeskond: MOT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Merike Meizner&lt;br /&gt;
* Helen Oppar&lt;br /&gt;
* Hardi Tiitus&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond:_MealPlanner Meeskond: MealPlanner]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Triin Oja&lt;br /&gt;
*Rein Remsu&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond:Curry Meeskond: Curry]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=User:Relken&amp;diff=95819</id>
		<title>User:Relken</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=User:Relken&amp;diff=95819"/>
		<updated>2015-10-30T22:32:13Z</updated>

		<summary type="html">&lt;p&gt;Relken: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Erialatutvustus 2015 kaugõpe]]&lt;br /&gt;
=&amp;lt;font size=&amp;quot;5&amp;quot;&amp;gt;&#039;&#039;&#039;Õpingukorraldus ja erialatutvustuse aine arvestustöö&#039;&#039;&#039;&amp;lt;/font&amp;gt;=&lt;br /&gt;
Autor: Rain Elken&lt;br /&gt;
&lt;br /&gt;
Rühm: DK14&lt;br /&gt;
&lt;br /&gt;
Esitamise kuupäev: 31. oktoober 2015&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&#039;&#039;&#039;Essee&#039;&#039;&#039;&amp;lt;/font&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kuivõrd ITK kaugõppes pole eraldi õppetöö algust kuulutavat traditsioonilist aktust ette nähtud, oli kaugõppuritele antud õppeaine raames toimunud esimene loeng&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/5c75a38e-e103-474a-9e39-42aa330f4305 Loengu &amp;quot;Õppekorraldus ja sisekord&amp;quot; videosalvestus. (Inga Vau, Merle Varendi, Juri Tretjakov, Lauri Võsandi, Andres Septer, Kristjan Karmo). 26. august 2015.]&amp;lt;/ref&amp;gt; kõige pidulikum üritus. Sooviti head õpingute algust, tutvustati üsna põhjalikult õppekorralduslikke küsimusi ning anti üheselt mõista, et asudes õppima ITK-sse - olete teinud täiesti õige valiku. Loomulikult manitseti, et kerge ei saa olema ning kõik ei lähe alati libedalt ning planeeritult, kaugõppe vormist tulenevalt tuleb õpingutes teha kompromisse töö- ja pereelu kõrvalt. Lisaks tutvustati võimalusi kuidas vabal ajal end erialaselt täiendada, nt robootikaklubi, üliõpilasesindus, codeclub. Ühtlasi anti suunised, kuidas antud aine läbi saada – essee loengumaterjalide põhjal + küsimused õppekorralduseeskirja kohta.&lt;br /&gt;
&lt;br /&gt;
Teises loengus&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/e2cded4a-d03a-4ed5-95e9-de354ce58f36 Loengu &amp;quot;IT projektide juhtimine&amp;quot; videosalvestus. (Tiina Seeman). 3. september 2015.]&amp;lt;/ref&amp;gt; tutvustati IT projektijuhtimise eripärasid Tiina Seemani poolt. Lektoril on suured kogemused erinevates firmades töötamises, mistõttu oli põnev kuulata. Rõhutas projektijuhi vajalikkust ja vastutust kogu projekti õnnestumise seisukohast. Paljud IT projektid kipuvad ebaõnnestuma ning seda eelkõige puuduliku kommunikatsiooni tõttu, projektijuhil siin keskne roll tagada suhtlus tellija ja arendaja vahel. Huvitav oli ettekandes tähelepanu juhtimine tellija kui kliendile, et kogu projekti on ikkagi kliendi jaoks, projekti käigus loodav lahendus peab aitama realiseerida kliendi ärilisi eesmärke. Projektijuht peab algselt võimalikult selgelt kaardistama, mida täpselt klient vajab ning ilma milleta projekti kuidagi õnnestunuks lugeda ei saaks. Takistusi ja probleeme tekib töö käigus paraku ikka, projektijuht peab jooksvalt koordineerima nende lahendamist, nii et klient ja arendaja mõlemad oleks rahul. &lt;br /&gt;
&lt;br /&gt;
Kolmas loeng&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/ce07046a-a6aa-41bb-8fe8-9f256a6d627f?ec=true Loengu &amp;quot;Õppimisest. Omast kogemusest.&amp;quot; videosalvestus. (Elar Lang). 10. september 2015.]&amp;lt;/ref&amp;gt; oli põnev ja innustav. Elar Lang rääkis hästi – olles varasemalt pikka aega olnud iseõppijast veebiarendaja – kuidas ikkagi ilma ülikooli hariduseta edasi ei arene. Ise õppides esiteks kulub palju aega, kuniks kõik läbi proovid. Teiseks ei õpi ega tunne erialaseid spetsiifilise termineid, mistõttu on suhtlemine teiste arendajatega keeruline. Kõige olulisem moment ettekande juures oli &#039;õppida õppima&#039; momendi rõhutamine, mis oli väga hästi selgeks tehtud. IT maailm muutub väga kiiresti, mistõttu peab koguaeg ka hiljem peale kooli lõppu aina juurde õppima. Tähtis on kujundada õiged õpiharjumused kohe, ülikooli alguses. Vältida tuleb tudengi sündroomi ning samm-sammult ja järjepidevalt pühenduda õppimisse. &lt;br /&gt;
&lt;br /&gt;
Neljandas loengus&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/8e2141b7-9e98-49dc-a05d-6ca0edd3c19c?ec=true Loengu &amp;quot;Millega tegeleb süsteemihaldur&amp;quot; videosalvestus. (Taavi Tuisk). 17. september 2015.]&amp;lt;/ref&amp;gt; tutvustas Taavi Tuisk süsteemiandministraatori köögipoolt. Taavi on väga pikka aega adminnimisega erinevates ettevõtetes tegelenud, valdab teemat. Väga palju on muutunud sysop’i töö, kus 90ndatel oli suurem rõhuasetus ise juppidest serveri kokkupanemine, praeguseks on olemas suured valmiskonteinerid. Tänapäeval on vajadus osata ka mõneti programmeerida, et mõningaid rutiine automatiseerida. Oluline on ametieetika ehk mitte sobrada kasutajate isiklikes andmetes. Loengus oli palju iseäralikke termineid, mida algaja IT inimene veel hästi ette ei kujuta, pisut oleks võinud neid rohkem lahti selgitada. Kokkuvõttes natuke sai sysop’i tööst aimu, palju asju jäi ka salapäraseks. Nagu ka Taavi ise ütles, sysop on nö taustategija keda reeglina ei pandagi (ka ettevõtte ülemuste poolt) tähelegi. Siis kui jama käes, vaadatakse sysop’i poole. Tema ülesanne on tagada, et jamasid üldse ei juhtukski.&lt;br /&gt;
&lt;br /&gt;
Viies loeng&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/00379be2-bb86-4935-9b4f-aad720ee4cc0?ec=true Loengu &amp;quot;Testimine ja tarkvara kvaliteet&amp;quot; videosalvestus. (Kert Suvi). 24. september 2015.]&amp;lt;/ref&amp;gt; käsitles tarkvara testimist ja selle vajalikkust, ettekandjaks Kert Suvi. Pean tunnistama, et ei osanud testimise kui sellise olulisust tarkvara arenduse protsessis varasemalt väärtustada, pidasin millekski igavaks ja tüütuks. Kert tegi väga hästi erinevate eluliste näidete varal selgeks testimise vajalikkuse ning et sellele saab ja ka tuleb läheneda professionaalselt. Testija peab olema parandamatu pessimist; ei tohi pimesi uskuda arendajat, kes väidab et asi töötab küll. Eestis panustatakse testimisse muu maailmaga võrreldes liiga vähe. Testimisel on võimalik ka spetsialiseeruda mõnele konkreetsemale alale, näiteks turvalisuse testija nagu kolmandat loengut andnud Elar Lang. Igatahes tänu Kerti ettekandele muutus testimise teema minu jaoks palju seksikamaks.&lt;br /&gt;
&lt;br /&gt;
Kuues loeng&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/45c455bb-ef01-4f3e-a722-5ba40ecbe8ee?ec=true Loengu &amp;quot;Kuidas tarkvaraarenduse maailmas ellu jääda&amp;quot; videosalvestus. (Targo Tennisberg). 1. oktoober 2015.]&amp;lt;/ref&amp;gt; oli sissepõige tarkvara arenduse maailma hingeellu, mida tutvustas Targo Tennisberg. Huvitav ja haarav loeng, meeldis alguses toodud paralleel kunagiste alkeemikutega. Sai palju selgemaks, et arendaja ei tegele sugugi ainult koodi kirjutamisega, sellele kulub isegi vähem osa ajast. Tegeleda tuleb erinevate ettenägematute takistuste kõrvaldamisega, rõhutab sarnaselt T.Seemani loengule kommunikatsiooni olulisust nii arendajate kui ka tellija-arendaja vahel. Võtmetähtsusega isik on projektijuht. Enamus IT projekte ebaõnnestuvad mitte tehnoloogilistel põhjustel. Tihti üritatakse erinevaid probleeme lahendada kirjutades rohkem ning paremat koodi. Enamasti ei vii see paremini sihile. Ebaõnnestumise tõenäosus kasvab projektiga seotud inimeste arvu kasvades, kes omavad erinevat nägemust ja soove. Oluline on selgeks saada need pidepunktid, mis peavad kindlasti olema realiseeritud loodavas lahenduses. Ettekandes meeldis projekti mahu hindamise seisukohalt toodud mänguline võrdlus viktoriiniga, kus toimub suhteliselt pimeduses kobamine. Piiratud ajaga peab samas võimalikult mõistliku hinnangu andma, mitte keegi samas ei oma ettekujutust asja kogukeerukusest. Minu jaoks oli huvitav järeldus, kuidas Targo arvates edu saavutamiseks olulisem on teostus, mitte niivõrd idee. Üheltpoolt nõus – teostus määrab kuidas projekti tulemus kasutusse jõuab ning kas võetakse omaks, kuid idee peaks samas hõlmama teostuslahendust. Lihtsalt ideest on tõepoolest vähe abi.&lt;br /&gt;
&lt;br /&gt;
Seitsmendal loengul&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/95e9f82e-debe-4f6c-833a-5dabb639600d?ec=true Loengu &amp;quot;Oma IT ettevõte -- GPS asukohamääramisteenuse Navirec näitel&amp;quot; videosalvestus. (Tanel Unt). 8. oktoober 2015.]&amp;lt;/ref&amp;gt; tutvustas Tanel Unt oma IT äri püstipanemise võlusid ja valusid. Enda firmaga on üheltpoolt vabadus kõiges otsustada, mis sa teed ja mida ei tee, teiseltpoolt vastutad naha ja karvadega iga otsuse eest. Alustaval ettevõttes oleks kavalam omada pigem rohkem väiksemaid kliente, kui paari suuremat klienti. Viimase variandi puhul ühe kliendi ärakukkumisel võivad olla suured tagajärjed. Tähtis on ebaõnnestumisest, mida algajal ettevõtjal ikka ette tuleb, mitte pead norgu lasta, vaid teha omad järeldused – muuta äriplaani ning proovida uuesti ja paremini. Eriti väiksemas ettevõttes on väga oluline meeskond ja selle sisekliima, kõik peavad läbi saama ja üksteist tundma, kriitilisi situatsioone tuleb ikka ette. Meeldis lähenemisviis, kuidas (jõudlus)probleemide tekkimisel keskenduti tarkvara ja koodi optimeerimisele, mitte ei investeeritud rauda. Teatud maani saab ebaefektiivset tarkvara küll järele aidata võimsama raudvaraga, kuid õigem oleks kood paremaks teha. Huvitavalt mõjus vahepeal kajastatud Kosovo seiklused.&lt;br /&gt;
&lt;br /&gt;
Viimases, arvult kaheksandas loengus&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/f0d2dfac-5f77-47e6-8e60-abe8d9b9679d?ec=true Loengu &amp;quot;Andmekaevandamine ja analüütika ning muud põnevat&amp;quot; videosalvestus. (Oleg Bogdanov ja Oliver Kadak). 15. oktoober 2015.]&amp;lt;/ref&amp;gt; sai aimduse, kuidas üldisemalt andmete taga peitub info. Ettekandjateks Oliver Kadak ning Oleg Bogdanov. Vaja on osata suurest andmemassiivist meile vajalik infot üheltpoolt välja sõeluda, teiseks seda analüüsida ning selle põhjal erinevaid järeldusi teha. Põhjaliku andmeanalüüsiga on võimalik kaardistada näiteks inimkäitumise mustreid, tuvastada ostueelistusi, mis omakorda aitab äri planeerimisel. Oli põnev loeng paljude näidetega reaalsest elust.&lt;br /&gt;
&lt;br /&gt;
Kokkuvõtvalt saab öelda, et antud kursus minu jaoks väga oluliselt laiendas IT maailmapilti, sai näha käsitlusi erineva nurga alt. Selle aine juures meeldis esinejate mitte väga akadeemiline kõneviis. Vabamalt, igapäeva töökeeles ning eluliste näidetega vürtsitatult sai mõtte väga hästi edasi antud ning oli hea kuulata. Tundus ka et kõik esinejad on oma eriala fanaatikud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Õpingukorralduse küsimused&#039;&#039;&#039; ==&lt;br /&gt;
=&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&#039;&#039;&#039;Küsimus B&#039;&#039;&#039;&amp;lt;/font&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Kukkusid arvestusel läbi. Kaua on võimalik arvestust järele teha? Kellega kokku leppida, et kordussooritust teha? Kuidas toimub kordussooritusele registreerimine? Mis on tähtajad? Kui palju maksab, kui oled riigi finantseeritaval (RF) õppekohalkohal? Kui palju maksab, kui oled tasulisel (OF) õppekohal?&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vastus:&#039;&#039;&#039; Arvestust on võimalik järele teha ülejärgmise semestri punasejoone päevani arvates aine õpetamissemestrist&amp;lt;ref&amp;gt;[http://www.itcollege.ee/tudengile/eeskirjad-ja-juhendid/oppekorraldus-eeskiri/ ITK õppekorralduse eeskiri. (Punkt 5.2)]&amp;lt;/ref&amp;gt;. Kordussooritus tuleb kokku leppida ainet läbi viiva õppejõuga. Kordussooritusele registreeritakse ÕIS-is ning registreerimise ja kordussoorituse vahele peab jääma vähemalt 2 tööpäeva. Kordusarvestus on riigi finantseeritaval (RF) õppekohal tasuta, tasulisel õppekohal (OF) õppijale on see tasuline (20€ kord).&amp;lt;ref&amp;gt;[http://www.itcollege.ee/tudengile/finantsinfo/pangarekvisiidid/ ITK teenuste tasumäärad 2015/2016 õppeaastal. (Punkt 5)]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&#039;&#039;&#039;Küsimus 4&#039;&#039;&#039;&amp;lt;/font&amp;gt;=&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Sul on olemas varasem töökogemus, mida sa tahad kasutada õppeainete arvestamisel (VÕTA). Millised on tegevused? Millised on tähtajad? Kas VÕTA kaudu saadud EAPd arvestatakse semestri õppekava täitmisesse ja aasta õppekoormusesse?&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vastus:&#039;&#039;&#039; Hiljemalt 10-ndal tööpäeval enne punase joone päeva tuleb esitada ÕIS-i vormikohase taotluse koos vajalike lisadega. Varasemate omandatud pädevuste vastavust õppeainete väljunditele hindab VÕTA komisjon. Seoses kõrgharidusreformiga ei arvestata alates 2013/2014 õa.-st IT Kolledžis õpinguid alustanud tudengite puhul VÕTA tulemusi semestripõhisel õppekava täies mahus täitmise kontrollimisel (st. õppeteenustasuta õppimiseks peab täiskoormusega tudeng koguma semestri kohta kumulatiivselt vähemalt 27 EAP IT Kolledži õppesoorituste põhjal). Samas VÕTA kaudu arvestatud õppesooritused täidavad õppekoormust (täis- või osakoormus), mida kontrollitakse õppeaasta lõpus.&amp;lt;ref&amp;gt;[http://www.itcollege.ee/tudengile/kkk/#Mis_ja_millal_tuleb_esitada_varasemate_õppetulemuste/töökogemuse_arvestamiseks? ITK Korduma kippuvad küsimused. (Punkt 6)]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&#039;&#039;&#039;Ülesanne&#039;&#039;&#039;&amp;lt;/font&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Kui mitme EAP ulatuses tuleb õppekulud osaliselt hüvitada aasta lõpuks, kui esimese semestri lõpuks on olemas X EAPd ja teise semestri lõpuks Y EAPd? Kui suur on teile esitatav arve? X ja Y väärtused võtke allpool olevast tabelist selliselt, et X väärtus vastab teie üliõpilaskoodi eelviimasele numbrile ja Y üliõpilaskoodi viimasele numbrile.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vastus:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
X=24&lt;br /&gt;
&lt;br /&gt;
Y=26&lt;br /&gt;
&lt;br /&gt;
IT Kolledžis on täies mahus täitmise määr semestris 27 EAP-d&amp;lt;ref&amp;gt;ITK nõukogu otsus (protokoll nr 3C-1/13-2, 27.02.2013)&amp;lt;/ref&amp;gt;, aastas teeb see kokku 27 + 27 = 54 EAP-d. &lt;br /&gt;
&lt;br /&gt;
Hüvitada tuleb 54 - (24 + 26) = 4 EAP eest.&lt;br /&gt;
Õppekulude osalise hüvitamise määr on 50 € 1 EAP kohta&amp;lt;ref&amp;gt;[http://www.itcollege.ee/tudengile/finantsinfo/ ITK õppeteenuse tasumäärad ja tasumise tähtajad 2015/2016 õppeaastal]&amp;lt;/ref&amp;gt;, teeb see kokku 4 * 50 = &#039;&#039;&#039;200 €&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Viited ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=User:Relken&amp;diff=95774</id>
		<title>User:Relken</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=User:Relken&amp;diff=95774"/>
		<updated>2015-10-30T13:48:18Z</updated>

		<summary type="html">&lt;p&gt;Relken: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;font size=&amp;quot;5&amp;quot;&amp;gt;&#039;&#039;&#039;Õpingukorraldus ja erialatutvustuse aine arvestustöö&#039;&#039;&#039;&amp;lt;/font&amp;gt;=&lt;br /&gt;
Autor: Rain Elken&lt;br /&gt;
&lt;br /&gt;
Rühm: DK14&lt;br /&gt;
&lt;br /&gt;
Esitamise kuupäev: 30. november 2015&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&#039;&#039;&#039;Essee&#039;&#039;&#039;&amp;lt;/font&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kuivõrd ITK kaugõppes pole eraldi õppetöö algust kuulutavat traditsioonilist aktust ette nähtud, oli kaugõppuritele antud õppeaine raames toimunud esimene loeng&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/5c75a38e-e103-474a-9e39-42aa330f4305 Loengu &amp;quot;Õppekorraldus ja sisekord&amp;quot; videosalvestus. (Inga Vau, Merle Varendi, Juri Tretjakov, Lauri Võsandi, Andres Septer, Kristjan Karmo). 26. august 2015.]&amp;lt;/ref&amp;gt; kõige pidulikum üritus. Sooviti head õpingute algust, tutvustati üsna põhjalikult õppekorralduslikke küsimusi ning anti üheselt mõista, et asudes õppima ITK-sse - olete teinud täiesti õige valiku. Loomulikult manitseti, et kerge ei saa olema ning kõik ei lähe alati libedalt ning planeeritult, kaugõppe vormist tulenevalt tuleb õpingutes teha kompromisse töö- ja pereelu kõrvalt. Lisaks tutvustati võimalusi kuidas vabal ajal end erialaselt täiendada, nt robootikaklubi, üliõpilasesindus, codeclub. Ühtlasi anti suunised, kuidas antud aine läbi saada – essee loengumaterjalide põhjal + küsimused õppekorralduseeskirja kohta.&lt;br /&gt;
&lt;br /&gt;
Teises loengus&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/e2cded4a-d03a-4ed5-95e9-de354ce58f36 Loengu &amp;quot;IT projektide juhtimine&amp;quot; videosalvestus. (Tiina Seeman). 3. september 2015.]&amp;lt;/ref&amp;gt; tutvustati IT projektijuhtimise eripärasid Tiina Seemani poolt. Lektoril on suured kogemused erinevates firmades töötamises, mistõttu oli põnev kuulata. Rõhutas projektijuhi vajalikkust ja vastutust kogu projekti õnnestumise seisukohast. Paljud IT projektid kipuvad ebaõnnestuma ning seda eelkõige puuduliku kommunikatsiooni tõttu, projektijuhil siin keskne roll tagada suhtlus tellija ja arendaja vahel. Huvitav oli ettekandes tähelepanu juhtimine tellija kui kliendile, et kogu projekti on ikkagi kliendi jaoks, projekti käigus loodav lahendus peab aitama realiseerida kliendi ärilisi eesmärke. Projektijuht peab algselt võimalikult selgelt kaardistama, mida täpselt klient vajab ning ilma milleta projekti kuidagi õnnestunuks lugeda ei saaks. Takistusi ja probleeme tekib töö käigus paraku ikka, projektijuht peab jooksvalt koordineerima nende lahendamist, nii et klient ja arendaja mõlemad oleks rahul. &lt;br /&gt;
&lt;br /&gt;
Kolmas loeng&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/ce07046a-a6aa-41bb-8fe8-9f256a6d627f?ec=true Loengu &amp;quot;Õppimisest. Omast kogemusest.&amp;quot; videosalvestus. (Elar Lang). 10. september 2015.]&amp;lt;/ref&amp;gt; oli põnev ja innustav. Elar Lang rääkis hästi – olles varasemalt pikka aega olnud iseõppijast veebiarendaja – kuidas ikkagi ilma ülikooli hariduseta edasi ei arene. Ise õppides esiteks kulub palju aega, kuniks kõik läbi proovid. Teiseks ei õpi ega tunne erialaseid spetsiifilise termineid, mistõttu on suhtlemine teiste arendajatega keeruline. Kõige olulisem moment ettekande juures oli &#039;õppida õppima&#039; momendi rõhutamine, mis oli väga hästi selgeks tehtud. IT maailma muutub väga kiiresti, mistõttu peab koguaeg ka hiljem peale kooli lõppu aina juurde õppima. Tähtis on kujundada õiged õpiharjumused kohe, ülikooli alguses. Vältida tuleb tudengi sündroomi ning samm-sammult ja järjepidevalt pühenduda õppimisse. &lt;br /&gt;
&lt;br /&gt;
Neljandas loengus&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/8e2141b7-9e98-49dc-a05d-6ca0edd3c19c?ec=true Loengu &amp;quot;Millega tegeleb süsteemihaldur&amp;quot; videosalvestus. (Taavi Tuisk). 17. september 2015.]&amp;lt;/ref&amp;gt; tutvustas Taavi Tuisk süsteemiandministraatori köögipoolt. Taavi on väga pikka aega adminnimisega erinevates ettevõtetes tegelenud, valdab teemat. Väga palju on muutunud sysop’i töö, kus 90ndatel oli suurem rõhuasetus ise juppidest serveri kokkupanemine, praeguseks on olemas suured valmiskonteinerid. Tänapäeval on vajadus osata ka mõneti programmeerida, et mõningaid rutiine automatiseerida. Oluline on ametieetika ehk mitte sobrada kasutajate isiklikes andmetes. Loengus oli palju iseäralikke termineid, mida algaja IT inimene veel hästi ette ei kujuta, pisut oleks võinud neid rohkem lahti selgitada. Kokkuvõttes natuke sai sysop’i tööst aimu, palju asju jäi ka salapäraseks. Nagu ka Taavi ise ütles, sysop on nö taustategija keda reeglina ei pandagi (ka ettevõtte ülemuste poolt) tähelegi. Siis kui jama käes, vaadatakse sysop’i poole. Tema ülesanne on tagada, et jamasid üldse ei juhtukski.&lt;br /&gt;
&lt;br /&gt;
Viies loeng&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/00379be2-bb86-4935-9b4f-aad720ee4cc0?ec=true Loengu &amp;quot;Testimine ja tarkvara kvaliteet&amp;quot; videosalvestus. (Kert Suvi). 24. september 2015.]&amp;lt;/ref&amp;gt; käsitles tarkvara testimist ja selle vajalikkust, ettekandjaks Kert Suvi. Pean tunnistama, et ei osanud testimise kui sellise olulisust tarkvara arenduse protsessis varasemalt väärtustada, pidasin millekski igavaks ja tüütuks. Kert tegi väga hästi erinevate eluliste näidete varal selgeks testimise vajalikkuse ning et sellele saab ja ka tuleb läheneda professionaalselt. Testija peab olema parandamatu pessimist; ei tohi pimesi uskuda arendajat, kes väidab et asi töötab küll. Eestis panustatakse testimisse muu maailmaga võrreldes liiga vähe. Testimisel on võimalik ka spetsialiseeruda mõnele konkreetsemale alale, näiteks turvalisuse testija nagu kolmandat loengut andnud Elar Lang. Igatahes tänu Kerti ettekandele muutus testimise teema minu jaoks palju seksikamaks.&lt;br /&gt;
&lt;br /&gt;
Kuues loeng&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/45c455bb-ef01-4f3e-a722-5ba40ecbe8ee?ec=true Loengu &amp;quot;Kuidas tarkvaraarenduse maailmas ellu jääda&amp;quot; videosalvestus. (Targo Tennisberg). 1. oktoober 2015.]&amp;lt;/ref&amp;gt; oli sissepõige tarkvara arenduse maailma hingeellu, mida tutvustas Targo Tennisberg. Huvitav ja haarav loeng, meeldis alguses toodud paralleel kunagiste alkeemikutega. Sai palju selgemaks, et arendaja ei tegele sugugi ainult koodi kirjutamisega, sellele kulub isegi vähem osa ajast. Tegeleda tuleb erinevate ettenägematute takistuste kõrvaldamisega, rõhutab sarnaselt T.Seemani loengule kommunikatsiooni olulisust nii arendajate kui ka tellija-arendaja vahel. Võtmetähtsusega isik on projektijuht. Enamus IT projekte ebaõnnestuvad mitte tehnoloogilistel põhjustel. Tihti üritatakse erinevaid probleeme lahendada kirjutades rohkem ning paremat koodi. Enamasti ei vii see paremini sihile. Ebaõnnestumise tõenäosus kasvab projektiga seotud inimeste arvu kasvades, kes omavad erinevat nägemust ja soove. Oluline on selgeks saada need pidepunktid, mis peavad kindlasti olema realiseeritud loodavas lahenduses. Ettekandes meeldis projekti mahu hindamise seisukohalt toodud mänguline võrdlus viktoriiniga, kus toimub suhteliselt pimeduses kobamine. Piiratud ajaga peab samas võimalikult mõistliku hinnangu andma, mitte keegi samas ei oma ettekujutust asja kogukeerukusest. Minu jaoks oli huvitav järeldus, kuidas Targo arvates edu saavutamiseks olulisem on teostus, mitte niivõrd idee. Üheltpoolt nõus – teostus määrab kuidas projekti tulemus kasutusse jõuab ning kas võetakse omaks, kuid idee peaks samas hõlmama teostuslahendust. Lihtsalt ideest on tõepoolest vähe abi.&lt;br /&gt;
&lt;br /&gt;
Seitsmendal loengul&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/95e9f82e-debe-4f6c-833a-5dabb639600d?ec=true Loengu &amp;quot;Oma IT ettevõte -- GPS asukohamääramisteenuse Navirec näitel&amp;quot; videosalvestus. (Tanel Unt). 8. oktoober 2015.]&amp;lt;/ref&amp;gt; tutvustas Tanel Unt oma IT äri püstipanemise võlusid ja valusid. Enda firmaga on üheltpoolt vabadus kõiges otsustada, mis sa teed ja mida ei tee, teiseltpoolt vastutad naha ja karvadega iga otsuse eest. Alustaval ettevõttes oleks kavalam omada pigem rohkem väiksemaid kliente, kui paari suuremat klienti. Viimase variandi puhul ühe kliendi ärakukkumisel võivad olla suured tagajärjed. Tähtis on ebaõnnestumisest, mida algajal ettevõtjal ikka ette tuleb, mitte pead norgu lasta, vaid teha omad järeldused – muuta äriplaani ning proovida uuesti ja paremini. Eriti väiksemas ettevõttes on väga oluline meeskond ja selle sisekliima, kõik peavad läbi saama ja üksteist tundma, kriitilisi situatsioone tuleb ikka ette. Meeldis lähenemisviis, kuidas (jõudlus)probleemide tekkimisel keskenduti tarkvara ja koodi optimeerimisele, mitte ei investeeritud rauda. Teatud maani saab ebaefektiivset tarkvara küll järele aidata võimsama raudvaraga, kuid õigem oleks kood paremaks teha. Huvitavalt mõjus vahepeal kajastatud Kosovo seiklused.&lt;br /&gt;
&lt;br /&gt;
Viimases, arvult kaheksandas loengus&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/f0d2dfac-5f77-47e6-8e60-abe8d9b9679d?ec=true Loengu &amp;quot;Andmekaevandamine ja analüütika ning muud põnevat&amp;quot; videosalvestus. (Oleg Bogdanov ja Oliver Kadak). 15. oktoober 2015.]&amp;lt;/ref&amp;gt; sai aimduse, kuidas üldisemalt andmete taga peitub info. Ettekandjateks Oliver Kadak ning Oleg Bogdanov. Vaja on osata suurest andmemassiivist meile vajalik infot üheltpoolt välja sõeluda, teiseks seda analüüsida ning selle põhjal erinevaid järeldusi teha. Põhjaliku andmeanalüüsiga on võimalik kaardistada näiteks inimkäitumise mustreid, tuvastada ostueelistusi, mis omakorda aitab äri planeerimisel. Oli põnev loeng paljude näidetega reaalsest elust.&lt;br /&gt;
&lt;br /&gt;
Kokkuvõtvalt saab öelda, et antud kursus minu jaoks väga oluliselt laiendas IT maailmapilti, sai näha käsitlusi erineva nurga alt. Selle aine juures meeldis esinejate mitte väga akadeemiline kõneviis. Vabamalt, igapäeva töökeeles ning eluliste näidetega vürtsitatult sai mõtte väga hästi edasi antud ning oli hea kuulata. Tundus ka et kõik esinejad on oma eriala fanaatikud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Õpingukorralduse küsimused&#039;&#039;&#039; ==&lt;br /&gt;
=&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&#039;&#039;&#039;Küsimus B&#039;&#039;&#039;&amp;lt;/font&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Kukkusid arvestusel läbi. Kaua on võimalik arvestust järele teha? Kellega kokku leppida, et kordussooritust teha? Kuidas toimub kordussooritusele registreerimine? Mis on tähtajad? Kui palju maksab, kui oled riigi finantseeritaval (RF) õppekohalkohal? Kui palju maksab, kui oled tasulisel (OF) õppekohal?&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vastus:&#039;&#039;&#039; Arvestust on võimalik järele teha ülejärgmise semestri punasejoone päevani arvates aine õpetamissemestrist&amp;lt;ref&amp;gt;[http://www.itcollege.ee/tudengile/eeskirjad-ja-juhendid/oppekorraldus-eeskiri/ ITK õppekorralduse eeskiri. (Punkt 5.2)]&amp;lt;/ref&amp;gt;. Kordussooritus tuleb kokku leppida ainet läbi viiva õppejõuga. Kordussooritusele registreeritakse ÕIS-is ning registreerimise ja kordussoorituse vahele peab jääma vähemalt 2 tööpäeva. Kordusarvestus on riigi finantseeritaval (RF) õppekohal tasuta, tasulisel õppekohal (OF) õppijale on see tasuline (20€ kord).&amp;lt;ref&amp;gt;[http://www.itcollege.ee/tudengile/finantsinfo/pangarekvisiidid/ ITK teenuste tasumäärad 2015/2016 õppeaastal. (Punkt 5)]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&#039;&#039;&#039;Küsimus 4&#039;&#039;&#039;&amp;lt;/font&amp;gt;=&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Sul on olemas varasem töökogemus, mida sa tahad kasutada õppeainete arvestamisel (VÕTA). Millised on tegevused? Millised on tähtajad? Kas VÕTA kaudu saadud EAPd arvestatakse semestri õppekava täitmisesse ja aasta õppekoormusesse?&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vastus:&#039;&#039;&#039; Hiljemalt 10-ndal tööpäeval enne punase joone päeva tuleb esitada ÕIS-i vormikohase taotluse koos vajalike lisadega. Varasemate omandatud pädevuste vastavust õppeainete väljunditele hindab VÕTA komisjon. Seoses kõrgharidusreformiga ei arvestata alates 2013/2014 õa.-st IT Kolledžis õpinguid alustanud tudengite puhul VÕTA tulemusi semestripõhisel õppekava täies mahus täitmise kontrollimisel (st. õppeteenustasuta õppimiseks peab täiskoormusega tudeng koguma semestri kohta kumulatiivselt vähemalt 27 EAP IT Kolledži õppesoorituste põhjal). Samas VÕTA kaudu arvestatud õppesooritused täidavad õppekoormust (täis- või osakoormus), mida kontrollitakse õppeaasta lõpus.&amp;lt;ref&amp;gt;[http://www.itcollege.ee/tudengile/kkk/#Mis_ja_millal_tuleb_esitada_varasemate_õppetulemuste/töökogemuse_arvestamiseks? Korduma kippuvad küsimused]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&#039;&#039;&#039;Ülesanne&#039;&#039;&#039;&amp;lt;/font&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Kui mitme EAP ulatuses tuleb õppekulud osaliselt hüvitada aasta lõpuks, kui esimese semestri lõpuks on olemas X EAPd ja teise semestri lõpuks Y EAPd? Kui suur on teile esitatav arve? X ja Y väärtused võtke allpool olevast tabelist selliselt, et X väärtus vastab teie üliõpilaskoodi eelviimasele numbrile ja Y üliõpilaskoodi viimasele numbrile.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vastus:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
X=24&lt;br /&gt;
&lt;br /&gt;
Y=26&lt;br /&gt;
&lt;br /&gt;
IT Kolledžis on täies mahus täitmise määr semestris 27 EAP-d, aastas teeb see kokku 27 + 27 = 54 EAP-d. &lt;br /&gt;
&lt;br /&gt;
Hüvitada tuleb 54 - (24 + 26) = 4 EAP eest.&lt;br /&gt;
Õppekulude osalise hüvitamise määr on 50 € 1 EAP kohta&amp;lt;ref&amp;gt;[http://www.itcollege.ee/tudengile/finantsinfo/ ITK õppeteenuse tasumäärad ja tasumise tähtajad 2015/2016 õppeaastal]&amp;lt;/ref&amp;gt;, teeb see kokku 4 * 50 = &#039;&#039;&#039;200 €&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Viited ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=User:Relken&amp;diff=95773</id>
		<title>User:Relken</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=User:Relken&amp;diff=95773"/>
		<updated>2015-10-30T13:35:11Z</updated>

		<summary type="html">&lt;p&gt;Relken: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;font size=&amp;quot;5&amp;quot;&amp;gt;&#039;&#039;&#039;Õpingukorraldus ja erialatutvustuse aine arvestustöö&#039;&#039;&#039;&amp;lt;/font&amp;gt;=&lt;br /&gt;
Autor: Rain Elken&lt;br /&gt;
&lt;br /&gt;
Rühm: DK14&lt;br /&gt;
&lt;br /&gt;
Esitamise kuupäev: 30. november 2015&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&#039;&#039;&#039;Essee&#039;&#039;&#039;&amp;lt;/font&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kuivõrd ITK kaugõppes pole eraldi õppetöö algust kuulutavat traditsioonilist aktust ette nähtud, oli kaugõppuritele antud õppeaine raames toimunud esimene loeng&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/5c75a38e-e103-474a-9e39-42aa330f4305 Loengu &amp;quot;Õppekorraldus ja sisekord&amp;quot; videosalvestus. (Inga Vau, Merle Varendi, Juri Tretjakov, Lauri Võsandi, Andres Septer, Kristjan Karmo). 26. august 2015.]&amp;lt;/ref&amp;gt; kõige pidulikum üritus. Sooviti head õpingute algust, tutvustati üsna põhjalikult õppekorralduslikke küsimusi ning anti üheselt mõista, et asudes õppima ITK-sse - olete teinud täiesti õige valiku. Loomulikult manitseti, et kerge ei saa olema ning kõik ei lähe alati libedalt ning planeeritult, kaugõppe vormist tulenevalt tuleb õpingutes teha kompromisse töö- ja pereelu kõrvalt. Lisaks tutvustati võimalusi kuidas vabal ajal end erialaselt täiendada, nt robootikaklubi, üliõpilasesindus, codeclub. Ühtlasi anti suunised, kuidas antud aine läbi saada – essee loengumaterjalide põhjal + küsimused õppekorralduseeskirja kohta.&lt;br /&gt;
&lt;br /&gt;
Teises loengus&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/e2cded4a-d03a-4ed5-95e9-de354ce58f36 Loengu &amp;quot;IT projektide juhtimine&amp;quot; videosalvestus. (Tiina Seeman). 3. september 2015.]&amp;lt;/ref&amp;gt; tutvustati IT projektijuhtimise eripärasid Tiina Seemani poolt. Lektoril on suured kogemused erinevates firmades töötamises, mistõttu oli põnev kuulata. Rõhutas projektijuhi vajalikkust ja vastutust kogu projekti õnnestumise seisukohast. Paljud IT projektid kipuvad ebaõnnestuma ning seda eelkõige puuduliku kommunikatsiooni tõttu, projektijuhil siin keskne roll tagada suhtlus tellija ja arendaja vahel. Huvitav oli ettekandes tähelepanu juhtimine tellija kui kliendile, et kogu projekti on ikkagi kliendi jaoks, projekti käigus loodav lahendus peab aitama realiseerida kliendi ärilisi eesmärke. Projektijuht peab algselt võimalikult selgelt kaardistama, mida täpselt klient vajab ning ilma milleta projekti kuidagi õnnestunuks lugeda ei saaks. Takistusi ja probleeme tekib töö käigus paraku ikka, projektijuht peab jooksvalt koordineerima nende lahendamist, nii et klient ja arendaja mõlemad oleks rahul. &lt;br /&gt;
&lt;br /&gt;
Kolmas loeng&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/ce07046a-a6aa-41bb-8fe8-9f256a6d627f?ec=true Loengu &amp;quot;Õppimisest. Omast kogemusest.&amp;quot; videosalvestus. (Elar Lang). 10. september 2015.]&amp;lt;/ref&amp;gt; oli põnev ja innustav. Elar Lang rääkis hästi – olles varasemalt pikka aega olnud iseõppijast veebiarendaja – kuidas ikkagi ilma ülikooli hariduseta edasi ei arene. Ise õppides esiteks kulub palju aega, kuniks kõik läbi proovid. Teiseks ei õpi ega tunne erialaseid spetsiifilise termineid, mistõttu on suhtlemine teiste arendajatega keeruline. Kõige olulisem moment ettekande juures oli &#039;õppida õppima&#039; momendi rõhutamine, mis oli väga hästi selgeks tehtud. IT maailma muutub väga kiiresti, mistõttu peab koguaeg ka hiljem peale kooli lõppu aina juurde õppima. Tähtis on kujundada õiged õpiharjumused kohe, ülikooli alguses. Vältida tuleb tudengi sündroomi ning samm-sammult ja järjepidevalt pühenduda õppimisse. &lt;br /&gt;
&lt;br /&gt;
Neljandas loengus&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/8e2141b7-9e98-49dc-a05d-6ca0edd3c19c?ec=true Loengu &amp;quot;Millega tegeleb süsteemihaldur&amp;quot; videosalvestus. (Taavi Tuisk). 17. september 2015.]&amp;lt;/ref&amp;gt; tutvustas Taavi Tuisk süsteemiandministraatori köögipoolt. Taavi on väga pikka aega adminnimisega erinevates ettevõtetes tegelenud, valdab teemat. Väga palju on muutunud sysop’i töö, kus 90ndatel oli suurem rõhuasetus ise juppidest serveri kokkupanemine, praeguseks on olemas suured valmiskonteinerid. Tänapäeval on vajadus osata ka mõneti programmeerida, et mõningaid rutiine automatiseerida. Oluline on ametieetika ehk mitte sobrada kasutajate isiklikes andmetes. Loengus oli palju iseäralikke termineid, mida algaja IT inimene veel hästi ette ei kujuta, pisut oleks võinud neid rohkem lahti selgitada. Kokkuvõttes natuke sai sysop’i tööst aimu, palju asju jäi ka salapäraseks. Nagu ka Taavi ise ütles, sysop on nö taustategija keda reeglina ei pandagi (ka ettevõtte ülemuste poolt) tähelegi. Siis kui jama käes, vaadatakse sysop’i poole. Tema ülesanne on tagada, et jamasid üldse ei juhtukski.&lt;br /&gt;
&lt;br /&gt;
Viies loeng&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/00379be2-bb86-4935-9b4f-aad720ee4cc0?ec=true Loengu &amp;quot;Testimine ja tarkvara kvaliteet&amp;quot; videosalvestus. (Kert Suvi). 24. september 2015.]&amp;lt;/ref&amp;gt; käsitles tarkvara testimist ja selle vajalikkust, ettekandjaks Kert Suvi. Pean tunnistama, et ei osanud testimise kui sellise olulisust tarkvara arenduse protsessis varasemalt väärtustada, pidasin millekski igavaks ja tüütuks. Kert tegi väga hästi erinevate eluliste näidete varal selgeks testimise vajalikkuse ning et sellele saab ja ka tuleb läheneda professionaalselt. Testija peab olema parandamatu pessimist; ei tohi pimesi uskuda arendajat, kes väidab et asi töötab küll. Eestis panustatakse testimisse muu maailmaga võrreldes liiga vähe. Testimisel on võimalik ka spetsialiseeruda mõnele konkreetsemale alale, näiteks turvalisuse testija nagu kolmandat loengut andnud Elar Lang. Igatahes tänu Kerti ettekandele muutus testimise teema minu jaoks palju seksikamaks.&lt;br /&gt;
&lt;br /&gt;
Kuues loeng&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/45c455bb-ef01-4f3e-a722-5ba40ecbe8ee?ec=true Loengu &amp;quot;Kuidas tarkvaraarenduse maailmas ellu jääda&amp;quot; videosalvestus. (Targo Tennisberg). 1. oktoober 2015.]&amp;lt;/ref&amp;gt; oli sissepõige tarkvara arenduse maailma hingeellu, mida tutvustas Targo Tennisberg. Huvitav ja haarav loeng, meeldis alguses toodud paralleel kunagiste alkeemikutega. Sai palju selgemaks, et arendaja ei tegele sugugi ainult koodi kirjutamisega, sellele kulub isegi vähem osa ajast. Tegeleda tuleb erinevate ettenägematute takistuste kõrvaldamisega, rõhutab sarnaselt T.Seemani loengule kommunikatsiooni olulisust nii arendajate kui ka tellija-arendaja vahel. Võtmetähtsusega isik on projektijuht. Enamus IT projekte ebaõnnestuvad mitte tehnoloogilistel põhjustel. Tihti üritatakse erinevaid probleeme lahendada kirjutades rohkem ning paremat koodi. Enamasti ei vii see paremini sihile. Ebaõnnestumise tõenäosus kasvab projektiga seotud inimeste arvu kasvades, kes omavad erinevat nägemust ja soove. Oluline on selgeks saada need pidepunktid, mis peavad kindlasti olema realiseeritud loodavas lahenduses. Ettekandes meeldis projekti mahu hindamise seisukohalt toodud mänguline võrdlus viktoriiniga, kus toimub suhteliselt pimeduses kobamine. Piiratud ajaga peab samas võimalikult mõistliku hinnangu andma, mitte keegi samas ei oma ettekujutust asja kogukeerukusest. Minu jaoks oli huvitav järeldus, kuidas Targo arvates edu saavutamiseks olulisem on teostus, mitte niivõrd idee. Üheltpoolt nõus – teostus määrab kuidas projekti tulemus kasutusse jõuab ning kas võetakse omaks, kuid idee peaks samas hõlmama teostuslahendust. Lihtsalt ideest on tõepoolest vähe abi.&lt;br /&gt;
&lt;br /&gt;
Seitsmendal loengul&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/95e9f82e-debe-4f6c-833a-5dabb639600d?ec=true Loengu &amp;quot;Oma IT ettevõte -- GPS asukohamääramisteenuse Navirec näitel&amp;quot; videosalvestus. (Tanel Unt). 8. oktoober 2015.]&amp;lt;/ref&amp;gt; tutvustas Tanel Unt oma IT äri püstipanemise võlusid ja valusid. Enda firmaga on üheltpoolt vabadus kõiges otsustada, mis sa teed ja mida ei tee, teiseltpoolt vastutad naha ja karvadega iga otsuse eest. Alustaval ettevõttes oleks kavalam omada pigem rohkem väiksemaid kliente, kui paari suuremat klienti. Viimase variandi puhul ühe kliendi ärakukkumisel võivad olla suured tagajärjed. Tähtis on ebaõnnestumisest, mida algajal ettevõtjal ikka ette tuleb, mitte pead norgu lasta, vaid teha omad järeldused – muuta äriplaani ning proovida uuesti ja paremini. Eriti väiksemas ettevõttes on väga oluline meeskond ja selle sisekliima, kõik peavad läbi saama ja üksteist tundma, kriitilisi situatsioone tuleb ikka ette. Meeldis lähenemisviis, kuidas (jõudlus)probleemide tekkimisel keskenduti tarkvara ja koodi optimeerimisele, mitte ei investeeritud rauda. Teatud maani saab ebaefektiivset tarkvara küll järele aidata võimsama raudvaraga, kuid õigem oleks kood paremaks teha. Huvitavalt mõjus vahepeal kajastatud Kosovo seiklused.&lt;br /&gt;
&lt;br /&gt;
Viimases, arvult kaheksandas loengus&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/f0d2dfac-5f77-47e6-8e60-abe8d9b9679d?ec=true Loengu &amp;quot;Andmekaevandamine ja analüütika ning muud põnevat&amp;quot; videosalvestus. (Oleg Bogdanov ja Oliver Kadak). 15. oktoober 2015.]&amp;lt;/ref&amp;gt; sai aimduse, kuidas üldisemalt andmete taga peitub info. Ettekandjateks Oliver Kadak ning Oleg Bogdanov. Vaja on osata suurest andmemassiivist meile vajalik infot üheltpoolt välja sõeluda, teiseks seda analüüsida ning selle põhjal erinevaid järeldusi teha. Põhjaliku andmeanalüüsiga on võimalik kaardistada näiteks inimkäitumise mustreid, tuvastada ostueelistusi, mis omakorda aitab äri planeerimisel. Oli põnev loeng paljude näidetega reaalsest elust.&lt;br /&gt;
&lt;br /&gt;
Kokkuvõtvalt saab öelda, et antud kursus minu jaoks väga oluliselt laiendas IT maailmapilti, sai näha käsitlusi erineva nurga alt. Selle aine juures meeldis esinejate mitte väga akadeemiline kõneviis. Vabamalt, igapäeva töökeeles ning eluliste näidetega vürtsitatult sai mõtte väga hästi edasi antud ning oli hea kuulata. Tundus ka et kõik esinejad on oma eriala fanaatikud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Õpingukorralduse küsimused&#039;&#039;&#039; ==&lt;br /&gt;
=&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&#039;&#039;&#039;Küsimus B&#039;&#039;&#039;&amp;lt;/font&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Kukkusid arvestusel läbi. Kaua on võimalik arvestust järele teha? Kellega kokku leppida, et kordussooritust teha? Kuidas toimub kordussooritusele registreerimine? Mis on tähtajad? Kui palju maksab, kui oled riigi finantseeritaval (RF) õppekohalkohal? Kui palju maksab, kui oled tasulisel (OF) õppekohal?&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vastus:&#039;&#039;&#039; Arvestust on võimalik järele teha ülejärgmise semestri punasejoone päevani arvates aine õpetamissemestrist&amp;lt;ref&amp;gt;[http://www.itcollege.ee/tudengile/eeskirjad-ja-juhendid/oppekorraldus-eeskiri/ ITK õppekorralduse eeskiri. (Punkt 5.2)]&amp;lt;/ref&amp;gt;. Kordussooritus tuleb kokku leppida ainet läbi viiva õppejõuga. Kordussooritusele registreeritakse ÕIS-is ning registreerimise ja kordussoorituse vahele peab jääma vähemalt 2 tööpäeva. Kordusarvestus on riigi finantseeritaval (RF) õppekohal tasuta, tasulisel õppekohal (OF) õppijale on see tasuline (20€ kord).&amp;lt;ref&amp;gt;[http://www.itcollege.ee/tudengile/finantsinfo/pangarekvisiidid/ ITK teenuste tasumäärad 2015/2016 õppeaastal. (Punkt 5)]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&#039;&#039;&#039;Küsimus 4&#039;&#039;&#039;&amp;lt;/font&amp;gt;=&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Sul on olemas varasem töökogemus, mida sa tahad kasutada õppeainete arvestamisel (VÕTA). Millised on tegevused? Millised on tähtajad? Kas VÕTA kaudu saadud EAPd arvestatakse semestri õppekava täitmisesse ja aasta õppekoormusesse?&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vastus:&#039;&#039;&#039; Hiljemalt 10-ndal tööpäeval enne punase joone päeva tuleb esitada ÕIS-i vormikohase taotluse koos vajalike lisadega. Varasemate omandatud pädevuste vastavust õppeainete väljunditele hindab VÕTA komisjon. Seoses kõrgharidusreformiga ei arvestata alates 2013/2014 õa.-st IT Kolledžis õpinguid alustanud tudengite puhul VÕTA tulemusi semestripõhisel õppekava täies mahus täitmise kontrollimisel (st. õppeteenustasuta õppimiseks peab täiskoormusega tudeng koguma semestri kohta kumulatiivselt vähemalt 27 EAP IT Kolledži õppesoorituste põhjal). Samas VÕTA kaudu arvestatud õppesooritused täidavad õppekoormust (täis- või osakoormus), mida kontrollitakse õppeaasta lõpus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&#039;&#039;&#039;Ülesanne&#039;&#039;&#039;&amp;lt;/font&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Kui mitme EAP ulatuses tuleb õppekulud osaliselt hüvitada aasta lõpuks, kui esimese semestri lõpuks on olemas X EAPd ja teise semestri lõpuks Y EAPd? Kui suur on teile esitatav arve? X ja Y väärtused võtke allpool olevast tabelist selliselt, et X väärtus vastab teie üliõpilaskoodi eelviimasele numbrile ja Y üliõpilaskoodi viimasele numbrile.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vastus:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
X=24&lt;br /&gt;
&lt;br /&gt;
Y=26&lt;br /&gt;
&lt;br /&gt;
IT Kolledžis on täies mahus täitmise määr semestris 27 EAP-d, aastas teeb see kokku 27 + 27 = 54 EAP-d. &lt;br /&gt;
&lt;br /&gt;
Hüvitada tuleb 54 - (24 + 26) = 4 EAP eest.&lt;br /&gt;
Õppekulude osalise hüvitamise määr on 50 € 1 EAP kohta, teeb see kokku 4 * 50 = &#039;&#039;&#039;200 €&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Viited ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=User:Relken&amp;diff=95738</id>
		<title>User:Relken</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=User:Relken&amp;diff=95738"/>
		<updated>2015-10-29T22:15:03Z</updated>

		<summary type="html">&lt;p&gt;Relken: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Õpingukorraldus ja erialatutvustuse aine arvestustöö&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Autor: Rain Elken&lt;br /&gt;
&lt;br /&gt;
Rühm: DK14&lt;br /&gt;
&lt;br /&gt;
Esitamise kuupäev: 30. november 2015&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Essee&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Kuivõrd ITK kaugõppes pole eraldi õppetöö algust kuulutavat traditsioonilist aktust ette nähtud, oli kaugõppuritele antud õppeaine raames toimunud esimene loeng&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/5c75a38e-e103-474a-9e39-42aa330f4305 Loengu &amp;quot;Õppekorraldus ja sisekord&amp;quot; videosalvestus. (Inga Vau, Merle Varendi, Juri Tretjakov, Lauri Võsandi, Andres Septer, Kristjan Karmo). 26. august 2015.]&amp;lt;/ref&amp;gt; kõige pidulikum üritus. Sooviti head õpingute algust, tutvustati üsna põhjalikult õppekorralduslikke küsimusi ning anti üheselt mõista, et asudes õppima ITK-sse - olete teinud täiesti õige valiku. Loomulikult manitseti, et kerge ei saa olema ning kõik ei lähe alati libedalt ning planeeritult, kaugõppe vormist tulenevalt tuleb õpingutes teha kompromisse töö- ja pereelu kõrvalt. Lisaks tutvustati võimalusi kuidas vabal ajal end erialaselt täiendada, nt robootikaklubi, üliõpilasesindus, codeclub. Ühtlasi anti suunised, kuidas antud aine läbi saada – essee loengumaterjalide põhjal + küsimused õppekorralduseeskirja kohta.&lt;br /&gt;
&lt;br /&gt;
Teises loengus&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/e2cded4a-d03a-4ed5-95e9-de354ce58f36 Loengu &amp;quot;IT projektide juhtimine&amp;quot; videosalvestus. (Tiina Seeman). 3. september 2015.]&amp;lt;/ref&amp;gt; tutvustati IT projektijuhtimise eripärasid Tiina Seemani poolt. Lektoril on suured kogemused erinevates firmades töötamises, mistõttu oli põnev kuulata. Rõhutas projektijuhi vajalikkust ja vastutust kogu projekti õnnestumise seisukohast. Paljud IT projektid kipuvad ebaõnnestuma ning seda eelkõige puuduliku kommunikatsiooni tõttu, projektijuhil siin keskne roll tagada suhtlus tellija ja arendaja vahel. Huvitav oli ettekandes tähelepanu juhtimine tellija kui kliendile, et kogu projekti on ikkagi kliendi jaoks, projekti käigus loodav lahendus peab aitama realiseerida kliendi ärilisi eesmärke. Projektijuht peab algselt võimalikult selgelt kaardistama, mida täpselt klient vajab ning ilma milleta projekti kuidagi õnnestunuks lugeda ei saaks. Takistusi ja probleeme tekib töö käigus paraku ikka, projektijuht peab jooksvalt koordineerima nende lahendamist, nii et klient ja arendaja mõlemad oleks rahul. &lt;br /&gt;
&lt;br /&gt;
Kolmas loeng&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/ce07046a-a6aa-41bb-8fe8-9f256a6d627f?ec=true Loengu &amp;quot;Õppimisest. Omast kogemusest.&amp;quot; videosalvestus. (Elar Lang). 10. september 2015.]&amp;lt;/ref&amp;gt; oli põnev ja innustav. Elar Lang rääkis hästi – olles varasemalt pikka aega olnud iseõppijast veebiarendaja – kuidas ikkagi ilma ülikooli hariduseta edasi ei arene. Ise õppides esiteks kulub palju aega, kuniks kõik läbi proovid. Teiseks ei õpi ega tunne erialaseid spetsiifilise termineid, mistõttu on suhtlemine teiste arendajatega keeruline. Kõige olulisem moment ettekande juures oli õppida õppima momendi rõhutamine, mis oli väga hästi selgeks tehtud. IT maailma muutub väga kiiresti, mistõttu peab koguaeg ka hiljem peale kooli lõppu aina juurde õppima. Tähtis on kujundada õiged õpiharjumused kohe, ülikooli alguses. Vältida tuleb tudengi sündroomi ning samm-sammult ja järjepidevalt pühenduda õppimisse. &lt;br /&gt;
&lt;br /&gt;
Neljandas loengus&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/8e2141b7-9e98-49dc-a05d-6ca0edd3c19c?ec=true Loengu &amp;quot;Millega tegeleb süsteemihaldur&amp;quot; videosalvestus. (Taavi Tuisk). 17. september 2015.]&amp;lt;/ref&amp;gt; tutvustas Taavi Tuisk süsteemiandministraatori köögipoolt. Taavi on väga pikka aega adminnimisega erinevates ettevõtetes tegelenud, valdab teemat. Väga palju on muutunud sysop’i töö, kus 90ndatel oli suurem rõhuasetus ise juppidest serveri kokkupanemine, praeguseks on olemas suured valmiskonteinerid. Tänapäeval on vajadus osata ka mõneti programmeerida, et mõningaid rutiine automatiseerida. Oluline on ametieetika ehk mitte sobrada kasutajate isiklikes andmetes. Loengus oli palju iseäralikke termineid, mida algaja IT inimene veel hästi ette ei kujuta, pisut oleks võinud neid rohkem lahti selgitada. Kokkuvõttes natuke sai sysop’i tööst aimu, palju asju jäi ka salapäraseks. Nagu ka Taavi ise ütles, sysop on nö taustategija keda reeglina ei pandagi (ka ettevõtte ülemuste poolt) tähelegi. Siis kui jama käes, vaadatakse sysop’i poole. Tema ülesanne on tagada, et jamasid üldse ei juhtukski.&lt;br /&gt;
&lt;br /&gt;
Viies loeng&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/00379be2-bb86-4935-9b4f-aad720ee4cc0?ec=true Loengu &amp;quot;Testimine ja tarkvara kvaliteet&amp;quot; videosalvestus. (Kert Suvi). 24. september 2015.]&amp;lt;/ref&amp;gt; käsitles tarkvara testimist ja selle vajalikkust, ettekandjaks Kert Suvi. Pean tunnistama, et ei osanud testimise kui sellise olulisust tarkvara arenduse protsessis varasemalt väärtustada, pidasin millekski igavaks ja tüütuks. Kert tegi väga hästi erinevate eluliste näidete varal selgeks testimise vajalikkuse ning et sellele saab ja ka tuleb läheneda professionaalselt. Testija peab olema parandamatu pessimist; ei tohi pimesi uskuda arendajat, kes väidab et asi töötab küll. Eestis panustatakse testimisse muu maailmaga võrreldes liiga vähe. Testimisel on võimalik ka spetsialiseeruda mõnele konkreetsemale alale, näiteks turvalisuse testija nagu kolmandat loengut andnud Elar Lang. Igatahes tänu Kerti ettekandele muutus testimise teema minu jaoks palju seksikamaks.&lt;br /&gt;
&lt;br /&gt;
Kuues loeng&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/45c455bb-ef01-4f3e-a722-5ba40ecbe8ee?ec=true Loengu &amp;quot;Kuidas tarkvaraarenduse maailmas ellu jääda&amp;quot; videosalvestus. (Targo Tennisberg). 1. oktoober 2015.]&amp;lt;/ref&amp;gt; oli sissepõige tarkvara arenduse maailma hingeellu, mida tutvustas Targo Tennisberg. Huvitav ja haarav loeng, meeldis alguses toodud paralleel kunagiste alkeemikutega. Sai palju selgemaks, et arendaja ei tegele sugugi ainult koodi kirjutamisega, sellele kulub isegi vähem osa ajast. Tegeleda tuleb erinevate ettenägematute takistuste kõrvaldamisega, rõhutab sarnaselt T.Seemani loengule kommunikatsiooni olulisust nii arendajate kui ka tellija-arendaja vahel. Võtmetähtsusega isik on projektijuht. Enamus IT projekte ebaõnnestuvad mitte tehnoloogilistel põhjustel. Tihti üritatakse erinevaid probleeme lahendada kirjutades rohkem ning paremat koodi. Enamasti ei vii see paremini sihile. Ebaõnnestumise tõenäosus kasvab projektiga seotud inimeste arvu kasvades, kes omavad erinevat nägemust ja soove. Oluline on selgeks saada need pidepunktid, mis peavad kindlasti olema realiseeritud loodavas lahenduses. Ettekandes meeldis projekti mahu hindamise seisukohalt toodud mänguline võrdlus viktoriiniga, kus toimub suhteliselt pimeduses kobamine. Piiratud ajaga peab samas võimalikult mõistliku hinnangu andma, mitte keegi samas ei oma ettekujutust asja kogukeerukusest. Minu jaoks oli huvitav järeldus, kuidas Targo arvates edu saavutamiseks olulisem on teostus, mitte niivõrd idee. Üheltpoolt nõus – teostus määrab kuidas projekti tulemus kasutusse jõuab ning kas võetakse omaks, kuid idee peaks samas hõlmama teostuslahendust. Lihtsalt ideest on tõepoolest vähe abi.&lt;br /&gt;
&lt;br /&gt;
Seitsmendal loengul&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/95e9f82e-debe-4f6c-833a-5dabb639600d?ec=true Loengu &amp;quot;Oma IT ettevõte -- GPS asukohamääramisteenuse Navirec näitel&amp;quot; videosalvestus. (Tanel Unt). 8. oktoober 2015.]&amp;lt;/ref&amp;gt; tutvustas Tanel Unt oma IT äri püstipanemise võlusid ja valusid. Enda firmaga on üheltpoolt vabadus kõiges otsustada, mis sa teed ja mida ei tee, teiseltpoolt vastutad naha ja karvadega iga otsuse eest. Alustaval ettevõttes oleks kavalam omada pigem rohkem väiksemaid kliente, kui paari suuremat klienti. Viimase variandi puhul ühe kliendi ärakukkumisel võivad olla suured tagajärjed. Tähtis on ebaõnnestumisest, mida algajal ettevõtjal ikka ette tuleb, mitte pead norgu lasta, vaid teha omad järeldused – muuta äriplaani ning proovida uuesti ja paremini. Eriti väiksemas ettevõttes on väga oluline meeskond ja selle sisekliima, kõik peavad läbi saama ja üksteist tundma, kriitilisi situatsioone tuleb ikka ette. Meeldis lähenemisviis, kuidas (jõudlus)probleemide tekkimisel keskenduti tarkvara ja koodi optimeerimisele, mitte ei investeeritud rauda. Teatud maani saab ebaefektiivset tarkvara küll järele aidata võimsama raudvaraga, kuid õigem oleks kood paremaks teha. Huvitavalt mõjus vahepeal kajastatud Kosovo seiklused.&lt;br /&gt;
&lt;br /&gt;
Viimases, arvult kaheksandas loengus&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/f0d2dfac-5f77-47e6-8e60-abe8d9b9679d?ec=true Loengu &amp;quot;Andmekaevandamine ja analüütika ning muud põnevat&amp;quot; videosalvestus. (Oleg Bogdanov ja Oliver Kadak). 15. oktoober 2015.]&amp;lt;/ref&amp;gt; sai aimduse, kuidas üldisemalt andmete taga peitub info. Ettekandjateks Oliver Kadak ning Oleg Bogdanov. Vaja on osata suurest andmemassiivist meile vajalik infot üheltpoolt välja sõeluda, teiseks seda analüüsida ning selle põhjal erinevaid järeldusi teha. Põhjaliku andmeanalüüsiga on võimalik kaardistada näiteks inimkäitumise mustreid, tuvastada ostueelistusi, mis omakorda aitab äri planeerimisel. Oli põnev loeng paljude eluliste näidetega.&lt;br /&gt;
&lt;br /&gt;
Kokkuvõtvalt saab öelda, et antud kursus minu jaoks väga oluliselt laiendas IT maailmapilti, sai näha käsitlusi erineva nurga alt. Selle aine juures meeldis esinejate mitte väga akadeemiline kõneviis. Vabamalt, igapäeva töökeeles ning eluliste näidetega vürtsitatult sai mõtte väga hästi edasi antud ning oli hea kuulata. Tundus ka et kõik esinejad on oma eriala fanaatikud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Õpingukorralduse küsimused&#039;&#039;&#039; ==&lt;br /&gt;
&#039;&#039;&#039;Küsimus B&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kukkusid arvestusel läbi. Kaua on võimalik arvestust järele teha? Kellega kokku leppida, et kordussooritust teha? Kuidas toimub kordussooritusele registreerimine? Mis on tähtajad? Kui palju maksab, kui oled riigi finantseeritaval (RF) õppekohalkohal? Kui palju maksab, kui oled tasulisel (OF) õppekohal? &lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Arvestust on võimalik järele teha ülejärgmise semestri punasejoone päevani arvates aine õpetamissemestrist. Kordussooritus tuleb kokku leppida ainet läbi viiva õppejõuga. Kordussooritusele registreeritakse ÕIS-is ning registreerimise ja kordussoorituse vahele peab jääma vähemalt 2 tööpäeva.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Viited ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=User:Relken&amp;diff=95736</id>
		<title>User:Relken</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=User:Relken&amp;diff=95736"/>
		<updated>2015-10-29T22:00:25Z</updated>

		<summary type="html">&lt;p&gt;Relken: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Õpingukorraldus ja erialatutvustuse aine arvestustöö&amp;#039;&amp;#039;&amp;#039;  Autor: Rain Elken  Esitamise kuupäev: 30. november 2015   &amp;#039;&amp;#039;&amp;#039;Essee&amp;#039;&amp;#039;&amp;#039;  Kuivõrd ITK kaugõppes pole eraldi õpp...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Õpingukorraldus ja erialatutvustuse aine arvestustöö&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Autor: Rain Elken&lt;br /&gt;
&lt;br /&gt;
Esitamise kuupäev: 30. november 2015&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Essee&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Kuivõrd ITK kaugõppes pole eraldi õppetöö algust kuulutavat traditsioonilist aktust ette nähtud, oli kaugõppuritele antud õppeaine raames toimunud esimene loeng&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/5c75a38e-e103-474a-9e39-42aa330f4305 Loengu &amp;quot;Õppekorraldus ja sisekord&amp;quot; videosalvestus. (Inga Vau, Merle Varendi, Juri Tretjakov, Lauri Võsandi, Andres Septer, Kristjan Karmo). 26. august 2015.]&amp;lt;/ref&amp;gt; kõige pidulikum üritus. Sooviti head õpingute algust, tutvustati üsna põhjalikult õppekorralduslikke küsimusi ning anti üheselt mõista, et asudes õppima ITK-sse - olete teinud täiesti õige valiku. Loomulikult manitseti, et kerge ei saa olema ning kõik ei lähe alati libedalt ning planeeritult, kaugõppe vormist tulenevalt tuleb õpingutes teha kompromisse töö- ja pereelu kõrvalt. Lisaks tutvustati võimalusi kuidas vabal ajal end erialaselt täiendada, nt robootikaklubi, üliõpilasesindus, codeclub. Ühtlasi anti suunised, kuidas antud aine läbi saada – essee loengumaterjalide põhjal + küsimused õppekorralduseeskirja kohta.&lt;br /&gt;
&lt;br /&gt;
Teises loengus&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/e2cded4a-d03a-4ed5-95e9-de354ce58f36 Loengu &amp;quot;IT projektide juhtimine&amp;quot; videosalvestus. (Tiina Seeman). 3. september 2015.]&amp;lt;/ref&amp;gt; tutvustati IT projektijuhtimise eripärasid Tiina Seemani poolt. Lektoril on suured kogemused erinevates firmades töötamises, mistõttu oli põnev kuulata. Rõhutas projektijuhi vajalikkust ja vastutust kogu projekti õnnestumise seisukohast. Paljud IT projektid kipuvad ebaõnnestuma ning seda eelkõige puuduliku kommunikatsiooni tõttu, projektijuhil siin keskne roll tagada suhtlus tellija ja arendaja vahel. Huvitav oli ettekandes tähelepanu juhtimine tellija kui kliendile, et kogu projekti on ikkagi kliendi jaoks, projekti käigus loodav lahendus peab aitama realiseerida kliendi ärilisi eesmärke. Projektijuht peab algselt võimalikult selgelt kaardistama, mida täpselt klient vajab ning ilma milleta projekti kuidagi õnnestunuks lugeda ei saaks. Takistusi ja probleeme tekib töö käigus paraku ikka, projektijuht peab jooksvalt koordineerima nende lahendamist, nii et klient ja arendaja mõlemad oleks rahul. &lt;br /&gt;
&lt;br /&gt;
Kolmas loeng&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/ce07046a-a6aa-41bb-8fe8-9f256a6d627f?ec=true Loengu &amp;quot;Õppimisest. Omast kogemusest.&amp;quot; videosalvestus. (Elar Lang). 10. september 2015.]&amp;lt;/ref&amp;gt; oli põnev ja innustav. Elar Lang rääkis hästi – olles varasemalt pikka aega olnud iseõppijast veebiarendaja – kuidas ikkagi ilma ülikooli hariduseta edasi ei arene. Ise õppides esiteks kulub palju aega, kuniks kõik läbi proovid. Teiseks ei õpi ega tunne erialaseid spetsiifilise termineid, mistõttu on suhtlemine teiste arendajatega keeruline. Kõige olulisem moment ettekande juures oli õppida õppima momendi rõhutamine, mis oli väga hästi selgeks tehtud. IT maailma muutub väga kiiresti, mistõttu peab koguaeg ka hiljem peale kooli lõppu aina juurde õppima. Tähtis on kujundada õiged õpiharjumused kohe, ülikooli alguses. Vältida tuleb tudengi sündroomi ning samm-sammult ja järjepidevalt pühenduda õppimisse. &lt;br /&gt;
&lt;br /&gt;
Neljandas loengus&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/8e2141b7-9e98-49dc-a05d-6ca0edd3c19c?ec=true Loengu &amp;quot;Millega tegeleb süsteemihaldur&amp;quot; videosalvestus. (Taavi Tuisk). 17. september 2015.]&amp;lt;/ref&amp;gt; tutvustas Taavi Tuisk süsteemiandministraatori köögipoolt. Taavi on väga pikka aega adminnimisega erinevates ettevõtetes tegelenud, valdab teemat. Väga palju on muutunud sysop’i töö, kus 90ndatel oli suurem rõhuasetus ise juppidest serveri kokkupanemine, praeguseks on olemas suured valmiskonteinerid. Tänapäeval on vajadus osata ka mõneti programmeerida, et mõningaid rutiine automatiseerida. Oluline on ametieetika ehk mitte sobrada kasutajate isiklikes andmetes. Loengus oli palju iseäralikke termineid, mida algaja IT inimene veel hästi ette ei kujuta, pisut oleks võinud neid rohkem lahti selgitada. Kokkuvõttes natuke sai sysop’i tööst aimu, palju asju jäi ka salapäraseks. Nagu ka Taavi ise ütles, sysop on nö taustategija keda reeglina ei pandagi (ka ettevõtte ülemuste poolt) tähelegi. Siis kui jama käes, vaadatakse sysop’i poole. Tema ülesanne on tagada, et jamasid üldse ei juhtukski.&lt;br /&gt;
&lt;br /&gt;
Viies loeng&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/00379be2-bb86-4935-9b4f-aad720ee4cc0?ec=true Loengu &amp;quot;Testimine ja tarkvara kvaliteet&amp;quot; videosalvestus. (Kert Suvi). 24. september 2015.]&amp;lt;/ref&amp;gt; käsitles tarkvara testimist ja selle vajalikkust, ettekandjaks Kert Suvi. Pean tunnistama, et ei osanud testimise kui sellise olulisust tarkvara arenduse protsessis varasemalt väärtustada, pidasin millekski igavaks ja tüütuks. Kert tegi väga hästi erinevate eluliste näidete varal selgeks testimise vajalikkuse ning et sellele saab ja ka tuleb läheneda professionaalselt. Testija peab olema parandamatu pessimist; ei tohi pimesi uskuda arendajat, kes väidab et asi töötab küll. Eestis panustatakse testimisse muu maailmaga võrreldes liiga vähe. Testimisel on võimalik ka spetsialiseeruda mõnele konkreetsemale alale, näiteks turvalisuse testija nagu kolmandat loengut andnud Elar Lang. Igatahes tänu Kerti ettekandele muutus testimise teema minu jaoks palju seksikamaks.&lt;br /&gt;
&lt;br /&gt;
Kuues loeng&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/45c455bb-ef01-4f3e-a722-5ba40ecbe8ee?ec=true Loengu &amp;quot;Kuidas tarkvaraarenduse maailmas ellu jääda&amp;quot; videosalvestus. (Targo Tennisberg). 1. oktoober 2015.]&amp;lt;/ref&amp;gt; oli sissepõige tarkvara arenduse maailma hingeellu, mida tutvustas Targo Tennisberg. Huvitav ja haarav loeng, meeldis alguses toodud paralleel kunagiste alkeemikutega. Sai palju selgemaks, et arendaja ei tegele sugugi ainult koodi kirjutamisega, sellele kulub isegi vähem osa ajast. Tegeleda tuleb erinevate ettenägematute takistuste kõrvaldamisega, rõhutab sarnaselt T.Seemani loengule kommunikatsiooni olulisust nii arendajate kui ka tellija-arendaja vahel. Võtmetähtsusega isik on projektijuht. Enamus IT projekte ebaõnnestuvad mitte tehnoloogilistel põhjustel. Tihti üritatakse erinevaid probleeme lahendada kirjutades rohkem ning paremat koodi. Enamasti ei vii see paremini sihile. Ebaõnnestumise tõenäosus kasvab projektiga seotud inimeste arvu kasvades, kes omavad erinevat nägemust ja soove. Oluline on selgeks saada need pidepunktid, mis peavad kindlasti olema realiseeritud loodavas lahenduses. Ettekandes meeldis projekti mahu hindamise seisukohalt toodud mänguline võrdlus viktoriiniga, kus toimub suhteliselt pimeduses kobamine. Piiratud ajaga peab samas võimalikult mõistliku hinnangu andma, mitte keegi samas ei oma ettekujutust asja kogukeerukusest. Minu jaoks oli huvitav järeldus, kuidas Targo arvates edu saavutamiseks olulisem on teostus, mitte niivõrd idee. Üheltpoolt nõus – teostus määrab kuidas projekti tulemus kasutusse jõuab ning kas võetakse omaks, kuid idee peaks samas hõlmama teostuslahendust. Lihtsalt ideest on tõepoolest vähe abi.&lt;br /&gt;
&lt;br /&gt;
Seitsmendal loengul&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/95e9f82e-debe-4f6c-833a-5dabb639600d?ec=true Loengu &amp;quot;Oma IT ettevõte -- GPS asukohamääramisteenuse Navirec näitel&amp;quot; videosalvestus. (Tanel Unt). 8. oktoober 2015.]&amp;lt;/ref&amp;gt; tutvustas Tanel Unt oma IT äri püstipanemise võlusid ja valusid. Enda firmaga on üheltpoolt vabadus kõiges otsustada, mis sa teed ja mida ei tee, teiseltpoolt vastutad naha ja karvadega iga otsuse eest. Alustaval ettevõttes oleks kavalam omada pigem rohkem väiksemaid kliente, kui paari suuremat klienti. Viimase variandi puhul ühe kliendi ärakukkumisel võivad olla suured tagajärjed. Tähtis on ebaõnnestumisest, mida algajal ettevõtjal ikka ette tuleb, mitte pead norgu lasta, vaid teha omad järeldused – muuta äriplaani ning proovida uuesti ja paremini. Eriti väiksemas ettevõttes on väga oluline meeskond ja selle sisekliima, kõik peavad läbi saama ja üksteist tundma, kriitilisi situatsioone tuleb ikka ette. Meeldis lähenemisviis, kuidas (jõudlus)probleemide tekkimisel keskenduti tarkvara ja koodi optimeerimisele, mitte ei investeeritud rauda. Teatud maani saab ebaefektiivset tarkvara küll järele aidata võimsama raudvaraga, kuid õigem oleks kood paremaks teha. Huvitavalt mõjus vahepeal kajastatud Kosovo seiklused.&lt;br /&gt;
&lt;br /&gt;
Viimases, arvult kaheksandas loengus&amp;lt;ref&amp;gt;[https://echo360.e-ope.ee/ess/echo/presentation/f0d2dfac-5f77-47e6-8e60-abe8d9b9679d?ec=true Loengu &amp;quot;Andmekaevandamine ja analüütika ning muud põnevat&amp;quot; videosalvestus. (Oleg Bogdanov ja Oliver Kadak). 15. oktoober 2015.]&amp;lt;/ref&amp;gt; sai aimduse, kuidas üldisemalt andmete taga peitub info. Ettekandjateks Oliver Kadak ning Oleg Bogdanov. Vaja on osata suurest andmemassiivist meile vajalik infot üheltpoolt välja sõeluda, teiseks seda analüüsida ning selle põhjal erinevaid järeldusi teha. Põhjaliku andmeanalüüsiga on võimalik kaardistada näiteks inimkäitumise mustreid, tuvastada ostueelistusi, mis omakorda aitab äri planeerimisel. Oli põnev loeng paljude eluliste näidetega.&lt;br /&gt;
&lt;br /&gt;
Kokkuvõtvalt saab öelda, et antud kursus minu jaoks väga oluliselt laiendas IT maailmapilti, sai näha käsitlusi erineva nurga alt. Selle aine juures meeldis esinejate mitte väga akadeemiline kõneviis. Vabamalt, igapäeva töökeeles ning eluliste näidetega vürtsitatult sai mõtte väga hästi edasi antud ning oli hea kuulata. Tundus ka et kõik esinejad on oma eriala fanaatikud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Refereerimist saab teha &amp;lt;ref&amp;gt;Õppkorralduse eeskiri P4.4 ...&amp;lt;/ref&amp;gt; märgistega.&lt;br /&gt;
Viited kuvatakse kohta, kuhu kirjutad:&lt;br /&gt;
Abi mediawiki kirjutamisel saab mediawiki kodulehelt[2].&lt;br /&gt;
Notes[edit]&lt;br /&gt;
&lt;br /&gt;
Kokkuvõtteks soovin tsiteerida ühte tudengit „vahet pole, kui magus on teie uni varahommikul, kui tahate IT alaselt natukesegi oma silmaringi arendada, siis minge kindlasti kõigi nende ainete loengutesse ja kuulake hoolega!“&lt;br /&gt;
Õpingukorralduse küsimused[edit]&lt;br /&gt;
&lt;br /&gt;
Küsimus B[edit]&lt;br /&gt;
Kukkusid arvestusel läbi. Kuidas edasi? Kaua on võimalik arvestust teha? Kellega kokkuleppida, et arvestust teha? Kuidas toimub järelarvestusele registreerimine? Mis on tähtajad? Palju maksab, kui oled riigieelarvelisel (RE) kohal? Palju maksab, kui oled riigieelarvevälisel (REV) kohal?&lt;br /&gt;
Märkuseks järgmiseks aastaks - küsimuse sõnastust parandanda - vaata historyt&lt;br /&gt;
Vastus&lt;br /&gt;
Eksami uuesti sooritamiseks pean tegema järgmised tegevused ...&lt;br /&gt;
Küsimus 3[edit]&lt;br /&gt;
Millised võimalused on minna akadeemilisele puhkusele esimesel õppeaastal? Mis tegevused tuleb selleks teha? Kui pikk on maksimaalne puhkuse aeg? Kuidas toimub puhkuse lõpetamine? Kas puhkuse ajal saab deklareerida õppeaineid? Kas saab teha järele eksameid ja arvestusi?&lt;br /&gt;
Vastus&lt;br /&gt;
Selleks, et minna akadeemilisele puhkusele, pean ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Viited ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Relken</name></author>
	</entry>
</feed>