Sille

From ICO wiki
Jump to navigationJump to search

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

Meeskond

  • Andres Trei
  • Lasse Kolkanen

Idee

XML/XSD/XSLT

XML

XML fail hoiab endas riigimaanteedel olevaid sildasid.

<?xml version="1.0" encoding="utf-8" ?>
<Sillad>
  <Sild Id="1" Ehitusaasta="2012">
    <Nimi Nr="799">Sauga</Nimi>
    <Takistus>Sauga jõgi</Takistus>
    <Asukoht KoordX="527056" KoordY="6473072">
      <TeeNimetus Nr="60">Pärnu-Lihula</TeeNimetus>
      <Algusest Ühik="m">2386</Algusest>
      <Maakond>Pärnu</Maakond>
    </Asukoht>
    <Ylevaatused>
      <Järgmine>2016</Järgmine>
      <Viimane></Viimane>
    </Ylevaatused>
    <Kandevõime Ühik="t" Väärtus="800">N-30/NK-80</Kandevõime>
    <Sillaparameetrid>
      <Pikkus Ühik="m">70</Pikkus>
      <Laius Ühik="m">16.35</Laius>
      <TeeLaius Ühik="m">9.4</TeeLaius>
    </Sillaparameetrid>
    <Liiklusandmed>
      <Liiklussagedus Ühik="sõidukit/24h" Loendusaasta="2014">4444</Liiklussagedus>
      <Jaotus Ühik="%">
        <Sõidukid>85</Sõidukid>
        <Veokid>3</Veokid>
        <Autorongid>12</Autorongid>
      </Jaotus>
    </Liiklusandmed>
    <Indeksid>
      <SeisundiIndeks Hindamiseaasta="2012">99</SeisundiIndeks>
      <PontisIndeks Hindamiseaasta="2013">100</PontisIndeks>
    </Indeksid>
  </Sild>
  <Sild Id="2" Ehitusaasta="1939">
    <Nimi Nr="89">Kiviloo</Nimi>
    <Takistus>Jõelähtme jõgi</Takistus>
    <Asukoht KoordX="571748" KoordY="6572314">
      <TeeNimetus Nr="11125">Perila-Jäneda</TeeNimetus>
      <Algusest Ühik="m">5758</Algusest>
      <Maakond>Harju</Maakond>
    </Asukoht>
    <Ylevaatused>
      <Järgmine>2019</Järgmine>
      <Viimane>2015-10-09</Viimane>
    </Ylevaatused>
    <Kandevõime Ühik="t" Väärtus="600">N-13/NG-60</Kandevõime>
    <Sillaparameetrid>
      <Pikkus Ühik="m">17</Pikkus>
      <Laius Ühik="m">7.4</Laius>
      <TeeLaius Ühik="m">6</TeeLaius>
    </Sillaparameetrid>
    <Liiklusandmed>
      <Liiklussagedus Ühik="sõidukit/24h" Loendusaasta="2014">1214</Liiklussagedus>
      <Jaotus Ühik="%">
        <Sõidukid>95</Sõidukid>
        <Veokid>2</Veokid>
        <Autorongid>3</Autorongid>
      </Jaotus>
    </Liiklusandmed>
    <Indeksid>
      <SeisundiIndeks Hindamiseaasta="2010">55</SeisundiIndeks>
      <PontisIndeks Hindamiseaasta="2010">56</PontisIndeks>
    </Indeksid>
  </Sild>
  <Sild Id="3" Ehitusaasta="1952">
    <Nimi Nr="776">Majaka</Nimi>
    <Takistus>Majaka kanal</Takistus>
    <Asukoht KoordX="525662" KoordY="6428719">
      <TeeNimetus Nr="19331">Rannametsa-Ikla</TeeNimetus>
      <Algusest Ühik="m">15758</Algusest>
      <Maakond>Pärnu</Maakond>
    </Asukoht>
    <Ylevaatused>
      <Järgmine>2017</Järgmine>
      <Viimane></Viimane>
    </Ylevaatused>
    <Kandevõime Ühik="t" Väärtus="600">N-13/NG-60</Kandevõime>
    <Sillaparameetrid>
      <Pikkus Ühik="m">4.6</Pikkus>
      <Laius Ühik="m">8.9</Laius>
      <TeeLaius Ühik="m">7</TeeLaius>
    </Sillaparameetrid>
    <Liiklusandmed>
      <Liiklussagedus Ühik="sõidukit/24h" Loendusaasta="2014">479</Liiklussagedus>
      <Jaotus Ühik="%">
        <Sõidukid>95</Sõidukid>
        <Veokid>4</Veokid>
        <Autorongid>1</Autorongid>
      </Jaotus>
    </Liiklusandmed>
    <Indeksid>
      <SeisundiIndeks Hindamiseaasta="2006">65.7</SeisundiIndeks>
      <PontisIndeks Hindamiseaasta="2011">62</PontisIndeks>
    </Indeksid>
  </Sild>
  <Sild Id="4" Ehitusaasta="2015">
    <Nimi Nr="1500">Jõhvi I</Nimi>
    <Takistus>Tapa-Narva raudtee</Takistus>
    <Asukoht KoordX="694100" KoordY="6584697">
      <TeeNimetus Nr="3">Jõhvi-Tartu-Valga</TeeNimetus>
      <Algusest Ühik="m">2169</Algusest>
      <Maakond>Ida-Viru</Maakond>
    </Asukoht>
    <Ylevaatused>
      <Järgmine>2017</Järgmine>
      <Viimane></Viimane>
    </Ylevaatused>
    <Kandevõime Ühik="ts" Väärtus="2400">2400/200</Kandevõime>
    <Sillaparameetrid>
      <Pikkus Ühik="m">255.72</Pikkus>
      <Laius Ühik="m">9.4</Laius>
      <TeeLaius Ühik="m">7.5</TeeLaius>
    </Sillaparameetrid>
    <Liiklusandmed>
      <Liiklussagedus Ühik="sõidukit/24h" Loendusaasta="2014">16450</Liiklussagedus>
      <Jaotus Ühik="%">
        <Sõidukid>98</Sõidukid>
        <Veokid>2</Veokid>
        <Autorongid>0</Autorongid>
      </Jaotus>
    </Liiklusandmed>
    <Indeksid>
      <SeisundiIndeks Hindamiseaasta="2013">100</SeisundiIndeks>
      <PontisIndeks Hindamiseaasta=""></PontisIndeks>
    </Indeksid>
  </Sild>
