Meeskond Hashtag: Difference between revisions
Line 644: | Line 644: | ||
- Valmislahendus peab võimaldama otsingut sooritada mõistliku ajaga(kasutaja ei tohi oodata nii kaua et tüdineb ootamisest). | - Valmislahendus peab võimaldama otsingut sooritada mõistliku ajaga(kasutaja ei tohi oodata nii kaua et tüdineb ootamisest). | ||
- Lahendus peab lihtsustama kasutajale otsimistegevust, mitte seda keerulisemaks muutma(väärtusetud otsingutulemused). | - Lahendus peab lihtsustama kasutajale otsimistegevust, mitte seda keerulisemaks muutma(väärtusetud otsingutulemused). | ||
Line 650: | Line 651: | ||
Teenus peab: | Teenus peab: | ||
- Hoidma lokaalselt ligipääsetavas andmebaasis muusikaga seotud andmeid,kasutajaid ja statistikat nende kohta. | - Hoidma lokaalselt ligipääsetavas andmebaasis muusikaga seotud andmeid,kasutajaid ja statistikat nende kohta. | ||
- Autocomplete’ma ainult lokaalses andmebaasis reaalselt eksisteerivat muusikat st sisestatud artisti, loo, albuminimi peavad mingil moel seotud olema. | - Autocomplete’ma ainult lokaalses andmebaasis reaalselt eksisteerivat muusikat st sisestatud artisti, loo, albuminimi peavad mingil moel seotud olema. | ||
- Kui otsing on teele saadetud ja juhul kui sisestatud teksti lokaalsest andmebaasist ei leitud proovima pärida seda mõnest tuntud andmebaasist(nt spotify). | - Kui otsing on teele saadetud ja juhul kui sisestatud teksti lokaalsest andmebaasist ei leitud proovima pärida seda mõnest tuntud andmebaasist(nt spotify). | ||
- Võimaldama kasutajaid luua,kustutada. | - Võimaldama kasutajaid luua,kustutada. | ||
- Koguda kasutajate kohta statistilisi andmeid. | - Koguda kasutajate kohta statistilisi andmeid. | ||
- Hoidma kasutajaajalugu. | - Hoidma kasutajaajalugu. | ||
Rakendus peab: | Rakendus peab: | ||
- Pärima otsingusõnega andmeid meedialehekülgedelt. | - Pärima otsingusõnega andmeid meedialehekülgedelt. | ||
- Saadud andmed sorteerima | - Saadud andmed sorteerima | ||
- Kasutajale otsinguvaates kuvama tulemused(lingid) meedialehekülgede järgi jaotatuna. | - Kasutajale otsinguvaates kuvama tulemused(lingid) meedialehekülgede järgi jaotatuna. | ||
- Sisaldama vaateid kasutajate loomise kohta. | - Sisaldama vaateid kasutajate loomise kohta. | ||
- Sisaldama vaateid kasutaja päringute ajaloo kohta. | - Sisaldama vaateid kasutaja päringute ajaloo kohta. | ||
Line 665: | Line 676: | ||
Lahendus peab olema | Lahendus peab olema | ||
- Kasutajale lihtsa ja arusaadava ülesehitusega. | - Kasutajale lihtsa ja arusaadava ülesehitusega. | ||
- Piisavalt kiire(kuni 30s päringu jaoks) | - Piisavalt kiire(kuni 30s päringu jaoks) | ||
- Funktsionaalne(tagastab väärtuslikke tulemusi, mida kasutaja saaks tarbida) | - Funktsionaalne(tagastab väärtuslikke tulemusi, mida kasutaja saaks tarbida) | ||
Must have | Must have | ||
- Loo, artisti, albumi sisendsõne autocomplete jälgides ka andmebaasi sisendite omavahelisi seoseid. | - Loo, artisti, albumi sisendsõne autocomplete jälgides ka andmebaasi sisendite omavahelisi seoseid. | ||
- Custom päringud(kasutavad meedialehekülje API’t) vähemalt kahele meedialeheküljele. | - Custom päringud(kasutavad meedialehekülje API’t) vähemalt kahele meedialeheküljele. | ||
- Tulemuste sorteerimine, et neid(linke) tähtsuse järjekorras kuvada. | - Tulemuste sorteerimine, et neid(linke) tähtsuse järjekorras kuvada. | ||
- Vaated lihtsalt otsinguribale, otsinguribale/koos tulemuste lehega, kasutajaajaloo lehele, kasutajaloomiselehele, statistika lehele. | - Vaated lihtsalt otsinguribale, otsinguribale/koos tulemuste lehega, kasutajaajaloo lehele, kasutajaloomiselehele, statistika lehele. | ||
- Kasutajaajaloo hoidmine. | - Kasutajaajaloo hoidmine. | ||
Nice to have | Nice to have | ||
- automaatne lokaalse andmebaasi uuendamine peale otsingu tegemist, kasutades mõnda populaarset andmebaasi. | - automaatne lokaalse andmebaasi uuendamine peale otsingu tegemist, kasutades mõnda populaarset andmebaasi. | ||
- Rohkem meedialehekülgi vastuses. | - Rohkem meedialehekülgi vastuses. | ||
- Kasutajaajaloo hoidmine, cachedes mõned vastuste HTML lehed, et kasutaja saaks mugavalt oma ajalugu vaadata ilma uut päringut tegemata. | - Kasutajaajaloo hoidmine, cachedes mõned vastuste HTML lehed, et kasutaja saaks mugavalt oma ajalugu vaadata ilma uut päringut tegemata. | ||
EDIT:Antud analüüs on kirjutatud pea kuu aja eest, lahenduses esineb mõningaid erinevusi võrreldes analüüsis tooduga. | EDIT:Antud analüüs on kirjutatud pea kuu aja eest, lahenduses esineb mõningaid erinevusi võrreldes analüüsis tooduga. | ||
==Veebiteenus== | ==Veebiteenus== |
Revision as of 21:20, 16 June 2014
Kodutöö aines "Võrgurakendused II: hajussüsteemide ehitamine"
Meeskonna nimi: Hashtag
Liige:
- Jaan Kängsepp, D22
Kodutöö XML osa 8.märts
XML osa täitmiseks võtsin näiteks plaadikogumiku.
XML andmefail
<?xml version="1.0" encoding="utf-8"?> <Plaadid> <Plaat kandja="vinüül" tüüp="stuudio"> <Kaanepilt>http://enos.itcollege.ee/~jkangsep/xml_kodut%f6%f6/pildid/death_magnetic.jpg</Kaanepilt> <Albumi_nimi>Death Magnetic</Albumi_nimi> <Aasta sajand="21" kümnend="0">2008</Aasta> <Kategooria>Heavy metal</Kategooria> <Esitaja>Metallica</Esitaja> <Plaadifirma>Warner Bros.</Plaadifirma> <Plaadifirma>Vertigo</Plaadifirma> <Hind>20€</Hind> <Koosseis> <Liige positsioon="bändiliige"> <Nimi>James Hetfield</Nimi> <Instrument>Vokaal</Instrument> <Instrument>Rütmikitarr</Instrument> </Liige> <Liige positsioon="bändiliige"> <Nimi>Lars Ulrich</Nimi> <Instrument>Trummid</Instrument> </Liige> <Liige positsioon="bändiliige"> <Nimi>Kirk Hammett</Nimi> <Instrument>Taustavokaal</Instrument> <Instrument>Juhtiv kitarr</Instrument> </Liige> <Liige positsioon="bändiliige"> <Nimi>Robert Trujillo</Nimi> <Instrument>Vokaal</Instrument> <Instrument>Basskitarr</Instrument> </Liige> </Koosseis> <Lood> <Lugu järjekorranumber="1"> <Nimi>That Was Just Your Life</Nimi> <Pikkus>7:08</Pikkus> </Lugu> <Lugu järjekorranumber="2"> <Nimi>"The End of the Line"</Nimi> <Pikkus>7:52</Pikkus> </Lugu> <Lugu järjekorranumber="3"> <Nimi> "Broken, Beat and Scarred"</Nimi> <Pikkus>6:25</Pikkus> </Lugu> <Lugu järjekorranumber="4"> <Nimi> "The Day That Never Comes"</Nimi> <Pikkus>7:56</Pikkus> </Lugu> <Lugu järjekorranumber="5"> <Nimi> "All Nightmare Long" </Nimi> <Pikkus>7:58</Pikkus> </Lugu> <Lugu järjekorranumber="6"> <Nimi>"Cyanide"</Nimi> <Pikkus>6:39</Pikkus> </Lugu> <Lugu järjekorranumber="7"> <Nimi> "The Unforgiven III"</Nimi> <Pikkus>7:46</Pikkus> </Lugu> <Lugu järjekorranumber="8"> <Nimi>"The Judas Kiss" </Nimi> <Pikkus>8:00</Pikkus> </Lugu> <Lugu järjekorranumber="9"> <Nimi> "Suicide and Redemption" (Instrumental)</Nimi> <Pikkus>9:57</Pikkus> </Lugu> <Lugu järjekorranumber="10"> <Nimi>"My Apocalypse"</Nimi> <Pikkus>5:01</Pikkus> </Lugu> </Lood> </Plaat> <Plaat kandja="cd" tüüp="stuudio"> <Kaanepilt>http://enos.itcollege.ee/~jkangsep/xml_kodut%f6%f6/pildid/Pendulum_immersion_artwork.jpg</Kaanepilt> <Albumi_nimi>Immersion</Albumi_nimi> <Aasta sajand="21" kümnend="10">2010</Aasta> <Kategooria>Drum and Bass</Kategooria> <Esitaja>Pendulum</Esitaja> <Plaadifirma>Warner Music</Plaadifirma> <Plaadifirma>Earstorm</Plaadifirma> <Plaadifirma>Atlantic Records</Plaadifirma> <Hind>10€</Hind> <Koosseis> <Liige positsioon="bändiliige"> <Nimi>Rob Swire</Nimi> <Instrument>Vokaal</Instrument> <Instrument>Süntesaator</Instrument> </Liige> <Liige positsioon="bändiliige"> <Nimi>Gareth McGrillen</Nimi> <Instrument>Taustavokaal</Instrument> <Instrument>Bass</Instrument> </Liige> <Liige positsioon="bändiliige"> <Nimi>Paul Harding</Nimi> <Instrument>Disk Jockey</Instrument> </Liige> <Liige positsioon="bändiliige"> <Nimi>Ben Mount</Nimi> <Instrument>MC</Instrument> </Liige> <Liige positsioon="bändiliige"> <Nimi>Peredur ap Gwynedd</Nimi> <Instrument>Kitarr</Instrument> </Liige> <Liige positsioon="bändiliige"> <Nimi>Kevin Sawka</Nimi> <Instrument>Trummid</Instrument> </Liige> <Liige positsioon="bändiliige"> <Nimi>Liam Howlett</Nimi> <Instrument>Disk Jockey</Instrument> </Liige> <Liige positsioon="külalisbänd"> <Nimi>In Flames</Nimi> </Liige> <Liige positsioon="külalisliige"> <Nimi>Steven Wilson</Nimi> <Instrument>Kitarr</Instrument> </Liige> </Koosseis> <Lood> <Lugu järjekorranumber="1"> <Nimi>"Genesis"</Nimi> <Pikkus>1:09</Pikkus> </Lugu> <Lugu järjekorranumber="2"> <Nimi>"Salt in the Wounds" </Nimi> <Pikkus>6:38</Pikkus> </Lugu> <Lugu järjekorranumber="3"> <Nimi>"Watercolour" </Nimi> <Pikkus>5:08</Pikkus> </Lugu> <Lugu järjekorranumber="4"> <Nimi>"Set Me on Fire"</Nimi> <Pikkus>5:02</Pikkus> </Lugu> <Lugu järjekorranumber="5"> <Nimi>"Crush"</Nimi> <Pikkus>4:13</Pikkus> </Lugu> <Lugu järjekorranumber="6"> <Nimi>"Under the Waves" </Nimi> <Pikkus>4:55</Pikkus> </Lugu> <Lugu järjekorranumber="7"> <Nimi>"Immunize" (feat. Liam Howlett)</Nimi> <Pikkus>4:36</Pikkus> </Lugu> <Lugu järjekorranumber="8"> <Nimi>"The Island - Pt. I (Dawn)"</Nimi> <Pikkus>5:20</Pikkus> </Lugu> <Lugu järjekorranumber="9"> <Nimi>"The Island - Pt. II (Dusk)" </Nimi> <Pikkus>4:09</Pikkus> </Lugu> <Lugu järjekorranumber="10"> <Nimi>"Comprachicos"</Nimi> <Pikkus>2:48</Pikkus> </Lugu> <Lugu järjekorranumber="11"> <Nimi>"The Vulture"</Nimi> <Pikkus>4:03</Pikkus> </Lugu> <Lugu järjekorranumber="12"> <Nimi>"Witchcraft"</Nimi> <Pikkus>4:12</Pikkus> </Lugu> <Lugu järjekorranumber="13"> <Nimi>"Self vs Self" (feat. In Flames)</Nimi> <Pikkus>4:45</Pikkus> </Lugu> <Lugu järjekorranumber="14"> <Nimi>"The Fountain" (feat. Steven Wilson)</Nimi> <Pikkus>5:00</Pikkus> </Lugu> <Lugu järjekorranumber="15"> <Nimi>"Encoder"</Nimi> <Pikkus>5:21</Pikkus> </Lugu> </Lood> </Plaat> <Plaat kandja="cd" tüüp="stuudio"> <Kaanepilt>http://enos.itcollege.ee/~jkangsep/xml_kodut%f6%f6/pildid/SGFront1.jpg</Kaanepilt> <Albumi_nimi>Sungrazer</Albumi_nimi> <Aasta sajand="21" kümnend="10">2010</Aasta> <Kategooria>Psychedelic jam</Kategooria> <Kategooria>Stoner rock</Kategooria> <Esitaja>Sungrazer</Esitaja> <Plaadifirma>Elektrohasch Records</Plaadifirma> <Hind>13€</Hind> <Koosseis> <Liige positsioon="bändiliige"> <Nimi>Rutger Smeets</Nimi> <Instrument>Vokaal</Instrument> <Instrument>Kitarr</Instrument> </Liige> <Liige positsioon="bändiliige"> <Nimi>Hans Mulders</Nimi> <Instrument>Trummid</Instrument> </Liige> <Liige positsioon="bändiliige"> <Nimi>Sander Haagmans</Nimi> <Instrument>Vokaal</Instrument> <Instrument>Basskitarr</Instrument> </Liige> </Koosseis> <Lood> <Lugu järjekorranumber="1"> <Nimi>"Zero Zero"</Nimi> <Pikkus>7:46</Pikkus> </Lugu> <Lugu järjekorranumber="2"> <Nimi>"Common Beliver"</Nimi> <Pikkus>5:26</Pikkus> </Lugu> <Lugu järjekorranumber="3"> <Nimi>"If"</Nimi> <Pikkus>7:46</Pikkus> </Lugu> <Lugu järjekorranumber="4"> <Nimi>"Somo"</Nimi> <Pikkus>8:08</Pikkus> </Lugu> <Lugu järjekorranumber="5"> <Nimi>"Mountain Dusk"</Nimi> <Pikkus>7:18</Pikkus> </Lugu> </Lood> </Plaat> <Plaat kandja="cd" tüüp="stuudio"> <Kaanepilt>http://enos.itcollege.ee/~jkangsep/xml_kodut%f6%f6/pildid/R-2226986-1270990616.jpeg</Kaanepilt> <Albumi_nimi>The Road Less Traveled</Albumi_nimi> <Aasta sajand="21" kümnend="0">2006</Aasta> <Kategooria>Hip-Hop</Kategooria> <Esitaja>Unknown Prophets</Esitaja> <Plaadifirma>N/A</Plaadifirma> <Hind>10€</Hind> <Koosseis> <Liige positsioon="bändiliige"> <Nimi>MaD SoN</Nimi> <Instrument>Vokaal</Instrument> </Liige> <Liige positsioon="bändiliige"> <Nimi>Big Jess</Nimi> <Instrument>Vokaal</Instrument> </Liige> <Liige positsioon="külalisliige"> <Nimi>Slug</Nimi> <Instrument>Vokaal</Instrument> </Liige> <Liige positsioon="külalisliige"> <Nimi>Craig D</Nimi> <Instrument>Vokaal</Instrument> </Liige> <Liige positsioon="külalisliige"> <Nimi>Joia Senser</Nimi> <Instrument>Vokaal</Instrument> </Liige> <Liige positsioon="külalisliige"> <Nimi>Stokley Williams</Nimi> <Instrument>Vokaal</Instrument> </Liige> <Liige positsioon="külalisliige"> <Nimi>Samahra</Nimi> <Instrument>Vokaal</Instrument> </Liige> </Koosseis> <Lood> <Lugu järjekorranumber="1"> <Nimi>"Time To Move Forward "</Nimi> <Pikkus>4:44</Pikkus> </Lugu> <Lugu järjekorranumber="2"> <Nimi>"Mr. Mainstream"</Nimi> <Pikkus>4:03</Pikkus> </Lugu> <Lugu järjekorranumber="3"> <Nimi>"Our Time Now"</Nimi> <Pikkus>4:25</Pikkus> </Lugu> <Lugu järjekorranumber="4"> <Nimi>"Not Today "</Nimi> <Pikkus>3:16</Pikkus> </Lugu> <Lugu järjekorranumber="5"> <Nimi> "Let It Loose[Featuring] – Craig D (2), Joia Senser " </Nimi> <Pikkus>3:36</Pikkus> </Lugu> <Lugu järjekorranumber="6"> <Nimi>"The Road Less Traveled"</Nimi> <Pikkus>3:32</Pikkus> </Lugu> <Lugu järjekorranumber="7"> <Nimi>"Dive In"</Nimi> <Pikkus>3:45</Pikkus> </Lugu> <Lugu järjekorranumber="8"> <Nimi>"Lord Please "</Nimi> <Pikkus>4:04</Pikkus> </Lugu> <Lugu järjekorranumber="9"> <Nimi> "Move Mountains[Featuring] – Stokley Williams " </Nimi> <Pikkus>4:47</Pikkus> </Lugu> <Lugu järjekorranumber="10"> <Nimi> "Imagination[Featuring] – Samahra " </Nimi> <Pikkus>3:41</Pikkus> </Lugu> <Lugu järjekorranumber="11"> <Nimi>"This Song "</Nimi> <Pikkus>3:40</Pikkus> </Lugu> <Lugu järjekorranumber="12"> <Nimi>"Waves "</Nimi> <Pikkus>4:18</Pikkus> </Lugu> <Lugu järjekorranumber="13"> <Nimi>"Lost In Time "</Nimi> <Pikkus>4:49</Pikkus> </Lugu> <Lugu järjekorranumber="14"> <Nimi>"Grown "</Nimi> <Pikkus>4:18</Pikkus> </Lugu> <Lugu järjekorranumber="15"> <Nimi>"Against The Grain "</Nimi> <Pikkus>4:04</Pikkus> </Lugu> </Lood> </Plaat> </Plaadid>
XML skeemifail
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="Plaadid"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="Plaat"> <xs:complexType> <xs:sequence> <xs:element name="Kaanepilt" type="xs:string" /> <xs:element name="Albumi_nimi" type="xs:string" /> <xs:element name="Aasta"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:unsignedShort"> <xs:attribute name="sajand" type="xs:unsignedByte" use="required" /> <xs:attribute name="kümnend" type="xs:unsignedByte" use="required" /> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> <xs:element maxOccurs="unbounded" name="Kategooria" type="xs:string" /> <xs:element name="Esitaja" type="xs:string" /> <xs:element maxOccurs="unbounded" name="Plaadifirma" type="xs:string" /> <xs:element name="Hind" type="xs:string" /> <xs:element name="Koosseis"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="Liige"> <xs:complexType> <xs:sequence> <xs:element name="Nimi" type="xs:string" /> <xs:element minOccurs="0" maxOccurs="unbounded" name="Instrument" type="xs:string" /> </xs:sequence> <xs:attribute name="positsioon" type="xs:string" use="required" /> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="Lood"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="Lugu"> <xs:complexType> <xs:sequence> <xs:element name="Nimi" type="xs:string" /> <xs:element name="Pikkus" type="xs:string" /> </xs:sequence> <xs:attribute name="järjekorranumber" type="xs:unsignedByte" use="required" /> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="kandja" type="xs:string" use="required" /> <xs:attribute name="tüüp" type="xs:string" use="required" /> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
XSL fail 1 - Muusikakogumik
Esimene XSL fail kuvab HTML-i,kus loendatakse XML-s olevate plaatide esitajad ja albumi nimed ning võimaldakse näha detailselt albumite lugusid.
<?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="/"> <head> <title>Muusikakogumik</title> </head> <body> <h1>Esitaja ja album</h1> <xsl:for-each select="/Plaadid/Plaat"> <ul> <li> <b> <xsl:value-of select="Esitaja"/> </b> </li> <ul> <li> <a> <xsl:attribute name="href"> <xsl:text>#</xsl:text> <xsl:value-of select="Albumi_nimi"/> </xsl:attribute> <xsl:value-of select="Albumi_nimi"/> </a> </li> </ul> </ul> </xsl:for-each> <h2>Albumi lood</h2> <xsl:for-each select="/Plaadid/Plaat"> <xsl:variable name="Plaat" select="."></xsl:variable> <ul> <li> <a> <xsl:attribute name="id"> <xsl:value-of select="Albumi_nimi"/> </xsl:attribute> <xsl:value-of select="Albumi_nimi"/> </a> <xsl:for-each select="$Plaat/Lood/Lugu"> <ul> <li> <xsl:value-of select="@järjekorranumber"/> : <xsl:value-of select="Nimi"/> - <xsl:value-of select="Pikkus"/> </li> </ul> </xsl:for-each> </li> </ul> </xsl:for-each> </body> </xsl:template> </xsl:stylesheet>
XSL fail 2 - Album art
<?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="/"> <head> <title>Album art</title> </head> <body> <xsl:for-each select="Plaadid/Plaat"> <ul style="list-style-type:none"> <li> <b> <xsl:value-of select="Esitaja"/> <xsl:text>-</xsl:text> <xsl:value-of select="Albumi_nimi"/> </b> </li> <li> <img> <xsl:attribute name="src"> <xsl:value-of select="Kaanepilt"/> </xsl:attribute> <xsl:attribute name="width"> <xsl:text>300</xsl:text> </xsl:attribute> <xsl:attribute name="height"> <xsl:text>300</xsl:text> </xsl:attribute> </img> </li> </ul> </xsl:for-each> </body> </xsl:template> </xsl:stylesheet>
XSL fail 3 - Andmete XML kujul kuvamine
<?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="xml" indent="yes"/> <xsl:template match="/"> <xsl:element name="Plaadid"> <xsl:for-each select="/Plaadid/Plaat"> <xsl:variable name="record" select="."/> <xsl:element name="Plaat"> <xsl:attribute name="kandja"> <xsl:value-of select="@kandja"/> </xsl:attribute> <xsl:attribute name="tüüp"> <xsl:value-of select="@tüüp"/> </xsl:attribute> <xsl:element name="Kaanepilt"> <xsl:value-of select="Kaanepilt"/> </xsl:element> <xsl:element name="Albumi_nimi"> <xsl:value-of select="Albumi_nimi"/> </xsl:element> <xsl:element name="Aasta"> <xsl:value-of select="Aasta"/> </xsl:element> <xsl:element name="Kategooria"> <xsl:value-of select="Kategooria"/> </xsl:element> <xsl:element name="Esitaja"> <xsl:value-of select="Esitaja"/> </xsl:element> <xsl:for-each select="$record/Plaadifirma"> <xsl:variable name="rc" select="."/> <xsl:element name="Plaadifirma"> <xsl:value-of select="$rc"/> </xsl:element> </xsl:for-each> <xsl:element name="Hind"> <xsl:value-of select="Hind"/> </xsl:element> <xsl:element name="Koosseis"> <xsl:for-each select="$record/Koosseis/Liige"> <xsl:variable name="member" select="."/> <xsl:element name="Liige"> <xsl:element name="Nimi"> <xsl:value-of select="Nimi"/> </xsl:element> <!--Element Nimi lõpp--> <xsl:for-each select="$member/Instrument"> <xsl:variable name="pill" select="."/> <xsl:element name="Instrument"> <xsl:value-of select="$pill"/> </xsl:element><!--Element Instrument lõpp --> </xsl:for-each> </xsl:element><!--Element Liige lõpp--> </xsl:for-each> </xsl:element> <xsl:element name="Lood"> <xsl:for-each select="$record/Lood/Lugu"> <xsl:variable name="song" select="."/> <xsl:element name="Lugu"> <xsl:element name="Nimi"> <xsl:value-of select="Nimi"/> </xsl:element><!--Element Nimi lõpp--> <xsl:element name="Pikkus"> <xsl:value-of select="Pikkus"/> </xsl:element><!--Element Pikkus lõpp--> </xsl:element><!--Element Lugu lõpp--> </xsl:for-each> </xsl:element><!--Element Lood lõpp--> </xsl:element> </xsl:for-each> </xsl:element> </xsl:template> </xsl:stylesheet>
Lahenduse analüüs
Mis on eesmärk?
Rakenduse eesmärk on lihtsustada tavakasutaja otsinguid muusika valdkonnas sooritades vastavaid otsinguid teenusepakkuja poolt valitud meedialehekülgedel ning kuvades tulemusi sorteerituna tavakasutajale. Rakendus säästab kasutajat ühe otsingu tegemisel mitme lehekülje külastamisest ja võrreldes muude otsingumootoritega annab tagasi vähem informatiivset müra. Sellise funktsionaalsuse saavutamiseks koostatakse meedialehekülgedele päringud kasutades ära nende API võimalusi päringute kohandamiseks. Teenuse poolel seisneb projekt autocomplete pakkumises. Teenus pakub sisese andmebaasi põhjal otsinguriba täitmise funktsioone.Täpsemalt pakub teenus rakenduse tarbeks sobiva algusega muusikapalu kas siis loo nime, albumi või artisti järgi. Selle tõttu on teenus rakenduse funktsionaalsusele rohkem toetavas rollis. Otsustamine millist otsingut teha jääb ikkagi kasutajale. Näiteks kui otsitakse kindlat populaarset muusikapala, siis aitab autocomplete selle nime otsinguribal hõlpsasti kätte saada ja rakenduses otsitaksegi meedialehekülgedelt seda populaarset muusikapala. Teisel juhtumil kui lugu on tundmatu või teati ainult mittetuntud artisti nime, siis autocomplete kasutajat nii palju küll ei aita, kuid rakendus võib leida siiski meedialeheküljelt väärtust omava tulemuse(nt sõbra venna bänd). Teenuse sisselogitud kasutajatel salvestatakse nende varasemad otsingud tulevaste otsingute kiirendamiseks. Registreerinud kasutajate kohta peetakse statistikat, mis on vanuse ja asukohapõhine ning kajastab teenuse külastussagedusi piirkonniti ning ajaliselt teenusepakkuja tarbeks. Lisaks sellele pakutakse ka võimalust luua ja kustutada enda kasutaja ning vaadata enda kasutusajalugu. Täpsemalt saab ligi veel igale tehtud otsingu tulemustele. Registreeritud kasutajate otsingud salvestatkse kahel viisil otsitud fraasi järgi ning klõpsatud linkide järgi. Et mitte serverit koormata hoitakse kasutajaajalugu kahel viisil: viimaste tehtud päringutulemuste HTML’d ning nendest varasemate päringute lingid,mida klõpsates koostatakse antud otsingusõnaga uus päring. Peale selle saab kasutaja märkida tehtud päringu oluliseks, mis tähendab seda et seda hoitakse HTML’na.
Mida hakatakse tegema?
Realiseeritakse teenuse ja seejärel rakenduse põhifunktsionaalsus. Luuakse ja täiendatakse vastavad mudelid. Luuakse mudelite abil vastav andmebaas. Mõeldakse välja, mis nimede pakkumise ehk päringu andmebaasi pihta käivitab ning milliste tingimuste järgi nimesid tagastatakse. Koostatakse vastav repositoorium nimede otsimise päringute jaoks. Mõeldakse välja DTO-d andmebaasist tulenevate andmete vahel olevate seoste vähendamiseks. Realiseeritakse kasutajale otsinguribal nimede pakkumine. Realiseeritakse meetodid otsingusõne saatmiseks erinevatele meedialehekülgedele kasutades ära vastavate lehekülgede API võimalusi. Lahendatakse meedialehekülgedelt saadud tulemuste JSON’i sorteerimine. Luuakse vaade tulemuste kasutajale kuvamiseks. Luuakse viis sorteeritud andmete vaatega ühendamiseks. Realiseeritakse kasutajate ja nende haldamisega seonduv.
Millised on püstitatud nõuded?
- Valmislahendus peab olema võimalikult lihtne, mis tõstab atraktiivsust kasutaja jaoks,kuid ei ole nii lihtne et pärsiks funktsionaalsust.
„Everything Should Be Made as Simple as Possible, But Not Simpler“ – Albert Einstein
See tähendab põhifunktsionaalsuse vaatenurgast otsinguriba ja kui on teostatud otsing siis otsingutulemusi jaotatud meedialehekülgede kaupa.
- Valmislahendus peab võimaldama otsingut sooritada mõistliku ajaga(kasutaja ei tohi oodata nii kaua et tüdineb ootamisest).
- Lahendus peab lihtsustama kasutajale otsimistegevust, mitte seda keerulisemaks muutma(väärtusetud otsingutulemused).
Funktsionaalsus Funktsionaalsed nõuded Teenus peab: - Hoidma lokaalselt ligipääsetavas andmebaasis muusikaga seotud andmeid,kasutajaid ja statistikat nende kohta.
- Autocomplete’ma ainult lokaalses andmebaasis reaalselt eksisteerivat muusikat st sisestatud artisti, loo, albuminimi peavad mingil moel seotud olema.
- Kui otsing on teele saadetud ja juhul kui sisestatud teksti lokaalsest andmebaasist ei leitud proovima pärida seda mõnest tuntud andmebaasist(nt spotify).
- Võimaldama kasutajaid luua,kustutada.
- Koguda kasutajate kohta statistilisi andmeid.
- Hoidma kasutajaajalugu.
Rakendus peab: - Pärima otsingusõnega andmeid meedialehekülgedelt.
- Saadud andmed sorteerima
- Kasutajale otsinguvaates kuvama tulemused(lingid) meedialehekülgede järgi jaotatuna.
- Sisaldama vaateid kasutajate loomise kohta.
- Sisaldama vaateid kasutaja päringute ajaloo kohta.
Mittefunktsionaalsed nõuded Lahendus peab olema - Kasutajale lihtsa ja arusaadava ülesehitusega.
- Piisavalt kiire(kuni 30s päringu jaoks)
- Funktsionaalne(tagastab väärtuslikke tulemusi, mida kasutaja saaks tarbida)
Must have - Loo, artisti, albumi sisendsõne autocomplete jälgides ka andmebaasi sisendite omavahelisi seoseid.
- Custom päringud(kasutavad meedialehekülje API’t) vähemalt kahele meedialeheküljele.
- Tulemuste sorteerimine, et neid(linke) tähtsuse järjekorras kuvada.
- Vaated lihtsalt otsinguribale, otsinguribale/koos tulemuste lehega, kasutajaajaloo lehele, kasutajaloomiselehele, statistika lehele.
- Kasutajaajaloo hoidmine.
Nice to have - automaatne lokaalse andmebaasi uuendamine peale otsingu tegemist, kasutades mõnda populaarset andmebaasi.
- Rohkem meedialehekülgi vastuses.
- Kasutajaajaloo hoidmine, cachedes mõned vastuste HTML lehed, et kasutaja saaks mugavalt oma ajalugu vaadata ilma uut päringut tegemata.
EDIT:Antud analüüs on kirjutatud pea kuu aja eest, lahenduses esineb mõningaid erinevusi võrreldes analüüsis tooduga.
Veebiteenus
Veebiteenus ja kliendirakendus on ühes solutionis nimega Scope, mille leiab siit
https://onedrive.live.com/?cid=60AA002F219B889A&id=60AA002F219B889A!147
Kasutajajuhend tegemisel ja töölepanek teises arvutis testimisel
Klientrakendus
Logi
- 08.03.2014 - Wiki lehe loomine
- 08.03.2014 - XML andmefail, XML skeemifail, XSL failid