Purgis: Difference between revisions

From ICO wiki
Jump to navigationJump to search
 
(9 intermediate revisions by the same user not shown)
Line 5: Line 5:
*Kelli Lukas
*Kelli Lukas


== Analüüs ==
'''Üldine kirjeldus'''
Eesmärk on luua veebirakendus, mis võimaldab restoranide klienditeenindajatel sisestada ning hallata tellimusi. Kokad saavad kiiresti teate uuest tellimusest ning kui täidetud, märgivad nad selle tehtuks. Seejärel saab teenindaja teate valmis tellimusest ning toimetada hõlpsalt klientideni. Antud süsteem kiirendab ning lihtsustab töövoogu restoranides ning seda eriti juhul, kui on kiire aeg ja palju kliente.
Andmeid päritakse keskserverilt läbi API.
== Tehnoloogiad ==
C#, ASP.NET WEB-API, Angular&TypeScript
== Rakenduse sisu ==
'''MUST HAVE:'''
*Restorani loomine - laudade arvu defineerimine, nimi
*Kasutajagrupid – restoran, teenindaja, köök
*Tellimuse loomine
*Kokale tellimuse märguande saatmine
*Tellimusel staatus "tehtud"
*Teenindaja saab märguande, viib toidu lauda
*Tellimus läheb arhiivi statistika pidamiseks
'''NICE TO HAVE:'''
*Tellimuse muutmine
*Laudade broneerimine
*Vabade laudade nägemine
*Arve väljastamine lauale/inimesele
*Lauale automaatselt hõivatud/vaba staatuse määramine
'''ERD:'''
[[File: PURGIS_AB.PNG]]


=XML/XSD/XSLT=
=XML/XSD/XSLT=


=== XML ===
=== XML ===
<pre>
<source lang="xml">
<?xml version="1.0" encoding="utf-8" ?>
<?xml version="1.0" encoding="utf-8" ?>
<restoranid>
<restoranid>
   <restoran id="1">
   <restoran id="1">
        <menyy>
    <menyy>
        <toidud>
      <toidud>
        <toit>![CDATA[Kanapraad]]</toit>
        <toit>![CDATA[Kanapraad]]</toit>
        <toit>![CDATA[Seapraad]]</toit>
        <toit>![CDATA[Seapraad]]</toit>
        <toit>![CDATA[Fetasalat]]</toit>
        <toit>![CDATA[Fetasalat]]</toit>
        <toit>![CDATA[Oasalat]]</toit>
        <toit>![CDATA[Oasalat]]</toit>
        </toidud>
      </toidud>
        <joogid>
      <joogid>
        <jook>![CDATA[Apelsinimahl]]</jook>
        <jook>![CDATA[Apelsinimahl]]</jook>
        <jook>![CDATA[Segumahl]]</jook>
        <jook>![CDATA[Segumahl]]</jook>
        <jook>![CDATA[Coca-cola]]</jook>
        <jook>![CDATA[Coca-cola]]</jook>
        <jook>![CDATA[Fanta]]</jook>
        <jook>![CDATA[Fanta]]</jook>
        </joogid>
        <jook>![CDATA[Sprite]]</jook>
        </menyy>
      </joogid>
<teenindajad>
    </menyy>
<teenindaja>![CDATA[Maali]]</teenindaja>
    <teenindajad>
<teenindaja>![CDATA[Juhan]]</teenindaja>
      <teenindaja id="1">![CDATA[Maali]]</teenindaja>
<teenindaja>![CDATA[Juta]]</teenindaja>
      <teenindaja id="2">![CDATA[Juhan]]</teenindaja>
</teenindajad>
      <teenindaja id="3">![CDATA[Juta]]</teenindaja>
    </teenindajad>
     <nimi>![CDATA[NOA restoran]]</nimi>
     <nimi>![CDATA[NOA restoran]]</nimi>
     <lauad>
     <lauad>
       <laud id="1" >
       <laud id="1" >
         <tellimused>
         <tellimused teenindajaId="1">
           <tellimus valmis="false">
           <tellimus valmis="false" tellimuseAeg="1702301843" taimneVersioon="true">
<jook>![CDATA[Apelsinimahl]]</jook>
    <jook>![CDATA[Apelsinimahl]]</jook>
