|   |   | 
| Line 47: | Line 47: | 
|  | 
 |  | 
 | 
|  | == XML/XSD/XSLT == |  | == XML/XSD/XSLT == | 
|  |   |  | [[Meeskond: Travo 2.0 XML]] | 
|  | === XML ===
 |  | 
|  | <pre>
 |  | 
|  | <?xml version="1.0" encoding="utf-8" ?>
 |  | 
|  | <?xml-stylesheet type="text/xsl" href="XML.xslt" ?>
 |  | 
|  | <!-- Kooli andmebaas -->
 |  | 
|  | <School>
 |  | 
|  |   <!-- Klassid -->
 |  | 
|  |   <Groups>
 |  | 
|  |     <Group id="1">
 |  | 
|  |       <Name><![CDATA[1]]></Name>
 |  | 
|  |       
 |  | 
|  |       <Group id="2">
 |  | 
|  |         <Name><![CDATA[1A]]></Name>
 |  | 
|  |       </Group>
 |  | 
|  |       <Group id="3">
 |  | 
|  |         <Name><![CDATA[1B]]></Name>
 |  | 
|  |       </Group>
 |  | 
|  |     </Group>
 |  | 
|  |     
 |  | 
|  |     <Group id="4">
 |  | 
|  |       <Name><![CDATA[2]]></Name>
 |  | 
|  |       
 |  | 
|  |       <Group id="5">
 |  | 
|  |         <Name><![CDATA[2A]]></Name>
 |  | 
|  |       </Group>
 |  | 
|  |       <Group id="6">
 |  | 
|  |         <Name><![CDATA[2B]]></Name>
 |  | 
|  |       </Group>
 |  | 
|  |     </Group>
 |  | 
|  |   </Groups>
 |  | 
|  |   |  | 
|  |   <!-- Õpilased -->
 |  | 
|  |   <Students>
 |  | 
|  |     <Student id="1" birthDate="2008-03-09 16:05:07.123">
 |  | 
|  |       <Name><![CDATA[Mait Käver]]></Name>
 |  | 
|  |       <GroupId>2</GroupId>
 |  | 
|  |     </Student>
 |  | 
|  |     <Student id="2" birthDate="2008-03-09 16:05:07.123">
 |  | 
|  |       <Name><![CDATA[Poska-Käver Maitandres]]></Name>
 |  | 
|  |       <GroupId>2</GroupId>
 |  | 
|  |     </Student>
 |  | 
|  |     <Student id="3" birthDate="2008-03-09 16:05:07.123">
 |  | 
|  |       <Name><![CDATA[Andres Poska]]></Name>
 |  | 
|  |       <GroupId>5</GroupId>
 |  | 
|  |     </Student>
 |  | 
|  |   </Students>
 |  | 
|  |   |  | 
|  |   <!-- Kursused -->
 |  | 
|  |   <Courses>
 |  | 
|  |     <Course id="1">
 |  | 
