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

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.