Koodikommentaatorid: Difference between revisions

From ICO wiki
Jump to navigationJump to search
Kkebja (talk | contribs)
Omikk (talk | contribs)
Line 518: Line 518:
===Retsensioon meeskonnale MS-TO===
===Retsensioon meeskonnale MS-TO===
====XML====
====XML====
Meeskonna MS-TO on loonud andmestruktuuri inimeste nimede, soo, vanuse, isikukoodi ja kontaktandmete hoidmiseks. Koodis on kasutatud treppimist ning see on hästi loetav. Töö vastab esitatud nelja loogilise dimensiooni nõudele, puudub aga kolmas id-st erinev atribuut, need on olemas kahel elemendil - person ja phone.  
Meeskonna MS-TO on loonud andmestruktuuri inimeste nimede, soo, vanuse, isikukoodi ja kontaktandmete hoidmiseks. Koodis on kasutatud treppimist ning see on hästi loetav. Töö vastab esitatud nelja loogilise dimensiooni nõudele, puudub aga kolmas id-st erinev atribuut, need on olemas kahel elemendil - <person> ja <phone>.  


XML valideerub vigadeta XMLi reeglitele vastavaks, aga ei valideeru meeskonna poolt loodud skeemifaili vastu.
XML valideerub vigadeta XMLi reeglitele vastavaks, aga ei valideeru meeskonna poolt loodud skeemifaili vastu.
XML failis on kõikide teksti tüüpi andmete juures kasutatud CDATA plokki. Ehk oleks mõttekam kontrollida keelatud märkide sattumist XML faili - CDATA sees olevat teksti küll ei parsita, aga pahatahtlikult teksti pandud plokki lõpetav ]]> rikuks XMLi struktuuri.
XML failis on kõikide teksti tüüpi andmete juures kasutatud CDATA plokki. Ehk oleks mõttekam kontrollida keelatud märkide sattumist XML faili - CDATA sees olevat teksti küll ei parsita, aga pahatahtlikult teksti pandud plokki lõpetav ]]> rikuks XMLi struktuuri.
====Skeemifail====
====Skeemifail====
Skeemifailis on vaheldumisi kasutatud nii xs: kui ka xsd: nimeruumi, valima peaks neist ühe ning kasutama ainult seda. Selles tulenevalt on ka näiteks juurelement <xsd:shema> lõpetamata, skeemis on selleks pandud xs: nimeruumi märgend.
Skeemifailis on vaheldumisi kasutatud nii xs: kui ka xsd: nimeruumi, valima peaks neist ühe ning kasutama ainult seda. Sellest tulenevalt on ka näiteks juurelement <xsd:shema> lõpetamata, skeemis on selleks pandud xs: nimeruumi märgend.


Person elemendi id-atribuudi andmetüübiks on pandud int, samas seal hoitav isikukood on suurem arv kui 32bitine märgiga täisarv. Isikukoodi andmetüübiks peaks stringi panema ja andmebaasi seisukohalt võiks id surrogaatvõti olla. Isiku ea atribuudi väärtuseks piisaks lähemas tulevikus ka unsignedByte tüübist.
<Person> elemendi id-atribuudi andmetüübiks on pandud int, samas seal hoitav isikukood on suurem arv kui 32bitine märgiga täisarv. Isikukoodi andmetüübiks peaks stringi panema ja andmebaasi seisukohalt võiks id surrogaatvõti olla. Isiku ea atribuudi väärtuseks piisaks lähemas tulevikus ka unsignedByte tüübist.


