Sense Of Direction

From ICO wiki
Jump to navigationJump to search

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

Meeskond

  • Ilja Andrejev
  • Aleksandr Babõkin
  • Vladislav Lahtarin
  • Vladislav Kovaltšuk

Idee

Projekti eesmärgiks on teha keskonna, kus saaks korraldada orienteerimismänge. Mängu alustamiseks on vaja luua marsruut ja panna kokku paar meeskonda. Iga meeskonnal on oma marsruut, mis on täis erinevaid väljakutseid.

Analüüs

Veebirakendus on mänguteenus, mis aitab inimestel mõnusalt aega veeta, arendada koostöö võimet, leida uusi sõpru ning teha sporti. Üks inimene loob mängu, kus ta märgib selle läbiviimise ala, aja ja kirjeldab kõik kontrollpunktid. Teised registreerivad ennast kasutajateks, loovad uue meeskonna või liituvad juba olemasolevaga. Mängu alustamiseks on vaja panna kokku vähemalt kaks meeskonda. Igal meeskonnal on antud oma marsruut kontrollpunktidest, kus neid ootavad erinevad ülesanded. Mängu põhiideeks on läbida oma meeskonnaga kontrollpunktid kiiremini kui vastasmeeskond.

Must to have

  • Kasutajatel on erinevad rollid: Admin, külaline, mängu looja, mängu osaleja.
  • Registreerimis ja logimis sisse võimalus.
  • Luua uue mängu või liituda olemasolevaga.
  • Uue mängu loomisel võimalus lisada challenge-id.
  • Luua uue meeskonna või liituda olemaolevaga.
  • Uue meeskonna loomisel võimalus anda meeskonnale nime.
  • Meeskonna loojal võimalus vastu võtma uusi osalejaid või visata välja juba liitunud olevaid.
  • Mängu ajal iga meeskond peab näha GPS peal enda ja oma järgmise challenge asukoha.
  • Võimalus anda meeskondadele hinnangu.

Nice to have

  • Rakenduse korralik disain.
  • Võimalus korraldada mängud väljaspool Mustamäe.
  • Keele valiku võimalust.

Lähtekood

XML/XSD/XSLT

XML

