BitByBit

From EIK wiki

Liikmed

  • Reigo Hein
  • Kristjan Luik
  • Raul Špilev
  • Reelika Lõhmus

XML andmefail

Ülesande täitmiseks tuleb luua XML fail andmete edastamiseks, selle XML faili skeemifail ning paar kolm sobivat XSL faili loodud XML failis olevate andmete transformeerimiseks HTML formaati ja XML faili formaadi muutmiseks. XML-il peab olema vähemalt 4 loogilist dimensiooni.

Lisaks tuleb kasutada 3-el dimensioonil attribuute, mis one enamat, kui lihtsalt ID.

XML

<?xml version="1.0" encoding="utf-8"?>
<music xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:noNamespaceSchemaLocation="MusicXSD.xsd">
  <artist name="Gojira">
    <album id="1" title="The Way of All Flesh" year="2008" genre="Progressive metal">
      <song tracknumber="1" title="The Art of Dying" song_genre="Progressive Death Metal">
        <comments>\M/</comments>
      </song>
      <song tracknumber="2" title="A Sight to Behold" song_genre="Metal">
        <comments>...</comments>
      </song>
      <song tracknumber="3" title="The Way of All Flesh" song_genre="Melodic Death Metal">
        <comments>!!!</comments>
      </song>
      <song tracknumber="4" title="Toxic Garbage Island" song_genre="Progressive Death Metal">
        <comments>Based on an island, which actually exsists.</comments>
      </song>
      <album_comments>The second studio album by French metal band Gojira.</album_comments>
    </album>
    <album id="2" title="The Link" year="2003" genre="Progressive metal">
      <song tracknumber="1" title="Embrace the World" song_genre="Progressive Death Metal">
        <comments>\m/</comments>
      </song>
      <album_comments>The fourth studio album by French metal band Gojira.</album_comments>
    </album>
  </artist>
  <artist name="Young Jeezy">
    <album id="1" title="The Inspiration" year="2006" genre="Gangsta Rap">
      <song tracknumber="1" title="Hypnotize" song_genre="Gangsta Rap">
        <comments>Lots of hard hitting bass.</comments>
      </song>
      <song tracknumber="2" title="I Luv It"  song_genre="Gangsta Rap">
        <comments>Uncencored.</comments>
      </song>
      <album_comments>Also known as The Inspiration: Thug Motivation 102</album_comments>
    </album>  
  </artist> 
  <artist name="Ludwig van Beethoven">
    <album id="1" title="N/A" year="1801" genre="Classical">
      <song tracknumber="1" title="Piano Sonata No. 14 in C-sharp minor" song_genre="Classical piano sonata">
        <comments>One of Beethovens most known piano pieces. Commonly known as "Moonlight Sonata".</comments>
      </song>
      <song tracknumber="2" title="Symphony No. 9 in D minor" song_genre="Classical piano sonata">
        <comments>Classical piece</comments>
      </song>
      <song tracknumber="3" title="Symphony No. 5 in C minor" song_genre="Classical Symphony">
        <comments>One of Beethovens most known symphonies.</comments>
      </song>
      <album_comments>I don't think that they had albums back then.</album_comments>
    </album>
  </artist> 
</music>

XMLi skeem (XSD)


<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="music">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="artist">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="album">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" name="song">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="comments" type="xs:string" />
                        </xs:sequence>
                        <xs:attribute name="tracknumber" type="xs:integer" use="required" />
                        <xs:attribute name="title" type="xs:string" use="required" />
                        <xs:attribute name="song_genre" type="xs:string" use="required" />
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="album_comments" type="xs:string" />
                  </xs:sequence>
                  <xs:attribute name="id" type="xs:integer" use="required" />
                  <xs:attribute name="title" type="xs:string" use="required" />
                  <xs:attribute name="year" type="xs:integer" use="required" />
                  <xs:attribute name="genre" type="xs:string" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="name" type="xs:string" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>


XSLT 1

<?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></title>
      </head>
      <body>
        <h2> Kõik metalli sisaldavad lood</h2>
        <xsl:for-each select="music/artist/album/song">
          <xsl:if test="contains(@song_genre, 'Metal')">
            <ul>
              <li>

                <xsl:value-of select="@title" />
              </li>
            </ul>
          </xsl:if>
        </xsl:for-each>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

XSLT 2

<?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="/">
    <html>
      <body text="black">
        <h2>Albumid:</h2>
          <xsl:for-each select="music/artist/album">
            <div style="border-style:dashed;border-width:1px">
				<p>Album: <xsl:value-of select="@title"/></p>
				<p>Aasta: <xsl:value-of select="@year" /></p>

				<p>Zanr: <xsl:value-of select="@genre"/></p>

				<ul>
					<xsl:for-each select="song">
						<li>
							<xsl:value-of select="@title"/>
						</li>
					</xsl:for-each>
				</ul>
			</div>
          </xsl:for-each>
      </body>
    </html>
  </xsl:template>