<toit>![CDATA[Oasalat]]</toit>
    <toit>![CDATA[Oasalat]]</toit>
  </tellimus>
  </tellimus>
           <tellimus valmis="false">
           <tellimus valmis="false" tellimuseAeg="1702301844">
<jook>![CDATA[Segumahl]]</jook>
    <jook>![CDATA[Segumahl]]</jook>
<toit>![CDATA[Seapraad]]</toit>
    <toit>![CDATA[Seapraad]]</toit>
  </tellimus>
  </tellimus>
           <tellimus valmis="false">
           <tellimus valmis="false" tellimuseAeg="1702301846" taimneVersioon="true">
<jook>![CDATA[Segumahl]]</jook>
    <jook>![CDATA[Sprite]]</jook>
<toit>![CDATA[Oasalat]]</toit>
    <toit>![CDATA[Oasalat]]</toit>
  </tellimus>
  </tellimus>
           <tellimus valmis="false">
           <tellimus valmis="false" tellimuseAeg="1702301847">
<jook>![CDATA[Fanta]]</jook>
    <jook>![CDATA[Fanta]]</jook>
<toit>![CDATA[Fetasalat]]</toit>
    <toit>![CDATA[Fetasalat]]</toit>
  </tellimus>
  </tellimus>
         </tellimused>
         </tellimused>
         <teenindaja>![CDATA[Maali]]</teenindaja>
         <teenindaja>![CDATA[Maali]]</teenindaja>
Line 57: Line 87:


       <laud id="2" >
       <laud id="2" >
         <tellimused>
         <tellimused teenindajaId="2">
           <tellimus valmis="false">
           <tellimus valmis="false" tellimuseAeg="1702301852">
<jook>![CDATA[Fanta]]</jook>
    <jook>![CDATA[Fanta]]</jook>
<toit>![CDATA[Fetasalat]]</toit>
    <toit>![CDATA[Fetasalat]]</toit>
  </tellimus>
  </tellimus>
  <tellimus valmis="false">
  <tellimus valmis="false" tellimuseAeg="1702301853">
<jook>![CDATA[Coca-cola]]</jook>
    <jook>![CDATA[Coca-cola]]</jook>
<toit>![CDATA[Fetasalat]]</toit>
    <toit>![CDATA[Fetasalat]]</toit>
  </tellimus>
  </tellimus>
         </tellimused>
         </tellimused>
         <teenindaja>![CDATA[Juhan]]</teenindaja>
         <teenindaja>![CDATA[Juhan]]</teenindaja>
       </laud>
       </laud>
   
   
  <laud id="3" >
      <laud id="3" >
         <tellimused>
         <tellimused teenindajaId="3">
           <tellimus valmis="false">
           <tellimus valmis="false" tellimuseAeg="1702301903" taimneVersioon="true">
<jook>![CDATA[Fanta]]</jook>
    <jook>![CDATA[Fanta]]</jook>
<toit>![CDATA[Oasalat]]</toit>
    <toit>![CDATA[Oasalat]]</toit>
  </tellimus>
  </tellimus>
  <tellimus valmis="false">
  <tellimus valmis="false" tellimuseAeg="1702301905">
<jook>![CDATA[Apelsinimahl]]</jook>
    <jook>![CDATA[Apelsinimahl]]</jook>
<toit>![CDATA[Fetasalat]]</toit>
    <toit>![CDATA[Fetasalat]]</toit>
  </tellimus>
  </tellimus>
  <tellimus valmis="false">
  <tellimus valmis="false" tellimuseAeg="1702301906">
<jook>![CDATA[Coca-cola]]</jook>
    <jook>![CDATA[Coca-cola]]</jook>
<toit>![CDATA[Kanapraad]]</toit>
    <toit>![CDATA[Kanapraad]]</toit>
  </tellimus>
  </tellimus>
         </tellimused>
         </tellimused>
         <teenindaja>![CDATA[Juta]]</teenindaja>
         <teenindaja>![CDATA[Juta]]</teenindaja>
Line 90: Line 120:
   </restoran>
   </restoran>
</restoranid>
</restoranid>
</pre>
</source>


=== XSD ===
=== XSD ===
 
<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:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:element name="restoranid">
   <xs:element name="restoranid">
Line 101: Line 132:
           <xs:complexType>
           <xs:complexType>
             <xs:sequence>
             <xs:sequence>
               <xs:element name="toidud">
               <xs:element name="menyy">
                <xs:complexType>
