- Sams Teach Yourself XML in 21 Days, Third Edition
- Table of Contents
- About the Author
- Acknowledgments
- We Want to Hear from You!
- Introduction
- Part I: At a Glance
- Day 1. Welcome to XML
- All About Markup Languages
- All About XML
- Looking at XML in a Browser
- Working with XML Data Yourself
- Structuring Your Data
- Creating Well-Formed XML Documents
- Creating Valid XML Documents
- How XML Is Used in the Real World
- Online XML Resources
- Summary
- Q&A
- Workshop
- Day 2. Creating XML Documents
- Choosing an XML Editor
- Using XML Browsers
- Using XML Validators
- Creating XML Documents Piece by Piece
- Creating Prologs
- Creating an XML Declaration
- Creating XML Comments
- Creating Processing Instructions
- Creating Tags and Elements
- Creating CDATA Sections
- Handling Entities
- Summary
- Q&A
- Workshop
- Day 3. Creating Well-Formed XML Documents
- What Makes an XML Document Well-Formed?
- Creating an Example XML Document
- Understanding the Well-Formedness Constraints
- Using XML Namespaces
- Understanding XML Infosets
- Understanding Canonical XML
- Summary
- Q&A
- Workshop
- Day 4. Creating Valid XML Documents: DTDs
- All About DTDs
- Validating a Document by Using a DTD
- Creating Element Content Models
- Commenting a DTD
- Supporting External DTDs
- Handling Namespaces in DTDs
- Summary
- Q&A
- Workshop
- Declaring Attributes in DTDs
- Day 5. Handling Attributes and Entities in DTDs
- Specifying Default Values
- Specifying Attribute Types
- Handling Entities
- Summary
- Q&A
- Workshop
- Day 6. Creating Valid XML Documents: XML Schemas
- Using XML Schema Tools
- Creating XML Schemas
- Dissecting an XML Schema
- The Built-in XML Schema Elements
- Creating Elements and Types
- Specifying a Number of Elements
- Specifying Element Default Values
- Creating Attributes
- Summary
- Q&A
- Workshop
- Day 7. Creating Types in XML Schemas
- Restricting Simple Types by Using XML Schema Facets
- Creating XML Schema Choices
- Using Anonymous Type Definitions
- Declaring Empty Elements
- Declaring Mixed-Content Elements
- Grouping Elements Together
- Grouping Attributes Together
- Declaring all Groups
- Handling Namespaces in Schemas
- Annotating an XML Schema
- Summary
- Q&A
- Workshop
- Part I. In Review
- Well-Formed Documents
- Valid Documents
- Part II: At a Glance
- Day 8. Formatting XML by Using Cascading Style Sheets
- Our Sample XML Document
- Introducing CSS
- Connecting CSS Style Sheets and XML Documents
- Creating Style Sheet Selectors
- Using Inline Styles
- Creating Style Rule Specifications in Style Sheets
- Summary
- Q&A
- Workshop
- Day 9. Formatting XML by Using XSLT
- Introducing XSLT
- Transforming XML by Using XSLT
- Writing XSLT Style Sheets
- Using <xsl:apply-templates>
- Using <xsl:value-of> and <xsl:for-each>
- Matching Nodes by Using the match Attribute
- Working with the select Attribute and XPath
- Using <xsl:copy>
- Using <xsl:if>
- Using <xsl:choose>
- Specifying the Output Document Type
- Summary
- Q&A
- Workshop
- Day 10. Working with XSL Formatting Objects
- Introducing XSL-FO
- Using XSL-FO
- Using XSL Formatting Objects and Properties
- Building an XSL-FO Document
- Handling Inline Formatting
- Formatting Lists
- Formatting Tables
- Summary
- Q&A
- Workshop
- Part II. In Review
- Using CSS
- Using XSLT
- Using XSL-FO
- Part III: At a Glance
- Day 11. Extending HTML with XHTML
- Why XHTML?
- Writing XHTML Documents
- Validating XHTML Documents
- The Basic XHTML Elements
- Organizing Text
- Formatting Text
- Selecting Fonts: <font>
- Comments: <!-->
- Summary
- Q&A
- Workshop
- Day 12. Putting XHTML to Work
- Creating Hyperlinks: <a>
- Linking to Other Documents: <link>
- Handling Images: <img>
- Creating Frame Documents: <frameset>
- Creating Frames: <frame>
- Creating Embedded Style Sheets: <style>
- Formatting Tables: <table>
- Creating Table Rows: <tr>
- Formatting Table Headers: <th>
- Formatting Table Data: <td>
- Extending XHTML
- Summary
- Q&A
- Workshop
- Day 13. Creating Graphics and Multimedia: SVG and SMIL
- Introducing SVG
- Creating an SVG Document
- Creating Rectangles
- Adobe's SVG Viewer
- Using CSS Styles
- Creating Circles
- Creating Ellipses
- Creating Lines
- Creating Polylines
- Creating Polygons
- Creating Text
- Creating Gradients
- Creating Paths
- Creating Text Paths
- Creating Groups and Transformations
- Creating Animation
- Creating Links
- Creating Scripts
- Embedding SVG in HTML
- Introducing SMIL
- Summary
- Q&A
- Workshop
- Day 14. Handling XLinks, XPointers, and XForms
- Introducing XLinks
- Beyond Simple XLinks
- Introducing XPointers
- Introducing XBase
- Introducing XForms
- Summary
- Workshop
- Part III. In Review
- Part IV: At a Glance
- Day 15. Using JavaScript and XML
- Introducing the W3C DOM
- Introducing the DOM Objects
- Working with the XML DOM in JavaScript
- Searching for Elements by Name
- Reading Attribute Values
- Getting All XML Data from a Document
- Validating XML Documents by Using DTDs
- Summary
- Q&A
- Workshop
- Day 16. Using Java and .NET: DOM
- Using Java to Read XML Data
- Finding Elements by Name
- Creating an XML Browser by Using Java
- Navigating Through XML Documents
- Writing XML by Using Java
- Summary
- Q&A
- Workshop
- Day 17. Using Java and .NET: SAX
- An Overview of SAX
- Using SAX
- Using SAX to Find Elements by Name
- Creating an XML Browser by Using Java and SAX
- Navigating Through XML Documents by Using SAX
- Writing XML by Using Java and SAX
- Summary
- Q&A
- Workshop
- Day 18. Working with SOAP and RDF
- Introducing SOAP
- A SOAP Example in .NET
- A SOAP Example in Java
- Introducing RDF
- Summary
- Q&A
- Workshop
- Part IV. In Review
- Part V: At a Glance
- Day 19. Handling XML Data Binding
- Introducing DSOs
- Binding HTML Elements to HTML Data
- Binding HTML Elements to XML Data
- Binding HTML Tables to XML Data
- Accessing Individual Data Fields
- Binding HTML Elements to XML Data by Using the XML DSO
- Binding HTML Tables to XML Data by Using the XML DSO
- Searching XML Data by Using a DSO and JavaScript
- Handling Hierarchical XML Data
- Summary
- Q&A
- Workshop
- Day 20. Working with XML and Databases
- XML, Databases, and ASP
- Storing Databases as XML
- Using XPath with a Database
- Introducing XQuery
- Summary
- Q&A
- Workshop
- Day 21. Handling XML in .NET
- Creating and Editing an XML Document in .NET
- From XML to Databases and Back
- Reading and Writing XML in .NET Code
- Using XML Controls to Display Formatted XML
- Creating XML Web Services
- Summary
- Q&A
- Workshop
- Part V. In Review
- Appendix A. Quiz Answers
- Quiz Answers for Day 1
- Quiz Answers for Day 2
- Quiz Answers for Day 3
- Quiz Answers for Day 4
- Quiz Answers for Day 5
- Quiz Answers for Day 6
- Quiz Answers for Day 7
- Quiz Answers for Day 8
- Quiz Answers for Day 9
- Quiz Answers for Day 10
- Quiz Answers for Day 11
- Quiz Answers for Day 12
- Quiz Answers for Day 13
- Quiz Answers for Day 14
- Quiz Answers for Day 15
- Quiz Answers for Day 16
- Quiz Answers for Day 17
- Quiz Answers for Day 18
- Quiz Answers for Day 19
- Quiz Answers for Day 20
- Quiz Answers for Day 21
Formatting Tables
In addition to lists, you can also format tables by using XSL-FO. Tables in XSL-FO work something like tables in HTML. These are the XSL-FO elements that you use to create tables:
- <fo:table-and-caption>
- <fo:table>
- <fo:table-column>
- <fo:table-caption>
- <fo:table-header>
- <fo:table-footer>
- <fo:table-body>
- <fo:table-row>
- <fo:table-cell>
You create a table by using the <fo:table> element, and then you format each column by using <fo:table-column> elements. Next, you create a table body by using the <table-body> element, and you add rows to the table body by using <table-row> elements. Finally, you add cells to each row by using the <table-cell> element. Listing 10.8 shows an example that displays the flowers and birds for the states example. (Note that you're simply using boldface on text to make a table header in this example because FOP doesn't fully support the <table-header> element.)
Example 10.8. Creating a Table by Using XSL-FO (ch10_13.fo)
<?xml version="1.0" encoding="UTF-8"?> <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> <fo:layout-master-set> <fo:simple-page-master margin-right="20mm" margin-left="20mm" margin-bottom="20mm" margin-top="20mm" page-width="200mm" page-height="300mm" master-name="mainPage"> <fo:region-body margin-right="0mm" margin-left="0mm" margin-bottom="10mm" margin-top="0mm"/> <fo:region-after extent="20mm"/> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-reference="mainPage"> <fo:flow flow-name="xsl-region-body"> <fo:block font-size="28pt" line-height="36pt" padding-after="12pt"> Creating XSL-FO Tables </fo:block> <fo:table width="16cm" table-layout="fixed"> <fo:table-column column-number="1" column-width="30mm"> </fo:table-column> <fo:table-column column-number="2" column-width="30mm"> </fo:table-column> <fo:table-column column-number="3" column-width="30mm"> </fo:table-column> <fo:table-body> <fo:table-row line-height="26pt"> <fo:table-cell column-number="1" border-style="solid"> <fo:block font-family="sans-serif" font-size="20pt" font-weight="bold"> State </fo:block> </fo:table-cell> <fo:table-cell column-number="2" border-style="solid"> <fo:block font-family="sans-serif" font-size="20pt" font-weight="bold"> Flower </fo:block> </fo:table-cell> <fo:table-cell column-number="3" border-style="solid"> <fo:block font-family="sans-serif" font-size="20pt" font-weight="bold"> Bird </fo:block> </fo:table-cell> </fo:table-row> <fo:table-row line-height="26pt"> <fo:table-cell column-number="1" border-style="solid"> <fo:block font-family="sans-serif" font-size="20pt"> California </fo:block> </fo:table-cell> <fo:table-cell column-number="2" border-style="solid"> <fo:block font-family="sans-serif" font-size="20pt"> Quail </fo:block> </fo:table-cell> <fo:table-cell column-number="3" border-style="solid"> <fo:block font-family="sans-serif" font-size="20pt"> Golden Poppy </fo:block> </fo:table-cell> </fo:table-row> <fo:table-row line-height="26pt"> <fo:table-cell column-number="1" border-style="solid"> <fo:block font-family="sans-serif" font-size="20pt"> Massachusetts </fo:block> </fo:table-cell> <fo:table-cell column-number="2" border-style="solid"> <fo:block font-family="sans-serif" font-size="20pt"> Chickadee </fo:block> </fo:table-cell> <fo:table-cell column-number="3" border-style="solid"> <fo:block font-family="sans-serif" font-size="20pt"> Mayflower </fo:block> </fo:table-cell> </fo:table-row> <fo:table-row line-height="26pt"> <fo:table-cell column-number="1" border-style="solid"> <fo:block font-family="sans-serif" font-size="20pt"> New York </fo:block> </fo:table-cell> <fo:table-cell column-number="2" border-style="solid"> <fo:block font-family="sans-serif" font-size="20pt"> Bluebird </fo:block> </fo:table-cell> <fo:table-cell column-number="3" border-style="solid"> <fo:block font-family="sans-serif" font-size="20pt"> Rose </fo:block> </fo:table-cell> </fo:table-row> </fo:table-body> </fo:table> </fo:flow> </fo:page-sequence> </fo:root>
Figure 10.6 shows this table after ch10_13.fo is processed into ch10_14.pdf. As the figure shows, the table appears as you've designed it to appear.
Figure 10.6 Creating a table by using XSL-FO.
This completes your look at formatting XML with XSL-FO, and your look at formatting XSL in general. Starting tomorrow you'll see XML in action in the real world, beginning with Extensible Hypertext Markup Language (XHTML).