IT

From ICO wiki

Meeskonna liikmed

  • Triin Soosalu
  • Imre Padonik

XML andmefailid

XML andmefail

<?xml version="1.0" encoding="utf-8" ?>
<fishes>
  <fish id="1">
    <fishInfo>
      <species speciesId="1"><![CDATA[Haug]]></species>
      <size type="weigth" unit="g">1700</size>
      <size type="length" unit="cm">68</size>
    </fishInfo>
    <catchingInfo>
      <date>2014-12-03</date>
      <person personId="3"><![CDATA[Imre]]></person>
      <gearKit>
        <gear type="rod" size="2700" unit="cm"><![CDATA[DIAMOND JIG SPIN 270]]></gear>
        <gear type="reel" size="4000" unit="reel"><![CDATA[CATANA 4000RB]]></gear>
        <gear type="line" size="0.22" unit="mm"><![CDATA[Tamiil]]></gear>
        <gear type="bait" size="20" unit="g"><![CDATA[Lant]]></gear>
      </gearKit>
    </catchingInfo>
  </fish>
  <fish id="2">
    <fishInfo>
      <species speciesId="2"><![CDATA[Kilu]]></species>
      <size type="weigth" unit="g">40</size>
      <size type="length" unit="cm">7</size>
    </fishInfo>
    <catchingInfo>
      <date>2015-02-03</date>
      <person personId="2"><![CDATA[Triin]]></person>
      <gearKit>
        <gear type="rod" size="240" unit="cm"><![CDATA[DIAMOND JIG SPIN 240]]></gear>
        <gear type="reel" size="2500" unit="reel"><![CDATA[SAHARA 2500FE]]></gear>
        <gear type="line" size="0.02" unit="mm"><![CDATA[Tamiil]]></gear>
        <gear type="bait" size="1" unit="nr"><![CDATA[Uss]]></gear>
      </gearKit>
    </catchingInfo>
  </fish>
  <fish id="3">
    <fishInfo>
      <species speciesId="3"><![CDATA[Jõeforell]]></species>
      <size type="weigth" unit="g">1200</size>
      <size type="length" unit="cm">59</size>
    </fishInfo>
    <catchingInfo>
      <date>2015-01-31</date>
      <person personId="2"><![CDATA[Triin]]></person>
      <gearKit>
        <gear type="rod" size="240" unit="cm"><![CDATA[DIAMOND JIG SPIN 240]]></gear>
        <gear type="reel" size="3000" unit="reel"><![CDATA[CATANA 3000SRB]]></gear>
        <gear type="line" size="0.18" unit="mm"><![CDATA[Nöör]]></gear>
        <gear type="bait" size="15" unit="g"><![CDATA[Lant]]></gear>
      </gearKit>
    </catchingInfo>
  </fish>
  <fish id="4">
    <fishInfo>
      <species speciesId="4"><![CDATA[Delfiin]]></species>
      <size type="weigth" unit="g">120000</size>
      <size type="length" unit="cm">2103</size>
    </fishInfo>
    <catchingInfo>
      <date>2014-11-09</date>
      <person personId="3"><![CDATA[Imre]]></person>
      <gearKit>
        <gear type="rod" size="300" unit="cm"><![CDATA[DIAMOND JIG SPIN 300]]></gear>
        <gear type="reel" size="4000" unit="reel"><![CDATA[CATANA 4000RB]]></gear>
        <gear type="line" size="4.5" unit="mm"><![CDATA[Köis]]></gear>
        <gear type="bait" size="3000" unit="g"><![CDATA[Kilpkonn]]></gear>
      </gearKit>
    </catchingInfo>
  </fish>
</fishes>

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="fishes">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="fish">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="fishInfo">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="species">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:string">
                            <xs:attribute name="speciesId" type="xs:unsignedInt" use="required" />
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                    <xs:element maxOccurs="unbounded" name="size">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:unsignedInt">
                            <xs:attribute name="type" type="xs:string"/>
                            <xs:attribute name="unit" type="xs:string"/>
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="catchingInfo">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="date" type="xs:date" />
                    <xs:element name="person">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:string">
                            <xs:attribute name="personId" type="xs:unsignedInt" use="required" />
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="gearKit">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element maxOccurs="unbounded" name="gear">
                            <xs:complexType>
                              <xs:simpleContent>
                                <xs:extension base="xs:string">
                                  <xs:attribute name="type" type="xs:string"/>
                                  <xs:attribute name="size" type="xs:decimal"/>
                                  <xs:attribute name="unit" type="xs:string"/>
                                </xs:extension>
                              </xs:simpleContent>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="id" type="xs:unsignedInt" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

XSL failid

Otsitake välja kõik Triinu püütud kalad.

<?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></head>
        <body>
          <table>
            <tr>
              <th>Triinu kalad</th>
            </tr>
            <xsl:for-each select="fishes/fish[catchingInfo/person[string(.)='Triin']]">
              <tr>
                <td>Kala:</td>
                <td>
                  <xsl:value-of select="fishInfo/species"/>
                </td>
              </tr>
              <tr>
                <td>Püügikuupäev:</td>
                <td>
                  <xsl:value-of select="catchingInfo/date"/>
                </td>
              </tr>
              
            </xsl:for-each>
          </table>
        </body>
      </html>
    </xsl:template>
