Meeskond: Falador: Difference between revisions

From ICO wiki
Jump to navigationJump to search
Mlugus (talk | contribs)
Created page with "== Meeskond: Falador == * Madis Lugus * Taavi Metsvahi * Kristjan Kivisild ==XML/XSD/XSLT== ===XML=== Plants with names, needed light conditions etc. <div class="toccolour..."
 
Mlugus (talk | contribs)
 
(19 intermediate revisions by 2 users not shown)
Line 3: Line 3:
* Madis Lugus
* Madis Lugus
* Taavi Metsvahi
* Taavi Metsvahi
* Kristjan Kivisild
* Elina Kuldkepp
 


==XML/XSD/XSLT==
==XML/XSD/XSLT==
===XML===
===XML===
Plants with names, needed light conditions etc.
Vehicles that are being sold


<div class="toccolours mw-collapsible mw-collapsed" style="width:75em">
<div class="toccolours mw-collapsible mw-collapsed" style="width:75em">
Line 168: Line 167:


===XSD===
===XSD===
Assigned minOccurs to PLANT and DIM2, changed attribute SpiritAnimal's use to optional and Plants attribute Id to unsignedInt
Assigned minOccurs to unnesseseary fields and validated correct field types


<div class="toccolours mw-collapsible mw-collapsed" style="width:75em">
<div class="toccolours mw-collapsible mw-collapsed" style="width:75em">
Line 174: Line 173:
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:element name="CATALOG">
   <xs:element name="vehicles">
     <xs:complexType>
     <xs:complexType>
       <xs:sequence>
       <xs:sequence>
         <xs:element minOccurs="1" maxOccurs="unbounded" name="DIM2">
         <xs:element minOccurs="0" maxOccurs="unbounded" name="vehicle">
           <xs:complexType>
           <xs:complexType>
             <xs:sequence>
             <xs:sequence>
               <xs:element minOccurs="1" maxOccurs="unbounded" name="PLANT">
              <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:complexType>
                   <xs:sequence>
                   <xs:sequence>
                     <xs:element name="COMMON" type="xs:string" />
                     <xs:element minOccurs="0" name="seats" type="xs:unsignedInt" />
                     <xs:element name="BOTANICAL" type="xs:string" />
                    <xs:element minOccurs="0" name="doors" type="xs:unsignedInt" />
                     <xs:element name="ZONE" type="xs:string" />
                    <xs:element minOccurs="0" name="engine">
                     <xs:element name="LIGHT" type="xs:string" />
                      <xs:complexType>
                     <xs:element name="PRICE" type="xs:string" />
                        <xs:sequence>
                     <xs:element name="AVAILABILITY" type="xs:unsignedInt" />
                          <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:sequence>
                  <xs:attribute name="SpiritAnimal" type="xs:string" use="optional" />
                 </xs:complexType>
                 </xs:complexType>
               </xs:element>
               </xs:element>
             </xs:sequence>
             </xs:sequence>
             <xs:attribute name="Id" type="xs:unsignedInt" use="required" />
             <xs:attribute name="id" type="xs:unsignedInt" use="required" />
            <xs:attribute name="Name" type="xs:string" use="required" />
           </xs:complexType>
           </xs:complexType>
         </xs:element>
         </xs:element>
       </xs:sequence>
       </xs:sequence>
      <xs:attribute name="Id" type="xs:unsignedInt" use="required" />
      <xs:attribute name="Name" type="xs:string" use="required" />
     </xs:complexType>
     </xs:complexType>
   </xs:element>
   </xs:element>
Line 206: Line 289:
</source>
</source>
</div>
</div>


===XSLT HTML===
===XSLT HTML===
XSLT that returns HTML as output. It creates a table that consists of plants common name, necessary light condition and price. Assigned light conditon necessity is color coded by availability value fulfilling certaing condition.
XSLT that returns HTML as output for every row in the xml with full data and pictures.


<div class="toccolours mw-collapsible mw-collapsed" style="width:75em">
<div class="toccolours mw-collapsible mw-collapsed" style="width:75em">
Line 215: Line 297:
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
<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">
     xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
   <xsl:output method="html" indent="yes"/>
   <xsl:output method="html" indent="yes"/>