<?xml version="1.0" encoding="utf-8"?>
<bussiLiinid>
    <bussiLiin liik="Ekspress" number="456TN">
        <buss bussiLiik="tavaline">
            <regMark>567TFL</regMark>
            <mark>Scania</mark>
            <mudel>68l</mudel>
            <maht yhik="kohta">45</maht>
            <varustus>Kohviautomaat, 220 V, A/C, internet, multimeedia, WC</varustus>
        </buss>
        <bussiJuht>
            <nimi><![CDATA[Jaan]]></nimi>
            <perekonnaNimi><![CDATA[Puu]]></perekonnaNimi>
        </bussiJuht>
        <marsruut>
            <lahteKoht valjumine="15:00"><![CDATA[Tallinn]]></lahteKoht>
            <sihtKoht saabumine="18:30"><![CDATA[Narva]]></sihtKoht>
            <soiduKestusTund yhik="h">3</soiduKestusTund>
            <soiduKestusMinut yhik="m">30</soiduKestusMinut>
        </marsruut>
        <suund><![CDATA[Tallinn - Narva]]></suund>
        <peatused>
            <peatus saabumine="17:30"><![CDATA[Kohtla-Jarve]]></peatus>
            <peatus saabumine="17:45"><![CDATA[Johvi]]></peatus>
            <peatus saabumine="18:05"><![CDATA[Sillamae]]></peatus>
        </peatused>
        <valjumisPaevad>
            <valjumisPaev soidab="true">E</valjumisPaev>
            <valjumisPaev soidab="true">T</valjumisPaev>
            <valjumisPaev soidab="true">K</valjumisPaev>
            <valjumisPaev soidab="true">N</valjumisPaev>
            <valjumisPaev soidab="true">R</valjumisPaev>
            <valjumisPaev soidab="false">L</valjumisPaev>
            <valjumisPaev soidab="false">P</valjumisPaev>
        </valjumisPaevad>
    </bussiLiin>
    <bussiLiin liik="Ekspress" number="456NT">
        <buss bussiLiik="tavaline">
            <regMark>567TFL</regMark>
            <mark>Scania</mark>
            <mudel>68l</mudel>
            <maht yhik="kohta">45</maht>
            <varustus>Kohviautomaat, 220 V, A/C, internet, multimeedia, WC</varustus>
        </buss>
        <bussiJuht>
            <nimi><![CDATA[Jaan]]></nimi>
            <perekonnaNimi><![CDATA[Puu]]></perekonnaNimi>
        </bussiJuht>
        <marsruut>
            <lahteKoht valjumine="19:00"><![CDATA[Narva]]></lahteKoht>
            <sihtKoht saabumine="22:30"><![CDATA[Tallinn]]></sihtKoht>
            <soiduKestusTund yhik="h">3</soiduKestusTund>
            <soiduKestusMinut yhik="m">30</soiduKestusMinut>
        </marsruut>
        <suund><![CDATA[Narva - Tallinn]]></suund>
        <peatused>
            <peatus saabumine="19:25"><![CDATA[Sillamae]]></peatus>
            <peatus saabumine="19:45"><![CDATA[Johvi]]></peatus>
            <peatus saabumine="20:00"><![CDATA[Kohtla-Jarve]]></peatus>
        </peatused>
        <valjumisPaevad>
            <valjumisPaev soidab="true">E</valjumisPaev>
            <valjumisPaev soidab="true">T</valjumisPaev>
            <valjumisPaev soidab="true">K</valjumisPaev>
            <valjumisPaev soidab="true">N</valjumisPaev>
            <valjumisPaev soidab="true">R</valjumisPaev>
            <valjumisPaev soidab="false">L</valjumisPaev>
            <valjumisPaev soidab="false">P</valjumisPaev>
        </valjumisPaevad>
    </bussiLiin>
    <bussiLiin liik="Ekspress" number="189TP">
        <buss bussiLiik="tavaline">
            <regMark>496DLY</regMark>
            <mark>Scania</mark>
            <mudel>40l</mudel>
            <maht yhik="kohta">40</maht>
            <varustus>Kohviautomaat, 220 V, A/C, internet, multimeedia, WC</varustus>
        </buss>
        <bussiJuht>
            <nimi><![CDATA[Jaak]]></nimi>
            <perekonnaNimi><![CDATA[Mand]]></perekonnaNimi>
        </bussiJuht>
        <marsruut>
            <lahteKoht valjumine="14:00"><![CDATA[Tallinn]]></lahteKoht>
            <sihtKoht saabumine="15:50"><![CDATA[Parnu]]></sihtKoht>
            <soiduKestusTund yhik="h">1</soiduKestusTund>
            <soiduKestusMinut yhik="m">50</soiduKestusMinut>
        </marsruut>
        <suund><![CDATA[Tallinn - Parnu]]></suund>
        <peatused>
            <peatus saabumine="14:20"><![CDATA[Vana-Paaskula]]></peatus>
        </peatused>
        <valjumisPaevad>
            <valjumisPaev soidab="false">E</valjumisPaev>
            <valjumisPaev soidab="false">T</valjumisPaev>
            <valjumisPaev soidab="false">K</valjumisPaev>
            <valjumisPaev soidab="false">N</valjumisPaev>
            <valjumisPaev soidab="true">R</valjumisPaev>
            <valjumisPaev soidab="true">L</valjumisPaev>
            <valjumisPaev soidab="true">P</valjumisPaev>
        </valjumisPaevad>
    </bussiLiin>
    <bussiLiin liik="Ekspress" number="189PT">
        <buss bussiLiik="tavaline">
            <regMark>496DLY</regMark>
            <mark>Scania</mark>
            <mudel>40l</mudel>
            <maht yhik="kohta">40</maht>
            <varustus>Kohviautomaat, 220 V, A/C, internet, multimeedia, WC</varustus>
        </buss>
        <bussiJuht>
            <nimi><![CDATA[Jaak]]></nimi>
            <perekonnaNimi><![CDATA[Mand]]></perekonnaNimi>
        </bussiJuht>
        <marsruut>
            <lahteKoht valjumine="16:30"><![CDATA[Parnu]]></lahteKoht>
            <sihtKoht saabumine="18:20"><![CDATA[Tallinn]]></sihtKoht>
            <soiduKestusTund yhik="h">1</soiduKestusTund>
            <soiduKestusMinut yhik="m">50</soiduKestusMinut>
        </marsruut>
        <suund><![CDATA[Parnu - Tallinn]]></suund>
        <peatused>
            <peatus saabumine="18:00"><![CDATA[Vana-Paaskula]]></peatus>
        </peatused>
        <valjumisPaevad>
            <valjumisPaev soidab="false">E</valjumisPaev>
            <valjumisPaev soidab="false">T</valjumisPaev>
            <valjumisPaev soidab="false">K</valjumisPaev>
            <valjumisPaev soidab="false">N</valjumisPaev>
            <valjumisPaev soidab="true">R</valjumisPaev>
            <valjumisPaev soidab="true">L</valjumisPaev>
            <valjumisPaev soidab="true">P</valjumisPaev>
        </valjumisPaevad>
    </bussiLiin>
    <bussiLiin liik="Ekspress" number="738TT">
        <buss bussiLiik="tavaline">
            <regMark>209BDI</regMark>
            <mark>Scania</mark>
            <mudel>55l</mudel>
            <maht yhik="kohta">50</maht>
            <varustus>Kohviautomaat, 220 V, A/C, internet, multimeedia, WC</varustus>
        </buss>
        <bussiJuht>
            <nimi><![CDATA[Raul]]></nimi>
            <perekonnaNimi><![CDATA[Kala]]></perekonnaNimi>
        </bussiJuht>
        <marsruut>
            <lahteKoht valjumine="17:00"><![CDATA[Tallinn]]></lahteKoht>
            <sihtKoht saabumine="19:30"><![CDATA[Tartu]]></sihtKoht>
            <soiduKestusTund yhik="h">2</soiduKestusTund>
            <soiduKestusMinut yhik="m">30</soiduKestusMinut>
        </marsruut>
        <suund><![CDATA[Tallinn - Tartu]]></suund>
        <peatused>
            <peatus saabumine="17:15"><![CDATA[Tallinna Lennujaam]]></peatus>
        </peatused>
        <valjumisPaevad>
            <valjumisPaev soidab="true">E</valjumisPaev>
            <valjumisPaev soidab="true">T</valjumisPaev>
            <valjumisPaev soidab="true">K</valjumisPaev>
            <valjumisPaev soidab="true">N</valjumisPaev>
            <valjumisPaev soidab="true">R</valjumisPaev>
            <valjumisPaev soidab="true">L</valjumisPaev>
            <valjumisPaev soidab="true">P</valjumisPaev>
        </valjumisPaevad>
    </bussiLiin>
    <bussiLiin liik="Ekspress" number="738TT">
        <buss bussiLiik="tavaline">
            <regMark>209BDI</regMark>
            <mark>Scania</mark>
            <mudel>55l</mudel>
            <maht yhik="kohta">50</maht>
            <varustus>Kohviautomaat, 220 V, A/C, internet, multimeedia, WC</varustus>
        </buss>
        <bussiJuht>
            <nimi><![CDATA[Raul]]></nimi>
            <perekonnaNimi><![CDATA[Kala]]></perekonnaNimi>
        </bussiJuht>
        <marsruut>
            <lahteKoht valjumine="20:00"><![CDATA[Tartu]]></lahteKoht>
            <sihtKoht saabumine="22:30"><![CDATA[Tallinn]]></sihtKoht>
            <soiduKestusTund yhik="h">2</soiduKestusTund>
            <soiduKestusMinut yhik="m">30</soiduKestusMinut>
        </marsruut>
        <suund><![CDATA[Tartu - Tallinn]]></suund>
        <peatused>
            <peatus saabumine="22:15"><![CDATA[Tallinna Lennujaam]]></peatus>
        </peatused>
        <valjumisPaevad>
            <valjumisPaev soidab="true">E</valjumisPaev>
            <valjumisPaev soidab="true">T</valjumisPaev>
            <valjumisPaev soidab="true">K</valjumisPaev>
            <valjumisPaev soidab="true">N</valjumisPaev>
            <valjumisPaev soidab="true">R</valjumisPaev>
            <valjumisPaev soidab="true">L</valjumisPaev>
            <valjumisPaev soidab="true">P</valjumisPaev>
        </valjumisPaevad>
    </bussiLiin>