<xs:complexType>
                  <xs:sequence>
  <xs:sequence>
                    <xs:element type="xs:string" name="toit" maxOccurs="unbounded" minOccurs="0"/>
    <xs:element name="toidud">
                  </xs:sequence>
      <xs:complexType>
                </xs:complexType>
<xs:sequence>
              </xs:element>
  <xs:element type="xs:string" name="toit" maxOccurs="unbounded" minOccurs="0"/>
              <xs:element name="joogid">
</xs:sequence>
                <xs:complexType>
      </xs:complexType>
                  <xs:sequence>
    </xs:element>
                    <xs:element type="xs:string" name="jook" maxOccurs="unbounded" minOccurs="0"/>
    <xs:element name="joogid">
                  </xs:sequence>
      <xs:complexType>
                </xs:complexType>
        <xs:sequence>
              </xs:element>
  <xs:element type="xs:string" name="jook" maxOccurs="unbounded" minOccurs="0"/>
              <xs:element name="teenindajad">
</xs:sequence>
                <xs:complexType>
      </xs:complexType>
                  <xs:sequence>
    </xs:element>
                    <xs:element type="xs:string" name="teenindaja" maxOccurs="unbounded" minOccurs="0"/>
  </xs:sequence>
                  </xs:sequence>
                 </xs:complexType>
                 </xs:complexType>
              </xs:element>
                </xs:element>
              <xs:element type="xs:string" name="nimi"/>
                <xs:element name="teenindajad">
              <xs:element type="xs:byte" name="kohtadeArv"/>
                  <xs:complexType>
              <xs:element name="lauad">
                    <xs:sequence>
                <xs:complexType>
                      <xs:element type="xs:string" name="teenindaja" maxOccurs="unbounded" minOccurs="0"/>
                  <xs:sequence>
                    </xs:sequence>
                    <xs:element name="laud" maxOccurs="unbounded" minOccurs="0">
                  </xs:complexType>
                      <xs:complexType>
                </xs:element>
                        <xs:sequence>
                <xs:element type="xs:string" name="nimi"/>
                          <xs:element name="tellimused">
                <xs:element name="lauad">
                            <xs:complexType>
                  <xs:complexType>
                              <xs:sequence>
                    <xs:sequence>
                                <xs:element name="tellimus" maxOccurs="unbounded" minOccurs="0">
                      <xs:element name="laud" maxOccurs="unbounded" minOccurs="0">
                                  <xs:complexType>
                        <xs:complexType>
                                    <xs:sequence>
                          <xs:sequence>
                                      <xs:element type="xs:string" name="jook"/>
                            <xs:element name="tellimused">
                                      <xs:element type="xs:string" name="toit"/>
                              <xs:complexType>
                                    </xs:sequence>
                                <xs:sequence>
                                    <xs:attribute type="xs:string" name="valmis" use="optional"/>
                                  <xs:element name="tellimus" maxOccurs="unbounded" minOccurs="0">
                                  </xs:complexType>
                                    <xs:complexType>
                                </xs:element>
                                      <xs:sequence>
                              </xs:sequence>
                                        <xs:element type="xs:string" name="jook"/>
                                        <xs:element type="xs:string" name="toit"/>
                                      </xs:sequence>
                                      <xs:attribute type="xs:boolean" name="valmis" use="required"/>
                                      <xs:attribute type="xs:unsignedInt" name="tellimuseAeg" use="required"/>
              <xs:attribute type="xs:boolean" name="taimneVersioon"/>
                                    </xs:complexType>
                                  </xs:element>
                                </xs:sequence>
                              <xs:attribute type="xs:int" name="teenindajaId"/>
                             </xs:complexType>
                             </xs:complexType>
                           </xs:element>
                           </xs:element>
                          <xs:element type="xs:string" name="teenindaja"/>
                         </xs:sequence>
                         </xs:sequence>
                         <xs:attribute type="xs:byte" name="id" use="optional"/>
                         <xs:attribute type="xs:int" name="id"/>
                       </xs:complexType>
                       </xs:complexType>
                     </xs:element>
                     </xs:element>
Line 154: Line 192:
               </xs:element>
               </xs:element>
             </xs:sequence>
             </xs:sequence>
             <xs:attribute type="xs:byte" name="id"/>
             <xs:attribute type="xs:int" name="id"/>
           </xs:complexType>
           </xs:complexType>
         </xs:element>
         </xs:element>