Skeemifailis puudub mitmeid telefoninumbreid sisaldav phones element, mida on aga kasutatud XML failis.
Skeemifailis puudub mitmeid telefoninumbreid sisaldav <phones> element, mida on aga kasutatud XML failis.
====Transformatsioonid====
====Transformatsioonid====
Meeskonna MS-TO poolt on tehtud kaks XMLi transformatsiooni HTMLi genereerimiseks.
Meeskonna MS-TO poolt on tehtud kaks XMLi transformatsiooni HTMLi genereerimiseks.
Esimeses kuvatakse kõik XML failis sisalduvad isikute andmed, teises filtreeritakse välja ainult meessoo esindajad ja tabelis kuvatakse perekonnanime järgi sorditult eesnimi, perekonnanimi ning sugu.
Esimeses kuvatakse kõik XML failis sisalduvad isikute andmed, teises filtreeritakse välja ainult meessoo esindajad ja tabelis kuvatakse perekonnanime järgi sorditult eesnimi, perekonnanimi ning sugu.


Soo leidmisel on nutikalt arvestatud Eestis kasutusel oleva isikukoodi vormingut, milles esimene number näitab sugu - tehtud transformatsioonis on leitud meessoo esindajad kolmega algavate isikukoodide väljafiltreerimisega. Ei arvestata aga käesoleval sajandil sündinud inimestega, kellede meessoo esindajate isikukoodid algavad viiega. Univesaalsuse seisukohalt poleks hea sugu isikukoodi järgi leida, andmetesse võib sattuda ka mõni teise riigi kodanik, kelle isikukood ei ole sama skeemiga. XML faili person elemedil on kasutusel ka sex atribuut, soo järgi inimeste leidmiseks võiks siis seda kasutada. Kuna soo atribuudi erinevaid väärtusi on vähe, siis võiks näiteks olla skeemis ka piirang võimalike variantidega. Näiteks midagi sellist:
Soo leidmisel on nutikalt arvestatud Eestis kasutusel oleva isikukoodi vormingut, milles esimene number näitab sugu - tehtud transformatsioonis on leitud meessoo esindajad kolmega algavate isikukoodide väljafiltreerimisega. Ei arvestata aga käesoleval sajandil sündinud inimestega, kellede meessoo esindajate isikukoodid algavad viiega. Univesaalsuse seisukohalt poleks hea sugu isikukoodi järgi leida, andmetesse võib sattuda ka mõni teise riigi kodanik, kelle isikukood ei ole sama skeemiga. XML faili person elemedil on kasutusel ka <sex> atribuut, soo järgi inimeste leidmiseks võiks siis seda kasutada. Kuna soo atribuudi erinevaid väärtusi on vähe, siis võiks ehk olla skeemis ka piirang võimalike variantidega. Näiteks midagi sellist:
<pre>
<pre>
<xs:attribute name="sex" use="required">
<xs:attribute name="sex" use="required">
Line 542: Line 542:
</xs:attribute>
</xs:attribute>
</pre>
</pre>
Genereerutud HTML dokumendis on juurelemendi html asemel htm. Vastavast soost isikute mitteleidmisel oleks võib-olla hea jätta ka tabeli päis hoopis genereerimata. Samuti võiks HTML dokumendist välja jätta kujundusega tegelemise (tabeli raamid ja taustavärv).
Genereerutud HTML dokumendis on juurelemendi <html> asemel <htm>. Vastavast soost isikute mitteleidmisel oleks võib-olla hea jätta ka tabeli päis hoopis genereerimata. Samuti võiks HTML dokumendist välja jätta kujundusega tegelemise (tabeli raamid ja taustavärv).


Kokkuvõtteks võiks korra koodi veel üle vaadata, aga see pole eriti suur töö - Turingil läheks maksimaalselt minut selle peale.
Kokkuvõtteks võiks korra koodi veel üle vaadata, aga see pole eriti suur töö - Turingil läheks maksimaalselt minut selle peale.

Revision as of 08:12, 16 March 2015

Meeskond /* Anonüümsed koodikommentaatorid */

  • Madis Uudam
  • Kristjan Kebja
  • Olle Mikk

XML

XML andmefail

XML fail

