The names of most elements describe the semantic meaning of the content they contain. Often, however, this content needs to be formatted and displayed to users. For this to occur, there must be a step where formatting information is applied to the XML document, and the semantic markup is transformed into presentational markup. There is a variety of choices for the syntax of this presentation layer. However, two are particularly noteworthy:
CSS is a non-XML syntax for describing the appearance of particular elements in a document. CSS is a very straightforward language; no transformation is performed. The parsed character data of the document is presented more or less exactly as it appears in the XML document, although, of course, you can always transform the document with XSLT and then apply a CSS stylesheet to it if you need to rearrange the content of a document before showing it to the user . A CSS stylesheet does not change the markup of an XML document at all; it merely applies styles to the content that already exists.
By way of contrast, XSL-FO is a complete XML application for describing the layout of text on a page. It has elements that represent pages, blocks of text on the pages, graphics, horizontal rules, and more. You do not normally work with this application directly. Instead, you write an XSLT stylesheet that transforms your document's native markup into XSL-FO. The application rendering the document reads the XSL-FO and displays it to the user.
In this chapter and the next , we'll demonstrate the features of the two major stylesheet languages by applying them to the simple well- formed XML document shown in Example 13-1. This document does not have a document type declaration and is not valid, although a DTD or schema could be added easily enough. In general, DTDs and schemas don't have any impact on stylesheets, except insofar as they change the document content through entity declarations, default attribute values, and the like.
Example 13-1. Marjorie Anderson's recipe for Southern Corn Bread
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml-stylesheet type="text/css" href="recipe.css"?> <recipe source="Marjorie Anderson"> <dish>Southern Corn Bread</dish> <ingredients> <ingredient> <quantity>1 cup</quantity> <component>flour</component> </ingredient> <ingredient> <quantity>4 tablespoons</quantity> <component>Royal Baking Powder</component> </ingredient> <ingredient> <quantity> 1 / 2 teaspoon</quantity> <component>salt</component> </ingredient> <ingredient> <quantity>1 cup</quantity> <component>corn meal</component> </ingredient> <ingredient> <quantity>1 1 / 2 cups</quantity> <component>whole milk</component> </ingredient> <ingredient> <quantity>4 tablespoons</quantity> <component>melted butter</component> </ingredient> </ingredients> <directions> <step>Sift flour, baking powder, sugar & salt together.</step> <step>Add 1 cup corn meal.</step> <step> Beat egg in cup and add beaten egg and 1 1 / 2 cups whole milk to make a batter. Stir well. </step> <step> Add melted shortening and beat until light and thoroughly mixed. </step> <step> Pour into greased shallow pan or greased muffin rings. </step> <step> Bake in hot oven at <temperature>425 F</temperature> for <duration>25 minutes</duration>. </step> <step optional="yes"> Cut into squares if cooked in shallow pan. </step> </directions> <story> After my mother-in-law <person>Marjorie Anderson</person> died, Beth and I found this recipe written on the "extra recipes" page in a local cookbook in her cupboard. This was published by The Episcopal Churchwomen, Church of Ascension, <city>Mt. Sterling</city>, <state>Kentucky</state>. </story> </recipe>