</Sillad>

XSD

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:simpleType name="pikkusühik">
    <xs:restriction base="xs:string">
      <xs:enumeration value="m"/>
      <xs:enumeration value="km"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="massiühik">
    <xs:restriction base="xs:string">
      <xs:enumeration value="kg"/>
      <xs:enumeration value="t"/>
      <xs:enumeration value="ts"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="sagedusühik">
    <xs:restriction base="xs:string">
      <xs:enumeration value="sõidukit/24h"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="protsent">
    <xs:restriction base="xs:string">
      <xs:enumeration value="%"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="maakond">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Harju"/>
      <xs:enumeration value="Pärnu"/>
      <xs:enumeration value="Rapla"/>
      <xs:enumeration value="Valga"/>
      <xs:enumeration value="Ida-Viru"/>
      <!--jne-->
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="kandevõime">
    <xs:restriction base="xs:string">
      <xs:enumeration value="N-13/NG-60"/>
      <xs:enumeration value="N-30/NK-80"/>
      <xs:enumeration value="N-10/NG-30"/>
      <xs:enumeration value="N-8/NG-60"/>
      <xs:enumeration value="3600/240kN"/>
      <xs:enumeration value="260 kN/3x210 kN"/>
      <xs:enumeration value="2400/200"/>
      <xs:enumeration value="N-18/NG-60"/>
      <!--jne-->
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="aastad">
    <xs:restriction base="xs:unsignedShort">
      <xs:minInclusive value="1900"/>
      <xs:maxInclusive value="2100"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:element name="Sillad">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="Sild">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Nimi">
                <xs:complexType>
                  <xs:simpleContent>
                    <xs:extension base="xs:string">
                      <xs:attribute name="Nr" type="xs:unsignedShort" use="required" />
                    </xs:extension>
                  </xs:simpleContent>
                </xs:complexType>
              </xs:element>
              <xs:element name="Takistus">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:maxLength value="60"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>
              <xs:element name="Asukoht">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="TeeNimetus">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:string">
                            <xs:attribute name="Nr" type="xs:unsignedShort" use="required" />
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="Algusest">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:unsignedInt">
                            <xs:attribute name="Ühik" type="pikkusühik" use="required" />
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="Maakond" type="maakond" />
                  </xs:sequence>
                  <xs:attribute name="KoordX" type="xs:unsignedInt" use="required" />
                  <xs:attribute name="KoordY" type="xs:unsignedInt" use="required" />
                </xs:complexType>
              </xs:element>
              <xs:element name="Ylevaatused">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Järgmine" type="xs:unsignedShort" />
                    <xs:element name="Viimane" type="xs:date" nillable="true"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="Kandevõime">
                <xs:complexType>
                  <xs:simpleContent>
                    <xs:extension base="kandevõime">
                      <xs:attribute name="Ühik" type="massiühik" use="required" />
                      <xs:attribute name="Väärtus" type="xs:unsignedShort" use="optional" />
                    </xs:extension>
                  </xs:simpleContent>
                </xs:complexType>
              </xs:element>
              <xs:element name="Sillaparameetrid">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Pikkus">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:decimal">
                            <xs:attribute name="Ühik" type="pikkusühik" use="required" />
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="Laius">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:decimal">
                            <xs:attribute name="Ühik" type="pikkusühik" use="required" />
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="TeeLaius">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:decimal">
                            <xs:attribute name="Ühik" type="pikkusühik" use="required" />
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="Liiklusandmed">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Liiklussagedus">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:unsignedShort">
                            <xs:attribute name="Ühik" type="sagedusühik" use="required" />
                            <xs:attribute name="Loendusaasta" type="xs:unsignedShort" use="required" />
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="Jaotus">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="Sõidukid" type="xs:unsignedByte" />
                          <xs:element name="Veokid" type="xs:unsignedByte" />
                          <xs:element name="Autorongid" type="xs:unsignedByte" />
                        </xs:sequence>
                        <xs:attribute name="Ühik" type="protsent" use="required" />
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="Indeksid">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="SeisundiIndeks" nillable="true">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:decimal">
                            <xs:attribute name="Hindamiseaasta" type="aastad" use="optional" />
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="PontisIndeks" nillable="true">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:decimal">
                            <xs:attribute name="Hindamiseaasta" type="aastad" use="optional" />
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="Id" type="xs:unsignedInt" use="required" />
            <xs:attribute name="Ehitusaasta" type="aastad" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

