Bob's Burgers: Difference between revisions
From ICO wiki
Jump to navigationJump to search
Line 247: | Line 247: | ||
==XSD== | ==XSD== | ||
<pre> | <pre> | ||
<?xml version="1.0" encoding="utf-8"?> | |||
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> | |||
<xs:element name="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> | |||
</pre> | |||
==XSLT HTML== | ==XSLT HTML== | ||
<pre> | <pre> |
Revision as of 19:44, 19 March 2017
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>