<?xml version="1.0" encoding="utf-8" ?>
<filmikogu>
  <film id="16410" aasta="2013">
    <zanrid>
      <zanr>draama</zanr>
      <zanr>sõjafilm</zanr>
    </zanrid>
    <pealkiri>Mandariinid</pealkiri>
    <kirjeldus>
      <![CDATA[Mängufilmi tegevus leiab aset 1992. aastal Abhaasias. 
    Põline eestlaste küla maalilises paigas mägede ja mere vahel on tühjaks jäänud – abhaasid 
    sõdivad, et Gruusiast lahku lüüa ja sõja lähenedes on eestlased oma ajaloolisele kodumaale 
    tagasi pöördunud. Külla on elama jäänud vaid Ivo (Lembit Ulfsak) ja tema naaber Margus (Elmo Nüganen). 
    Ka Margus kavatseb Eestisse sõita, aga alles pärast seda, kui tema istanduse mandariinisaak on korjatud. 
    Paratamatult jõuab sõda ka nende külani ning toimub grusiinide ja abhaaside verine lahing. Ivo ja 
    Margus leiavad lahingupaigalt ühe ellujäänu – tšetšeen Ahmedi, kelle Ivo enda juurde koju paranema viib.
    Öösel hukkunuid mattes avastab Margus, et üks raskelt haavatud grusiin on samuti elus. Ka tema viiakse 
    Ivo juurde ja nii satuvad ühe katuse alla kaks vastasleeri võitlejat.]]>
    </kirjeldus>
    <naitlejad>
      <naitleja id="10021" peaosa="true">
        <nimi>Lembit Ulfsak</nimi>
        <rollid>
          <roll>Ivo</roll>
        </rollid>
      </naitleja>
      <naitleja id="10022" peaosa="true">
        <nimi>Elmo Nüganen</nimi>
        <rollid>
          <roll>Margus</roll>
        </rollid>
      </naitleja>
      <naitleja id="10023" peaosa="true">
        <nimi>Giorgi Nakashidze</nimi>
        <rollid>
          <roll>Ahmed</roll>
        </rollid>
      </naitleja>
      <naitleja id="10024" peaosa="false">
        <nimi>Misha Meskhi</nimi>
        <rollid>
          <roll>Niko</roll>
        </rollid>
      </naitleja>
      <naitleja id="10025" peaosa="false">
        <nimi>Raivo Trass</nimi>
        <rollid>
          <roll>Juhan</roll>
        </rollid>
      </naitleja>
    </naitlejad>
    <pisipilt id="1" height="140" width="100">
      <url>http://www.efis.ee/UserFiles/EfisFilms/Thumbnails/16533/100x140/81ac6a24304f5fa6b677cad59ba94fe2f9eeda89.jpg</url>
      <alt>Plakat</alt>
    </pisipilt>
    <pildid>
      <pilt id="1" height="493" width="740">
        <url>http://www.efis.ee/UserFiles/EfisFilms/FilmGalleryFiles/3091/800x800/ba31bbf174076de46dba5aff5b0996c4bd3ecd35.jpg</url>
        <alt>Plakat</alt>
      </pilt>
      <pilt id="1" height="493" width="740">
        <url>http://www.efis.ee/UserFiles/EfisFilms/FilmGalleryFiles/3091/800x800/79791015af5008acc355de9b8a7d3d77a2c3303d.jpg</url>
        <alt>Plakat</alt>
      </pilt>
      <pilt id="1" height="493" width="740">
        <url>http://www.efis.ee/UserFiles/EfisFilms/FilmGalleryFiles/3091/800x800/1653f7b76cf58ef749bf92ed2b8a760984dbfcf7.jpg</url>
        <alt>Plakat</alt>
      </pilt>
    </pildid>
  </film>

  <film id="16404" aasta="2015">
    <zanrid>
      <zanr>sõjafilm</zanr>
      <zanr>ajalooline film</zanr>
    </zanrid>
    <pealkiri>1944</pealkiri>
    <kirjeldus>
      <![CDATA[Elmo Nüganeni mängufilm käsitleb 1944. aasta otsustavaid sõjasündmusi Eestis. Tegevus hargneb alates 
      Sinimägede lahingutest juulis kuni Sõrve sääre langemiseni Punaarmee kätte novembri lõpus. Sõda näidatakse mõlema 
      osapoole, nii Saksa armees kui Punaväes sõdivate eestlaste silme läbi. Valikuid tuleb langetada mitte ainult 
      sõduritel, vaid ka nende lähedastel. Teine maailmasõda oli eestlastele ka vennatapusõda. Süütud tunnevad ennast 
      süüdi, suured süüdlased ei tunne midagi.]]>
    </kirjeldus>
    <naitlejad>
      <naitleja id="10011" peaosa="true">
        <nimi>Kaspar Velberg</nimi>
        <rollid>
          <roll>Karl Tammik</roll>
        </rollid>
      </naitleja>
      <naitleja id="10012" peaosa="true">
        <nimi>Kristjan Üksküla</nimi>
        <rollid>
          <roll>Jüri Jõgi</roll>
        </rollid>
      </naitleja>
      <naitleja id="10013" peaosa="true">
        <nimi>Maiken Schmidt</nimi>
        <rollid>
          <roll>Aino Tammik</roll>
        </rollid>
      </naitleja>
      <naitleja id="10014" peaosa="false">
        <nimi>Gert Raudsep</nimi>
        <rollid>
          <roll>Ants Saareste</roll>
        </rollid>
      </naitleja>
      <naitleja id="10015" peaosa="false">
        <nimi>Hendrik Toompere jr jr</nimi>
        <rollid>
          <roll>Kristjan Põder</roll>
        </rollid>
      </naitleja>
      <naitleja id="10016" peaosa="false">
        <nimi>Karl-Andreas Kalmet</nimi>
        <rollid>
          <roll>Vladimir Kamenski</roll>
        </rollid>
      </naitleja>
      <naitleja id="10017" peaosa="false">
        <nimi>Henrik Kalmet</nimi>
        <rollid>
          <roll>Voldemar Piir</roll>
        </rollid>
      </naitleja>
    </naitlejad>
    <pisipilt id="50" height="140" width="100">
      <url>http://www.efis.ee/UserFiles/EfisFilms/FilmGalleryFiles/4273/350x230/a9d76f1d500312167c5755065eb1b258ae18afbd.jpg</url>
      <alt>Plakat</alt>
    </pisipilt>
    <pildid>
      <pilt id="52" height="493" width="740">
        <url>http://www.efis.ee/UserFiles/EfisFilms/FilmGalleryFiles/4330/800x800/b02751f3222334ef02df0273f865ac246cc8b972.jpg</url>
        <alt>Pilt</alt>
      </pilt>
      <pilt id="53" height="493" width="740">
        <url>http://www.efis.ee/UserFiles/EfisFilms/FilmGalleryFiles/4330/800x800/58ee27f597655a33adb7d740ae738f9f6b6c5cd0.JPG</url>
        <alt>Pilt</alt>
      </pilt>
      <pilt id="54" height="493" width="740">
        <url>http://www.efis.ee/UserFiles/EfisFilms/FilmGalleryFiles/4330/800x800/e9ff41eb668b30c2b36cca28e9eb298f74034965.jpg</url>
        <alt>Pilt</alt>
      </pilt>
    </pildid>
  </film>

  <film id="742" aasta="1980">
    <zanrid>
      <zanr>mängufilm</zanr>
      <zanr>draama</zanr>
    </zanrid>
    <pealkiri>Ideaalmaastik</pealkiri>
    <kirjeldus>
      <![CDATA[1950ndate algus. Komsomoliaktivist Mait Kukemeri lähetatakse maale kevadkülvi tempot tõstma. Kolhoosnikud 
      eesotsas esimees Tuvikesega ei kiirusta põllule, sest madalad maad on liiga märjad. Ka seemnevilja ei jätku, ülemused 
      linnas aga nõuavad tulemusi. Noorel külvivolinikul tuleb leida lahendus, olgu hea või kurjaga, ja sel helgel ja hullul
      kevadel saab ta mõndagi teada nii elust kui enesest.]]>
    </kirjeldus>
    <naitlejad>
      <naitleja id="10031" peaosa="true">
        <nimi>Arvo Kukumägi</nimi>
      </naitleja>
      <rollid>
        <roll>Volinik, Mait Kukemeri</roll>
      </rollid>
      <naitleja id="10032" peaosa="true">
        <nimi>Tõnu Kark</nimi>
        <rollid>
          <roll>Esimees, Harald Tuvike</roll>
        </rollid>
      </naitleja>
      <naitleja id="10033" peaosa="true">
        <nimi>Kalju Komissarov</nimi>
        <rollid>
          <roll>Rajoonikomitee sekretär</roll>
        </rollid>
      </naitleja>
      <naitleja id="10034" peaosa="false">
        <nimi>Priit Adamson</nimi>
        <rollid>
          <roll>Asser</roll>
        </rollid>
      </naitleja>
      <naitleja id="10035" peaosa="false">
        <nimi>Reet Paavel</nimi>
        <rollid>
          <roll>Pioneerijuht, Liina</roll>
        </rollid>
      </naitleja>
      <naitleja id="10036" peaosa="false">
        <nimi>Paul Poom</nimi>
        <rollid>
          <roll> Peeter Viksur</roll>
        </rollid>
      </naitleja>
      <naitleja id="10037" peaosa="false">
        <nimi>Aire Johanson</nimi>
        <rollid>
          <roll>Viksuri naine</roll>
        </rollid>
      </naitleja>
      <naitleja id="10038" peaosa="false">
        <nimi>Urmas Kibuspuu</nimi>
        <rollid>
          <roll>Vidrik Kits</roll>
        </rollid>
      </naitleja>
      <naitleja id="10039" peaosa="false">
        <nimi>Aarne Üksküla</nimi>
        <rollid>
          <roll>Liina isa</roll>
        </rollid>
      </naitleja>
    </naitlejad>
    <pisipilt id="61" height="140" width="100">
      <url>http://www.efis.ee/UserFiles/EfisFilms/FilmGalleryFiles/168/350x230/795a041ca7a54dde68713438c8ef4ac7d9518d70.jpg</url>
      <alt>Plakat</alt>
    </pisipilt>
    <pildid>
      <pilt id="62" height="493" width="740">
        <url>http://www.efis.ee/UserFiles/EfisFilms/FilmGalleryFiles/200/800x800/9b7c9a7958e86359e4abd1b34ab0d0fc130f92cf.jpg</url>
        <alt>Plakat</alt>
      </pilt>
      <pilt id="63" height="493" width="740">
        <url>http://www.efis.ee/UserFiles/EfisFilms/FilmGalleryFiles/200/800x800/7f8aaa6bad1364fe7e959cb0f9bdc3c77fd8003d.jpg</url>
        <alt>Plakat</alt>
      </pilt>
    </pildid>
  </film>