Line 161: Line 199:
   </xs:element>
   </xs:element>
</xs:schema>
</xs:schema>
</source>


=== XSLT ===
=== XSLT ===


==XSLT HTML==


==resturanide id==
==Restoranide id==


<pre>
<source lang="xml">
<?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"
Line 177: Line 217:
       <head>
       <head>
         <title>Order fast/fi</title>
         <title>Order fast/fi</title>
        <h2>
          <xsl:value-of select="/restoranid/restoran/nimi>
        </h2>
       </head>
       </head>


Line 182: Line 225:
         <ul>
         <ul>
           <xsl:for-each select="/restoranid/restoran">
           <xsl:for-each select="/restoranid/restoran">
             <li>
             <li>
               <xsl:value-of select="@id" />
               <xsl:value-of select="@id" />
Line 194: Line 236:
               </xsl:for-each>
               </xsl:for-each>
             </ul>
             </ul>
           
           </xsl:for-each>
           </xsl:for-each>
         </ul>
         </ul>
       </body>
       </body>
     </html>
     </html>
   </xsl:template>
   </xsl:template>
</xsl:stylesheet>
</xsl:stylesheet>
</pre>
</source>


==resturanide toidud==
==Restoranide toidud==
<pre>


<source lang="xml">
<?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"
Line 217: Line 256:
       <head>
       <head>
         <title>Order fast/fi</title>
         <title>Order fast/fi</title>
        <h2>
          <xsl:value-of select="/restoranid/restoran/nimi>
        </h2>
       </head>
       </head>


Line 222: Line 264:
         <ul>
         <ul>
           <xsl:for-each select="/restoranid/restoran">
           <xsl:for-each select="/restoranid/restoran">
             <li>
             <li>
               <xsl:value-of select="@id" />
               <xsl:value-of select="@id" />
             </li>
             </li>
 
           
             <ul>
             <ul>
               <xsl:for-each select="teenindajad/teenindaja">
               <xsl:for-each select="teenindajad/teenindaja">
Line 235: Line 276:
               </xsl:for-each>
               </xsl:for-each>
             </ul>
             </ul>
           
           </xsl:for-each>
           </xsl:for-each>
         </ul>
         </ul>
       </body>
       </body>
     </html>
     </html>
   </xsl:template>
   </xsl:template>
</xsl:stylesheet>
</xsl:stylesheet>
</source>


</pre>
==XSLT 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="/">
      <restoranid>
        <xsl:for-each select="/restoranid/restoran">
          <restoran>
            <nimi>
              <xsl:value-of select="nimi"/>
            </nimi>
            <xsl:variable name="tellimusId" select="@id"/>
            <teenindaja>
              <xsl:copy-of select="/restoranid/restoran/teenindajad/teenindaja[@id=$teeenindajaId]" />
            </teenindaja>
            <tellimused>
              <xsl:for-each select="tellimused/tellimus">
                <xsl:variable name="taimneVersioon" select="@taimneVersioon"/>
                <tellimus>
                  <toit>
                    <xsl:value-of select="." />
                  </toit>
                  <xsl:copy-of select="/restoranid/restoran/lauad/laud/tellimused/tellimus[@taimneVersioon=$taimneVersioon]/toit" />
                </tellimus>
              </xsl:for-each>
            </tellimused>
          </restoran>
        </xsl:for-each>
      </restoranid>
    </xsl:template>
  </xsl:stylesheet>
</source>

Latest revision as of 23:36, 17 April 2017

Kodutöö aines "Võrgurakendused II: hajussüsteemide ehitamine"

Meeskond

  • Märt Lõhmus
  • Kelli Lukas

Analüüs

Üldine kirjeldus

Eesmärk on luua veebirakendus, mis võimaldab restoranide klienditeenindajatel sisestada ning hallata tellimusi. Kokad saavad kiiresti teate uuest tellimusest ning kui täidetud, märgivad nad selle tehtuks. Seejärel saab teenindaja teate valmis tellimusest ning toimetada hõlpsalt klientideni. Antud süsteem kiirendab ning lihtsustab töövoogu restoranides ning seda eriti juhul, kui on kiire aeg ja palju kliente. Andmeid päritakse keskserverilt läbi API.

Tehnoloogiad

C#, ASP.NET WEB-API, Angular&TypeScript

Rakenduse sisu

