Creating a Markup Language (Con't) - Page 4
November 14, 2001
<order_history customer_id="1">
<order id="1">
<customer_address address_type="Ship To Address"
customer_id="1"/>
<order_date sayas="May 18, 2001 at 16 17 hours">
2001-05-18T16:17:16 </order_date>
<order_status>Processing</order_status>
<tax>0.09</tax>
<shipping_charge>0.4</shipping_charge>
<total_charge>2.48</total_charge>
<product id="1" quantity="3"/>
<product id="3" quantity="1"/>
</order>
</order_history>
Finally, to provide the user with detailed order information, the
full product name and description must be available. This will
also allow the user to ask for a product list, and eventually we
can perhaps extend the interface to enable products to be ordered
by voice. Note that the <product_list> is not
associated with any particular <customer_record>.
Also note that, ideally, the <product_list> wouldn't
actually be in the same document as the customer data. However,
we'll keep everything in one file here to avoid the issue of
linking between documents. It might amuse us to picture the
harried developers reaching the same conclusion to save time and
give themselves some chance of meeting their beloved boss's
deadline. Later on, they will no doubt want to refine the process
and generate smaller XML documents that can be processed more
quickly.
</customer_record>
<product_list>
<product id="1" name="MIXED1000" price="1.99">
Mixed Bag of 1000 Rubber Bands</product>\
<product id="2" name="MIXED5000" price="4.09">
Mixed Bag of 5000 Rubber Bands</product>
<product id="3" name="RED1000" price="2.19">
Bag of 1000 Red Rubber Bands</product>
<product id="4" name="RED10000" price="17.49">
Bag of 10000 Red Rubber Bands</product>
<product id="5" name="BLUE1000" price="0.99">
Bag of 1000 Blue Rubber Bands</product>
<product id="6" name="BLUE10000" price="8.99">
Bag of 10000 Blue Rubber Bands</product>
</product_list>
</myrubberbands>
This example is formatted to fit the space above, and for
readability, adds quite a bit of whitespace between
<product></product> tags that would probably not
occur in a real document.
Generating MyRubberbandsML
Now we have examined the existing database, outlined a suitable
voice interface for it, and defined our source markup language
and the method for generating it. Now, we are ready to create a
stylesheet to convert it to a VoiceXML form implementing the
design we decided on in the previous section Designing A Voice
Interface. This stylesheet,
myrubberbands2vxml.xsl, is quite lengthy, and can be
found in its entirety in the code download. Here, I shall pick
out just the important points in the code for discussion;
including the dynamic generation of grammars, some VoiceXML
features worthy of particular attention, and fundamental XSL
concepts used.
Creating a Markup Language - Page 3
Early Adopter VoiceXML
VoiceXML Stylesheet - Page 5
|