</filmikogu>

XML-i skeemifail

XSD fail

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="filmikogu">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="film">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="zanrid">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" name="zanr" type="xs:string" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="pealkiri" type="xs:string" />
              <xs:element name="kirjeldus" type="xs:string" />
              <xs:element minOccurs="0" name="naitlejad">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" name="naitleja">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="nimi" type="xs:string" />
                          <xs:element name="rollid">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element maxOccurs="unbounded" name="roll" type="xs:string" />
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                        <xs:attribute name="id" type="xs:unsignedInt" use="required" />
                        <xs:attribute name="peaosa" use="required">
                          <xs:simpleType>
                            <xs:restriction base="xs:boolean">
                              <xs:pattern value="false" />
                              <xs:pattern value="true" />
                            </xs:restriction>
                          </xs:simpleType>
                        </xs:attribute>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="pisipilt">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="url" type="xs:string" />
                    <xs:element name="alt" type="xs:string" />
                  </xs:sequence>
                  <xs:attribute name="id" type="xs:unsignedInt" use="required" />
                  <xs:attribute name="height" type="xs:unsignedShort" use="required" />
                  <xs:attribute name="width" type="xs:unsignedShort" use="required" />
                </xs:complexType>
              </xs:element>
              <xs:element minOccurs="0" name="pildid">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" name="pilt">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="url" type="xs:string" />
                          <xs:element name="alt" type="xs:string" />
                        </xs:sequence>
                        <xs:attribute name="id" type="xs:unsignedInt" use="required" />
                        <xs:attribute name="height" type="xs:unsignedShort" use="required" />
                        <xs:attribute name="width" type="xs:unsignedShort" use="required" />
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="id" type="xs:unsignedInt" use="required" />
            <xs:attribute name="aasta" type="xs:gYear" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