</xsl:stylesheet>

Otsitakse välja kõik püütud haugid.

<?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></head>
      <body>
        <table>
          <tr>
            <th>Püütud haugid</th>
          </tr>
          <xsl:for-each select="fishes/fish[fishInfo/species[string(.)='Haug']]">
            <tr>
              <td>Püüdja:</td>
              <td>
                <xsl:value-of select="catchingInfo/person"/>
              </td>
            </tr>
            <tr>
              <td>Püügikuupäev:</td>
              <td>
                <xsl:value-of select="catchingInfo/date"/>
              </td>
            </tr>

          </xsl:for-each>
        </table>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

Esimene XML-i retsensioon

Retsensioon meeskonnale "Ehk lõpetab see aasta". Meeskonna XML failid asuvad siin.

XML

XML struktuur on piisavalt "sügav". Samuti on andmed esitatud loogiliselt ning arusaadavalt. Samas leidsime siiski mõned kohad, mida ise oleksime teisiti teinud. Kuupäeva vorming on ebastandardne ja sisaldab nii numbreid kui teksti ja seetõttu on selle järgi halb otsida ja filtreerida ning läbi faili on raske tagada ühtset kuupäeva struktuuri. Atribuute on väga vähe kasutatud ja neid võiks olla rohkem, nt eelarve summa ja valuuta võiks olla eraldi defineeritud (mitte ühe tekstiväljana, nt summa numbrina + valuuta stringina). Kuna seriaalinimed võivad sisaldada XML’i kirjeldamiseks vajalikke sümboleid, siis oleks seal mõistlik kasutada CDATA vormingut, et näiteks "<" märk ei teeks faili katki. Võib-olla oleks ka hea elementide nimedes pigem täpitähti vältida.

Skeem

Skeemifail on automaatselt koostatud ning jääb mulje, et seal ei ole midagi muudetud. Kuna kuupäev on sisestatud ebastandardses vormingus, siis on ka skeemis kuupäeva jaoks kasutatud String vormingut. Samuti on eelarve String vorminguga, kuigi võiks olla eraldi summa ja valuuta.

XSLT

Soovituslik oli 2-3 faili, tehtud on aga 1. Tehakse üks tabel, kus kuvatakse kogu info, mis failis on. Tabelis on info hästi organiseeritud ja korralikult jagatud ning kujundatud. Oleks võinud osa andmeid välja sorteerida ning mitte korraga kõiki andmeid näidata.

Teine XML-i retsensioon

Retsensioon meeskonnale "Backbone". Meeskonna XML failid asuvad siin.

XML

XML andmefail on loogiliselt üles ehitatud, kasutatud on piisavalt palju erinevaid atribuute, mis võimaldavad andmeid paremini sorteerida ja filtreerida. Piisavalt ja õigetes kohtades on kasutatud CDATA vormingut, vältimaks, et inimeste või toodete nimedes sisalduvad erimärgid võiksid XML struktuuri rikkuda. Andmete (nt kuupäev) vormingud on standardsed. Loodud XML fail on piisavalt sügav.

Skeem

Skeemifailis on andmetüübid väga hästi ja täpselt kirjeldatud. On näha, et autommatselt genereeritud fail on läbi vaadatud ning vead parandatud. Kasutatud on kõige kompaktsemaid andmetüüpe, mis antud andmete kirjeldamiseks sobilikud on.

XSLT

Nõutud 2 XSLT faili on olemas ja need teevad mõistlikke päringuid. Lisaks on päringud ka väga ilusti ja selgelt vormindatud.


Veebiteenuse analüüs

Kalapüügipäeviku teenus

Kasutades ASP.NET MVC Web API tehnoloogiat ja Code First lähenemist on eesmärk luua veebiteenus, mille abil saab kasutaja salvestada ning hiljem vaadata enda poolt püütud kalu ja infot nende kalade kohta.


Ülesanded:

  • Kasutajate haldus – Veebiteenus võimaldab uusi kasutajaid lisada ja olemasolevate andmeid muuta. Samuti saab luua kasutajagruppe ning kasutajaid nendesse lisada.
  • Kasutusstatistika – Veebiteenus võimaldab kasutaja toiminguid logida ning selle logi põhjal nt sisse logimise või kasutusaja statistikat kuvada.
  • Kasutuspiirangud – Veebiteenus võimaldab määrata veebiteenuse kasutamiseks piiranguid (nt pöördumiste arve, ajutine blokeering vale parooli sisestamisel jne).
  • Kalade haldus – Veebiteenus võimaldab kasutajal lisada uusi kalaliike, püügiasukohtasid ja püügivahendeid ning eelnevaid kasutades pidada ka püügipäevikut.


Lisavõimalused:

Veebiteenusele on võimalik lisada funktsionaalsust nt lisades infot püügitehnikate, ilma või sööda kohta ning luua nö kalastusretk, mille raames saab püüda mitu kala. Samuti võiks saada lisada ka püütud kala (ja/või rõõmsa kalamehe) pildi või pildid.


ERD mudel

Järgnevalt on kujutatud ERD mudel, mis on aluseks veebiteenuse loomisel.

ERD.png

Veebiteenus

Veebiteenuse ja algse versiooni klientrakendusest saab siit.

Klientrakendus