</bussiLiinid>

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="bussiLiinid">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="bussiLiin">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="buss">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="regMark" type="xs:string" />
                    <xs:element name="mark" type="xs:string" />
                    <xs:element name="mudel" type="xs:string" />
                    <xs:element name="maht">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:unsignedByte">
                            <xs:attribute name="yhik" type="xs:string" use="required" />
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                    <xs:element minOccurs="0" name="varustus" type="xs:string" />
                  </xs:sequence>
                  <xs:attribute name="bussiLiik" type="xs:string" use="optional" />
                </xs:complexType>
              </xs:element>
              <xs:element name="bussiJuht">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="nimi" type="xs:string" />
                    <xs:element name="perekonnaNimi" type="xs:string" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="marsruut">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="lahteKoht">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:string">
                            <xs:attribute name="valjumine" type="xs:string" use="required" />
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="sihtKoht">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:string">
                            <xs:attribute name="saabumine" type="xs:string" use="required" />
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="soiduKestusTund">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:unsignedByte">
                            <xs:attribute name="yhik" type="xs:string" use="required" />
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="soiduKestusMinut">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:unsignedByte">
                            <xs:attribute name="yhik" type="xs:string" use="required" />
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="suund" type="xs:string" />
              <xs:element name="peatused">
                <xs:complexType mixed="true">
                  <xs:sequence minOccurs="0">
                    <xs:element maxOccurs="unbounded" name="peatus">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:string">
                            <xs:attribute name="saabumine" type="xs:string" use="required" />
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="valjumisPaevad">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element minOccurs="1" maxOccurs="7" name="valjumisPaev">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:string">
                            <xs:attribute name="soidab" type="xs:boolean" use="required" />
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="liik" type="xs:string" use="optional" />
            <xs:attribute name="number" type="xs:string" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

