Sense Of Direction

From ICO wiki
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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>