|  |       <Name><![CDATA[Võrgurakendused 2: XML-i algkursus C# baasil]]></Name>
 |  | 
|  |       <Students>
 |  | 
|  |         <Student id="1"></Student>
 |  | 
|  |         <Student id="2"></Student>
 |  | 
|  |       </Students>
 |  | 
|  |     </Course>
 |  | 
|  |     <Course id="2">
 |  | 
|  |       <Name><![CDATA[XML 3: C# baaskursus Java baasil]]></Name>
 |  | 
|  |       <Students>
 |  | 
|  |         <Student id="1"></Student>
 |  | 
|  |         <Student id="2"></Student>
 |  | 
|  |         <Student id="3"></Student>
 |  | 
|  |       </Students>
 |  | 
|  |     </Course>
 |  | 
|  |   </Courses>
 |  | 
|  | </School>
 |  | 
|  | </pre>
 |  | 
|  | === XSD ===
 |  | 
|  | <pre>
 |  | 
|  | <?xml version="1.0" encoding="utf-8"?>
 |  | 
|  | <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
 |  | 
|  |   <xs:element name="School">
 |  | 
|  |     <xs:complexType>
 |  | 
|  |       <xs:sequence>
 |  | 
|  |         <xs:element name="Groups">
 |  | 
|  |           <xs:complexType>
 |  | 
|  |             <xs:sequence>
 |  | 
|  |               <xs:element maxOccurs="unbounded" name="Group">
 |  | 
|  |                 <xs:complexType>
 |  | 
|  |                   <xs:sequence>
 |  | 
|  |                     <xs:element name="Name">
 |  | 
|  |                       <xs:simpleType>
 |  | 
|  |                         <xs:restriction base="xs:string">
 |  | 
|  |                           <xs:minLength value="1"/>
 |  | 
|  |                           <xs:maxLength value="32"/>
 |  | 
|  |                         </xs:restriction>
 |  | 
|  |                       </xs:simpleType>
 |  | 
|  |                     </xs:element>
 |  | 
|  |                     <xs:element maxOccurs="unbounded" name="Group">
 |  | 
|  |                       <xs:complexType>
 |  | 
|  |                         <xs:sequence>
 |  | 
|  |                           <xs:element name="Name">
 |  | 
|  |                             <xs:simpleType>
 |  | 
|  |                               <xs:restriction base="xs:string">
 |  | 
|  |                                 <xs:minLength value="1"/>
 |  | 
|  |                                 <xs:maxLength value="32"/>
 |  | 
|  |                               </xs:restriction>
 |  | 
|  |                             </xs:simpleType>
 |  | 
|  |                           </xs:element>
 |  | 
|  |                         </xs:sequence>
 |  | 
|  |                         <xs:attribute name="id" type="xs:unsignedByte" use="required" />
 |  | 
|  |                       </xs:complexType>
 |  | 
|  |                     </xs:element>
 |  | 
|  |                   </xs:sequence>
 |  | 
|  |                   <xs:attribute name="id" type="xs:unsignedByte" use="required" />
 |  | 
|  |                 </xs:complexType>
 |  | 
|  |               </xs:element>
 |  | 
|  |             </xs:sequence>
 |  | 
|  |           </xs:complexType>
 |  | 
|  |         </xs:element>
 |  | 
|  |         <xs:element name="Students">
 |  | 
|  |           <xs:complexType>
 |  | 
|  |             <xs:sequence>
 |  | 
|  |               <xs:element maxOccurs="unbounded" name="Student">
 |  | 
|  |                 <xs:complexType>
 |  | 
|  |                   <xs:sequence>
 |  | 
|  |                     <xs:element name="Name">
 |  | 
|  |                       <xs:simpleType>
 |  | 
|  |                         <xs:restriction base="xs:string">
 |  | 
|  |                           <xs:minLength value="1"/>
 |  | 
|  |                           <xs:maxLength value="32"/>
 |  | 
|  |                         </xs:restriction>
 |  | 
|  |                       </xs:simpleType>
 |  | 
|  |                     </xs:element>
 |  | 
|  |                     <xs:element name="GroupId" type="xs:unsignedByte" />
 |  | 
|  |                   </xs:sequence>
 |  | 
|  |                   <xs:attribute name="id" type="xs:unsignedByte" use="required" />
 |  | 
|  |                   <xs:attribute name="birthDate" type="xs:string" use="required" />
 |  | 
|  |                 </xs:complexType>
 |  | 
|  |               </xs:element>
 |  | 
|  |             </xs:sequence>
 |  | 
|  |           </xs:complexType>
 |  | 
|  |         </xs:element>
 |  | 
|  |         <xs:element name="Courses">
 |  | 
|  |           <xs:complexType>
 |  | 
|  |             <xs:sequence>
 |  | 
|  |               <xs:element maxOccurs="unbounded" name="Course">
 |  | 
|  |                 <xs:complexType>
 |  | 
|  |                   <xs:sequence>
 |  | 
|  |                     <xs:element name="Name">
 |  | 
|  |                       <xs:simpleType>
 |  | 
|  |                         <xs:restriction base="xs:string">
 |  | 
|  |                           <xs:minLength value="1"/>
 |  | 
|  |                           <xs:maxLength value="32"/>
 |  | 
|  |                         </xs:restriction>
 |  | 
|  |                       </xs:simpleType>
 |  | 
|  |                     </xs:element>
 |  | 
|  |                     <xs:element name="Students">
 |  | 
|  |                       <xs:complexType>
 |  | 
|  |                         <xs:sequence>
 |  | 
|  |                           <xs:element maxOccurs="unbounded" name="Student">
 |  | 
|  |                             <xs:complexType>
 |  | 
|  |                               <xs:attribute name="id" type="xs:unsignedByte" use="required" />
 |  | 
|  |                             </xs:complexType>
 |  | 
|  |                           </xs:element>
 |  | 
|  |                         </xs:sequence>
 |  | 
|  |                       </xs:complexType>
 |  | 
|  |                     </xs:element>
 |  | 
|  |                   </xs:sequence>
 |  | 
|  |                   <xs:attribute name="id" type="xs:unsignedByte" use="required" />
 |  | 
|  |                 </xs:complexType>
 |  | 
|  |               </xs:element>
 |  | 
|  |             </xs:sequence>
 |  | 
|  |           </xs:complexType>
 |  | 
|  |         </xs:element>
 |  | 
|  |       </xs:sequence>
 |  | 
|  |     </xs:complexType>
 |  | 
|  |   </xs:element>
 |  | 
|  | </xs:schema>
 |  | 
|  | </pre>
 |  | 
|  | === XSLT ===
 |  | 
|  | <pre>
 |  | 
|  | <?xml version="1.0" encoding="UTF-8"?>
 |  | 
|  |   |  | 
|  | <xsl:stylesheet version="1.0"
 |  | 
|  |   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 |  | 
|  |   <xsl:output method="html" indent="yes"/>
 |  | 
|  |   |  | 
|  |   <!-- Key definitions -->
 |  | 
|  |   <xsl:key name="group" match="Group" use="@id" />
 |  | 
|  |   <xsl:key name="student" match="School/Students/Student" use="@id" />
 |  | 
|  |   
 |  | 
|  |   <xsl:template match="/">
 |  | 
|  |     <html>
 |  | 
|  |       <body>
 |  | 
|  |         <h1>Kool</h1>
 |  | 
|  |   |  | 
|  |         <!-- Klassid -->
 |  | 
|  |         <h2>Klassid</h2>
 |  | 
|  |         <xsl:for-each select="School/Groups/Group">
 |  | 
|  |           <h4>
 |  | 
|  |             Klassi grupp: <xsl:value-of select="Name"/>
 |  | 
|  |           </h4>
 |  | 
|  |   |  | 
|  |           <table border="1">
 |  | 
|  |             <tr bgcolor="#9acd32">
 |  | 
|  |               <th>Id</th>
 |  | 
|  |               <th>Nimi</th>
 |  | 
|  |             </tr>
 |  | 
|  |             <xsl:for-each select="Group">
 |  | 
|  |               <tr>
 |  | 
|  |                 <td>
 |  | 
|  |                   <xsl:value-of select="@id"/>
 |  | 
|  |                 </td>
 |  | 
|  |                 <td>
 |  | 
|  |                   <xsl:value-of select="Name"/>
 |  | 
|  |                 </td>
 |  | 
|  |               </tr>
 |  | 
|  |             </xsl:for-each>
 |  | 
|  |           </table>
 |  | 
|  |         </xsl:for-each>
 |  | 
|  |         
 |  | 
|  |         <!-- Õpilased -->
 |  | 
|  |         <h2>Õpilased</h2>
 |  | 
|  |         <table border="1">
 |  | 
|  |           <tr bgcolor="#9acd32">
 |  | 
|  |             <th>Id</th>
 |  | 
|  |             <th>Nimi</th>
 |  | 
|  |             <th>Klass</th>
 |  | 
|  |           </tr>
 |  | 
|  |           <xsl:for-each select="School/Students/Student">
 |  | 
|  |             <tr>
 |  | 
|  |               <td>
 |  | 
|  |                 <xsl:value-of select="@id"/>
 |  | 
|  |               </td>
 |  | 
|  |               <td>
 |  | 
|  |                 <xsl:value-of select="Name"/>
 |  | 
|  |               </td>
 |  | 
|  |               <td>
 |  | 
|  |                 <xsl:for-each select="key('group', GroupId)">
 |  | 
|  |                     <xsl:value-of select="Name"/>
 |  | 
|  |                 </xsl:for-each>
 |  | 
|  |               </td>
 |  | 
|  |             </tr>
 |  | 
|  |           </xsl:for-each>
 |  | 
|  |         </table>
 |  | 
|  |   
 |  | 
|  |         <!-- Kursused -->
 |  | 
|  |         <h2>Kursused</h2>
 |  | 
|  |         <table border="1">
 |  | 
|  |           <tr bgcolor="#9acd32">
 |  | 
|  |             <th>Id</th>
 |  | 
|  |             <th>Nimi</th>
 |  | 
|  |             <th>Tudengid</th>
 |  | 
|  |           </tr>
 |  | 
|  |           <xsl:for-each select="School/Courses/Course">
 |  | 
|  |             <tr>
 |  | 
|  |               <td>
 |  | 
|  |                 <xsl:value-of select="@id"/>
 |  | 
|  |               </td>
 |  | 
|  |               <td>
 |  | 
|  |                 <xsl:value-of select="Name"/>
 |  | 
|  |               </td>
 |  | 
|  |               <td>
 |  | 
|  |                 <xsl:for-each select="key('student', Students/Student/@id)">
 |  | 
|  |                   <xsl:value-of select="Name"/>
 |  | 
|  |                   <br/>
 |  | 
|  |                 </xsl:for-each>
 |  | 
|  |               </td>
 |  | 
|  |             </tr>
 |  | 
|  |           </xsl:for-each>
 |  | 
|  |         </table>
 |  | 
|  |       </body>
 |  | 
|  |     </html>
 |  | 
|  |   </xsl:template>
 |  | 
|  | </xsl:stylesheet>
 |  | 
|  | </pre>
 |  | 
Kodutöö aines "Võrgurakendused II: hajussüsteemide ehitamine"
Lähtekood on kättesaadav GitHubis privaatses repositooriumis: Travo.
Tiim
- Tarvo R. - Projektijuht, kokk-disainer-arendaja-keevitaja
Kirjeldus
Travo on veebirakendus, mis liidab kokku Toggli, Trello ja Todoisti võimekused. Täpsemalt pakub Travo läbi lihtsa kasutajaliidese võimalust luua to-do ülesandeid ning jälgida ülesannete tegemisele kulunud aega.
Üldine spetsifikatsioon
- Kasutaja saab luua to-do ülesandeid
- To-do ülesandeid saab liigendada märksõnadega (tagide) abil
- Kasutaja saab jälgida ülesannete tegemisele kulunud aega
- Kasutaja ajajälgimised kajastuvad logis ning kasutaja näeb logi põhjal loodud statistikat
Arendus
Tehnoloogiad
- ASP.NET 4.5
- ASP.NET Web API 2
- Entity Framework 6
- Ninject 3.2
- OWIN 1.0
- Aurelia (TypeScript)
- UIkit
- Gulp (ja vastavad pluginad)
- BrowserSync
Tööriistad
- Microsoft Visual Studio 2015 CE (Back-end arenduseks)
- Microsoft SQL Server Management Studio 2014
- Atom (Front-end arenduseks)
Arenduse logi
Arendusprotsess
- 21.09.2015 - Travo idee
- 30.01.2016 - Travo 1.0 arenduse lõpp
- 21.02.2016 - Travo 2.0 esimene commit
- 28.02.2016 - API dokumentatsioon valmis
- 19.03.2016 - Töötav tokenitel põhinev autentimine nii back kui ka front-endis
Disainiprotsess
Landing page
Travo
XML/XSD/XSLT
Meeskond: Travo 2.0 XML