XSLT(html)

<?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>Bussiliini info</title>
        <style>
          body {background-color:FFFFCC;}
          table {width:700px; text-align: left; margin: auto; border: 3px solid black; font-size: large;}
          #bussiNo {text-align: center;}
        </style>
      </head>
      <body>
        <xsl:for-each select="bussiLiinid/bussiLiin">
          <table>
            <tr>
              <th id="bussiNo" colspan="4">
                <xsl:text>Bussiliini no. </xsl:text>
                <xsl:value-of select="@number"></xsl:value-of>
                <xsl:text> </xsl:text>
                <xsl:value-of select="@liik"></xsl:value-of>
              </th>
            </tr>
            <tr>
              <td>
                <xsl:text>Suund</xsl:text>
              </td>
              <td>
                <xsl:value-of select="suund"></xsl:value-of>
              </td>
              <td>
                <xsl:text>Kestus</xsl:text>
              </td>
              <td>
                <xsl:value-of select="marsruut/soiduKestusTund" />
                <xsl:value-of select="marsruut/soiduKestusTund/@yhik" />
                <xsl:text> </xsl:text>
                <xsl:value-of select="marsruut/soiduKestusMinut" />
                <xsl:value-of select="marsruut/soiduKestusMinut/@yhik" />
              </td>
            </tr>
            <tr>
              <td>
                <xsl:text>Valjumine</xsl:text>
              </td>
              <td>
                <xsl:value-of select="marsruut/lahteKoht/@valjumine" />
              </td>
              <td>
                <xsl:text>Saabumine</xsl:text>
              </td>
              <td>
                <xsl:value-of select="marsruut/sihtKoht/@saabumine" />
              </td>
            </tr>
            <tr>
              <td>
                <xsl:text>Valjumispaevad</xsl:text>
              </td>
              <td colspan="3">
                <xsl:for-each select="valjumisPaevad/valjumisPaev">
                  <xsl:if test="@soidab = 'true'">
                    <xsl:value-of select="." />
                    <xsl:text> </xsl:text>
                  </xsl:if>
                </xsl:for-each>
              </td>
            </tr>
            <tr>
              <td>
                <xsl:text>Bussi mahutuvus</xsl:text>
              </td>
              <td colspan="3">
                <xsl:value-of select="buss/maht" />
                <xsl:text> </xsl:text>
                <xsl:value-of select="buss/maht/@yhik" />
              </td>
            </tr>
            <xsl:if test="buss/varustus">
              <tr>
                <td>
                  <xsl:text>Varustus</xsl:text>
                </td>
                <td colspan="3">
                  <xsl:value-of select="buss/varustus" />
                </td>
              </tr>
            </xsl:if>
            <xsl:if test="peatused/peatus">
              <th colspan="2">
                <xsl:text>Peatused</xsl:text>
              </th>
              <th>
                <xsl:text>Saabumine</xsl:text>
              </th>
            </xsl:if>
            <xsl:for-each select="peatused/peatus">
              <tr>
                <td colspan="2">
                  <xsl:value-of select="." />
                </td>
                <td>
                  <xsl:value-of select="@saabumine" />
                </td>
              </tr>
            </xsl:for-each>
          </table>
          <br />
        </xsl:for-each>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