MUST HAVE:

  • Restorani loomine - laudade arvu defineerimine, nimi
  • Kasutajagrupid – restoran, teenindaja, köök
  • Tellimuse loomine
  • Kokale tellimuse märguande saatmine
  • Tellimusel staatus "tehtud"
  • Teenindaja saab märguande, viib toidu lauda
  • Tellimus läheb arhiivi statistika pidamiseks

NICE TO HAVE:

  • Tellimuse muutmine
  • Laudade broneerimine
  • Vabade laudade nägemine
  • Arve väljastamine lauale/inimesele
  • Lauale automaatselt hõivatud/vaba staatuse määramine

ERD:

XML/XSD/XSLT

XML

<?xml version="1.0" encoding="utf-8" ?>
<restoranid>
  <restoran id="1">
    <menyy>
      <toidud>
        <toit>![CDATA[Kanapraad]]</toit>
        <toit>![CDATA[Seapraad]]</toit>
        <toit>![CDATA[Fetasalat]]</toit>
        <toit>![CDATA[Oasalat]]</toit>
      </toidud>
      <joogid>
        <jook>![CDATA[Apelsinimahl]]</jook>
        <jook>![CDATA[Segumahl]]</jook>
        <jook>![CDATA[Coca-cola]]</jook>
        <jook>![CDATA[Fanta]]</jook>
        <jook>![CDATA[Sprite]]</jook>
      </joogid>
    </menyy>
    <teenindajad>
      <teenindaja id="1">![CDATA[Maali]]</teenindaja>
      <teenindaja id="2">![CDATA[Juhan]]</teenindaja>
      <teenindaja id="3">![CDATA[Juta]]</teenindaja>
    </teenindajad>
    <nimi>![CDATA[NOA restoran]]</nimi>
    <lauad>
      <laud id="1" >
        <tellimused teenindajaId="1">
          <tellimus valmis="false" tellimuseAeg="1702301843" taimneVersioon="true">
	    <jook>![CDATA[Apelsinimahl]]</jook>
	    <toit>![CDATA[Oasalat]]</toit>
	  </tellimus>
          <tellimus valmis="false" tellimuseAeg="1702301844">
	    <jook>![CDATA[Segumahl]]</jook>
	    <toit>![CDATA[Seapraad]]</toit>
	  </tellimus>
          <tellimus valmis="false" tellimuseAeg="1702301846" taimneVersioon="true">
	    <jook>![CDATA[Sprite]]</jook>
	    <toit>![CDATA[Oasalat]]</toit>
	  </tellimus>
          <tellimus valmis="false" tellimuseAeg="1702301847">
	    <jook>![CDATA[Fanta]]</jook>
	    <toit>![CDATA[Fetasalat]]</toit>
	  </tellimus>
        </tellimused>
        <teenindaja>![CDATA[Maali]]</teenindaja>
      </laud>

      <laud id="2" >
        <tellimused teenindajaId="2">
          <tellimus valmis="false" tellimuseAeg="1702301852">
	    <jook>![CDATA[Fanta]]</jook>
	    <toit>![CDATA[Fetasalat]]</toit>
	  </tellimus>
	  <tellimus valmis="false" tellimuseAeg="1702301853">
	    <jook>![CDATA[Coca-cola]]</jook>
	    <toit>![CDATA[Fetasalat]]</toit>
	  </tellimus>
        </tellimused>
        <teenindaja>![CDATA[Juhan]]</teenindaja>
      </laud>
	  
      <laud id="3" >
        <tellimused teenindajaId="3">
          <tellimus valmis="false" tellimuseAeg="1702301903" taimneVersioon="true">
	    <jook>![CDATA[Fanta]]</jook>
	    <toit>![CDATA[Oasalat]]</toit>
	  </tellimus>
	  <tellimus valmis="false" tellimuseAeg="1702301905">
	    <jook>![CDATA[Apelsinimahl]]</jook>
	    <toit>![CDATA[Fetasalat]]</toit>
	  </tellimus>
	  <tellimus valmis="false" tellimuseAeg="1702301906">
	    <jook>![CDATA[Coca-cola]]</jook>
	    <toit>![CDATA[Kanapraad]]</toit>
	  </tellimus>
        </tellimused>
        <teenindaja>![CDATA[Juta]]</teenindaja>
      </laud>
    </lauad>
  </restoran>