XSL failid

<?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>Filmid</title>
        <link rel="stylesheet" type="text/css" href="http://enos.itcollege.ee/~omikk/VR2/filmid.css" />
      </head>
      <body>
        <div id="wrapper">
          <xsl:for-each select ="filmikogu/film">
            <div class="film">
              <h2>
                <xsl:value-of select="pealkiri"/>
              </h2>
              <ul>
                <li>
                  <xsl:value-of select="@aasta"/>
                </li>
                <li>
                  <xsl:for-each select="zanrid/zanr">
                    <xsl:value-of select="."/>
                    <xsl:if test="position() != last()">, </xsl:if>
                  </xsl:for-each>
                </li>
              </ul>
              <div class="clear"></div>
              <div>
                <xsl:for-each select="pisipilt">
                  <img class="thumbnail">
                    <xsl:attribute name="src">
                      <xsl:value-of select="url"/>
                    </xsl:attribute>
                    <xsl:attribute name="alt">
                      <xsl:value-of select="alt"/>
                    </xsl:attribute>
                    <xsl:attribute name="height">
                      <xsl:value-of select="@height"/>
                    </xsl:attribute>
                    <xsl:attribute name="width">
                      <xsl:value-of select="@width"/>
                    </xsl:attribute>
                  </img>
                </xsl:for-each>
                <p>
                  <xsl:value-of select="kirjeldus"/>
                </p>
              </div>
              <div class="clear"></div>
              <xsl:if test="naitlejad">
                <h3>Osatäitjad</h3>
                <table>
                  <tr>
                    <th>Näitleja</th>
                    <th>Roll</th>
                  </tr>
                  <xsl:for-each select="naitlejad/naitleja">
                    <tr>
                      <td>
                        <xsl:value-of select="nimi"/>
                        <xsl:if test="@peaosa = 'true' ">
                          <xsl:text> (peaosa)</xsl:text>
                        </xsl:if>
                      </td>
                      <td>
                        <xsl:for-each select="rollid/roll">
                          <xsl:value-of select="."/>
                          <xsl:if test="position() != last()">, </xsl:if>
                        </xsl:for-each>
                      </td>
                    </tr>
                  </xsl:for-each>
                </table>
              </xsl:if>
              <xsl:for-each select="pildid/pilt">
                <img>
                  <xsl:attribute name="src">
                    <xsl:value-of select="url"/>
                  </xsl:attribute>
                  <xsl:attribute name="alt">
                    <xsl:value-of select="alt"/>
                  </xsl:attribute>
                  <xsl:attribute name="height">
                    <xsl:value-of select="@height"/>
                  </xsl:attribute>
                  <xsl:attribute name="width">
                    <xsl:value-of select="@width"/>
                  </xsl:attribute>
                </img>
              </xsl:for-each>
            </div>
          </xsl:for-each>
        </div>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>
