Ott

From ICO wiki

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

Meeskond

  • Ott Sõerumäe

XML/XSD/XSLT

XML

<?xml version="1.0" encoding="utf-8" ?>
<!--See XML andmefail hoiab andmeid erinevate klassikalise muusika teoste kohta,-->
<!--et nt muusikakooli õpilastel oleks lihtsam endale meeldivat ja enda tasemele vastava raskusastmega teost mängimiseks valida-->
<composers>
  <composer born="1687" died="1750">
    <name><![CDATA[Johann Sebastian Bach]]></name>
    <description><![CDATA[Bach has widely been considered the greatest composer of all time.]]></description>
    <era><![CDATA[Baroque]]></era>
    <pieces>
      <piece type="Partita" no="2" instrument="violin" published="1720" grade="10">
        <tempo><![CDATA[Tempo di ciaccona]]></tempo>
        <key><![CDATA[D Minor]]></key>
        <title><![CDATA[Chaconne]]></title>
      </piece>
    </pieces>
  </composer>
  <composer born="1810" died="1849">
    <name><![CDATA[Frederic Chopin]]></name>
    <description><![CDATA[He was one of the greatest pianists of the Romantic era.]]></description>
    <era><![CDATA[Early Romantic]]></era>
    <pieces>
      <piece type="Etude" op="10" no="1" instrument="piano" published="1832" grade="10">
        <tempo bpm="176"><![CDATA[Allegro]]></tempo>
        <key><![CDATA[C Major]]></key>
        <title><![CDATA[Waterfall]]></title>
      </piece>
      <piece type="Etude" op="10" no="2" instrument="piano" published="1832" grade="10">
        <tempo bpm="144"><![CDATA[Allegro]]></tempo>
        <key><![CDATA[A Minor]]></key>
        <title><![CDATA[Chromatic]]></title>
      </piece>
      <piece type="Etude" op="10" no="3" instrument="piano" published="1832" grade="7">
        <tempo bpm="100"><![CDATA[Lento ma non troppo]]></tempo>
        <key><![CDATA[E Major]]></key>
        <title><![CDATA[Tristesse]]></title>
      </piece>
      <piece type="Etude" op="10" no="4" instrument="piano" published="1832" grade="10">
        <tempo bpm="176"><![CDATA[Presto]]></tempo>
        <key><![CDATA[C# Minor]]></key>
        <title><![CDATA[Torrent]]></title>
      </piece>
      <piece type="Etude" op="25" no="12" instrument="piano" published="1836" grade="10">
        <tempo bpm="160"><![CDATA[Allegro molto con fuoco]]></tempo>
        <key><![CDATA[C Minor]]></key>
        <title><![CDATA[Ocean]]></title>
      </piece>
      <piece type="Prelude" op="28" no="15" instrument="piano" published="1834" grade="4">
        <tempo><![CDATA[Sostenuto]]></tempo>
        <key><![CDATA[D-Flat Major]]></key>
        <title><![CDATA[Raindrop]]></title>
      </piece>
      <piece type="Prelude" op="28" no="20" instrument="piano" published="1834" grade="5">
        <tempo><![CDATA[Largo]]></tempo>
        <key><![CDATA[C Minor]]></key>
      </piece>
      <piece type="Ballade" op="23" no="1" instrument="piano" published="1835" grade="10">
        <tempo><![CDATA[Largo]]></tempo>
        <key><![CDATA[G Minor]]></key>
      </piece>
      <piece type="Ballade" op="52" no="4" instrument="piano" published="1842" grade="10">
        <tempo><![CDATA[Andante con moto]]></tempo>
        <key><![CDATA[F Minor]]></key>
      </piece>
    </pieces>
  </composer>
  <composer born="1782" died="1840">
    <name><![CDATA[Niccolo Paganini]]></name>
    <description><![CDATA[Paganini is the greatest violinist of all time:]]></description>
    <era><![CDATA[Early Romantic]]></era>
    <pieces>
      <piece type="Caprice" op="1" no="1" instrument="violin" published="1802" grade="10">
        <tempo><![CDATA[Andante]]></tempo>
        <key><![CDATA[E Major]]></key>
        <title><![CDATA[Arpeggios]]></title>
      </piece>
      <piece type="Caprice" op="1" no="2" instrument="violin" published="1802" grade="10">
        <tempo><![CDATA[Moderato]]></tempo>
        <key><![CDATA[B Minor]]></key>
      </piece>
      <piece type="Caprice" op="1" no="3" instrument="violin" published="1802" grade="10">
        <tempo><![CDATA[Sostenuto]]></tempo>
        <key><![CDATA[E Minor]]></key>
        <title><![CDATA[Octaves]]></title>
      </piece>
      <piece type="Caprice" op="1" no="4" instrument="violin" published="1802" grade="10">
        <tempo><![CDATA[Maestoso]]></tempo>
        <key><![CDATA[C Minor]]></key>
        <title><![CDATA[Thirds]]></title>
      </piece>
      <piece type="Caprice" op="1" no="5" instrument="violin" published="1802" grade="10">
        <tempo><![CDATA[Agitato]]></tempo>
        <key><![CDATA[A Minor]]></key>
      </piece>
      <piece type="Caprice" op="1" no="24" instrument="violin" published="1817" grade="10">
        <tempo><![CDATA[Quasi presto]]></tempo>
        <key><![CDATA[A Minor]]></key>
      </piece>
    </pieces>
  </composer>
  <composer born="1873" died="1943">
    <name><![CDATA[Sergei Rachmaninoff]]></name>
    <description><![CDATA[Sergei Rachmaninoff is undoubtedly my favourite composer :D]]></description>
    <era><![CDATA[Late Romantic]]></era>
    <pieces>
      <piece type="Prelude" op="3" no="2" instrument="piano" published="1892" grade="9">
        <tempo><![CDATA[Lento]]></tempo>
        <key><![CDATA[C# Minor]]></key>
      </piece>
      <piece type="Prelude" op="23" no="1" instrument="piano" published="1901" grade="9">
        <tempo><![CDATA[Largo]]></tempo>
        <key><![CDATA[F# Minor]]></key>
      </piece>
      <piece type="Prelude" op="23" no="2" instrument="piano" published="1901" grade="9">
        <tempo><![CDATA[Maestoso]]></tempo>
        <key><![CDATA[B-flat Major]]></key>
      </piece>
      <piece type="Prelude" op="23" no="3" instrument="piano" published="1903" grade="9">
        <tempo><![CDATA[Tempo di minuetto]]></tempo>
        <key><![CDATA[D Minor]]></key>
      </piece>
      <piece type="Prelude" op="23" no="4" instrument="piano" published="1902" grade="9">
        <tempo><![CDATA[Andante cantabile]]></tempo>
        <key><![CDATA[D Major]]></key>
      </piece>
      <piece type="Prelude" op="23" no="5" instrument="piano" published="1901" grade="10">
        <tempo><![CDATA[Alla marcia]]></tempo>
        <key><![CDATA[G Minor]]></key>
      </piece>
      <piece type="Prelude" op="32" no="10" instrument="piano" published="1910" grade="8">
        <tempo><![CDATA[Lento]]></tempo>
        <key><![CDATA[B minor]]></key>
      </piece>
      <piece type="Etude" op="39" no="6" instrument="piano" published="1917" grade="10">
        <tempo><![CDATA[Allegro]]></tempo>
        <key><![CDATA[A minor]]></key>
        <title><![CDATA[Little Red Riding Hood]]></title>
      </piece>
    </pieces>
  </composer> 
</composers>

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="composers">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="composer">
          <xs:complexType>
            <xs:sequence> <!--Järjekord omab tähtsust-->
              <xs:element name="name" type="xs:string" />
              <xs:element name="description" type="xs:string" />
              <xs:element name="era" type="xs:string" />
              <xs:element name="pieces">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" name="piece">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="tempo" minOccurs="0" maxOccurs="1">
                            <xs:complexType>
                              <xs:simpleContent>
                                <xs:extension base="xs:string">
                                  <xs:attribute name="bpm" type="xs:integer" use="optional" />
                                </xs:extension>
                              </xs:simpleContent>
                            </xs:complexType>
                          </xs:element>
                          <xs:element name="key" minOccurs="0" maxOccurs="1" type="xs:string" />
                          <xs:element name="title" minOccurs="0" maxOccurs="1" type="xs:string" />
                        </xs:sequence>
                        <xs:attribute name="type" type="xs:string" use="required" />
                        <xs:attribute name="op" type="xs:integer" use="optional" />
                        <xs:attribute name="no" type="xs:integer" use="optional" />
                        <xs:attribute name="instrument" type="xs:string" use="required" />
                        <xs:attribute name="published" type="xs:unsignedShort" use="required" />
                        <xs:attribute name="grade" type="xs:unsignedByte" use="required" />
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="born" type="xs:unsignedShort" use="required" />
            <xs:attribute name="died" type="xs:unsignedShort" use="optional" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

XSLT

XSLT HTML (Heliloojate ja nende teoste HTML vormingus 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="html" indent="yes"/>

    <xsl:template match="/">
      <html>
        <body>
          <h1>Composers:</h1>
          <xsl:for-each select="composers/composer">
            <h3>
              <xsl:value-of select="name"/>
              <xsl:choose>
                <xsl:when test="@died">
                  (<xsl:value-of select="@born"/> - <xsl:value-of select="@died"/>)
                </xsl:when>
                <xsl:otherwise>
                  (Born in <xsl:value-of select="@born"/>)
                </xsl:otherwise>
              </xsl:choose>
            </h3>
            <p>
              <xsl:value-of select="description"/>
            </p>
            <h4>Pieces:</h4>
            <table border="1">
              <tr bgcolor="ffbc55">
                <td>Title:</td>
                <td>Key:</td>
                <td>Published:</td>
                <td>Grade:</td>
              </tr>
              <xsl:for-each select="pieces/piece">
                <tr>
                  <td>
                    <xsl:value-of select="@type"/>&#160;
                    <xsl:if test="@op">
                      Op.
                      <xsl:value-of select="@op"/>&#160;
                    </xsl:if>
                    <xsl:if test="@no">
                      No.
                      <xsl:value-of select="@no"/>&#160;
                    </xsl:if>
                    <xsl:value-of select="tempo"/>&#160;
                    <xsl:if test="title">
                      "<xsl:value-of select="title"/>"
                    </xsl:if>
                  </td>
                  <td>
                    <xsl:value-of select="key"/>
                  </td>
                  <td>
                    <xsl:value-of select="@published"/>
                  </td>
                  <td>
                    <xsl:value-of select="@grade"/>
                  </td>
                </tr>
              </xsl:for-each>
            </table>
          </xsl:for-each>
        </body>
      </html>
    </xsl:template>
</xsl:stylesheet>

XSLT XML: XML-i struktuuri muutmine

<?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="/">
    <pieces>
      <xsl:for-each select="/composers/composer/pieces/piece">
        <piece>
          <xsl:attribute name="tempo">
            <xsl:value-of select="tempo"/>
          </xsl:attribute>
          <xsl:attribute name="bpm">
            <xsl:value-of select="tempo/@bpm"/>
          </xsl:attribute>
          <longTitle>
            <xsl:value-of select="concat(@type, ' Op. ', @op, ' No. ', @no, ' ', title)"/>
          </longTitle>
          <difficultyLevel>
            <xsl:value-of select="@grade"/>
          </difficultyLevel>
          <instrument>
            <xsl:value-of select="@instrument"/>
          </instrument>
        </piece>
      </xsl:for-each>
    </pieces>
  </xsl:template>
</xsl:stylesheet>

Veebiteenuse ja klientrakenduse analüüs

Kirjeldus

Kodutöö eesmärgiks on luua veebiteenus ja klientrakendus, mis aitaksid lihtsustada ja automatiseerida korteriühistu tööd. Rakendus peaks eelkõige võimaldama kuvada korteriomanikele nende maja puudutavaid teateid ja korraldada maja puudutavate küsimuste kohta hääletusi. Oleks hea, kui see võimaldaks ka arvete automaatset koostamist ja elanikele saatmist, kuid võib-olla ei jätku selle realiseerimiseks aega-

ERD

Osoerumaerd.jpg

Must have funktsionaalsus:

  • Kasutajate jagamine kahte gruppi - admin ja tavakasutaja
  • Admin kasutaja saab lisada süsteemi tavakasutajaid täita nende kohta käivaid andmeid
  • Admin kasutaja saab lisada majaelanikele teateid
  • Admin kasutaja saab korraldada erinevatel teemadel hääletusi
  • Tavakasutaja näeb tema maja puudutavaid teateid
  • Tavakasutaja saab osaleda hääletustel

Nice to have funktsionaalsus:

  • Kasutaja saab sisestada süsteemi andmed teenuste kohta, mida ta on kuu jooksul tarbinud ning süsteem koostab talle selle põhjal arve.

Projekti lähtekood

Lähtekoodi leiab aadressilt http://enos.itcollege.ee/~osoeruma/OttSoerumaeProjekt.zip

Retsensioonid

XML Retsensioon meeskonnale Kirde sai

Kõik failid on koostatud korrektselt ning need läbivad validaatori vigadeta.

XML fail vastab etteantud nõuetele, on neljadimensiooniline (arvestates ka juurelementi) ning omab atribuute kolmel dimensioonil. XML faili stiil on ühtne läbi terve dokumendi - kõik elemendid on kirjutatud läbivalt suurte tähtedega, atribuutide kirjutamisel on läbivalt kasutatud CamelCase'i. XML-i puhul meeldib mulle veel selle mahukus (u. 300 rida) ja sisukus, mille kallal paistab olevat nähtud kõvasti vaeva. Võib-olla oleks võinud mõnes kohas XML-is kasutada ka CDATA tag-e, äkki näiteks taimede rahvapäraste nimede juures. Samas ei ole antud faili piires selleks põhjust olnud ja kõik valideerub.

Kuna terve XML fail on kirjutatud ühes pidevalt korduvas struktuuris (mitte pole erinevates osades täiesti erineva struktuuri ja eesmärgiga), on selle skeemifail lihtne ja arusaadav. Paistab, et kuigi skeemifail on genereeritud automaatselt, on see ka ise üle vaadatud ning tehtud mõningad muudatused.

HTML-i transformatsioonifailis kuvatakse suur osa terve XML faili sisust tabelina. Transformatsiooni käigus kasutatakse ka tingimuste kontrolli - tabeli ridu värvitakse vastavalt taimede saadavusele.

XML-i transformatsioonifailis tehakse algse XML-i struktuur ümber selliselt, et kuvatakse taimed eri XML-i dimensioonides kasvavalt järjestades need saadavuse järgi kuni mingi piirini, millest edasi neid ei kuvata. Kasutatud on järjestamist, tingimuste kontrolle ja muutujaid.

Seega on minu arvates teinud rühm Kirde sai väga head tööd.