Meeskond Hashtag

From EIK wiki

Kodutöö aines "Võrgurakendused II: hajussüsteemide ehitamine"

Lehekülg loodud: 08.03.2014

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>Elek­tro­hasch Records</Plaadifirma>
    <Hind>13€</Hind>
    <Koosseis>
      <Liige positsioon="bändiliige">
        <Nimi>Rut­ger Smeets</Nimi>
        <Instrument>Vokaal</Instrument>
        <Instrument>Kitarr</Instrument>
      </Liige>
      <Liige positsioon="bändiliige">
        <Nimi>Hans Mul­ders</Nimi>
        <Instrument>Trummid</Instrument>
      </Liige>
      <Liige positsioon="bändiliige">
        <Nimi>Sander Haag­mans</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

Projekti juures tuleb lugusid,albumeid ja artiste ise manuaalselt andmebaasi lisada,et autocomplete leiaks teenuse andmebaasist midagi,millega toimetada. See funktsionaalsus, et otsingunuppu vajutades uuendatakse ka andmebaasi tehes spotify'sse päringu, jäi pooleli ehk Scope.Models all võib näha kaustas Spotify vastava funktsionaalsuse libraryt et päringud teha, kuid seda pole implementeeritud.Teine asi on youtube API'd kasutava meetodiga, mis vale API key tõttu ei pruugi otsingut teostada.

Klientrakendus

Logi

  • 08.03.2014 - Wiki lehe loomine
  • 08.03.2014 - XML andmefail, XML skeemifail, XSL failid