XSLT(txt)

<?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="text" indent="yes" />
    <xsl:template match="/">
        <xsl:text>Bussijuhide tunniplaan</xsl:text>
        <xsl:for-each select="bussiLiinid/bussiLiin">
            <xsl:text></xsl:text>
            <xsl:text></xsl:text>
            <xsl:value-of select="bussiJuht/nimi" />
            <xsl:text></xsl:text>
            <xsl:value-of select="bussiJuht/perekonnaNimi" />
            <xsl:text></xsl:text>
            <xsl:value-of select="suund" />
            <xsl:text></xsl:text>
            <xsl:for-each select="valjumisPaevad/valjumisPaev">
                <xsl:if test="@soidab = 'true'">
                    <xsl:value-of select="." />
                    <xsl:text></xsl:text>
                </xsl:if>
            </xsl:for-each>
            <xsl:text></xsl:text>
            <xsl:value-of select="marsruut/lahteKoht" />
            <xsl:text></xsl:text>
            <xsl:value-of select="marsruut/lahteKoht/@valjumine" />
            <xsl:text> -> </xsl:text>
            <xsl:for-each select="peatused/peatus">
                <xsl:value-of select="." />
                <xsl:text></xsl:text>
                <xsl:value-of select="@saabumine" />
                <xsl:text> -> </xsl:text>
            </xsl:for-each>
            <xsl:value-of select="marsruut/sihtKoht" />
            <xsl:text></xsl:text>
            <xsl:value-of select="marsruut/sihtKoht/@saabumine" />
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

Retsensioon XML-failide kohta meeskonnale "Poly"

Meeskonna "Poly" XML failide sisu leiab siit!

  • XML

XML fail andmete edastamiseks on läbinud valideerimist ja ei näitanud ühtegi viga. Selles on olemas 4 loogilist dimensiooni, mis vastab ülesande miinimum nõuetele. XML failis on kasutusel ka atribuudid, kuid nad tunduvat väga lihtsad olevat (id, riigi ja uhikute määramiseks). Samuti XML failis on olemas näidisandmed sees, kuid erilist variatsiooni andmete sees ei ole, nad on peeaegu samad. XML failis kasutatud kirjutamise stiil on arusaadav ja ilus. Kuid XML'i puudus on see, et selles ei ole kasutusel CDATA-d, ning üldine mulje XML faili kohta on vasturääkiv. Ühest küljest vaadates on see konkreetne ja arusaadav, kuid teisest küljest on see väga lihtne ja ebahuvitav.

  • Skeemifail

XSD skeemi fail on meie arvates korralikult tehtud ning andmetüübid on valitud õigesti. XSD skeemifail ja XML fail vastavad teineteisele.

  • Transformatsioonid

XSLT HTML tundub liiga lihtne olevat, kasutusel on ainult üks for-each tsükkel ja if tingimus. Samuti on väga lihtsasti tehtud ka teine transformatsioon XML faili.

  • Kokkuvõtte

Kokkuvõtteks, valitud teema, mille kohta on XML fail ja selle transformatsioonid tehtud on iseenesest huvitav, kuid tundub, et meeskond ei ole seda väga põhjalikult läbi töötanud. Võiks olla rohkem elemente ja atribuute ning struktuur keerulisem.