Bob's Burgers
From ICO wiki
Meeskond
- Aleksei Kopõlov
- Sander Perens
Idee
XML/XSD/XSLT
XML
<?xml version="1.0" encoding="utf-8"?> <Menu> <Item Category="Dish" MenuCategorie="Main course"> <ItemName><![CDATA[Chicken & mushroom risotto]]></ItemName> <ItemType> <Type>Spicy</Type> </ItemType> <Portions> <Portion PortionType="Small"> <PortionPrice Currency="€">10.95</PortionPrice> <PortionSize> <Size Units="g">300</Size> <Size Units="Person">1</Size> </PortionSize> </Portion> <Portion PortionType="Medium"> <PortionPrice Currency="€">19.95</PortionPrice> <PortionSize> <Size Units="g">600</Size> <Size Units="Person">2</Size> </PortionSize> </Portion> </Portions> <Description>Looks good</Description> <Ingredients> <Ingredient Units="g" Quantity="50">Butter</Ingredient> <Ingredient Units="g" Quantity="100">Bacon</Ingredient> <Ingredient Units="g" Quantity="100">Rice</Ingredient> <Ingredient Units="ml" Quantity="50">White wine</Ingredient> </Ingredients> <IntoleranceFreeFood> <IntoleranceFree>Lactose Free</IntoleranceFree> <IntoleranceFree>Gluten free</IntoleranceFree> </IntoleranceFreeFood> </Item> <Item Category="Dish" MenuCategorie="Main course"> <ItemName><![CDATA[Pilaff]]></ItemName> <ItemType> <Type>Spicy</Type> <Type>mediterranean</Type> </ItemType> <Portions> <Portion PortionType="Small"> <PortionPrice Currency="€">5</PortionPrice> <PortionSize> <Size Units="g">300</Size> <Size Units="Person">1</Size> </PortionSize> </Portion> <Portion PortionType="Medium"> <PortionPrice Currency="€">6</PortionPrice> <PortionSize> <Size Units="g">600</Size> <Size Units="Person">2</Size> </PortionSize> </Portion> <Portion PortionType="Large"> <PortionPrice Currency="€">7</PortionPrice> <PortionSize> <Size Units="g">900</Size> <Size Units="Person">3</Size> </PortionSize> </Portion> </Portions> <Description>Looks good</Description> <Ingredients> <Ingredient Units="g" Quantity="50">Butter</Ingredient> <Ingredient Units="g" Quantity="100">Bacon</Ingredient> <Ingredient Units="g" Quantity="100">Rice</Ingredient> </Ingredients> <IntoleranceFreeFood> <IntoleranceFree>Lactose Free</IntoleranceFree> <IntoleranceFree>Gluten free</IntoleranceFree> </IntoleranceFreeFood> </Item> <Item Category="Dish" MenuCategorie="Dessert"> <ItemName><![CDATA[Classic Tiramisu]]></ItemName> <ItemType> <Type>Spicy</Type> <Type>Sour</Type> </ItemType> <Portions> <Portion PortionType="Small"> <PortionPrice Currency="€">10.95</PortionPrice> <PortionSize> <Size Units="g">300</Size> <Size Units="Person">1</Size> </PortionSize> </Portion> <Portion PortionType="Medium"> <PortionPrice Currency="€">19.95</PortionPrice> <PortionSize> <Size Units="g">600</Size> <Size Units="Person">2</Size> </PortionSize> </Portion> </Portions> <Description>Looks good, tastes okay</Description> <Ingredients> <Ingredient Units="g" Quantity="50">Butter</Ingredient> <Ingredient Units="g" Quantity="100">Bacon</Ingredient> <Ingredient Units="g" Quantity="100">Rice</Ingredient> <Ingredient Units="g" Quantity="50">White wine</Ingredient> </Ingredients> </Item> <Item Category="Dish" MenuCategorie="Dessert"> <ItemName><![CDATA[Pavlova]]></ItemName> <ItemType> <Type>Sweet</Type> </ItemType> <Portions> <Portion PortionType="Small"> <PortionPrice Currency="€">13.13</PortionPrice> <PortionSize> <Size Units="g">300</Size> <Size Units="Person">2</Size> </PortionSize> </Portion> <Portion PortionType="Large"> <PortionPrice Currency="€">27.99</PortionPrice> <PortionSize> <Size Units="g">600</Size> <Size Units="Person">4</Size> </PortionSize> </Portion> </Portions> <Description>Pavlova typically garnished with strawberries, passionfruit, kiwifruit and cream. Pavlova is a meringue-based dessert named after the Russian ballerina Anna Pavlova. It is a meringue dessert with a crisp crust and soft, light inside, usually topped with fruit and whipped cream.</Description> <Ingredients> <Ingredient Units="g" Quantity="50">strawberries</Ingredient> <Ingredient Units="g" Quantity="100">passionfruit</Ingredient> <Ingredient Units="g" Quantity="100">kiwifruit</Ingredient> <Ingredient Units="ml" Quantity="100">cream</Ingredient> </Ingredients> </Item> <Item Category="Drink" MenuCategorie="Alcohol"> <ItemName><![CDATA[Jem Beam]]></ItemName> <ItemType> <Type>Whisky</Type> </ItemType> <Portions> <Portion PortionType="Small"> <PortionPrice Currency="€">2.95</PortionPrice> <PortionSize> <Size Units="ml">30</Size> <Size Units="Shots">1</Size> </PortionSize> </Portion> <Portion PortionType="Medium"> <PortionPrice Currency="€">14.95</PortionPrice> <PortionSize> <Size Units="ml">300</Size> <Size Units="Shots">10</Size> </PortionSize> </Portion> </Portions> <Description>Whisky</Description> </Item> <Item Category="Drink" MenuCategorie="Juice"> <ItemName><![CDATA[Apple juice]]></ItemName> <ItemType> <Type>Juice</Type> </ItemType> <Portions> <Portion PortionType="Small"> <PortionPrice Currency="€">1.05</PortionPrice> <PortionSize> <Size Units="ml">200</Size> </PortionSize> </Portion> <Portion PortionType="Medium"> <PortionPrice Currency="€">1.55</PortionPrice> <PortionSize> <Size Units="ml">300</Size> </PortionSize> </Portion> </Portions> <Description>Freshly pressed from green apples</Description> </Item> <Item Category="Drink" MenuCategorie="Water"> <ItemName><![CDATA[Still water]]></ItemName> <ItemType> <Type>Water</Type> </ItemType> <Portions> <Portion PortionType="Small"> <PortionPrice Currency="€">1</PortionPrice> <PortionSize> <Size Units="ml">200</Size> </PortionSize> </Portion> <Portion PortionType="Medium"> <PortionPrice Currency="€">1.50</PortionPrice> <PortionSize> <Size Units="ml">300</Size> </PortionSize> </Portion> <Portion PortionType="Large"> <PortionPrice Currency="€">2</PortionPrice> <PortionSize> <Size Units="ml">500</Size> </PortionSize> </Portion> </Portions> <Description>From tap</Description> </Item> <Item Category="Drink" MenuCategorie="Alcohol"> <ItemName><![CDATA[Saku Kuld]]></ItemName> <ItemType> <Type>Beer</Type> </ItemType> <Portions> <Portion PortionType="Small"> <PortionPrice Currency="€">3.50</PortionPrice> <PortionSize> <Size Units="ml">300</Size> </PortionSize> </Portion> <Portion PortionType="Medium"> <PortionPrice Currency="€">5</PortionPrice> <PortionSize> <Size Units="ml">500</Size> </PortionSize> </Portion> </Portions> <Description>Saku Kuld is the finest beer of Estonia’s oldest brewery. It is the cream of the crop when it comes to beers. Saku Kuld is a masterpiece that entwines two centuries of brewing traditions with the latest technology.</Description> </Item> </Menu>
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="Menu"> <xs:complexType> <xs:sequence> <xs:element name="Item" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="ItemName" type="xs:string" maxOccurs="1" minOccurs="1"/> <xs:element name="ItemType" maxOccurs="1"> <xs:complexType> <xs:sequence> <xs:element name="Type" type ="xs:string" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="Portions" minOccurs="1"> <xs:complexType> <xs:sequence> <xs:element name="Portion" minOccurs="1" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="PortionPrice" minOccurs="1" maxOccurs="1"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:decimal"> <xs:attribute name="Currency" type="xs:string"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> <xs:element name="PortionSize" minOccurs="1" maxOccurs="1"> <xs:complexType> <xs:sequence> <xs:element name="Size" minOccurs="1" maxOccurs="unbounded"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:decimal"> <xs:attribute name="Units" type="xs:string"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="PortionType" type="xs:string" use="required"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="Description" type="xs:string" minOccurs="1" maxOccurs="1"/> <xs:element name="Ingredients" minOccurs="0" maxOccurs="1"> <xs:complexType> <xs:sequence> <xs:element name="Ingredient" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="Units" type="xs:string"/> <xs:attribute name="Quantity" type="xs:decimal"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="IntoleranceFreeFood" minOccurs="0" maxOccurs="1"> <xs:complexType> <xs:sequence> <xs:element name="IntoleranceFree" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="Category" type="xs:string"/> <xs:attribute name="MenuCategorie" type="xs:string" use="required"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
XSLT HTML
<html> <style> table { border-collapse: collapse; margin: 25px; margin-bottom: 50px; } th, td { border: 1px solid #ccc; padding: 10px; text-align: center; } td.exept{ text-align: left; width:60% } </style> <body> <h1 align="center">Menu</h1> <table> <thead> <tr class="border"> <td align="center" colspan="4"> <h2>Dishes</h2> </td> </tr> <tr class="TableHead"> <th rowspan="2">Name</th> <th colspan="3">Price</th> </tr> <tr> <th>Small</th> <th>Medium</th> <th>Large</th> </tr> </thead> <tbody> <tr> <td colspan="4">Main course</td> </tr> <tr> <td class="exept">Chicken & mushroom risotto<br> Description:Looks good<br> Additional information: <ul> <li>Lactose Free</li> <li>Gluten free</li> </ul> </td> <td>10.95€</td> <td>19.95€</td> <td></td> </tr> <tr> <td class="exept">Pilaff<br> Description:Looks good<br> Additional information: <ul> <li>Lactose Free</li> <li>Gluten free</li> </ul> </td> <td>5€</td> <td>6€</td> <td>7€</td> </tr> <tr> <td colspan="4">Dessert</td> </tr> <tr> <td class="exept">Classic Tiramisu<br> Description:Looks good, tastes okay<br> Additional information: <ul></ul> </td> <td>10.95€</td> <td>19.95€</td> <td></td> </tr> <tr> <td class="exept">Pavlova<br> Description:Pavlova typically garnished with strawberries, passionfruit, kiwifruit and cream. Pavlova is a meringue-based dessert named after the Russian ballerina Anna Pavlova. It is a meringue dessert with a crisp crust and soft, light inside, usually topped with fruit and whipped cream.<br> Additional information: <ul></ul> </td> <td>13.13€</td> <td></td> <td>27.99€</td> </tr> </tbody> </table> <table> <thead> <tr class="border"> <td align="center" colspan="4"> <h2>Drinks</h2> </td> </tr> <tr class="TableHead"> <th rowspan="2">Name</th> <th colspan="3">Price</th> </tr> <tr> <th>Small</th> <th>Medium</th> <th>Large</th> </tr> </thead> <tbody> <tr> <td colspan="4">Alcohol</td> </tr> <tr> <td class="exept">Jem Beam<br> Description:Whisky</td> <td>2.95€</td> <td>14.95€</td> <td></td> </tr> <tr> <td class="exept">Saku Kuld<br> Description:Saku Kuld is the finest beer of Estonia’s oldest brewery. It is the cream of the crop when it comes to beers. Saku Kuld is a masterpiece that entwines two centuries of brewing traditions with the latest technology.</td> <td>3.50€</td> <td>5€</td> <td></td> </tr> <tr> <td colspan="4">Non-Alcohol</td> </tr> <tr> <td class="exept">Apple juice<br> Description:Freshly pressed from green apples</td> <td>1.05€</td> <td>1.55€</td> <td></td> </tr> <tr> <td class="exept">Still water<br> Description:From tap</td> <td>1€</td> <td>1.50€</td> <td>2€</td> </tr> </tbody> </table> </body> </html>