</xsl:stylesheet>

XSLT 3

<?xml version="1.0" encoding="utf-8"?>
<!--Author Reigo Hein. Displays all artists, albums-->
<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>
      <body>
        <h2>Artists - Albums</h2>
        <table>
          <tr>
            <th>
              Artists
            </th>
            <th>
              Albums
            </th>
          </tr>
          <xsl:for-each select="music/artist">
            <tr>
              <td class="artists">
                <xsl:value-of select="@name"/>
              </td>
              <td class="albums">
                <ul>
                  <xsl:for-each select="album">
                    <li><xsl:value-of select="@title"/></li>
                  </xsl:for-each>
                </ul>
              </td>
            </tr>
          </xsl:for-each>
        </table>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

Veebiteenus

Meie eesmärgiks oli luua teenus kuhu kasutaja saab salvestada oma lemmik artiste, albumeid ja laule.

Meetodid

Artist

void CreateArtist(Artist artist, string userToken) - Uue artisti loomine. Parameetritena antakse kaasa uue artisti objekt ja kasutaja, kes antud meetodit kasutas.
Artist ReadArtist(int id) - Olemasoleva artisti pärimine andmebaasist.
List<Artist> ReadArtists(string userToken) - Kõikide artistide pärimine andmebaasist.
void UpdateArtist(Artist artist) - Olemasoleva artisti kirje muutmine andmebaasis. Parameetrina antakse kaasa artisti objekt muudetud kujul.
void DeleteArtist(int id) - Olemasoleva artisti kustutamine andmebaasist. Id'ga täpsustatakse milline artisti kirje kustutatakse.

Lugu

void CreateSong(Song song, Album album) - Uue laulu loomine. Parameetritena antakse kaasa uue laulu objekt ja albumi objekt, millega laul seotud on.
Song ReadSong(int id) - Olemasoleva laulu pärimine andmebaasist.
List<Song> ReadSongs(int albumid) - Olemasoleva albumi laulude pärimine andmebaasist.
void UpdateSong(Song song) - Olemasoleva laulu kirje muutmine andmebaasis. Parameetrina antakse kaasa laulu objekt muudetud kujul.
void DeleteSong(int id) - Olemasoleva laulu kustutamine andmebaasist. Id'ga täpsustatakse milline laulu kirje kustutatakse.

Album

void CreateAlbum(Album album, Artist artist) - Uue albumi loomine. Parameetritena antakse kaasa uue albumi objekt ja artisti objekt, millega album seotud on.
Album ReadAlbum(int id) - Olemasoleva albumi pärimine andmebaasist.
List<Album> ReadAlbums(int artistid) - Olemasoleva artisti albumite pärimine andmebaasist.
void UpdateAlbum(Album album) - Olemasoleva albumi kirje muutmine andmebaasis. Parameetrina antakse kaasa albumi objekt muudetud kujul.
void DeleteAlbum(int id) - Olemasoleva albumi kustutamine andmebaasist. Id'ga täpsustatakse milline albumi kirje kustutatakse.

Klientrakendus

Klientrakendus on mõeldud peamiselt muusika haldamiseks. Klientrakendusse on võimalik sisse logida google kontoga.

Kliendirakendus + Veebiteenuse saab lingilt: http://sdrv.ms/12ddXiG

Veebiteenust saab otse deployda pilve (Azure), sama saab ka kliendirakendusega teha.

Et projekti käima saada: Esiteks tuleks Entity Frameworkist genereerida mudelist sql create script, see vastu andmebaasi tööle saada. Pärast seda tuleb WCF teenus configureerida kas IIS'iga või jooksutada Visual Studios. Siis võib käivitada ASP.NET MVC juhul, kui konfiguratsioon on paigas (Tuleb endpoint url muuta ASP.NET MVC Web.configis vastavaks). Sel juhul peaks sisse logima Google kontoga ja saab lisada artiste, selle alla albumeid jne kui vajutada menüüs MusicDb peale. Võib kasutada ka forms authenticationit.

Adminrakendus

Adminrakendus on lihtne MVC rakendus kus saab kasutajaid näha, kustutada ja vaadata, palju artiste neil on. Selleks on ka lihtne MusicAdmin service WCF teenuses lisatud (Mida kliendirakenduse rar files ei ole): List<User> GetUsers() - Tagastab listi olemasolevatest kasutajatest
User GetUser(int id) - Olemasoleva kasutaja pärimine andmebaasist.
List<Song> ReadSongs(int albumid) - Olemasoleva albumi laulude pärimine andmebaasist.

Adminrakenduse saab alla laadida siit: http://sdrv.ms/11miibG

Logi

04.03.2013 - Mõtlesime meeskonnale nime välja
23.03.2013 - Saime valmis XML faili osa
30.03.2013 - Panime WIKI'sse ülesse kahe meeskonna retsensioonid
26.05.2013 - Saime valmis veebiteenuse ja klientrakenduse osa