XSLT

XSLT 1

<?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>Sille transformatsioon 1</title>
        </head>
        <body>
            <xsl:variable name="maakond" select="'Pärnu'"/>
            <p>Sillad mis asuvad <xsl:value-of select="$maakond"/> maakonnas</p>
            <xsl:for-each select="/Sillad/Sild">
              
              <xsl:variable select="Nimi" name="Sillanimi"/>
              <!--<xsl:value-of select="$Sillanimi"/>-->
              <ul>
                
                <xsl:if test="Asukoht/Maakond = $maakond">
                  <li>
                    <xsl:value-of select="$Sillanimi"/>
                    <xsl:text> </xsl:text>
                  </li>
                </xsl:if>
              </ul>
            </xsl:for-each>
          <xsl:variable name="sagedus" select="'500'"/>
          <p>
            Sillad mis asuvad <xsl:value-of select="$maakond"/> maakonnas ja kus liiklussagedus on väiksem kui <xsl:value-of select="$sagedus"/> autot/24h
          </p>
          <xsl:for-each select="/Sillad/Sild">

            <xsl:variable select="Nimi" name="Sillanimi"/>
            <xsl:variable select="Liiklusandmed/Liiklussagedus" name="liiklussagedus"/>
            <ul>

              <xsl:if test="Asukoht/Maakond = $maakond and Liiklusandmed/Liiklussagedus < $sagedus">
                <li>
                  <xsl:value-of select="$Sillanimi"/>
                  <xsl:text> - </xsl:text>
                  <xsl:value-of select="$liiklussagedus"/>
                  <xsl:text> autot 24/h </xsl:text>
                </li>
              </xsl:if>
            </ul>
          </xsl:for-each>
        </body>
      </html>
    </xsl:template>