</restoranid>

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="restoranid">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="restoran">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="menyy">
		<xs:complexType>
		  <xs:sequence>
		    <xs:element name="toidud">
		      <xs:complexType>
			<xs:sequence>
			  <xs:element type="xs:string" name="toit" maxOccurs="unbounded" minOccurs="0"/>
			</xs:sequence>
		      </xs:complexType>
		    </xs:element>
		    <xs:element name="joogid">
		      <xs:complexType>
		        <xs:sequence>
			  <xs:element type="xs:string" name="jook" maxOccurs="unbounded" minOccurs="0"/>
			</xs:sequence>
		      </xs:complexType>
		    </xs:element>
		  </xs:sequence>
                </xs:complexType>
                </xs:element>
                <xs:element name="teenindajad">
                  <xs:complexType>
                    <xs:sequence>
                      <xs:element type="xs:string" name="teenindaja" maxOccurs="unbounded" minOccurs="0"/>
                    </xs:sequence>
                  </xs:complexType>
                </xs:element>
                <xs:element type="xs:string" name="nimi"/>
                <xs:element name="lauad">
                  <xs:complexType>
                    <xs:sequence>
                      <xs:element name="laud" maxOccurs="unbounded" minOccurs="0">
                        <xs:complexType>
                          <xs:sequence>
                            <xs:element name="tellimused">
                              <xs:complexType>
                                <xs:sequence>
                                  <xs:element name="tellimus" maxOccurs="unbounded" minOccurs="0">
                                    <xs:complexType>
                                      <xs:sequence>
                                        <xs:element type="xs:string" name="jook"/>
                                        <xs:element type="xs:string" name="toit"/>
                                      </xs:sequence>
                                      <xs:attribute type="xs:boolean" name="valmis" use="required"/>
                                      <xs:attribute type="xs:unsignedInt" name="tellimuseAeg" use="required"/>
			              <xs:attribute type="xs:boolean" name="taimneVersioon"/>
                                    </xs:complexType>
                                  </xs:element>
                                </xs:sequence>
                              <xs:attribute type="xs:int" name="teenindajaId"/>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                        <xs:attribute type="xs:int" name="id"/>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute type="xs:int" name="id"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

XSLT

XSLT HTML

Restoranide id

<?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>Order fast/fi</title>
        <h2>
          <xsl:value-of select="/restoranid/restoran/nimi>
        </h2>
      </head>

      <body>
        <ul>
          <xsl:for-each select="/restoranid/restoran">
            <li>
              <xsl:value-of select="@id" />
            </li>

            <ul>
              <xsl:for-each select="toidud/toit">
                <li>
                  <xsl:value-of select="." />
                </li>
              </xsl:for-each>
            </ul>
          </xsl:for-each>
        </ul>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

Restoranide toidud

<?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>Order fast/fi</title>
        <h2>
          <xsl:value-of select="/restoranid/restoran/nimi>
        </h2>
      </head>

      <body>
        <ul>
          <xsl:for-each select="/restoranid/restoran">
            <li>
              <xsl:value-of select="@id" />
            </li>
            
            <ul>
              <xsl:for-each select="teenindajad/teenindaja">
                <xsl:sort select="."/>
                <li>
                  <xsl:value-of select="." />
                </li>
              </xsl:for-each>
            </ul>
          </xsl:for-each>
        </ul>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

XSLT 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="/">
      <restoranid>
        <xsl:for-each select="/restoranid/restoran">
          <restoran>
            <nimi>
              <xsl:value-of select="nimi"/>
            </nimi>
            <xsl:variable name="tellimusId" select="@id"/>
            <teenindaja>
              <xsl:copy-of select="/restoranid/restoran/teenindajad/teenindaja[@id=$teeenindajaId]" />
            </teenindaja>
            <tellimused>
              <xsl:for-each select="tellimused/tellimus">
                <xsl:variable name="taimneVersioon" select="@taimneVersioon"/>
                <tellimus>
                  <toit>
                    <xsl:value-of select="." />
                  </toit>
                  <xsl:copy-of select="/restoranid/restoran/lauad/laud/tellimused/tellimus[@taimneVersioon=$taimneVersioon]/toit" />
                </tellimus>
              </xsl:for-each>
            </tellimused>
          </restoran>
        </xsl:for-each>
      </restoranid>
    </xsl:template>
  </xsl:stylesheet>