Meeskond:VariableMoods2: Difference between revisions
(22 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
'''Liikmed''' | '''Liikmed,''' | ||
'''tiim pooldus!''' | |||
*Krister Kamla - '''TIIM I''' | |||
*Mihkel Künnapas | *Mihkel Künnapas - '''TIIM II''' | ||
*Krister | *Berit Veidemann - '''TIIM II''' | ||
* | |||
=Tiim II projekt: Retseptiraamat= | |||
Retseptiraamatusse saab lisada retsepte, millel on koostisosad. Lahendus on WEB API + MVC. | |||
Projekt on kätte saadav [https://www.dropbox.com/s/jes6mphqsm1fixm/Recipe.zip?dl=0 siit] | |||
Täiendustega projekt on leitav [https://www.dropbox.com/s/j52rju9b6y6me46/Recipev1.zip?dl=0 siit], lisandunud on keeletugi, administraatori funktsionaalsused, API päringute logimine, vaated muudetud kasutajasõbralikumateks (erinevate mudelite kontrollerite kasutamine ühtsetest vaadetest), menüüde koostamise võimalus olemasolevate retseptide põhjal. Lisaks parandadud API turvalisust, korrigeeritud statuskoode, võetud kasutusele konfiguratsioonifailid hard-coded väärtuste asemel. | |||
=Veebiteenuse analüüs= | |||
==Kirjeldus== | |||
Plaanime luua universaalse veebipoe, mis on mõeldud müüjale oma teenuse pakkumiseks. | |||
==Must Have== | |||
===Klient=== | |||
*<del>Uue kliendi lisamine</del> | |||
*<del>Olemasoleva kliendi andmete muutmine</del> | |||
*<del>Kliendi kontaktandmete lisamine/muutmine</del> | |||
*<del>Kliendile kasutajakonto registreerimine/muutmine</del> | |||
*<del>Klient saab sirvida poes olevaid tooteid</del> | |||
*Klient saab tooteid pärida kriteeriumide järgi (nt hind, populaarsus, kaubatüüp jne) | |||
*Klient saab lisada/eemaldada tooteid ostukorvi, muuta toodete kogust ostukorvis | |||
*<del>Klient saab oma ostukorvi sisu kinnitada</del> | |||
*<del>Kliendile saab esitada kinnitatud ostukorvi eest arve</del> | |||
*<del>Klient saab vaadata talle esitatud arveid</del> | |||
===Kaupmees=== | |||
*<del>Kaupmees saab sisestada/muuta/kustutada tooteid</del> | |||
*<del>Kaupmees saab lisada/muuta tootekategooriaid</del> | |||
*Kaupmees saab vaadata laoseisude- ja müügistatistikat | |||
*Kaupmees saab hallata kasutajaid, näha kasutajate statistikat | |||
*Kaupmees saab vaadata arveid | |||
*<del>Kaupmees saab omal vastutusel kasutada administraatorliidest</del> | |||
===Tooted=== | |||
*<del>Toodetele saab määrata nime, kirjelduse, tootekoodi</del> | |||
*<del>Toodetele saab määrata koguse, ühiku, hinna</del> | |||
*<del>Toodetele saab määrata suuruse</del> | |||
*<del>Toodetele saab määrata tootja, garantiiaja</del> | |||
*<del>Toodetele saab määrata "nähtavust"</del> | |||
*<del>Toodetele saab lisada faile (pildid jne - Krister vastutab)</del> | |||
===Admin=== | |||
*Admin saab piirata pöördumiste arvu ja hallata piiranguid | |||
*<del>Admin saab muuta teatmiktüüpi tabelite kirjeid (riigid, linnad, shoppingcart status, file type jne)</del> | |||
==Nice to Have== | |||
*Klient saab lisada tooteid oma lemmikute nimekirja | |||
*Klient saab kopeerida oma juba kinnitatud ostukorvi | |||
*Klient saab saata teenusepakkujale tagasisidet | |||
*Klient saab kaupadele anda hinnanguid ja kommentaare/ näha teistepoolt antud hinnanguid ja kommentaare | |||
*<del>Kaupmees saab lisada toodetele märksõnu</del> | |||
*Kaupmees saab moodustada kliendigruppe | |||
*Kaupmees saab saata klientidele teavitusi/ spämmi | |||
*Süsteem saadab klientidele automaatseid teateid | |||
*Kaupmees saab tekitada sooduskampaaniaid | |||
*<del>Kaupmees saab määrata toodete kuvamisjärjekorda (toodete prioriteetsust)</del> | |||
==Andmebaasi mudel (täienemisel)== | |||
[[File:150403-eShopERD.png|400px|thumb|frameless|none|Esialgne andmebaasi mudel]] | |||
==Kasutatavad tehnoloogiad== | |||
*ASP.NET WEB API2 | |||
*ASP.NET MVC5 | |||
*Ninject | |||
*Entity Framework | |||
*AutoMapper | |||
*NLog | |||
=XML= | =XML= | ||
Veebipoe tootekataloog | |||
<source lang="xml" collapse="true" first-line="2"> | <source lang="xml" collapse="true" first-line="2"> | ||
<?xml version="1.0" encoding="utf-8" ?> | <?xml version="1.0" encoding="utf-8" ?> | ||
<Catalog> | <Catalog currency="eur"> | ||
<Category id="1" visible="true"> | <Category id="1" visible="true"> | ||
<Name><![CDATA[Riided]]></Name> | <Name><![CDATA[Riided]]></Name> | ||
<Description><![CDATA[Asjad, mida saab selga panna]]></Description> | <Description><![CDATA[Asjad, mida saab selga panna]]></Description> | ||
<Image><![CDATA[riided.JPG]]></Image> | <Image><![CDATA[riided.JPG]]></Image> | ||
< | <SubCategory id="2" visible="true"> | ||
<Name><![CDATA[Sokid]]></Name> | <Name><![CDATA[Sokid]]></Name> | ||
<Description><![CDATA[Vähemalt paari kaupa müügil olev energiasõltumatu jalasoojendusvahend]]></Description> | <Description><![CDATA[Vähemalt paari kaupa müügil olev energiasõltumatu jalasoojendusvahend]]></Description> | ||
Line 19: | Line 85: | ||
<Product id="1" serialCode="AB4756478sd" priority="1" visible="true"> | <Product id="1" serialCode="AB4756478sd" priority="1" visible="true"> | ||
<Name><![CDATA[Selvä sokki]]></Name> | <Name><![CDATA[Selvä sokki]]></Name> | ||
<Description><![CDATA[Väga head soojad sokid meestele]]></Description> | <Description><![CDATA[Väga head soojad sokid meestele]]></Description> | ||
<Price | <Image><![CDATA[selva.JPG]]></Image> | ||
<Price>2.00</Price> | |||
<DiscountPrice >1.80</DiscountPrice> | |||
<Size unit=""><![CDATA[M-XXL]]></Size> | <Size unit=""><![CDATA[M-XXL]]></Size> | ||
<Quantity unit="tk">40</Quantity> | <Quantity unit="tk">40</Quantity> | ||
Line 31: | Line 98: | ||
<Product id="2" serialCode="AB4756478se" priority="1" visible="true"> | <Product id="2" serialCode="AB4756478se" priority="1" visible="true"> | ||
<Name><![CDATA[Hüva sokki]]></Name> | <Name><![CDATA[Hüva sokki]]></Name> | ||
<Description><![CDATA[Väga head soojad sokid naistele, roosa]]></Description> | |||
<Image><![CDATA[hyvaSokk.JPG]]></Image> | <Image><![CDATA[hyvaSokk.JPG]]></Image> | ||
< | <Price>1.40</Price> | ||
< | <DiscountPrice>0</DiscountPrice> | ||
<Size unit=""><![CDATA[S-L]]></Size> | <Size unit=""><![CDATA[S-L]]></Size> | ||
<Quantity unit="tk">12</Quantity> | <Quantity unit="tk">12</Quantity> | ||
Line 43: | Line 111: | ||
</Tags> | </Tags> | ||
</Product> | </Product> | ||
</ | </SubCategory> | ||
</Category> | </Category> | ||
<Category id="3" visible="true"> | <Category id="3" visible="true"> | ||
Line 49: | Line 117: | ||
<Description><![CDATA[Asjad, mida saab suhu panna]]></Description> | <Description><![CDATA[Asjad, mida saab suhu panna]]></Description> | ||
<Image><![CDATA[toidud.JPG]]></Image> | <Image><![CDATA[toidud.JPG]]></Image> | ||
< | <SubCategory id="4" visible="true"> | ||
<Name><![CDATA[Maiustused]]></Name> | <Name><![CDATA[Maiustused]]></Name> | ||
<Description><![CDATA[Hammastele kahjulikud kaubad]]></Description> | <Description><![CDATA[Hammastele kahjulikud kaubad]]></Description> | ||
Line 55: | Line 123: | ||
<Product id="3" serialCode="Aa756478sd" priority="2" visible="true"> | <Product id="3" serialCode="Aa756478sd" priority="2" visible="true"> | ||
<Name><![CDATA[Selga küpsised]]></Name> | <Name><![CDATA[Selga küpsised]]></Name> | ||
<Description><![CDATA[MMM selga]]></Description> | |||
<Image><![CDATA[selga.JPG]]></Image> | <Image><![CDATA[selga.JPG]]></Image> | ||
< | <Price>0.64</Price> | ||
< | <DiscountPrice>0.62</DiscountPrice> | ||
<Size unit="g"><![CDATA[400]]></Size> | <Size unit="g"><![CDATA[400]]></Size> | ||
<Quantity unit="tk">600</Quantity> | <Quantity unit="tk">600</Quantity> | ||
<Guarantee unit=""></Guarantee> | <Guarantee unit="">0</Guarantee> | ||
<Tags> | <Tags> | ||
<Tag id="3"><![CDATA[Naistele]]></Tag> | <Tag id="3"><![CDATA[Naistele]]></Tag> | ||
</Tags> | </Tags> | ||
</Product> | </Product> | ||
<Product id="4" serialCode="Ax4776478se" priority="1" visible=" | <Product id="4" serialCode="Ax4776478se" priority="1" visible="false"> | ||
<Name><![CDATA[Martsipan]]></Name> | <Name><![CDATA[Martsipan]]></Name> | ||
<Description><![CDATA[MMM martsipan]]></Description> | |||
<Image><![CDATA[martsipan.JPG]]></Image> | <Image><![CDATA[martsipan.JPG]]></Image> | ||
< | <Price>2.60</Price> | ||
< | <DiscountPrice>0</DiscountPrice> | ||
<Size unit="g"><![CDATA[170]]></Size> | <Size unit="g"><![CDATA[170]]></Size> | ||
<Quantity unit="tk">37</Quantity> | <Quantity unit="tk">37</Quantity> | ||
<Guarantee unit=""></Guarantee> | <Guarantee unit="">0</Guarantee> | ||
<Tags> | <Tags> | ||
<Tag id="5"><![CDATA[Ostjate lemmik]]></Tag> | <Tag id="5"><![CDATA[Ostjate lemmik]]></Tag> | ||
Line 78: | Line 148: | ||
</Tags> | </Tags> | ||
</Product> | </Product> | ||
</ | </SubCategory> | ||
< | <SubCategory id="5" visible="false"> | ||
<Name><![CDATA[Hommikueined]]></Name> | <Name><![CDATA[Hommikueined]]></Name> | ||
<Description><![CDATA[Hommikusöök on kõige tähtsam!]]></Description> | <Description><![CDATA[Hommikusöök on kõige tähtsam!]]></Description> | ||
Line 85: | Line 155: | ||
<Product id="5" serialCode="Ax4776asdf8se" priority="1" visible="true"> | <Product id="5" serialCode="Ax4776asdf8se" priority="1" visible="true"> | ||
<Name><![CDATA[Neljaviljapuder]]></Name> | <Name><![CDATA[Neljaviljapuder]]></Name> | ||
<Description><![CDATA[Väkk puder]]></Description> | |||
<Image><![CDATA[4puder.JPG]]></Image> | <Image><![CDATA[4puder.JPG]]></Image> | ||
< | <Price>1.00</Price> | ||
< | <DiscountPrice>0</DiscountPrice> | ||
<Size unit="g"><![CDATA[ | <Size unit="g"><![CDATA[500]]></Size> | ||
<Quantity unit="tk"> | <Quantity unit="tk">8</Quantity> | ||
<Guarantee unit=""></Guarantee> | <Guarantee unit="">0</Guarantee> | ||
<Tags> | <Tags> | ||
<Tag id="7"><![CDATA[Keegi ei osta]]></Tag> | <Tag id="7"><![CDATA[Keegi ei osta]]></Tag> | ||
Line 96: | Line 167: | ||
</Tags> | </Tags> | ||
</Product> | </Product> | ||
</ | </SubCategory> | ||
</Category> | </Category> | ||
</Catalog> | </Catalog> | ||
</source> | |||
=XML skeemifail= | |||
<source lang="xml" collapse="true" first-line="2"> | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> | |||
<xs:element name="Catalog"> | |||
<xs:complexType> | |||
<xs:sequence> | |||
<xs:element maxOccurs="unbounded" name="Category"> | |||
<xs:complexType> | |||
<xs:sequence> | |||
<xs:element name="Name" type="xs:string" /> | |||
<xs:element name="Description" type="xs:string" /> | |||
<xs:element name="Image" type="xs:string" /> | |||
<xs:element maxOccurs="unbounded" name="SubCategory"> | |||
<xs:complexType> | |||
<xs:sequence> | |||
<xs:element name="Name" type="xs:string" /> | |||
<xs:element name="Description" type="xs:string" /> | |||
<xs:element name="Image" type="xs:string" /> | |||
<xs:element maxOccurs="unbounded" name="Product"> | |||
<xs:complexType> | |||
<xs:sequence> | |||
<xs:element name="Name" type="xs:string" /> | |||
<xs:element name="Description" type="xs:string" /> | |||
<xs:element name="Image" type="xs:string" /> | |||
<xs:element name="Price" type="xs:decimal" /> | |||
<xs:element name="DiscountPrice" type="xs:decimal" /> | |||
<xs:element name="Size"> | |||
<xs:complexType> | |||
<xs:simpleContent> | |||
<xs:extension base="xs:string"> | |||
<xs:attribute name="unit" type="xs:string" use="required" /> | |||
</xs:extension> | |||
</xs:simpleContent> | |||
</xs:complexType> | |||
</xs:element> | |||
<xs:element name="Quantity"> | |||
<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 name="Guarantee"> | |||
<xs:complexType> | |||
<xs:simpleContent> | |||
<xs:extension base="xs:unsignedByte"> | |||
<xs:attribute name="unit" type="xs:string" use="required" /> | |||
</xs:extension> | |||
</xs:simpleContent> | |||
</xs:complexType> | |||
</xs:element> | |||
<xs:element name="Tags"> | |||
<xs:complexType> | |||
<xs:sequence> | |||
<xs:element maxOccurs="unbounded" name="Tag"> | |||
<xs:complexType> | |||
<xs:simpleContent> | |||
<xs:extension base="xs:string"> | |||
<xs:attribute name="id" type="xs:int" use="required" /> | |||
</xs:extension> | |||
</xs:simpleContent> | |||
</xs:complexType> | |||
</xs:element> | |||
</xs:sequence> | |||
</xs:complexType> | |||
</xs:element> | |||
</xs:sequence> | |||
<xs:attribute name="id" type="xs:int" use="required" /> | |||
<xs:attribute name="serialCode" type="xs:string" use="required" /> | |||
<xs:attribute name="priority" type="xs:unsignedByte" use="required" /> | |||
<xs:attribute name="visible" type="xs:boolean" use="required" /> | |||
</xs:complexType> | |||
</xs:element> | |||
</xs:sequence> | |||
<xs:attribute name="id" type="xs:int" use="required" /> | |||
<xs:attribute name="visible" type="xs:boolean" use="required" /> | |||
</xs:complexType> | |||
</xs:element> | |||
</xs:sequence> | |||
<xs:attribute name="id" type="xs:int" use="required" /> | |||
<xs:attribute name="visible" type="xs:boolean" use="required" /> | |||
</xs:complexType> | |||
</xs:element> | |||
</xs:sequence> | |||
<xs:attribute name="currency" type="xs:string" use="required" /> | |||
</xs:complexType> | |||
</xs:element> | |||
</xs:schema> | |||
</source> | |||
=XML Transformatsioonid= | |||
Html, mis kuvab toidukaupasid, mis ei ole varjatud ("hidden") | |||
<source lang="xml" collapse="true" first-line="2"> | |||
<?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" /> | |||
<xsl:template match="/"> | |||
<html> | |||
<head> | |||
<title>Allahinnatud toidukaubad</title> | |||
</head> | |||
<body> | |||
<xsl:for-each select="Catalog/Category"> | |||
<xsl:if test="@id=3"> | |||
<h2><xsl:value-of select="Name"/> </h2> | |||
<xsl:for-each select="SubCategory"> | |||
<xsl:for-each select="Product"> | |||
<xsl:if test="@visible='true'"> | |||
<div> | |||
<h3> | |||
<xsl:value-of select="Name"/> | |||
</h3> | |||
<p>Hind: <xsl:value-of select="Price"/> <xsl:value-of select="/Catalog/@currency"/></p> | |||
<p>Kogus: <xsl:value-of select="Size"/> <xsl:value-of select="Size/@unit"/></p> | |||
</div> | |||
</xsl:if> | |||
</xsl:for-each> | |||
</xsl:for-each> | |||
</xsl:if> | |||
</xsl:for-each> | |||
</body> | |||
</html> | |||
</xsl:template> | |||
</xsl:stylesheet> | |||
</source> | |||
[[file:transf_01.PNG|thumb|frameless|none]] | |||
Kuvame kõik veebipoe tooted, järjestatuna soodsaimast hinnast alates | |||
<source lang="xml" collapse="true" first-line="2"> | |||
<?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> | |||
<head> | |||
<title>Head kaubad</title> | |||
<style type="text/css"> | |||
table {border:1px solid black;} | |||
td {padding: 5px;} | |||
.headRow {background-color: skyblue; font-weight: bold;} | |||
</style> | |||
</head> | |||
<body> | |||
<table> | |||
<tr class="headRow"> | |||
<td>Nimi</td> | |||
<td>Hind</td> | |||
<td>Kogus</td> | |||
</tr> | |||
<xsl:for-each select="Catalog/Category/SubCategory/Product"> | |||
<xsl:sort select="Price"/> | |||
<tr> | |||
<td> | |||
<xsl:value-of select="Name"/> | |||
</td> | |||
<td> | |||
<xsl:value-of select="Price"/> | |||
</td> | |||
<td> | |||
<xsl:value-of select="Quantity"/> | |||
</td> | |||
</tr> | |||
</xsl:for-each> | |||
</table> | |||
</body> | |||
</html> | |||
</xsl:template> | |||
</xsl:stylesheet> | |||
</source> | |||
[[file:transf_o2.PNG|thumb|frameless|none]] | |||
Eemaldame XML-ist elemendid, mis on peiedtud (visibility=false) | |||
<source lang="xml" collapse="true" first-line="2"> | |||
<?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="@* | node()"> | |||
<xsl:copy> | |||
<xsl:apply-templates select="@* | node()"/> | |||
</xsl:copy> | |||
</xsl:template> | |||
<xsl:template match="//Product[@visible='false']"> | |||
</xsl:template> | |||
</xsl:stylesheet> | |||
</source> | </source> |
Latest revision as of 10:53, 12 June 2015
Liikmed, tiim pooldus!
- Krister Kamla - TIIM I
- Mihkel Künnapas - TIIM II
- Berit Veidemann - TIIM II
Tiim II projekt: Retseptiraamat
Retseptiraamatusse saab lisada retsepte, millel on koostisosad. Lahendus on WEB API + MVC. Projekt on kätte saadav siit
Täiendustega projekt on leitav siit, lisandunud on keeletugi, administraatori funktsionaalsused, API päringute logimine, vaated muudetud kasutajasõbralikumateks (erinevate mudelite kontrollerite kasutamine ühtsetest vaadetest), menüüde koostamise võimalus olemasolevate retseptide põhjal. Lisaks parandadud API turvalisust, korrigeeritud statuskoode, võetud kasutusele konfiguratsioonifailid hard-coded väärtuste asemel.
Veebiteenuse analüüs
Kirjeldus
Plaanime luua universaalse veebipoe, mis on mõeldud müüjale oma teenuse pakkumiseks.
Must Have
Klient
Uue kliendi lisamineOlemasoleva kliendi andmete muutmineKliendi kontaktandmete lisamine/muutmineKliendile kasutajakonto registreerimine/muutmineKlient saab sirvida poes olevaid tooteid- Klient saab tooteid pärida kriteeriumide järgi (nt hind, populaarsus, kaubatüüp jne)
- Klient saab lisada/eemaldada tooteid ostukorvi, muuta toodete kogust ostukorvis
Klient saab oma ostukorvi sisu kinnitadaKliendile saab esitada kinnitatud ostukorvi eest arveKlient saab vaadata talle esitatud arveid
Kaupmees
Kaupmees saab sisestada/muuta/kustutada tooteidKaupmees saab lisada/muuta tootekategooriaid- Kaupmees saab vaadata laoseisude- ja müügistatistikat
- Kaupmees saab hallata kasutajaid, näha kasutajate statistikat
- Kaupmees saab vaadata arveid
Kaupmees saab omal vastutusel kasutada administraatorliidest
Tooted
Toodetele saab määrata nime, kirjelduse, tootekoodiToodetele saab määrata koguse, ühiku, hinnaToodetele saab määrata suuruseToodetele saab määrata tootja, garantiiajaToodetele saab määrata "nähtavust"Toodetele saab lisada faile (pildid jne - Krister vastutab)
Admin
- Admin saab piirata pöördumiste arvu ja hallata piiranguid
Admin saab muuta teatmiktüüpi tabelite kirjeid (riigid, linnad, shoppingcart status, file type jne)
Nice to Have
- Klient saab lisada tooteid oma lemmikute nimekirja
- Klient saab kopeerida oma juba kinnitatud ostukorvi
- Klient saab saata teenusepakkujale tagasisidet
- Klient saab kaupadele anda hinnanguid ja kommentaare/ näha teistepoolt antud hinnanguid ja kommentaare
Kaupmees saab lisada toodetele märksõnu- Kaupmees saab moodustada kliendigruppe
- Kaupmees saab saata klientidele teavitusi/ spämmi
- Süsteem saadab klientidele automaatseid teateid
- Kaupmees saab tekitada sooduskampaaniaid
Kaupmees saab määrata toodete kuvamisjärjekorda (toodete prioriteetsust)
Andmebaasi mudel (täienemisel)
Kasutatavad tehnoloogiad
- ASP.NET WEB API2
- ASP.NET MVC5
- Ninject
- Entity Framework
- AutoMapper
- NLog
XML
Veebipoe tootekataloog
<?xml version="1.0" encoding="utf-8" ?>
<Catalog currency="eur">
<Category id="1" visible="true">
<Name><![CDATA[Riided]]></Name>
<Description><![CDATA[Asjad, mida saab selga panna]]></Description>
<Image><![CDATA[riided.JPG]]></Image>
<SubCategory id="2" visible="true">
<Name><![CDATA[Sokid]]></Name>
<Description><![CDATA[Vähemalt paari kaupa müügil olev energiasõltumatu jalasoojendusvahend]]></Description>
<Image><![CDATA[sokid.JPG]]></Image>
<Product id="1" serialCode="AB4756478sd" priority="1" visible="true">
<Name><![CDATA[Selvä sokki]]></Name>
<Description><![CDATA[Väga head soojad sokid meestele]]></Description>
<Image><![CDATA[selva.JPG]]></Image>
<Price>2.00</Price>
<DiscountPrice >1.80</DiscountPrice>
<Size unit=""><![CDATA[M-XXL]]></Size>
<Quantity unit="tk">40</Quantity>
<Guarantee unit="aastat">3</Guarantee>
<Tags>
<Tag id="1"><![CDATA[Meestele]]></Tag>
</Tags>
</Product>
<Product id="2" serialCode="AB4756478se" priority="1" visible="true">
<Name><![CDATA[Hüva sokki]]></Name>
<Description><![CDATA[Väga head soojad sokid naistele, roosa]]></Description>
<Image><![CDATA[hyvaSokk.JPG]]></Image>
<Price>1.40</Price>
<DiscountPrice>0</DiscountPrice>
<Size unit=""><![CDATA[S-L]]></Size>
<Quantity unit="tk">12</Quantity>
<Guarantee unit="aastat">3</Guarantee>
<Tags>
<Tag id="2"><![CDATA[70-ndad]]></Tag>
<Tag id="3"><![CDATA[Naistele]]></Tag>
<Tag id="4"><![CDATA[Kingitused]]></Tag>
</Tags>
</Product>
</SubCategory>
</Category>
<Category id="3" visible="true">
<Name><![CDATA[Toidukaubad]]></Name>
<Description><![CDATA[Asjad, mida saab suhu panna]]></Description>
<Image><![CDATA[toidud.JPG]]></Image>
<SubCategory id="4" visible="true">
<Name><![CDATA[Maiustused]]></Name>
<Description><![CDATA[Hammastele kahjulikud kaubad]]></Description>
<Image><![CDATA[komm.JPG]]></Image>
<Product id="3" serialCode="Aa756478sd" priority="2" visible="true">
<Name><![CDATA[Selga küpsised]]></Name>
<Description><![CDATA[MMM selga]]></Description>
<Image><![CDATA[selga.JPG]]></Image>
<Price>0.64</Price>
<DiscountPrice>0.62</DiscountPrice>
<Size unit="g"><![CDATA[400]]></Size>
<Quantity unit="tk">600</Quantity>
<Guarantee unit="">0</Guarantee>
<Tags>
<Tag id="3"><![CDATA[Naistele]]></Tag>
</Tags>
</Product>
<Product id="4" serialCode="Ax4776478se" priority="1" visible="false">
<Name><![CDATA[Martsipan]]></Name>
<Description><![CDATA[MMM martsipan]]></Description>
<Image><![CDATA[martsipan.JPG]]></Image>
<Price>2.60</Price>
<DiscountPrice>0</DiscountPrice>
<Size unit="g"><![CDATA[170]]></Size>
<Quantity unit="tk">37</Quantity>
<Guarantee unit="">0</Guarantee>
<Tags>
<Tag id="5"><![CDATA[Ostjate lemmik]]></Tag>
<Tag id="6"><![CDATA[Nädala diil]]></Tag>
</Tags>
</Product>
</SubCategory>
<SubCategory id="5" visible="false">
<Name><![CDATA[Hommikueined]]></Name>
<Description><![CDATA[Hommikusöök on kõige tähtsam!]]></Description>
<Image><![CDATA[puder.JPG]]></Image>
<Product id="5" serialCode="Ax4776asdf8se" priority="1" visible="true">
<Name><![CDATA[Neljaviljapuder]]></Name>
<Description><![CDATA[Väkk puder]]></Description>
<Image><![CDATA[4puder.JPG]]></Image>
<Price>1.00</Price>
<DiscountPrice>0</DiscountPrice>
<Size unit="g"><![CDATA[500]]></Size>
<Quantity unit="tk">8</Quantity>
<Guarantee unit="">0</Guarantee>
<Tags>
<Tag id="7"><![CDATA[Keegi ei osta]]></Tag>
<Tag id="8"><![CDATA[Parim enne möödunud]]></Tag>
</Tags>
</Product>
</SubCategory>
</Category>
</Catalog>
XML skeemifail
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Catalog">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="Category">
<xs:complexType>
<xs:sequence>
<xs:element name="Name" type="xs:string" />
<xs:element name="Description" type="xs:string" />
<xs:element name="Image" type="xs:string" />
<xs:element maxOccurs="unbounded" name="SubCategory">
<xs:complexType>
<xs:sequence>
<xs:element name="Name" type="xs:string" />
<xs:element name="Description" type="xs:string" />
<xs:element name="Image" type="xs:string" />
<xs:element maxOccurs="unbounded" name="Product">
<xs:complexType>
<xs:sequence>
<xs:element name="Name" type="xs:string" />
<xs:element name="Description" type="xs:string" />
<xs:element name="Image" type="xs:string" />
<xs:element name="Price" type="xs:decimal" />
<xs:element name="DiscountPrice" type="xs:decimal" />
<xs:element name="Size">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="unit" type="xs:string" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Quantity">
<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 name="Guarantee">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:unsignedByte">
<xs:attribute name="unit" type="xs:string" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Tags">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="Tag">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id" type="xs:int" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:int" use="required" />
<xs:attribute name="serialCode" type="xs:string" use="required" />
<xs:attribute name="priority" type="xs:unsignedByte" use="required" />
<xs:attribute name="visible" type="xs:boolean" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:int" use="required" />
<xs:attribute name="visible" type="xs:boolean" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:int" use="required" />
<xs:attribute name="visible" type="xs:boolean" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="currency" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:schema>
XML Transformatsioonid
Html, mis kuvab toidukaupasid, mis ei ole varjatud ("hidden")
<?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" />
<xsl:template match="/">
<html>
<head>
<title>Allahinnatud toidukaubad</title>
</head>
<body>
<xsl:for-each select="Catalog/Category">
<xsl:if test="@id=3">
<h2><xsl:value-of select="Name"/> </h2>
<xsl:for-each select="SubCategory">
<xsl:for-each select="Product">
<xsl:if test="@visible='true'">
<div>
<h3>
<xsl:value-of select="Name"/>
</h3>
<p>Hind: <xsl:value-of select="Price"/> <xsl:value-of select="/Catalog/@currency"/></p>
<p>Kogus: <xsl:value-of select="Size"/> <xsl:value-of select="Size/@unit"/></p>
</div>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
</xsl:if>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Kuvame kõik veebipoe tooted, järjestatuna soodsaimast hinnast alates
<?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>
<head>
<title>Head kaubad</title>
<style type="text/css">
table {border:1px solid black;}
td {padding: 5px;}
.headRow {background-color: skyblue; font-weight: bold;}
</style>
</head>
<body>
<table>
<tr class="headRow">
<td>Nimi</td>
<td>Hind</td>
<td>Kogus</td>
</tr>
<xsl:for-each select="Catalog/Category/SubCategory/Product">
<xsl:sort select="Price"/>
<tr>
<td>
<xsl:value-of select="Name"/>
</td>
<td>
<xsl:value-of select="Price"/>
</td>
<td>
<xsl:value-of select="Quantity"/>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Eemaldame XML-ist elemendid, mis on peiedtud (visibility=false)
<?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="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="//Product[@visible='false']">
</xsl:template>
</xsl:stylesheet>