<?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>Filmid</title>
        <link rel="stylesheet" type="text/css" href="http://enos.itcollege.ee/~omikk/VR2/filmid.css" />
      </head>
      <body>
        <div id="wrapper">
          <h1>Filmikogu</h1>
          <xsl:for-each select="filmikogu/film">
            <xsl:sort select="@aasta"/>
            <div class="film">
              <h2>
                <xsl:value-of select="pealkiri"/>
              </h2>
              <ul>
                <li>
                  <xsl:value-of select="@aasta"/>
                </li>
                <li>
                  <xsl:for-each select="zanrid/zanr">
                    <xsl:value-of select="."/>
                    <xsl:if test="position() != last()">, </xsl:if>
                  </xsl:for-each>
                  <li>
                    <xsl:for-each select="naitlejad/naitleja[@peaosa='true']">
                      <xsl:value-of select="nimi"/>
                      <xsl:if test="position() != last()">, </xsl:if>
                    </xsl:for-each>
                  </li>
                </li>
              </ul>
              <div class="clear"></div>
              <div>
                <xsl:for-each select="pisipilt">
                  <img class="thumbnail">
                    <xsl:attribute name="src">
                      <xsl:value-of select="url"/>
                    </xsl:attribute>
                    <xsl:attribute name="alt">
                      <xsl:value-of select="alt"/>
                    </xsl:attribute>
                    <xsl:attribute name="height">
                      <xsl:value-of select="@height"/>
                    </xsl:attribute>
                    <xsl:attribute name="width">
                      <xsl:value-of select="@width"/>
                    </xsl:attribute>
                  </img>
                </xsl:for-each>
                <p>
                  <xsl:choose>
                    <xsl:when test="string-length(kirjeldus) > 330">
                      <xsl:value-of select="substring-before(kirjeldus, substring-after(substring(kirjeldus,330),' '))"/>
                      <xsl:text>...</xsl:text>
                    </xsl:when>
                    <xsl:otherwise>
                      <xsl:value-of select="kirjeldus"/>
                    </xsl:otherwise>
                  </xsl:choose>
                </p>
              </div>
            </div>
          </xsl:for-each>
        </div>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

