Meeskond: Travo 2.0: Difference between revisions
From ICO wiki
Jump to navigationJump to search
No edit summary |
|||
Line 33: | Line 33: | ||
=== XML === | === XML === | ||
<pre> | <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> | </pre> | ||
=== XSD === | === XSD === | ||
<pre> | <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> | </pre> | ||
=== XSLT === | === XSLT === | ||
<pre> | <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> | </pre> | ||
Revision as of 17:38, 19 March 2016
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.2
- ASP.NET Web API 2
- Entity Framework 6
- 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)
XML/XSD/XSLT
XML
<?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>
XSD
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="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>
XSLT
<?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>
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