Netgroup: Difference between revisions

From ICO wiki
Jump to navigationJump to search
Iteras (talk | contribs)
Iteras (talk | contribs)
 
(29 intermediate revisions by 2 users not shown)
Line 3: Line 3:
*'''Indrek Nurja'''
*'''Indrek Nurja'''
*'''Imre Teras'''
*'''Imre Teras'''
*'''Kristjan Kotto'''
*'''Marek Kivikink'''
*'''Marek Kivikink'''
==Lõpp produkt==
Klientrakendus Lives http://youtubefy.azurewebsites.net/Videos
NB! Azure serveris toimuvad päringud aeglaselt, playlistiga tegelemisel palun varuda 5 sekundit kannatust
Esimene teenusepakkuja(videod, video mängimine) www.youtube.com
Teine teenusepakkuja(meie loodud teenuse pakkuja, talletab playlistid ja videod) Lives  http://kustersbeta1.azurewebsites.net/videos
NB! Kuvab ainult playlistides olevaid videoid testi eesmärgil, pole mõeldud playlistide kuvamiseks
Kood kliendirakendusest asub [https://onedrive.live.com/redir?resid=2CCE2367E04BB70C!1582&authkey=!APbk6ucaXvb0AD8&ithint=file%2crar siin]
Kood teenusele asub [https://onedrive.live.com/redir?resid=2CCE2367E04BB70C!1583&authkey=!AE4GIf00pVq6erk&ithint=file%2crar siin] NB! Kindlasti läbi lugeda Solutioni kaustas README!!!!!!!.txt fail.


== Idee ==
== Idee ==


Ideeks on luua nn. "Middleman" teenus oksjoni või esemete müügiga tegelevatele veebisaitidele, mis vähendaks kliendi ja müüja vahelist pettuse riski.
Esialgseks ideeks oli luua nn. "Middleman" teenus oksjoni või esemete müügiga tegelevatele veebisaitidele, mis vähendaks kliendi ja müüja vahelist pettuse riski, kuid lõpuks selgus, et antud idee läbiviimine osutub liiga mahukaks ning ei jõua tähtaegadeks valmis
 
===Uus idee===
 
Kasutades Youtube API't luua teenus, mis võimaldab selle kasutajatel luua oma playliste.
Võimaldab salvestada loodud playliste teise veebirakendusse ning lugeda playliste teisest veebirakendusest sisse.
 
==Analüüs==
 
Veebirakendus on mõeldud netiostlejatele(nt Facebooki, Okidoki, osta.ee vms lehtedelt inimeselt - inimesele ostmine), kes hakkavad veebilehelt saama nö "middle-man" teenust. Põhieesmärgiks on vähendada pettuse riske ja võimalusi, kaasates mõlemaid osapooli, nii müüjat kui ka ostjat, tehingusse. Põhiideeks kuidas seda teenust pakkuda on hoida raha kinni, kuni ostja on saanud kauba kätte. Kui kaup on jõudnud ostjani, antakse raha müüjale kontole edasi, vastasel juhul tagastame raha ostjale.
 
===Uus analüüs===
 
Veebirakendus on mõeldud isikutele, kes ei oma või ei taha mingil põhjusel omada google kontot, kuid tahavad siiski luua oma isiklikke youtube esitusloendeid.
 
Veebirakenduse idee on teha lihtne ja mugav muusika mängija Youtube põhjal. Ei pea ennast kuhugi sisse logima, ei pea ennast autentima ja saad mugavalt luua muusika playliste, neid jagada ja kuulata ka teiste omi(selleks pead teadma playlisti nime). Veebirakenduses on paremal pool muusika playlisti loomise ja otsimise vormid, üleval keskel muusika otsimise vorm ja vasakul kuvatakse otsingu tulemusi.
 
Playlist mängib ise muusikat koheselt kui eelnev video on läbi saanud ja mängib vastavalt playlisti lisamise järjekorras.
 
Võimalik on mängida ka videoid ilma playlisti lisamata: otsid video ja klõpsad "Play" nuppu ja koheselt mängitakse see ette.
 
On võimalik ka keset playlisti mängimist vahetada laule, klõpsates playlistis "Play" nuppu ning video hakkab mängima.


== Kasutatav tehnoloogia ==
== Kasutatav tehnoloogia ==
ASP.NET MVC 5
Entity Framework
Youtube API
OWIN
AngularJS


== Rakenduse sisu ==
Ajax
 
jne
 
== Rakenduse sisu(uus lahendus)==


=== "Must have": ===
=== "Must have": ===
Videode otsimine nime järgi
Videode lisamine playlisti
Videode kustutamine playlistist
Videode mängimine meie klientrakenduses
Playlistide kuvamine meie klientrakenduses
Playlistide loomine
Playlistide nime järgi otsimine


=== "Nice to have": ===
=== "Nice to have": ===
Videode automaatne järjestikune mängimine
Playlistide kustutamine
== Retsensioonid ==
'''Retsensioon XML'''
Meie poolt retsenseeritava XMLi ülesande esitas meeskond Undress Gaver ja nende projekti ideeks oli luua laohaldussüsteem, mis võimaldab selle kasutajatel esitada tellimusi. esitatud XML failis on neil arvete kohta sellist informatsiooni nagu: arve number, koostaja tellija, kuupäevad, juriidilist infot ja muud vajalikku, mis tavaliselt arve peal kuvatakse. Lisaks oli esitatud veel ka XSLT fail, mis tegi antud XML failist loetava arve. Arve enda kohapealt oleks võinud hoida tabeli kirjastiili läbivalt samana, kuna praegu on arvel kuvatud toote nimetused, kogused, ühikud ja hinnaga seotud lahtrid keskele joondu tekstiga, kuid summad ja käibemaksumäär paremale joondatud tekstiga, selle parandamiseks võiks need kolm lahtrit kas joondada vasakule, või keskele, nagu ülejäänud lahtrid. Lisaks sellele oleks võinud juriidilise info osas võinud infotüübid ära boldida, kuna see parandaks sealse informatsiooni loetavust. XMLi skeem on loetavalt vormistatud, normaalselt tabuleeritud. XML failis oli välja toodud veel ka tarneviis ning tarnija nimi, millest kumbagi XSLT faili poolt loodava arve peal millegipärast ei kuvata. Kokkuvõtteks võib väita, et  nii XML kui XSLT täidavad kõik esitatud ülesande nõuded ning ainukesteks kriitikakohtadeks oleks mõningad stiilivead. Võib julgelt väita, et meeskond Undress Gaver on saanud XML ülesandega hästi hakkama.
'''Retsensioon'''
Otsustasime retsenseerida meeskonna BurgerAce poolt loodud veebirakendust. Nende ideeks oli luua rakendus, mis võimaldaks selle kasutajatel tellida ette burgereid ning jooke, valida milliseid asju nad burgeri vahele tahavad ning siis see ostukorvi panna. Antud rakenduse idee on hea, kuna seda on kerge edasi arendada ning võimaldab rakenduse autoritel laieneda ka teiste toidukohtade eeltellimise peale. Näiteks saaks sama rakendust kasutades kokku panna enda salati, pitsa või muud toidud. Idee on veel lisaks hea kuna see aitab toidukohtades vältida suurte järjekordade teket (inimesed kes teavad ette täpselt mida nad tahavad, saavad toidu eeltellida, maksta läbi interneti panga, paypali ja muude maksevahendite, lähevad toidukohta kohale ning saavad oma toidu kätte sekunditega). Meeskonna loodud XML fail on konkreetne, hästi vormistatud ning tabuleeritud ja mis kõige tähtsam, loetav. Nagu ka paljudel teistel projektidel olid wikis leidunud “must have” nõuded liiga optimistlikud ning ei olnud arvestatud ajakulukusega. Rakendus oli jagunenud kaheks osaks, üks mis oli mõeldud halduseks(toodete lisamine jms) ning teine, kus said kliendid siis enda valitud asju tellida. Klientrakenduses ei saa küll kliendid ise endale burgereid kokku panna, kuid sama asi on neil juba valmis tehtud halduse poole peal, seega ei tohiks olla raske seda dubleerida ja anda klientidele sama võimalus. Andmebaasis on olemas toodete hinnang, kuid seda kliendid muuta ei saa, küll aga saavad kliendid lisada endale tooteid lemmikute alla, et ei peaks pikast toote nimekirjast igakord oma lemmikuid produkte välja otsima. Klientide poolne rakendus on lihtsalt kasutatav ning segadust tekitavad ainult mõningad vead. Näiteks registreerimisel kui kasutaja on sünnikuupäeva juba ära täitnud ning viib hiire selle lahtri pealt ära, siis jääb mulje nagu lahter oleks tühi. Küll aga on problemaatiline sisselogimine, peale sisselogimist kuvatakse kasutajale küll, et ta on sisseloginud kasutajasse ning kuvatakse ka selle kasutaja nimi, kuid teda ei suunata ära sisselogimise lehelt ning ta saab uuesti sisse logida ning isegi uut kasutajat registreerida. Kui kasutaja on juba sisse loginud, siis ei saa ta enam välja logida. Kasutajal on võimalik valida tooteid ning lisades need ostukorvi saab ta ka minna checkouti, kuid isegi kui ostukorvis on tooteid olemas siis kuvatakse lisaks toodetele seda, et ostukorv on tühi. My Orders all ei tööta back to store nupp ning ka order nupp (Order nupu täide viimine ei kuulu küll nii väga selle aine temaatikasse, kuid tore oleks olnud kui ta oleks mingi sõnumi siiski kuvanud). Haldusrakenduse poole pealt on võimalik lisada burgereid, neile panna hinnanguid, valida koostisosi, määrata hind ning suurus ja panna tootele nimi ja kirjeldus. Toote lisamisel ei salvestu kahjuks selle suurus ega hind. Peale nende kahe vea on burgerite lisamine kiire, lihtne ja mugav. Valmis tooteid on võimalik ka filtreerida, valmis on saadud nime ja kirjelduse põhiline filtreerimine(lõpetamata veel allergeenide ja gluteeni sisalduse põhine filtreerimine.) Teiseks suureks võimaluseks halduse poole pealt on koostisosade lisamine, mis on üles ehitatud samamoodi nagu ka burgerite lisamine. Koostisosade puhul on võimalik neid lisada täites ära nime, kategooria, gluteeni sisalduse ning allergeenide sisalduse lahtrid. Nagu ka burgerite lisamine on ka koostisosade lisamine väga lihtne ja töötab osaline filtreerimine koostisosa nime järgi(lõpetamata on ülejäänud attribuutide järgi filtreerimine). Kokkuvõtvalt võib öelda, et meeskonna BurgerAce poolt loodud rakendus on tehtud ning piisav, et ainet läbida, kuid meeskond lõi endale liiga ambitsioonika projekti, ning ei suudetud seda täies mahus ellu viia ning see sisaldab ka kliendi poole pealt mõningaid vigu mis tegid rakenduse kasutamise natukene keerukaks. Kui meeskond tahab oma rakendust edasi arendada, siis soovitaks neil kindlasti mõelda laiemalt, kui ainult burgerite peale ning lisada toodete juurde neid illustreerivad pildid. Lisaks oleks redigeerimis UI’d vaja natukene ümber teha, sest praegune võimaldab enesele märkamatult libaparandusi teha.


== Andmebaas ==
== Andmebaas ==
Line 85: Line 156:


=== XSD Fail ===
=== XSD Fail ===
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="System">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="Person">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Role">
                <xs:complexType>
                  <xs:attribute name="roleType" type="xs:string" use="required" />
                </xs:complexType>
              </xs:element>
              <xs:element name="PersonData">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="UserName" type="xs:string" />
                    <xs:element name="FirstName" type="xs:string" />
                    <xs:element name="LastName" type="xs:string" />
                    <xs:element name="PersonPosts" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="Posts">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="PostTitle" type="xs:string" />
                    <xs:element name="PostContent">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="PostPictures">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element maxOccurs="unbounded" name="Picture">
                                  <xs:complexType>
                                    <xs:simpleContent>
                                      <xs:extension base="xs:string">
                                        <xs:attribute name="pictureId" type="xs:unsignedByte" use="required" />
                                      </xs:extension>
                                    </xs:simpleContent>
                                  </xs:complexType>
                                </xs:element>
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                          <xs:element name="PostDescription" type="xs:string" />
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute name="postId" type="xs:unsignedByte" use="required" />
                  <xs:attribute name="category" type="xs:string" use="required" />
                  <xs:attribute name="date" type="xs:string" use="required" />
                  <xs:attribute name="public" type="xs:string" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="personId" type="xs:unsignedByte" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>


 
=== XSLT - kuvab kõik kasutajate postitused koos selle sisuga ===
 
=== XSLT ===
<source lang="xml">
<source lang="xml">
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
Line 154: Line 287:
* Imre on teinud ASP.net raames projekti natuke uurinud, puurinud, teinud valmis andmebaasi
* Imre on teinud ASP.net raames projekti natuke uurinud, puurinud, teinud valmis andmebaasi
=== 20.03.2016 ===
=== 20.03.2016 ===
Imre tegi XML, XSLT ja XSD failid
*Imre tegi XML, XSLT ja XSD failid
 
*Indrek tegi Wiki lehe
 
===03.06.2016===
 
*Uue idee peale tulemine
 
=== 09.06.2016 ===
 
 
*Marek lisas retsensioonid
 
===13.6.2016===
Lõpp produkt valmis


Indrek tegi Wiki lehe
===14.06.2016===
Viimased sissekanded meie produktist ja puudu olnud andmed Wikist lisatud

Latest revision as of 15:42, 14 June 2016

Liikmed

  • Indrek Nurja
  • Imre Teras
  • Marek Kivikink

Lõpp produkt

Klientrakendus Lives http://youtubefy.azurewebsites.net/Videos NB! Azure serveris toimuvad päringud aeglaselt, playlistiga tegelemisel palun varuda 5 sekundit kannatust Esimene teenusepakkuja(videod, video mängimine) www.youtube.com Teine teenusepakkuja(meie loodud teenuse pakkuja, talletab playlistid ja videod) Lives http://kustersbeta1.azurewebsites.net/videos NB! Kuvab ainult playlistides olevaid videoid testi eesmärgil, pole mõeldud playlistide kuvamiseks

Kood kliendirakendusest asub siin

Kood teenusele asub siin NB! Kindlasti läbi lugeda Solutioni kaustas README!!!!!!!.txt fail.

Idee

Esialgseks ideeks oli luua nn. "Middleman" teenus oksjoni või esemete müügiga tegelevatele veebisaitidele, mis vähendaks kliendi ja müüja vahelist pettuse riski, kuid lõpuks selgus, et antud idee läbiviimine osutub liiga mahukaks ning ei jõua tähtaegadeks valmis

Uus idee

Kasutades Youtube API't luua teenus, mis võimaldab selle kasutajatel luua oma playliste. Võimaldab salvestada loodud playliste teise veebirakendusse ning lugeda playliste teisest veebirakendusest sisse.

Analüüs

Veebirakendus on mõeldud netiostlejatele(nt Facebooki, Okidoki, osta.ee vms lehtedelt inimeselt - inimesele ostmine), kes hakkavad veebilehelt saama nö "middle-man" teenust. Põhieesmärgiks on vähendada pettuse riske ja võimalusi, kaasates mõlemaid osapooli, nii müüjat kui ka ostjat, tehingusse. Põhiideeks kuidas seda teenust pakkuda on hoida raha kinni, kuni ostja on saanud kauba kätte. Kui kaup on jõudnud ostjani, antakse raha müüjale kontole edasi, vastasel juhul tagastame raha ostjale.

Uus analüüs

Veebirakendus on mõeldud isikutele, kes ei oma või ei taha mingil põhjusel omada google kontot, kuid tahavad siiski luua oma isiklikke youtube esitusloendeid.

Veebirakenduse idee on teha lihtne ja mugav muusika mängija Youtube põhjal. Ei pea ennast kuhugi sisse logima, ei pea ennast autentima ja saad mugavalt luua muusika playliste, neid jagada ja kuulata ka teiste omi(selleks pead teadma playlisti nime). Veebirakenduses on paremal pool muusika playlisti loomise ja otsimise vormid, üleval keskel muusika otsimise vorm ja vasakul kuvatakse otsingu tulemusi.

Playlist mängib ise muusikat koheselt kui eelnev video on läbi saanud ja mängib vastavalt playlisti lisamise järjekorras.

Võimalik on mängida ka videoid ilma playlisti lisamata: otsid video ja klõpsad "Play" nuppu ja koheselt mängitakse see ette.

On võimalik ka keset playlisti mängimist vahetada laule, klõpsates playlistis "Play" nuppu ning video hakkab mängima.

Kasutatav tehnoloogia

ASP.NET MVC 5

Entity Framework

Youtube API

OWIN

AngularJS

Ajax

jne

Rakenduse sisu(uus lahendus)

"Must have":

Videode otsimine nime järgi

Videode lisamine playlisti

Videode kustutamine playlistist

Videode mängimine meie klientrakenduses

Playlistide kuvamine meie klientrakenduses

Playlistide loomine

Playlistide nime järgi otsimine

"Nice to have":

Videode automaatne järjestikune mängimine

Playlistide kustutamine


Retsensioonid

Retsensioon XML

Meie poolt retsenseeritava XMLi ülesande esitas meeskond Undress Gaver ja nende projekti ideeks oli luua laohaldussüsteem, mis võimaldab selle kasutajatel esitada tellimusi. esitatud XML failis on neil arvete kohta sellist informatsiooni nagu: arve number, koostaja tellija, kuupäevad, juriidilist infot ja muud vajalikku, mis tavaliselt arve peal kuvatakse. Lisaks oli esitatud veel ka XSLT fail, mis tegi antud XML failist loetava arve. Arve enda kohapealt oleks võinud hoida tabeli kirjastiili läbivalt samana, kuna praegu on arvel kuvatud toote nimetused, kogused, ühikud ja hinnaga seotud lahtrid keskele joondu tekstiga, kuid summad ja käibemaksumäär paremale joondatud tekstiga, selle parandamiseks võiks need kolm lahtrit kas joondada vasakule, või keskele, nagu ülejäänud lahtrid. Lisaks sellele oleks võinud juriidilise info osas võinud infotüübid ära boldida, kuna see parandaks sealse informatsiooni loetavust. XMLi skeem on loetavalt vormistatud, normaalselt tabuleeritud. XML failis oli välja toodud veel ka tarneviis ning tarnija nimi, millest kumbagi XSLT faili poolt loodava arve peal millegipärast ei kuvata. Kokkuvõtteks võib väita, et nii XML kui XSLT täidavad kõik esitatud ülesande nõuded ning ainukesteks kriitikakohtadeks oleks mõningad stiilivead. Võib julgelt väita, et meeskond Undress Gaver on saanud XML ülesandega hästi hakkama.

Retsensioon

Otsustasime retsenseerida meeskonna BurgerAce poolt loodud veebirakendust. Nende ideeks oli luua rakendus, mis võimaldaks selle kasutajatel tellida ette burgereid ning jooke, valida milliseid asju nad burgeri vahele tahavad ning siis see ostukorvi panna. Antud rakenduse idee on hea, kuna seda on kerge edasi arendada ning võimaldab rakenduse autoritel laieneda ka teiste toidukohtade eeltellimise peale. Näiteks saaks sama rakendust kasutades kokku panna enda salati, pitsa või muud toidud. Idee on veel lisaks hea kuna see aitab toidukohtades vältida suurte järjekordade teket (inimesed kes teavad ette täpselt mida nad tahavad, saavad toidu eeltellida, maksta läbi interneti panga, paypali ja muude maksevahendite, lähevad toidukohta kohale ning saavad oma toidu kätte sekunditega). Meeskonna loodud XML fail on konkreetne, hästi vormistatud ning tabuleeritud ja mis kõige tähtsam, loetav. Nagu ka paljudel teistel projektidel olid wikis leidunud “must have” nõuded liiga optimistlikud ning ei olnud arvestatud ajakulukusega. Rakendus oli jagunenud kaheks osaks, üks mis oli mõeldud halduseks(toodete lisamine jms) ning teine, kus said kliendid siis enda valitud asju tellida. Klientrakenduses ei saa küll kliendid ise endale burgereid kokku panna, kuid sama asi on neil juba valmis tehtud halduse poole peal, seega ei tohiks olla raske seda dubleerida ja anda klientidele sama võimalus. Andmebaasis on olemas toodete hinnang, kuid seda kliendid muuta ei saa, küll aga saavad kliendid lisada endale tooteid lemmikute alla, et ei peaks pikast toote nimekirjast igakord oma lemmikuid produkte välja otsima. Klientide poolne rakendus on lihtsalt kasutatav ning segadust tekitavad ainult mõningad vead. Näiteks registreerimisel kui kasutaja on sünnikuupäeva juba ära täitnud ning viib hiire selle lahtri pealt ära, siis jääb mulje nagu lahter oleks tühi. Küll aga on problemaatiline sisselogimine, peale sisselogimist kuvatakse kasutajale küll, et ta on sisseloginud kasutajasse ning kuvatakse ka selle kasutaja nimi, kuid teda ei suunata ära sisselogimise lehelt ning ta saab uuesti sisse logida ning isegi uut kasutajat registreerida. Kui kasutaja on juba sisse loginud, siis ei saa ta enam välja logida. Kasutajal on võimalik valida tooteid ning lisades need ostukorvi saab ta ka minna checkouti, kuid isegi kui ostukorvis on tooteid olemas siis kuvatakse lisaks toodetele seda, et ostukorv on tühi. My Orders all ei tööta back to store nupp ning ka order nupp (Order nupu täide viimine ei kuulu küll nii väga selle aine temaatikasse, kuid tore oleks olnud kui ta oleks mingi sõnumi siiski kuvanud). Haldusrakenduse poole pealt on võimalik lisada burgereid, neile panna hinnanguid, valida koostisosi, määrata hind ning suurus ja panna tootele nimi ja kirjeldus. Toote lisamisel ei salvestu kahjuks selle suurus ega hind. Peale nende kahe vea on burgerite lisamine kiire, lihtne ja mugav. Valmis tooteid on võimalik ka filtreerida, valmis on saadud nime ja kirjelduse põhiline filtreerimine(lõpetamata veel allergeenide ja gluteeni sisalduse põhine filtreerimine.) Teiseks suureks võimaluseks halduse poole pealt on koostisosade lisamine, mis on üles ehitatud samamoodi nagu ka burgerite lisamine. Koostisosade puhul on võimalik neid lisada täites ära nime, kategooria, gluteeni sisalduse ning allergeenide sisalduse lahtrid. Nagu ka burgerite lisamine on ka koostisosade lisamine väga lihtne ja töötab osaline filtreerimine koostisosa nime järgi(lõpetamata on ülejäänud attribuutide järgi filtreerimine). Kokkuvõtvalt võib öelda, et meeskonna BurgerAce poolt loodud rakendus on tehtud ning piisav, et ainet läbida, kuid meeskond lõi endale liiga ambitsioonika projekti, ning ei suudetud seda täies mahus ellu viia ning see sisaldab ka kliendi poole pealt mõningaid vigu mis tegid rakenduse kasutamise natukene keerukaks. Kui meeskond tahab oma rakendust edasi arendada, siis soovitaks neil kindlasti mõelda laiemalt, kui ainult burgerite peale ning lisada toodete juurde neid illustreerivad pildid. Lisaks oleks redigeerimis UI’d vaja natukene ümber teha, sest praegune võimaldab enesele märkamatult libaparandusi teha.

Andmebaas

XML Fail

<?xml version="1.0" encoding="utf-8" ?>
<System>
  <Person personId ="0" >
    <Role roleType ="admin"></Role>
    <PersonData>
      <UserName><![CDATA[Ompzu]]></UserName>
      <FirstName><![CDATA[Imre]]></FirstName>
      <LastName><![CDATA[Teras]]></LastName>
      <PersonPosts></PersonPosts>
    </PersonData>
    <Posts postId ="0" category="Technology" date="20.03.2016" public="False">
      <PostTitle><![CDATA[First posts' title]]></PostTitle>
      <PostContent>
        <PostPictures>
          <Picture pictureId ="0"><![CDATA[!!!Picture not found!!!]]></Picture>    
      </PostPictures>
        <PostDescription><![CDATA[Lorem ipsum dolor sit amet, malesuada dictumst proin integer leo orci, phasellus vulputate arcu mauris sodales praesent, laoreet nisl sed vulputate, leo arcu euismod netus. Sodales venenatis purus tellus, leo sem ac dui vel nunc, lorem eleifend purus nullam duis, consectetuer lacus dui.]]></PostDescription>
      </PostContent>
    </Posts>
  </Person>
<Person personId ="1">
    <Role roleType ="admin"></Role>
    <PersonData>
      <UserName><![CDATA[GlobalAlite]]></UserName>
      <FirstName><![CDATA[Intzz]]></FirstName>
      <LastName><![CDATA[Nurja]]></LastName>
      <PersonPosts></PersonPosts>
    </PersonData>
    <Posts postId ="0" category="Car" date="20.03.2016" public="False">
      <PostTitle><![CDATA[Globals First posts' title]]></PostTitle>
      <PostContent>
        <PostPictures>
          <Picture pictureId ="1"><![CDATA[!!!Picture not existing!!!]]></Picture>
          <Picture pictureId ="2"><![CDATA[!!!Picture not existing!!!]]></Picture>
          <Picture pictureId ="3"><![CDATA[!!!Picture not existing!!!]]></Picture>
        </PostPictures>
        <PostDescription><![CDATA[Lorem ipsum dolor sit amet, malesuada dictumst proin integer leo orci, phasellus vulputate arcu mauris sodales praesent, laoreet nisl sed vulputate, leo arcu euismod netus. Sodales venenatis purus tellus, leo sem ac dui vel nunc, lorem eleifend purus nullam duis, consectetuer lacus dui.]]></PostDescription>
      </PostContent>
    </Posts>
  </Person>
<Person personId ="2">
    <Role roleType ="user"></Role>
    <PersonData>
      <UserName><![CDATA[KoitJoome]]></UserName>
      <FirstName><![CDATA[Marek]]></FirstName>
      <LastName><![CDATA[Kiviking]]></LastName>
      <PersonPosts></PersonPosts>
    </PersonData>
    <Posts postId ="0" category="toys" date="20.03.2016" public="False">
      <PostTitle><![CDATA[Koits First posts' title]]></PostTitle>
      <PostContent>
        <PostPictures>
          <Picture pictureId ="4"><![CDATA[!!!Picture not existing!!!]]></Picture>
          <Picture pictureId ="5"><![CDATA[!!!Picture not existing!!!]]></Picture>
        </PostPictures>
        <PostDescription><![CDATA[Lorem ipsum dolor sit amet, malesuada dictumst proin integer leo orci, phasellus vulputate arcu mauris sodales praesent, laoreet nisl sed vulputate, leo arcu euismod netus. Sodales venenatis purus tellus, leo sem ac dui vel nunc, lorem eleifend purus nullam duis, consectetuer lacus dui.]]></PostDescription>
      </PostContent>
    </Posts>
  </Person>
</System>

XSD Fail

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <xs:element name="System">
   <xs:complexType>
     <xs:sequence>
       <xs:element maxOccurs="unbounded" name="Person">
         <xs:complexType>
           <xs:sequence>
             <xs:element name="Role">
               <xs:complexType>
                 <xs:attribute name="roleType" type="xs:string" use="required" />
               </xs:complexType>
             </xs:element>
             <xs:element name="PersonData">
               <xs:complexType>
                 <xs:sequence>
                   <xs:element name="UserName" type="xs:string" />
                   <xs:element name="FirstName" type="xs:string" />
                   <xs:element name="LastName" type="xs:string" />
                   <xs:element name="PersonPosts" />
                 </xs:sequence>
               </xs:complexType>
             </xs:element>
             <xs:element name="Posts">
               <xs:complexType>
                 <xs:sequence>
                   <xs:element name="PostTitle" type="xs:string" />
                   <xs:element name="PostContent">
                     <xs:complexType>
                       <xs:sequence>
                         <xs:element name="PostPictures">
                           <xs:complexType>
                             <xs:sequence>
                               <xs:element maxOccurs="unbounded" name="Picture">
                                 <xs:complexType>
                                   <xs:simpleContent>
                                     <xs:extension base="xs:string">
                                       <xs:attribute name="pictureId" type="xs:unsignedByte" use="required" />
                                     </xs:extension>
                                   </xs:simpleContent>
                                 </xs:complexType>
                               </xs:element>
                             </xs:sequence>
                           </xs:complexType>
                         </xs:element>
                         <xs:element name="PostDescription" type="xs:string" />
                       </xs:sequence>
                     </xs:complexType>
                   </xs:element>
                 </xs:sequence>
                 <xs:attribute name="postId" type="xs:unsignedByte" use="required" />
                 <xs:attribute name="category" type="xs:string" use="required" />
                 <xs:attribute name="date" type="xs:string" use="required" />
                 <xs:attribute name="public" type="xs:string" use="required" />
               </xs:complexType>
             </xs:element>
           </xs:sequence>
           <xs:attribute name="personId" type="xs:unsignedByte" use="required" />
         </xs:complexType>
       </xs:element>
     </xs:sequence>
   </xs:complexType>
 </xs:element>
</xs:schema>

XSLT - kuvab kõik kasutajate postitused koos selle sisuga

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
    <xsl:output method="html" indent="yes"/>

    <xsl:template match="/">
      <html>
        <head>
          <title>
            <H1>Posts by persons</H1>
          </title>
        </head>
        <body>
          <H1>Posts by Persons</H1>
          <ul>
            <xsl:for-each select="/System/Person">
              <li>
                <xsl:value-of select="PersonData/UserName"/>
                <ul>
                  <xsl:for-each select="Posts">
                    <li>
                      <xsl:value-of select="PostTitle"/>
                      <p>
                        <xsl:value-of select="PostContent/PostDescription"/>
                      </p>
                     
                      <ul>

                        <xsl:for-each select="PostContent/PostPictures/Picture">
                          <li>
                            <xsl:value-of select="."/>
                          </li>
                        </xsl:for-each>
                      </ul>
                    </li>
                  </xsl:for-each>
                </ul>
              </li>
            </xsl:for-each>
          </ul>
        </body>
      </html>
      
    </xsl:template>
</xsl:stylesheet>

Ajakava

8.02.2016

  • Meeskonna loomine
  • Lubaduse tegemine, et alustame projektiga varakult

19.02.2016

  • Imre õrritas meeskonnakaaslasi miljoniideega, ning lubas varsti rohkem infot jagada

21.02.2016

  • Imre tuli lagedale oma ideega, uurisime tiimiga ja tundus täitsa normaalne idee.

26.02.2016

  • Imre on teinud ASP.net raames projekti natuke uurinud, puurinud, teinud valmis andmebaasi

20.03.2016

  • Imre tegi XML, XSLT ja XSD failid
  • Indrek tegi Wiki lehe

03.06.2016

  • Uue idee peale tulemine

09.06.2016

  • Marek lisas retsensioonid

13.6.2016

Lõpp produkt valmis

14.06.2016

Viimased sissekanded meie produktist ja puudu olnud andmed Wikist lisatud