Retsensioonid

Retsensioon meeskonnale MS-TO

XML

Meeskonna MS-TO on loonud andmestruktuuri inimeste nimede, soo, vanuse, isikukoodi ja kontaktandmete hoidmiseks. Koodis on kasutatud treppimist ning see on hästi loetav. Töö vastab esitatud nelja loogilise dimensiooni nõudele, puudub aga kolmas id-st erinev atribuut, need on olemas kahel elemendil - <person> ja <phone>.

XML valideerub vigadeta XMLi reeglitele vastavaks, aga ei valideeru meeskonna poolt loodud skeemifaili vastu. XML failis on kõikide teksti tüüpi andmete juures kasutatud CDATA plokki. Ehk oleks mõttekam kontrollida keelatud märkide sattumist XML faili - CDATA sees olevat teksti küll ei parsita, aga pahatahtlikult teksti pandud plokki lõpetav ]]> rikuks XMLi struktuuri.

Skeemifail

Skeemifailis on vaheldumisi kasutatud nii xs: kui ka xsd: nimeruumi, valima peaks neist ühe ning kasutama ainult seda. Sellest tulenevalt on ka näiteks juurelement <xsd:shema> lõpetamata, skeemis on selleks pandud xs: nimeruumi märgend.

<Person> elemendi id-atribuudi andmetüübiks on pandud int, samas seal hoitav isikukood on suurem arv kui 32bitine märgiga täisarv. Isikukoodi andmetüübiks peaks stringi panema ja andmebaasi seisukohalt võiks id surrogaatvõti olla. Isiku ea atribuudi väärtuseks piisaks lähemas tulevikus ka unsignedByte tüübist.

Skeemifailis puudub mitmeid telefoninumbreid sisaldav <phones> element, mida on aga kasutatud XML failis.

Transformatsioonid

Meeskonna MS-TO poolt on tehtud kaks XMLi transformatsiooni HTMLi genereerimiseks. Esimeses kuvatakse kõik XML failis sisalduvad isikute andmed, teises filtreeritakse välja ainult meessoo esindajad ja tabelis kuvatakse perekonnanime järgi sorditult eesnimi, perekonnanimi ning sugu.