</xsl:stylesheet>

XSLT 2

<?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>Sille transformatsioon 2</title>
        </head>
        <body>
          <xsl:variable name="kandevõime" select="'1000'"/>
          <xsl:variable name="osakaal" select="'10'"/>
          <p>
            Sillad mille kandevõime on rohkem kui <xsl:value-of select="$kandevõime"/> t või kus kandevõime on väiksem/võrdne <xsl:value-of select="$kandevõime"/> t ja autorongide osakaal on üle <xsl:value-of select="$osakaal"/>% 
          </p>

          <xsl:for-each select="/Sillad/Sild">

            <xsl:variable select="Kandevõime/@Väärtus" name="Kandevõime"/>
            <xsl:variable select="Nimi" name="Nimi"/>
            <xsl:variable select="Liiklusandmed/Jaotus/Autorongid" name="autorongid"/>
            <ul>
              <xsl:choose>
                <xsl:when test="$Kandevõime > $kandevõime">
                  <li>
                    <xsl:value-of select="$Nimi"/>
                  </li>
                  
                </xsl:when>
                <xsl:when test="$Kandevõime <= $kandevõime and $autorongid > $osakaal">
                  <li>
                    <xsl:value-of select="$Nimi"/>
                  </li>
                </xsl:when>
              </xsl:choose>
            </ul>
          </xsl:for-each>
        </body>
      </html>
    </xsl:template>
</xsl:stylesheet>

XML retsensioon

Retsensioon meeskonna VRJ XML failile.

Meeskonna VRJ XML fail kirjeldab erinevaid automarke, jaotades autod mudelite järgi. Iga mudeli juures on välja toodud sõiduki tähtsamad parameetrid. XML fail vastab ülesandes esitatud nõuetele. Dimensioonid on jaotatud loogiliselt, dimensioonide arv (6) ületab ülesandepüstituses nõutud arvu (4). Lisaks tuleb kolmel dimensioonil kasutada atribuute, mis enam kui ID. Ka see nõue on korrektselt täidetud. XML fail valideerus ka online validaatori vastu. XSD faili puhul on suures osas piirdutud Visual Studio poolt automaatselt genereeritud variandiga. Näiteks <kaigukast> elemendi väärtused on defineeritud xs:string’ina, samas oleks need võinud olla defineeritud enum’ina, et saaks valida ainult kas automaat või manuaal. Praegusel vabatekstilisel kujul saab sisestada ka automanuaal, fsdf jne. Sama kehtib ka võimsuse ühiku kohta. Võimalikud väärtused võiksid olla näiteks kw ja hj. Auto ehitusaasta väärtused saaks tõkestada, kuna pole kuigi realistlik, et keegi omaks autot ehitusaastaga 1468 või 2301. Esimeses XSLT transformatsioonis on välja kirjutatud iga automark koos mudelitega ning mudeli parameetritega. Selleks on kasutatud kolme for tsüklit koos vastavate elementide või atribuutide väärtuste välja kutsumisega. Esineb üks näpuviga, võimsust on prinditud kaks korda kuigi võib arvata, et teisel korral on mõeldud käigukasti tüüpi. Teise transformatsioonifaili puhul on demonstreeritud erinevaid XSL funktsioone nagu, concat(), position() ja when tingimus, mis on väga tervitatav. Välja on prinditud kõik margid ja mudelid, kusjuures kavalalt on väljatrükis iga mudeli teksti värviks seatud style atribuuti kasutades reaalselt xml andmetes olev vastava mudeli värvi atribuut.

Veebiteenus

Veebiteenuse retsensioon

Klientrakendus

Klientrakenduse retsensioon

Arendusprotsess

  1. 17.03.16 - wiki lehe loomine, XML, XSD
  2. 19.03.16 - XSLT
  3. 22.03 - XML retsensioon