Meeskond: Falador

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.

Meeskond: Falador

  • Madis Lugus
  • Taavi Metsvahi
  • Elina Kuldkepp

XML/XSD/XSLT

XML

Vehicles that are being sold

<?xml version="1.0" encoding="utf-8"?>
<vehicles>
  <vehicle id="1">
    <type><![CDATA[Bus]]></type>
    <make><![CDATA[Mercedes-Benz]]></make>
    <model><![CDATA[Sprinter]]></model>
    <date>05/2003</date>
    <price currency="EUR">5500</price>
    <license-plate><![CDATA[ABS 550]]></license-plate>
    <location><![CDATA[Estonia, Tallinn, Raja 4C]]></location>
    <description><![CDATA[Selling a big white van, it can haul ass with alot of people in it, making it ideal for transporting immigrants across the border]]></description>
    <technical-specs>
      <seats>5</seats>
      <doors>4</doors>
      <engine>
        <power unit="kW">95</power>
        <displacement unit="L">2.2</displacement>
        <type><![CDATA[R6]]></type>
      </engine>
      <mileage unit="KM">75600</mileage>
      <fuel><![CDATA[Diesel]]></fuel>
      <transmission><![CDATA[Automatic]]></transmission>
      <color><![CDATA[white]]></color>
      <weights>
        <cross-weight unit="kg">4000</cross-weight>
        <load-carring unit="kg">1760</load-carring>
      </weights>
    </technical-specs>
    <equipment>
      <item><![CDATA[ABS]]></item>
      <item><![CDATA[Traction control]]></item>
      <item><![CDATA[Sunroof]]></item>
      <item><![CDATA[Tow hitch]]></item>
    </equipment>
    <images>
      <image><![CDATA[https://static.cargurus.com/images/site/2008/04/30/19/51/2003_mercedes-benz_sprinter-pic-65605-1600x1200.jpeg]]></image>
      <image><![CDATA[https://i.ytimg.com/vi/sDv15TPLvvo/maxresdefault.jpg]]></image>
    </images>
  </vehicle>
  <vehicle id="2">
    <type><![CDATA[Passenger car]]></type>
    <make><![CDATA[Audi]]></make>
    <model><![CDATA[S5]]></model>
    <specification><![CDATA[Sportback Quattro TFSI]]></specification>
    <date>02/2012</date>
    <price currency="EUR">26900</price>
    <license-plate><![CDATA[WAU ZZZ]]></license-plate>
    <location><![CDATA[Estonia, Tallinn, Raja 4C]]></location>
    <description><![CDATA[Stolen from: Germany]]></description>
    <technical-specs>
      <seats>5</seats>
      <doors>5</doors>
      <engine>
        <power unit="kW">245</power>
        <displacement unit="L">3.0</displacement>
        <type><![CDATA[V6]]></type>
      </engine>
      <mileage unit="KM">169000</mileage>
      <fuel><![CDATA[Petrol]]></fuel>
      <transmission><![CDATA[Automatic (Tiptronic)]]></transmission>
      <color><![CDATA[Dark brown metal]]></color>
      <weights>
        <cross-weight unit="kg">1820</cross-weight>
      </weights>
    </technical-specs>
    <equipment>
      <item><![CDATA[ABS]]></item>
      <item><![CDATA[Traction control]]></item>
      <item><![CDATA[Sunroof]]></item>
      <item><![CDATA[Electric handbrake]]></item>
      <item><![CDATA[Central locking]]></item> 
      <item><![CDATA[Bang & Olufsen sound system]]></item>
      <item><![CDATA[Xenon headlight]]></item>
      <item><![CDATA[Adaptive lights]]></item>
    </equipment>
    <images>
      <image><![CDATA[http://img6.auto24.ee/auto24/320/863/84913863.jpg]]></image>
      <image><![CDATA[http://img5.auto24.ee/auto24/320/872/84913872.jpg]]></image>
      <image><![CDATA[http://img5.auto24.ee/auto24/320/876/84913876.jpg]]></image>
    </images>
  </vehicle>
  <vehicle id="40000">
    <type><![CDATA[Mototechnics]]></type>
    <make><![CDATA[BMW]]></make>
    <model><![CDATA[S1000RR]]></model>
    <date>04/2010</date>
    <price currency="EUR">8000</price>
    <license-plate><![CDATA[WB 50]]></license-plate>
    <location><![CDATA[Estonia, Tallinn, Raja 4C]]></location>
    <description><![CDATA[ABS ja veojõukontroll. 
Lisadeks: Paagi kaitse kleebis ja stomgrip. 
Tehniliselt heas korras !]]></description>
    <technical-specs>
      <seats>2</seats>
      <engine>
        <power unit="kW">142</power>
        <displacement unit="cm3">999</displacement>
        <type><![CDATA[R4]]></type>
      </engine>
      <mileage unit="KM">13467</mileage>
      <fuel><![CDATA[Petrol]]></fuel>
      <transmission><![CDATA[Manual]]></transmission>
      <color><![CDATA[White]]></color>
    </technical-specs>
    <equipment>
      <item><![CDATA[ABS]]></item>
      <item><![CDATA[Traction control]]></item>
      <item><![CDATA[DTC]]></item>
    </equipment>
    <images>
      <image><![CDATA[http://img6.auto24.ee/auto24/320/780/87505780.jpg]]></image>
      <image><![CDATA[http://img7.auto24.ee/auto24/320/785/87505785.jpg]]></image>
    </images>
  </vehicle>
  <vehicle id="400001">
    <type><![CDATA[passenger car]]></type>
    <make><![CDATA[Tesla]]></make>
    <model><![CDATA[Model S 85D]]></model>
    <date>06/2015</date>
    <price currency="EUR">97340</price>
    <location><![CDATA[Estonia, Tallinn, Raja 4C]]></location>
    <description><![CDATA[Selling a car, that is ment for people who want to brag about saving the planet, but actually sell their farely new car to buy this one, making them acctually more harmful to the planet]]></description>
    <technical-specs>
      <seats>5</seats>
      <doors>4</doors>
      <engine>
        <power unit="kW">310</power>
      </engine>
      <mileage unit="KM">45000</mileage>
      <fuel><![CDATA[Electric]]></fuel>
      <transmission><![CDATA[Automatic]]></transmission>
      <color><![CDATA[dark gray met.]]></color>
    </technical-specs>
    <equipment>
      <item><![CDATA[Parking camera]]></item>
      <item><![CDATA[Parking aid]]></item>
      <item><![CDATA[Lane assist]]></item>
      <item><![CDATA[Airbars]]></item>
      <item><![CDATA[Alloy wheels]]></item>
      <item><![CDATA[Power steering]]></item>
      <item><![CDATA[ABS]]></item>
      <item><![CDATA[Traction control]]></item>
      <item><![CDATA[Sunroof]]></item>
      <item><![CDATA[Tow hitch]]></item>
    </equipment>
    <images>
      <image><![CDATA[https://s1.cdn.autoevolution.com/images/news/tesla-model-s-85d-range-to-increase-with-new-software-coming-in-january-90666-7.jpg]]></image>
      <image><![CDATA[http://www.themotorreport.com.au/content/image/2/0/2015_tesla_model_s_p85d_05-0224-920x544.jpg]]></image>
    </images>
  </vehicle>
</vehicles>


XSD

Assigned minOccurs to unnesseseary fields and validated correct field types

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="vehicles">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" name="vehicle">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="type" type="xs:string" />
              <xs:element name="make" type="xs:string" />
              <xs:element minOccurs="0" name="model" type="xs:string" />
              <xs:element minOccurs="0" name="specification" type="xs:string" />
              <xs:element name="date" type="xs:string" />
              <xs:element name="price">
                <xs:complexType>
                  <xs:simpleContent>
                    <xs:extension base="xs:unsignedInt">
                      <xs:attribute name="currency" type="xs:string" use="required" />
                    </xs:extension>
                  </xs:simpleContent>
                </xs:complexType>
              </xs:element>
              <xs:element minOccurs="0" name="license-plate" type="xs:string" />
              <xs:element name="location" type="xs:string" />
              <xs:element minOccurs="0" name="description" type="xs:string" />
              <xs:element minOccurs="0" name="technical-specs">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element minOccurs="0" name="seats" type="xs:unsignedInt" />
                    <xs:element minOccurs="0" name="doors" type="xs:unsignedInt" />
                    <xs:element minOccurs="0" name="engine">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element minOccurs="0" name="power">
                            <xs:complexType>
                              <xs:simpleContent>
                                <xs:extension base="xs:unsignedShort">
                                  <xs:attribute name="unit" type="xs:string" use="required" />
                                </xs:extension>
                              </xs:simpleContent>
                            </xs:complexType>
                          </xs:element>
                          <xs:element minOccurs="0" name="displacement">
                            <xs:complexType>
                              <xs:simpleContent>
                                <xs:extension base="xs:decimal">
                                  <xs:attribute name="unit" type="xs:string" use="required" />
                                </xs:extension>
                              </xs:simpleContent>
                            </xs:complexType>
                          </xs:element>
                          <xs:element minOccurs="0" name="type" type="xs:string" />
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element minOccurs="0" name="mileage">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:unsignedInt">
                            <xs:attribute name="unit" type="xs:string" use="required" />
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                    <xs:element minOccurs="0" name="fuel" type="xs:string" />
                    <xs:element minOccurs="0" name="transmission" type="xs:string" />
                    <xs:element minOccurs="0" name="color" type="xs:string" />
                    <xs:element minOccurs="0" name="weights">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element minOccurs="0" name="cross-weight">
                            <xs:complexType>
                              <xs:simpleContent>
                                <xs:extension base="xs:unsignedShort">
                                  <xs:attribute name="unit" type="xs:string" use="required" />
                                </xs:extension>
                              </xs:simpleContent>
                            </xs:complexType>
                          </xs:element>
                          <xs:element minOccurs="0" name="load-carring">
                            <xs:complexType>
                              <xs:simpleContent>
                                <xs:extension base="xs:unsignedShort">
                                  <xs:attribute name="unit" type="xs:string" use="required" />
                                </xs:extension>
                              </xs:simpleContent>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element minOccurs="0" name="equipment">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element minOccurs="0" maxOccurs="unbounded" name="item" type="xs:string" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element minOccurs="0" name="images">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element minOccurs="0" maxOccurs="unbounded" name="image" type="xs:string" />
                  </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>

XSLT HTML

XSLT that returns HTML as output for every row in the xml with full data and pictures.

<?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>
      <body>
        <h1>Müügis olevad autod</h1>
        <hr />
        <xsl:for-each select="vehicles/vehicle">
          <table>
            <tr>
              <td>Tüüp</td>
              <td>
                <xsl:value-of select="type"/>
              </td>
            </tr>
            <tr>
              <td>Tootja</td>
              <td>
                <xsl:value-of select="make"/>
              </td>
            </tr>
            <xsl:if test="model">
              <tr>
                <td>Mudel</td>
                <td>
                  <xsl:value-of select="model"/>&#160;<xsl:value-of select="specification"/>
                </td>
              </tr>
            </xsl:if>
            <xsl:if test="date">
              <tr>
                <td>Esmane registreerimine</td>
                <td>
                  <xsl:value-of select="date"/>
                </td>
              </tr>
            </xsl:if>
            <xsl:if test="price">
              <tr>
                <td>Hind</td>
                <td>
                  <xsl:value-of select="price"/>&#160;<xsl:value-of select="@currency"/>
                </td>
              </tr>
            </xsl:if>
            <xsl:if test="license-plate">
              <tr>
                <td>Reg. number</td>
                <td>
                  <xsl:value-of select="license-plate"/>
                </td>
              </tr>
            </xsl:if>
            <xsl:if test="location">
              <tr>
                <td>Asukoht</td>
                <td>
                  <xsl:value-of select="location"/>
                </td>
              </tr>
            </xsl:if>
            <xsl:if test="description">
              <tr>
                <td>Kirjeldus</td>
                <td>
                  <xsl:value-of select="description"/>
                </td>
              </tr>
            </xsl:if>
            <xsl:if test="technical-specs">
              <th>
                <td colspan="100%">Tehnilised andmed</td>
              </th>
              <xsl:if test="technical-specs/seats">
                <tr>
                  <td>Istekohti</td>
                  <td>
                    <xsl:value-of select="technical-specs/seats"/>
                  </td>
                </tr>
              </xsl:if>
              <xsl:if test="technical-specs/doors">
                <tr>
                  <td>Uksi</td>
                  <td>
                    <xsl:value-of select="technical-specs/doors"/>
                  </td>
                </tr>
              </xsl:if>
              <xsl:if test="technical-specs/engine">
                <xsl:if test="technical-specs/engine/power">
                  <tr>
                    <td>Võimsus</td>
                    <td>
                      <xsl:value-of select="technical-specs/engine/power"/>&#160;<xsl:value-of select="technical-specs/engine/power/@unit"/>
                    </td>
                  </tr>
                </xsl:if>
                <xsl:if test="technical-specs/engine/displacement">
                  <tr>
                    <td>Mootori maht</td>
                    <td>
                      <xsl:value-of select="technical-specs/engine/displacement"/>&#160;<xsl:value-of select="technical-specs/engine/displacement/@unit"/>
                    </td>
                  </tr>
                </xsl:if>
                <xsl:if test="technical-specs/engine/displacement">
                  <tr>
                    <td>Mootori tüüp</td>
                    <td>
                      <xsl:value-of select="technical-specs/engine/type"/>
                    </td>
                  </tr>
                </xsl:if>
              </xsl:if>
              <xsl:if test="technical-specs/mileage">
                <tr>
                  <td>Läbisõit</td>
                  <td>
                    <xsl:value-of select="technical-specs/mileage"/>&#160;<xsl:value-of select="technical-specs/mileage/@unit"/>
                  </td>
                </tr>
              </xsl:if>
              <xsl:if test="technical-specs/fuel">
                <tr>
                  <td>Kütuse tüüp</td>
                  <td>
                    <xsl:value-of select="technical-specs/fuel"/>
                  </td>
                </tr>
              </xsl:if>
              <xsl:if test="technical-specs/transmission">
                <tr>
                  <td>Käigukast</td>
                  <td>
                    <xsl:value-of select="technical-specs/transmission"/>
                  </td>
                </tr>
              </xsl:if>
              <xsl:if test="technical-specs/color">
                <tr>
                  <td>Värv</td>
                  <td>
                    <xsl:value-of select="technical-specs/color"/>
                  </td>
                </tr>
              </xsl:if>
            </xsl:if>
            <xsl:if test="equipment">
              <th>
                <td colspan="100%">Varustus</td>
              </th>
              <xsl:for-each select="equipment/item">
                <tr>
                  <td colspan="100%">
                    <xsl:value-of select="./text()"/>
                  </td>
                </tr>
              </xsl:for-each>
            </xsl:if>
            <xsl:if test="images">
              <tr>
                <td colspan="100%">
                  <xsl:for-each select="images/image">
                    <img>
                      <xsl:attribute name="src">
                        <xsl:value-of select="./text()"/>
                      </xsl:attribute>
                    </img>
                  </xsl:for-each>
                </td>
              </tr>
            </xsl:if>
          </table>
          <hr />
        </xsl:for-each>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

XSLT XML

XSLT that returns XML as output. It shows adverticements only over 20 000 € price point.

<?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="xml" indent="yes"/>

  <xsl:template match="/">
    <products>
      <xsl:for-each select="vehicles/vehicle">
        <xsl:if test="price>=20000">
          <product>
            <make>
              <xsl:value-of select="make"/>
            </make>
            <model>
              <xsl:value-of select="model"/>
            </model>
            <price>
              <xsl:value-of select="price"/>
            </price>
            <description>
              <xsl:value-of select="description"/>
            </description>
            <xsl:if test="technical-specs/engine/power">
              <power>
                <xsl:value-of select="technical-specs/engine/power"/>
              </power>
            </xsl:if>
          </product>
        </xsl:if>
      </xsl:for-each>
    </products>
  </xsl:template>
</xsl:stylesheet>

Veebiteenus

Analüüs

Kirjeldus:

hater applikatsioon/rakendus ehk äpp on tutvumise äpp. See on loodud ideele, et panna paari inimesed kes vihkavad ühesuguseid asju. Tihti suudavad äsja tutvunud inimesed rohkem avatult suhelda ja nö klappida, teemadel, mille kohta neil on tugevad arvamused.
Otsustasime valida selle idee, kuna meile meeldib see ja see on midagi teistsugust, küll aga on see äpp juba kellegi teise poolt loodud. Selle juba loodud äpi probleem on aga see, et see on ainult ios’il, seega oleks meie idee luua sellele api mida saab ükskõik mis front-end client kasutada.
Äpis peab kasutaja valima talle ette antud teema kohta, mis ta arvab sellest. Näiteks: “Sokid sandaalidega”, inimene saab valida kas ta jääb sellega neutraalseks, kas talle meeldib või ei meeldi see, armastab seda või üleüldse vihkab seda. Algselt on teenuse pakkuja poolt loodud igasugused teemad nagu: “selfie” või “Memelords”, küll aga saavad kasutajad neid ise juurde lisada süsteemi.. Pärast mingit kindlat arvu arvamusi, hakkab api paari panema inimesi sõltuvalt sellele mida nad ühiselt vihkavad. Muidugi saavad inimesed ka näha nendele soovitatud inimeste profiili ehk infot ja pilte. inimesed saavad pärast paari panemist juba suhelda.

Külastaja

  • Külastajad saavad sisse logida ja registreerida ning mitte midagi muud

Kasutaja

  • Kasutaja on inimene kes on registreerunud ja sisse loginud
  • Kasutaja saab lisada oma profiili alla informatsiooni nagu isiklikud andmed enda kohta
  • Samuti saab kasutaja määrata keda ta leida sooviks vanuselt ja soolt
  • Kasutaja saab erinevate teemade kohta oma arvamust märkida
  • Kasutaja saab lisada erinevaid teemasid mille kohta ka teised arvamust saavad avaldada
  • Kui kasutaja on piisavalt teemadele arvamust avaldanud, saab süsteem talle pakkuda inimesi kes nii arvamuste kui ka otsimise parameetrite järgi sobivad
  • Kui kasutaja on vaste leidnud siis saab ta alustada suhtlust teise kasutajaga
  • Kasutajad saavad tekstilisi sõnumeid üksteistele saata
  • Kasutajatel on võimalik suhtlust blokeerida inimestega kui nad enam ei taha suhelda
  • Kasutajatel on võimalik teavitada inimesi administraatoritele

Administraator

  • Administraator on ka kasutaja kelle on veel lisa õigused
  • Admin saab kustutada teemasid
  • Adminid saavad näha täpsemat infot kasutajate kohta
  • Admin saab kustutada/peatada/taastada kasutajaid
  • Adminid saavad näha statistikat süsteemi kohta

Must have - MVP

  • Kasutajate registreerimine ja sisse logimine
  • Kasutajate arvamuste avaldamine teemade kohta
  • Kasutajate klappimine teemade järgi
  • Kasutajate suhtlus teiste kasutajatega kes klappisid

Nice to have

  • Kasutaja enda profiili andmed (sugu, vanus, asukoht)
  • Kasutaja täpsem otsing teiste kasutajate andmete järgi (sugu, vanus, asukoht)
  • Teemade lisamine kasutajate poolt
  • Kasutajate blokeerimine
  • Kasutajate teavitamine administraatoritele
  • Administreerimise osa

Teenus

Teenuse repo asub siin: Teenus

Teenuse eest pakume 90%, kuigi päringud on otse Dbcontexti, siis äriloogika oli üpriski raske ja saime need kõik tööle fiddleri kaudu.

Kõik tiimis panustasid sama palju.

Klientrakendused

Klientrakenduse repo asub siin: Klientrakendus

Klientrakenduse eest pakume 75% kuna autentimine töötab aga mõned funktsionaalsused on veel poolikud.

Kõik tiimis panustasid sama palju.

Retsensioonid

XML-failid

XML retsensioon meeskonnale: QView

Veebiteenus

Veebiteenuse analüüsi retsensioon meeskonnale: QView

Klientrakendus