Line 221: Line 304:
     <html>
     <html>
       <body>
       <body>
         <h1>My plants</h1>
         <h1>Müügis olevad autod</h1>
         <h4>Color coded by value of availability fitting in range</h4>
         <hr />
         <table>
         <xsl:for-each select="vehicles/vehicle">
          <tr>
          <table>
            <td width="300px">
              <b>Common name</b>
            </td>
            <td width="100px" bgcolor="yellow">
              <b>Light contitions</b>
            </td>
            <td width="70px">
              <b>Dollar tokens</b>
            </td>
          </tr>
          <xsl:for-each select="/CATALOG/DIM2/PLANT">
             <tr>
             <tr>
               <td width="300px">
               <td>Tüüp</td>
                 <xsl:value-of select="COMMON"/>
              <td>
                 <xsl:value-of select="type"/>
               </td>
               </td>
 
            </tr>
               <xsl:choose>
            <tr>
                 <xsl:when test="./AVAILABILITY &lt; 020000">
              <td>Tootja</td>
                   <td width="150px" bgcolor="orange">
              <td>
                     <xsl:value-of select="LIGHT"/>
                <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>
                   </td>
                 </xsl:when>
                 </tr>
                <xsl:when test="./AVAILABILITY &lt; 030000">
              </xsl:if>
                   <td width="150px" bgcolor="green">
              <xsl:if test="technical-specs/transmission">
                     <xsl:value-of select="LIGHT"/>
                <tr>
                  <td>Käigukast</td>
                   <td>
                     <xsl:value-of select="technical-specs/transmission"/>
                   </td>
                   </td>
                 </xsl:when>
                 </tr>
                <xsl:when test="./AVAILABILITY &lt; 050000">
              </xsl:if>
                   <td width="150px" bgcolor="blue">
              <xsl:if test="technical-specs/color">
                     <xsl:value-of select="LIGHT"/>
                <tr>
                  <td>Värv</td>
                   <td>
                     <xsl:value-of select="technical-specs/color"/>
                   </td>
                   </td>
                 </xsl:when>
                 </tr>
                 <xsl:otherwise>
              </xsl:if>
                   <td width="150px">
            </xsl:if>
                     <xsl:value-of select="LIGHT"/>
            <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>
                   </td>
                 </xsl:otherwise>
                 </tr>
              </xsl:choose>
              </xsl:for-each>
 
            </xsl:if>
               <td width="70px">
            <xsl:if test="images">
                <xsl:value-of select="PRICE"/>
               <tr>
              </td>
                <td colspan="100%">
            </tr>
                  <xsl:for-each select="images/image">
          </xsl:for-each>
                    <img>
         </table>
                      <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>
       </body>
     </html>
     </html>
   </xsl:template>
   </xsl:template>
</xsl:stylesheet>
</xsl:stylesheet>
</source>
</source>
</div>
</div>


===XSLT XML===
===XSLT XML===
XSLT that returns XML as output. It sorts plants inside each DIM2 separately and lists only the ones with availability value below 050000.
XSLT that returns XML as output. It shows adverticements only over 20 000 € price point.
<div class="toccolours mw-collapsible mw-collapsed" style="width:75em">
<div class="toccolours mw-collapsible mw-collapsed" style="width:75em">
<source lang="xml">
<source lang="xml">
Line 289: Line 494:


   <xsl:template match="/">
   <xsl:template match="/">
     <html>
     <products>
       <body>
       <xsl:for-each select="vehicles/vehicle">
        <h1>Plants sorted by availability in separate XML dimensions. Only entries with availability below 050000 are shown.</h1>
        <xsl:if test="price>=20000">
        <xsl:for-each select="/CATALOG/DIM2">
           <product>
          <h3>
            <make>
            <xsl:value-of select="@Name"/>
              <xsl:value-of select="make"/>
           </h3>
            </make>
          <ol>
            <model>
            <xsl:for-each select="PLANT">
              <xsl:value-of select="model"/>
              <xsl:sort select="AVAILABILITY"/>
            </model>
              <xsl:for-each select=".">
            <price>
                <xsl:variable name="av" select="050000"/>
              <xsl:value-of select="price"/>
                <xsl:if test="./AVAILABILITY &lt; $av">
            </price>
                  <li>
            <description>
                    <b>
              <xsl:value-of select="description"/>
                      <xsl:value-of select="BOTANICAL"/>
            </description>
                    </b><br/>
            <xsl:if test="technical-specs/engine/power">
                    Availability: <xsl:value-of select="AVAILABILITY"/><br/>
              <power>
                    Zone: <xsl:value-of select="ZONE"/>
                 <xsl:value-of select="technical-specs/engine/power"/>
                  </li>
               </power>
                 </xsl:if>
             </xsl:if>
               </xsl:for-each>
           </product>
             </xsl:for-each>
         </xsl:if>
           </ol>
       </xsl:for-each>
         </xsl:for-each>
     </products>
       </body>
     </html>
   </xsl:template>
   </xsl:template>
</xsl:stylesheet>
</xsl:stylesheet>
Line 321: Line 524:
</div>
</div>


==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.<br>
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.<br>
Ä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.


===Output===
====Külastaja====
Pictures of outputs created by XSLT-s listed above.
*Külastajad saavad sisse logida ja registreerida ning mitte midagi muud
<div class="toccolours mw-collapsible mw-collapsed" style="width:75em">
 
[[File:Plants.png|thumb|left|alt=HTML output of given XSLT HTML|XSLT HTML output]]
====Kasutaja====
[[File:Xml.png|thumb|left|alt=XML output of given XSLT XML|XSLT XML output]]
*Kasutaja on inimene kes on registreerunud ja sisse loginud
</div>
*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: [https://bitbucket.org/ekuldkep/vr2/ 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.


==Veebiteenus==
===Analüüs===
===Teenus===
==Klientrakendused==
==Klientrakendused==
Klientrakenduse repo asub siin: [https://bitbucket.org/ekuldkep/haterclient Klientrakendus]
Klientrakenduse eest pakume 75% kuna autentimine töötab aga mõned funktsionaalsused on veel poolikud.
Kõik tiimis panustasid sama palju.
==Retsensioonid==
==Retsensioonid==
===XML-failid===
===XML-failid===
XML retsensioon meeskonnale: [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_QView QView]<br>
===Veebiteenus===
===Veebiteenus===
Veebiteenuse analüüsi retsensioon meeskonnale: [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_QView QView]
===Klientrakendus===
===Klientrakendus===

Latest revision as of 10:43, 12 June 2017

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