MOT: Difference between revisions
Created page with "=Meeskond= *Merike Meizner *Helen Oppar *Hardi Tiitus =Analüüs= ==Kirjeldus== TODO ==Kasutajad== TODO ==Infosüsteemi funktsionaalsus== TODO ==Nice to have== TODO..." |
|||
(48 intermediate revisions by 3 users not shown) | |||
Line 2: | Line 2: | ||
*Merike Meizner | *Merike Meizner | ||
*Helen Oppar | *Helen Oppar (loobus) | ||
*Hardi Tiitus | *Hardi Tiitus | ||
=Veebiteenus ja klientrakendus= | |||
Veebiteenus ja klientrakendus on saadavad aadressilt: http://enos.itcollege.ee/~mmeizner/MOT/ | |||
=Analüüs= | =Analüüs= | ||
Line 9: | Line 12: | ||
==Kirjeldus== | ==Kirjeldus== | ||
MOT on võistluste infosüsteem, kust saab infot võistluste kohta ja neile registeerida. Kasutajad saavad süsteemi registreeruda kahes rollis: korraldajana või osalejana. Korraldajad saavad lisada süsteemi uusi spordialasid, võistlusi, toimumiskohti, neid hallata, vaadata infot enda korraldatavale võistlusele registreerunud kasutajate kohta ning pärast võistlust lisada tulemusi. Tulemusi saab sisestada ka võistlejate kohta, kes ei ole võistlusele eelregistreerinud, vaid registreerivad võistlusel kohapeal. Osaleja rollis kasutaja saab ennast võistlustele kirja panna. Võistlusele registreeruda on võimalik nii üksikvõistleja kui meeskonnana. Meeskonna registreerimisel registreerib üks kasutaja terve meeskonna. Kasutaja võib võistlusele registreerida ka teise inimese, sisestades tema andmed. Meeskonna andmeid saavad hallata kõik meeskonna liikmed. Võistluste üldinfo (toimumisaeg, -koht jms) on kättesaadav kõigile. Lisaks on süsteemi peale üks administraatori õigustega kasutaja, kes saab hallata kõiki võistlusi ja kasutajaid. | |||
Korraldajad saavad vaadata enda korraldatud ürituste statistikat: kui palju on mingil võistlusel osalejaid, millistes vanusegruppides on osalejad jms. Osalejad näevad statistikat enda osalemiste kohta: kui palju nad on võistlustel osalenud, milliseid tulemusi nad on saavutanud. Administraator näeb eelnevale lisaks ka üldist kasutusstatistikat: kui palju on registreeritud korraldajaid, kui palju osalejaid, kui palju on mingil ajaperioodil tehtud võistlustele registreeringuid. | |||
==Kasutajad== | ==Kasutajad== | ||
* Administraator | |||
* Korraldajad | |||
* Osalejad | |||
* Registeerimata kasutaja | |||
==Infosüsteemi funktsionaalsus== | ==Infosüsteemi funktsionaalsus== | ||
===Must have=== | |||
* Peab saama registreerida kasutajaid korraldaja või osaleja rollis <br><br> | |||
* Korraldaja saab lisada võistluse toimumiskohti | |||
* Korraldaja saab lisada võistlusi | |||
* Korraldaja saab muuta enda lisatud võistluse andmeid | |||
* Korraldaja saab kustutada enda lisatud võistlusi | |||
* Korraldaja näeb võistlejate nimekirja ja nende andmeid | |||
* Korraldaja saab muuta enda kui kasutaja andmeid | |||
* Korraldaja saab lisada uusi spordialasid <br><br> | |||
* Osaleja näeb sisestatud võistlusi | |||
* Osaleja näeb, kui palju on mingile võistlusele osalejaid registreeritud | |||
* Osaleja saab otsida võistlusi toimumiskoha ja -aja järgi | |||
* Osaleja saab registreeruda võistlustele | |||
* Osaleja näeb võistlusi, kuhu ta on registreerunud | |||
* Osaleja saab oma registreeringu tühistada | |||
* Osaleja saab muuta enda kui kasutaja andmeid | |||
* Osaleja saab registreerida võistlusele meeskonda | |||
* Osaleja saab registreerida võistlusele teise isiku <br><br> | |||
* Meeskonna liige saab muuta meeskonna liikmeid | |||
* Meeskonna liige saab muuta meeskonna andmeid | |||
* Meeskonna liige saab vaadata meeskonna tulemusi <br><br> | |||
* Registeerimata kasutaja näeb sisestatud võistlusi | |||
* Registeerimata kasutaja näeb, kui palju on mingile võistlusele osalejaid registreeritud | |||
* Registeerimata kasutaja saab otsida võistlusi toimumiskoha ja -aja järgi <br><br> | |||
* Administraator saab teha kõike eelnevat | |||
* Administraator saab kustutada/muuta/lisada kasutajaid | |||
===Nice to have=== | |||
* Kasutaja näeb statistikat enda möödunud võistluste tulemuste kohta | |||
* Võistluste eest on võimalik läbi süsteemi tasuda | |||
* Korraldaja saab lisada võistluse tulemusi | |||
==Andmemudeli kirjeldus== | |||
* Isik - hoitakse isikute andmeid | |||
* Kasutaja - hoitakse kasutajate andmeid | |||
* Kasutajagrupp - sõnastik erinevatest rollidest (admin, korraldaja, osaleja) | |||
* Meeskond - hoitakse meeskonna andmeid | |||
* Isik meeskonnas - hoitakse andmeid isikute kuulumisest meeskonda | |||
* Võistlus - hoitakse andmeid võistluste kohta | |||
* Registreerimine - hoitakse andmeid isikute/meeskondade võistlusele registreerumise kohta | |||
* Osalemine - hoitakse andmeid võistlustel osalemise kohta (sh tulemused) | |||
* Võistluse tüüp - hoitakse andmeid erinevate võistlusalade kohta | |||
* Võistluskoht - hoitakse andmeid võistluskohtade kohta | |||
* Võistlus võistluskohas - hoitakse andmeid võistluste toimumise kohta võistluskohtades | |||
* Maakond - sõnastik maakondadest, kus asuvad võistluskohad | |||
=XML= | |||
==XML== | |||
<source lang="xml"> | |||
<?xml version="1.0" encoding="utf-8" ?> | |||
<competitions> | |||
<competition id="1"> | |||
<name><![CDATA[SEB maraton]]></name> | |||
<competitionType id="3" hasPoints="false" hasTime="true" isIndividual="true"> | |||
<name><![CDATA[jooksmine]]></name> | |||
</competitionType> | |||
<competitionPlace id="2" county="Harjumaa"> | |||
<name><![CDATA[vanalinn]]></name> | |||
<address><![CDATA[Vabaduse väljak, kesklinn, Tallinn]]></address> | |||
<comment><![CDATA[Tulge soovitatavalt ühistranspordiga]]></comment> | |||
</competitionPlace> | |||
<time>2018-05-12</time> | |||
<comment><![CDATA[Numbri kätte saamine kiriku kõrvalt]]></comment> | |||
<registrations> | |||
<person id="3" personalIdCode="38712098765"> | |||
<firstName><![CDATA[Peeter]]></firstName> | |||
<lastName><![CDATA[Pihlakas]]></lastName> | |||
</person> | |||
<person id="4" personalIdCode="38712568754"> | |||
<firstName><![CDATA[Jaan]]></firstName> | |||
<lastName><![CDATA[Jalakas]]></lastName> | |||
</person> | |||
<person id="5"> | |||
<firstName><![CDATA[Jüri]]></firstName> | |||
<lastName><![CDATA[Juurikas]]></lastName> | |||
</person> | |||
</registrations> | |||
</competition> | |||
<competition id="2"> | |||
<name><![CDATA[Pärnu volley]]></name> | |||
<competitionType id="3" hasPoints="true" hasTime="false" isIndividual="false"> | |||
<name><![CDATA[võrkpall]]></name> | |||
</competitionType> | |||
<competitionPlace id="4" county="Pärnumaa"> | |||
<name><![CDATA[Pärnu rand]]></name> | |||
<address><![CDATA[Pärnu linn, Pärnu rand]]></address> | |||
</competitionPlace> | |||
<time>2018-07-17</time> | |||
<registrations> | |||
<team id="1"> | |||
<name><![CDATA[Mõmmikud]]></name> | |||
<people> | |||
<person id="6" personalIdCode="38909127865"> | |||
<firstName><![CDATA[Volli]]></firstName> | |||
<lastName><![CDATA[Mõmmik]]></lastName> | |||
</person> | |||
<person id="7" personalIdCode="38506126787"> | |||
<firstName><![CDATA[Sulev]]></firstName> | |||
<lastName><![CDATA[Mõmmik]]></lastName> | |||
</person> | |||
</people> | |||
</team> | |||
<team id="2"> | |||
<name><![CDATA[Karvikud]]></name> | |||
<people> | |||
<person id="8" personalIdCode="38212097854"> | |||
<firstName><![CDATA[Kalle]]></firstName> | |||
<lastName><![CDATA[Karvik]]></lastName> | |||
</person> | |||
<person id="9" personalIdCode="48504128854"> | |||
<firstName><![CDATA[Malle]]></firstName> | |||
<lastName><![CDATA[Karvik]]></lastName> | |||
</person> | |||
</people> | |||
</team> | |||
</registrations> | |||
</competition> | |||
</competitions> | |||
</source> | |||
==XML skeem== | |||
<source lang="xml"> | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> | |||
<xs:element name="competitions"> | |||
<xs:complexType> | |||
<xs:sequence> | |||
<xs:element maxOccurs="unbounded" name="competition"> | |||
<xs:complexType> | |||
<xs:sequence> | |||
<xs:element name="name" type="xs:string" /> | |||
<xs:element name="competitionType"> | |||
<xs:complexType> | |||
<xs:sequence> | |||
<xs:element name="name" type="xs:string" /> | |||
</xs:sequence> | |||
<xs:attribute name="id" type="xs:int" use="required" /> | |||
<xs:attribute name="hasPoints" type="xs:boolean" use="required" /> | |||
<xs:attribute name="hasTime" type="xs:boolean" use="required" /> | |||
<xs:attribute name="isIndividual" type="xs:boolean" use="required" /> | |||
</xs:complexType> | |||
</xs:element> | |||
<xs:element name="competitionPlace"> | |||
<xs:complexType> | |||
<xs:sequence> | |||
<xs:element name="name" type="xs:string" /> | |||
<xs:element name="address" type="xs:string" /> | |||
<xs:element minOccurs="0" name="comment" type="xs:string" /> | |||
</xs:sequence> | |||
<xs:attribute name="id" type="xs:int" use="required" /> | |||
<xs:attribute name="county" type="xs:string" use="required" /> | |||
</xs:complexType> | |||
</xs:element> | |||
<xs:element name="time" type="xs:date" /> | |||
<xs:element minOccurs="0" name="comment" type="xs:string" /> | |||
<xs:element name="registrations"> | |||
<xs:complexType> | |||
<xs:sequence> | |||
<xs:element minOccurs="0" maxOccurs="unbounded" name="team"> | |||
<xs:complexType> | |||
<xs:sequence> | |||
<xs:element name="name" type="xs:string" /> | |||
<xs:element name="people"> | |||
<xs:complexType> | |||
<xs:sequence> | |||
<xs:element maxOccurs="unbounded" name="person"> | |||
<xs:complexType> | |||
<xs:sequence> | |||
<xs:element name="firstName" type="xs:string" /> | |||
<xs:element name="lastName" type="xs:string" /> | |||
</xs:sequence> | |||
<xs:attribute name="id" type="xs:int" use="required" /> | |||
<xs:attribute name="personalIdCode" type="xs:string" use="required" /> | |||
</xs:complexType> | |||
</xs:element> | |||
</xs:sequence> | |||
</xs:complexType> | |||
</xs:element> | |||
</xs:sequence> | |||
<xs:attribute name="id" type="xs:int" use="required" /> | |||
</xs:complexType> | |||
</xs:element> | |||
<xs:element minOccurs="0" maxOccurs="unbounded" name="person"> | |||
<xs:complexType> | |||
<xs:sequence> | |||
<xs:element name="firstName" type="xs:string" /> | |||
<xs:element name="lastName" type="xs:string" /> | |||
</xs:sequence> | |||
<xs:attribute name="id" type="xs:int" use="required" /> | |||
<xs:attribute name="personalIdCode" type="xs:string" use="optional" /> | |||
</xs:complexType> | |||
</xs:element> | |||
</xs:sequence> | |||
</xs:complexType> | |||
</xs:element> | |||
</xs:sequence> | |||
<xs:attribute name="id" type="xs:int" use="required" /> | |||
</xs:complexType> | |||
</xs:element> | |||
</xs:sequence> | |||
</xs:complexType> | |||
</xs:element> | |||
</xs:schema> | |||
</source> | |||
==XSLT to HTML== | |||
<source lang="xml"> | |||
<?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="/competitions"> | |||
<html> | |||
<head> | |||
<title>Competitions</title> | |||
</head> | |||
<body> | |||
<h1>Võistlused</h1> | |||
<xsl:for-each select="competition"> | |||
<h2> | |||
<xsl:value-of select="name" /> | |||
</h2> | |||
<b>Võistlustüüp: </b> | |||
<xsl:value-of select="competitionType/name"/> | |||
<h4>Asukoht</h4> | |||
<ul> | |||
<li> | |||
<xsl:value-of select="competitionPlace/name"/> | |||
</li> | |||
<li> | |||
<xsl:value-of select="competitionPlace/address"/> | |||
</li> | |||
<xsl:if test="competitionPlace/comment"> | |||
<li> | |||
<xsl:value-of select="competitionPlace/comment"/> | |||
</li> | |||
</xsl:if> | |||
</ul> | |||
<h4>Osalejad</h4> | |||
<xsl:choose> | |||
<xsl:when test="competitionType/@isIndividual='true'"> | |||
<ul> | |||
<xsl:for-each select="registrations/person"> | |||
<li> | |||
<xsl:value-of select="firstName"/> | |||
<xsl:text> </xsl:text> | |||
<xsl:value-of select="lastName"/> | |||
</li> | |||
</xsl:for-each> | |||
</ul> | |||
</xsl:when> | |||
<xsl:otherwise> | |||
<ul> | |||
<xsl:for-each select="registrations/team"> | |||
<li> | |||
<xsl:value-of select="name"/> | |||
</li> | |||
</xsl:for-each> | |||
</ul> | |||
</xsl:otherwise> | |||
</xsl:choose> | |||
</xsl:for-each> | |||
</body> | |||
</html> | |||
</xsl:template> | |||
</xsl:stylesheet> | |||
</source> | |||
==XSLT to XML== | |||
<source lang="xml"> | |||
<?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="/competitions"> | |||
<xsl:element name="competitions"> | |||
<xsl:element name="individual"> | |||
<xsl:for-each select="competition"> | |||
<xsl:if test="competitionType/@isIndividual='true'"> | |||
<xsl:element name="competition"> | |||
<xsl:attribute name="id"> | |||
<xsl:value-of select="@id"/> | |||
</xsl:attribute> | |||
<xsl:attribute name="hasPoints"> | |||
<xsl:value-of select="competitionType/@hasPoints"/> | |||
</xsl:attribute> | |||
<xsl:attribute name="hasTime"> | |||
<xsl:value-of select="competitionType/@hasTime"/> | |||
</xsl:attribute> | |||
<xsl:element name="name"> | |||
<xsl:value-of select="name"/> | |||
</xsl:element> | |||
<xsl:element name="place"> | |||
<xsl:value-of select="competitionPlace/name"/> | |||
<xsl:text>, </xsl:text> | |||
<xsl:value-of select="competitionPlace/address"/> | |||
</xsl:element> | |||
<xsl:element name="comment"> | |||
<xsl:value-of select="comment"/> | |||
</xsl:element> | |||
</xsl:element> | |||
</xsl:if> | |||
</xsl:for-each> | |||
</xsl:element> | |||
<xsl:element name="team"> | |||
<xsl:for-each select="competition"> | |||
<xsl:if test="competitionType/@isIndividual='false'"> | |||
<xsl:element name="competition"> | |||
<xsl:attribute name="id"> | |||
<xsl:value-of select="@id"/> | |||
</xsl:attribute> | |||
<xsl:attribute name="hasPoints"> | |||
<xsl:value-of select="competitionType/@hasPoints"/> | |||
</xsl:attribute> | |||
<xsl:attribute name="hasTime"> | |||
<xsl:value-of select="competitionType/@hasTime"/> | |||
</xsl:attribute> | |||
<xsl:element name="name"> | |||
<xsl:value-of select="name"/> | |||
</xsl:element> | |||
<xsl:element name="place"> | |||
<xsl:value-of select="competitionPlace/name"/> | |||
<xsl:text>, </xsl:text> | |||
<xsl:value-of select="competitionPlace/address"/> | |||
</xsl:element> | |||
<xsl:element name="comment"> | |||
<xsl:value-of select="comment"/> | |||
</xsl:element> | |||
</xsl:element> | |||
</xsl:if> | |||
</xsl:for-each> | |||
</xsl:element> | |||
</xsl:element> | |||
</xsl:template> | |||
</xsl:stylesheet> | |||
</source> | |||
== | ==Retsensioonid== | ||
'''Meie kirjutatud veebiteenuse, klientrakenduse ja XML'i retsensioon:''' [https://docs.google.com/document/d/16WL12wmvQ_TPcY_-4pG_kjwtstQoX5meEYcigE4Febw/edit?usp=sharing: Team Raavo V2] | |||
==Tegevuste logi== | |||
11.02.2018 Meeskonna moodustamine.<br> | |||
29.03.2018 Projekti teemas kokku leppimine, analüüsiga alustamine, wiki-lehe loomine.<br> | |||
31.03.2018 Analüüsi lõpetamine, andmemudeli kirjelduse koostamine. |
Latest revision as of 20:57, 5 June 2018
Meeskond
- Merike Meizner
- Helen Oppar (loobus)
- Hardi Tiitus
Veebiteenus ja klientrakendus
Veebiteenus ja klientrakendus on saadavad aadressilt: http://enos.itcollege.ee/~mmeizner/MOT/
Analüüs
Kirjeldus
MOT on võistluste infosüsteem, kust saab infot võistluste kohta ja neile registeerida. Kasutajad saavad süsteemi registreeruda kahes rollis: korraldajana või osalejana. Korraldajad saavad lisada süsteemi uusi spordialasid, võistlusi, toimumiskohti, neid hallata, vaadata infot enda korraldatavale võistlusele registreerunud kasutajate kohta ning pärast võistlust lisada tulemusi. Tulemusi saab sisestada ka võistlejate kohta, kes ei ole võistlusele eelregistreerinud, vaid registreerivad võistlusel kohapeal. Osaleja rollis kasutaja saab ennast võistlustele kirja panna. Võistlusele registreeruda on võimalik nii üksikvõistleja kui meeskonnana. Meeskonna registreerimisel registreerib üks kasutaja terve meeskonna. Kasutaja võib võistlusele registreerida ka teise inimese, sisestades tema andmed. Meeskonna andmeid saavad hallata kõik meeskonna liikmed. Võistluste üldinfo (toimumisaeg, -koht jms) on kättesaadav kõigile. Lisaks on süsteemi peale üks administraatori õigustega kasutaja, kes saab hallata kõiki võistlusi ja kasutajaid.
Korraldajad saavad vaadata enda korraldatud ürituste statistikat: kui palju on mingil võistlusel osalejaid, millistes vanusegruppides on osalejad jms. Osalejad näevad statistikat enda osalemiste kohta: kui palju nad on võistlustel osalenud, milliseid tulemusi nad on saavutanud. Administraator näeb eelnevale lisaks ka üldist kasutusstatistikat: kui palju on registreeritud korraldajaid, kui palju osalejaid, kui palju on mingil ajaperioodil tehtud võistlustele registreeringuid.
Kasutajad
- Administraator
- Korraldajad
- Osalejad
- Registeerimata kasutaja
Infosüsteemi funktsionaalsus
Must have
- Peab saama registreerida kasutajaid korraldaja või osaleja rollis
- Korraldaja saab lisada võistluse toimumiskohti
- Korraldaja saab lisada võistlusi
- Korraldaja saab muuta enda lisatud võistluse andmeid
- Korraldaja saab kustutada enda lisatud võistlusi
- Korraldaja näeb võistlejate nimekirja ja nende andmeid
- Korraldaja saab muuta enda kui kasutaja andmeid
- Korraldaja saab lisada uusi spordialasid
- Osaleja näeb sisestatud võistlusi
- Osaleja näeb, kui palju on mingile võistlusele osalejaid registreeritud
- Osaleja saab otsida võistlusi toimumiskoha ja -aja järgi
- Osaleja saab registreeruda võistlustele
- Osaleja näeb võistlusi, kuhu ta on registreerunud
- Osaleja saab oma registreeringu tühistada
- Osaleja saab muuta enda kui kasutaja andmeid
- Osaleja saab registreerida võistlusele meeskonda
- Osaleja saab registreerida võistlusele teise isiku
- Meeskonna liige saab muuta meeskonna liikmeid
- Meeskonna liige saab muuta meeskonna andmeid
- Meeskonna liige saab vaadata meeskonna tulemusi
- Registeerimata kasutaja näeb sisestatud võistlusi
- Registeerimata kasutaja näeb, kui palju on mingile võistlusele osalejaid registreeritud
- Registeerimata kasutaja saab otsida võistlusi toimumiskoha ja -aja järgi
- Administraator saab teha kõike eelnevat
- Administraator saab kustutada/muuta/lisada kasutajaid
Nice to have
- Kasutaja näeb statistikat enda möödunud võistluste tulemuste kohta
- Võistluste eest on võimalik läbi süsteemi tasuda
- Korraldaja saab lisada võistluse tulemusi
Andmemudeli kirjeldus
- Isik - hoitakse isikute andmeid
- Kasutaja - hoitakse kasutajate andmeid
- Kasutajagrupp - sõnastik erinevatest rollidest (admin, korraldaja, osaleja)
- Meeskond - hoitakse meeskonna andmeid
- Isik meeskonnas - hoitakse andmeid isikute kuulumisest meeskonda
- Võistlus - hoitakse andmeid võistluste kohta
- Registreerimine - hoitakse andmeid isikute/meeskondade võistlusele registreerumise kohta
- Osalemine - hoitakse andmeid võistlustel osalemise kohta (sh tulemused)
- Võistluse tüüp - hoitakse andmeid erinevate võistlusalade kohta
- Võistluskoht - hoitakse andmeid võistluskohtade kohta
- Võistlus võistluskohas - hoitakse andmeid võistluste toimumise kohta võistluskohtades
- Maakond - sõnastik maakondadest, kus asuvad võistluskohad
XML
XML
<?xml version="1.0" encoding="utf-8" ?>
<competitions>
<competition id="1">
<name><![CDATA[SEB maraton]]></name>
<competitionType id="3" hasPoints="false" hasTime="true" isIndividual="true">
<name><![CDATA[jooksmine]]></name>
</competitionType>
<competitionPlace id="2" county="Harjumaa">
<name><![CDATA[vanalinn]]></name>
<address><![CDATA[Vabaduse väljak, kesklinn, Tallinn]]></address>
<comment><![CDATA[Tulge soovitatavalt ühistranspordiga]]></comment>
</competitionPlace>
<time>2018-05-12</time>
<comment><![CDATA[Numbri kätte saamine kiriku kõrvalt]]></comment>
<registrations>
<person id="3" personalIdCode="38712098765">
<firstName><![CDATA[Peeter]]></firstName>
<lastName><![CDATA[Pihlakas]]></lastName>
</person>
<person id="4" personalIdCode="38712568754">
<firstName><![CDATA[Jaan]]></firstName>
<lastName><![CDATA[Jalakas]]></lastName>
</person>
<person id="5">
<firstName><![CDATA[Jüri]]></firstName>
<lastName><![CDATA[Juurikas]]></lastName>
</person>
</registrations>
</competition>
<competition id="2">
<name><![CDATA[Pärnu volley]]></name>
<competitionType id="3" hasPoints="true" hasTime="false" isIndividual="false">
<name><![CDATA[võrkpall]]></name>
</competitionType>
<competitionPlace id="4" county="Pärnumaa">
<name><![CDATA[Pärnu rand]]></name>
<address><![CDATA[Pärnu linn, Pärnu rand]]></address>
</competitionPlace>
<time>2018-07-17</time>
<registrations>
<team id="1">
<name><![CDATA[Mõmmikud]]></name>
<people>
<person id="6" personalIdCode="38909127865">
<firstName><![CDATA[Volli]]></firstName>
<lastName><![CDATA[Mõmmik]]></lastName>
</person>
<person id="7" personalIdCode="38506126787">
<firstName><![CDATA[Sulev]]></firstName>
<lastName><![CDATA[Mõmmik]]></lastName>
</person>
</people>
</team>
<team id="2">
<name><![CDATA[Karvikud]]></name>
<people>
<person id="8" personalIdCode="38212097854">
<firstName><![CDATA[Kalle]]></firstName>
<lastName><![CDATA[Karvik]]></lastName>
</person>
<person id="9" personalIdCode="48504128854">
<firstName><![CDATA[Malle]]></firstName>
<lastName><![CDATA[Karvik]]></lastName>
</person>
</people>
</team>
</registrations>
</competition>
</competitions>
XML skeem
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="competitions">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="competition">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="competitionType">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
</xs:sequence>
<xs:attribute name="id" type="xs:int" use="required" />
<xs:attribute name="hasPoints" type="xs:boolean" use="required" />
<xs:attribute name="hasTime" type="xs:boolean" use="required" />
<xs:attribute name="isIndividual" type="xs:boolean" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="competitionPlace">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="address" type="xs:string" />
<xs:element minOccurs="0" name="comment" type="xs:string" />
</xs:sequence>
<xs:attribute name="id" type="xs:int" use="required" />
<xs:attribute name="county" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="time" type="xs:date" />
<xs:element minOccurs="0" name="comment" type="xs:string" />
<xs:element name="registrations">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="team">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="people">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstName" type="xs:string" />
<xs:element name="lastName" type="xs:string" />
</xs:sequence>
<xs:attribute name="id" type="xs:int" use="required" />
<xs:attribute name="personalIdCode" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:int" use="required" />
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" maxOccurs="unbounded" name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstName" type="xs:string" />
<xs:element name="lastName" type="xs:string" />
</xs:sequence>
<xs:attribute name="id" type="xs:int" use="required" />
<xs:attribute name="personalIdCode" type="xs:string" use="optional" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:int" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
XSLT to HTML
<?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="/competitions">
<html>
<head>
<title>Competitions</title>
</head>
<body>
<h1>Võistlused</h1>
<xsl:for-each select="competition">
<h2>
<xsl:value-of select="name" />
</h2>
<b>Võistlustüüp: </b>
<xsl:value-of select="competitionType/name"/>
<h4>Asukoht</h4>
<ul>
<li>
<xsl:value-of select="competitionPlace/name"/>
</li>
<li>
<xsl:value-of select="competitionPlace/address"/>
</li>
<xsl:if test="competitionPlace/comment">
<li>
<xsl:value-of select="competitionPlace/comment"/>
</li>
</xsl:if>
</ul>
<h4>Osalejad</h4>
<xsl:choose>
<xsl:when test="competitionType/@isIndividual='true'">
<ul>
<xsl:for-each select="registrations/person">
<li>
<xsl:value-of select="firstName"/>
<xsl:text> </xsl:text>
<xsl:value-of select="lastName"/>
</li>
</xsl:for-each>
</ul>
</xsl:when>
<xsl:otherwise>
<ul>
<xsl:for-each select="registrations/team">
<li>
<xsl:value-of select="name"/>
</li>
</xsl:for-each>
</ul>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
XSLT to XML
<?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="/competitions">
<xsl:element name="competitions">
<xsl:element name="individual">
<xsl:for-each select="competition">
<xsl:if test="competitionType/@isIndividual='true'">
<xsl:element name="competition">
<xsl:attribute name="id">
<xsl:value-of select="@id"/>
</xsl:attribute>
<xsl:attribute name="hasPoints">
<xsl:value-of select="competitionType/@hasPoints"/>
</xsl:attribute>
<xsl:attribute name="hasTime">
<xsl:value-of select="competitionType/@hasTime"/>
</xsl:attribute>
<xsl:element name="name">
<xsl:value-of select="name"/>
</xsl:element>
<xsl:element name="place">
<xsl:value-of select="competitionPlace/name"/>
<xsl:text>, </xsl:text>
<xsl:value-of select="competitionPlace/address"/>
</xsl:element>
<xsl:element name="comment">
<xsl:value-of select="comment"/>
</xsl:element>
</xsl:element>
</xsl:if>
</xsl:for-each>
</xsl:element>
<xsl:element name="team">
<xsl:for-each select="competition">
<xsl:if test="competitionType/@isIndividual='false'">
<xsl:element name="competition">
<xsl:attribute name="id">
<xsl:value-of select="@id"/>
</xsl:attribute>
<xsl:attribute name="hasPoints">
<xsl:value-of select="competitionType/@hasPoints"/>
</xsl:attribute>
<xsl:attribute name="hasTime">
<xsl:value-of select="competitionType/@hasTime"/>
</xsl:attribute>
<xsl:element name="name">
<xsl:value-of select="name"/>
</xsl:element>
<xsl:element name="place">
<xsl:value-of select="competitionPlace/name"/>
<xsl:text>, </xsl:text>
<xsl:value-of select="competitionPlace/address"/>
</xsl:element>
<xsl:element name="comment">
<xsl:value-of select="comment"/>
</xsl:element>
</xsl:element>
</xsl:if>
</xsl:for-each>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Retsensioonid
Meie kirjutatud veebiteenuse, klientrakenduse ja XML'i retsensioon: Team Raavo V2
Tegevuste logi
11.02.2018 Meeskonna moodustamine.
29.03.2018 Projekti teemas kokku leppimine, analüüsiga alustamine, wiki-lehe loomine.
31.03.2018 Analüüsi lõpetamine, andmemudeli kirjelduse koostamine.