Soo leidmisel on nutikalt arvestatud Eestis kasutusel oleva isikukoodi vormingut, milles esimene number näitab sugu - tehtud transformatsioonis on leitud meessoo esindajad kolmega algavate isikukoodide väljafiltreerimisega. Ei arvestata aga käesoleval sajandil sündinud inimestega, kellede meessoo esindajate isikukoodid algavad viiega. Univesaalsuse seisukohalt poleks hea sugu isikukoodi järgi leida, andmetesse võib sattuda ka mõni teise riigi kodanik, kelle isikukood ei ole sama skeemiga. XML faili person elemedil on kasutusel ka <sex> atribuut, soo järgi inimeste leidmiseks võiks siis seda kasutada. Kuna soo atribuudi erinevaid väärtusi on vähe, siis võiks ehk olla skeemis ka piirang võimalike variantidega. Näiteks midagi sellist:

<xs:attribute name="sex" use="required">
   <xs:simpleType>
     <xs:restriction base="xs:string">
       <xs:pattern value="[M,F]" />
     </xs:restriction>
   </xs:simpleType>
</xs:attribute>

Genereerutud HTML dokumendis on juurelemendi <html> asemel <htm>. Vastavast soost isikute mitteleidmisel oleks võib-olla hea jätta ka tabeli päis hoopis genereerimata. Samuti võiks HTML dokumendist välja jätta kujundusega tegelemise (tabeli raamid ja taustavärv).

Kokkuvõtteks võiks korra koodi veel üle vaadata, aga see pole eriti suur töö - Turingil läheks maksimaalselt minut selle peale.

Retsensioon meeskonnale HMR

XML

Meeskond HMR on loonud andmefaili, mis sisaldab infot meie Päikesesüsteemi 8 planeedi kohta. XML failil on rohkem dimensioone, kui nõutud ülesande püstituses (4 dimensiooni) ja valideerub validaatoriga ilma ühegi veata. Positiivse asjaoluna võib ära märkida, et sisestatud andmetehulk on küllaltki suur ning väärtuste alusel hästi päritav. Samas on lihtsustab koodi lugemist konkreetselt iseloomustavate nimetuste kasutamine atribuutide puhul, kood on struktureeritud. ID-st erinevate atribuutide arv on suurem kui 3, vastavalt ülesande püstitusele. Praktilise omapärana on XML tehtud kakskeelsena, objektide nimetused on nii inglise kui eesti keeles. See muudab vajadusel ülemineku ühelt keelelt teisele lihtsaks. Planeetide nimetused ehk veaohtlikud kohad, on eraldatud CDATA tag’idega. Samas pole CDATA’t üleliigselt kasutatud, kuna keemiliste elementide nimed parsitakse koos struktuuriga. <Test> element eristus teistest, vahest meeskonna poolt taotuslikult koodi sisse jäetud. Asteroidide sektsioon tundub olevat ka tulevikuks, laienemise huvides.

Skeemifail

Genereeritud XSD on silmnähtavalt meeskonna poolt läbi vaadatud. Tüüpvigu ei esine. Skeemifaili kood valideerub vigadeta validaatoriga vastu XML faili. Atribuutide tüübid on korrigeeritud vastavalt esinevatele andmetele. Elementide nimetused skeemifailis kattuvad XML’is esitatavatele.

Transformatsioonid

Meeskond on esitanud kolm XSLT faili. Esimesed kaks eraldavad andmeid XML faili seest väljastades tabelid planeetide atmosfääri ja füüsikaliste omaduste kohta. Kuigi ülesande püstituses otseselt ei nõutud, genereerib kolmas transformatsioonifail uue XML faili planeetide ja nende infolinkide kohta. XSLT failide puhul on tabelite kujundamisel kasutatud kõige hädavajalikumaks vorminduseks CSS’i, mis on iseenesest tervitatav.

Kokkuvõttes on ülesande püstituses esitatud tingimused täidetud ja ühtegi konkreetset puudust ei tuvastanud. Mugavamaks ja kiiremaks brausimiseks oleks võinud wikis lisada kahe esimese XSLT koodi juurde ka lingid genereeritud vaatefailidele.

Veebiteenus

Analüüs

Retsensioon

Klientrakendus

Retsensioon

Logi