- 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
Why XHTML?
The main reason the W3C introduced XHTML was that HTML has gotten pretty sloppy. In an effort to serve everybody, HTML browsers tolerate more and more mistakes in HTML; some people say that more than 50% of the code in modern browsers is there to deal with buggy HTML. To fix that, the W3C created XHTML, which uses stricter rules. XHTML is XML, after all, so XHTML documents must be at least well-formed to be considered XHTML (in fact, the W3C also says they should be valid).
Another reason that XHTML was introduced was that, as its name indicates, it can be extended. HTML is limited by the HTML specification (see http://www.w3.org/TR/html4) to a fixed set of tags. In XHTML, the idea is that you can define and add your own tags, such as <author>, <data>, <phoneNumber>, and so on. (Note, however, that HTML browsers won't know how to deal with those new XHTML tags yet.)
Let's take a look at an example to see what XHTML looks like. Let's start with the standard HTML document in Listing 11.1.
Example 11.1. An Example of an HTML Document (ch11_01.html)
<HTML> <HEAD> <TITLE> An HTML Document </TITLE> </HEAD> <BODY> <H1> Long Live HTML! </H1> This is an HTML document. <BR> Pretty good, eh? </BODY> </HTML>
Figure 11.1 shows this HTML document in an HTML browser.
Figure 11.1 An HTML document in a Web browser.
Now take a look at ch11_02.html in Listing 11.2, which is the same HTML document as in Listing 11.1, rewritten in XHTML. (You can give an XHTML document the extension .html when you want to view it in a browser, or you can give it the extension .xml when you want to use it with an XML processor.) There are some differences here from Listing 11.1.
Example 11.2. An Example of an XHTML Document (ch11_02.html)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title> An XHTML Document </title> </head> <body> <h1> Long Live XHTML! </h1> This is an XHTML document. <br/> Pretty good, eh? </body> </html>
Figure 11.2 shows this new XHTML document in a browser. As the figure shows, despite the differences between the two documents, the XHTML document works just as the HTML one does, and it looks very much like the HTML document.
Figure 11.2 An XHTML document in a Web browser.
Let's take apart this XHTML example in the following sections to see what's going on here. The first step is to take a look at XHTML itself.
Introducing XHTML 1.0
XHTML 1.0 is the current version of XHTML. XHTML is a rewritten version of HTML 4.0. (HTML is locked now; no future versions will be created; the final recommendation is at http://www.w3.org/TR/html4.) The official recommendation for XHTML 1.0 is at http://www.w3.org/TR/xhtml1.
The W3C anticipated that it would take some time for XHTML to be accepted, so there are really three versions of XHTML 1.0: Strict (omits all elements and attributes deprecated [that is, made obsolete]in HTML 4.0), Transitional (a looser version, more like HTML as it's used today), and Frameset (the same as transitional, but for use with frames instead of the <body> element). Each of these versions has its own DTD, and that DTD can be used by XML processors to validate XHTML document. Here's an overview of these DTDs:
- The Strict XHTML 1.0 DTD— This DTD is based on HTML 4.0, and it omits support for elements and attributes that the W3C deprecated in HTML 4.0. This DTD is at http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-strict.dtd.
- The Transitional XHTML 1.0 DTD— This DTD, which is based on the Transitional HTML 4.0 DTD, supports many elements and attributes that were deprecated in HTML 4.0, but are still popular, such as the <CENTER> element. Also called the "loose" DTD, this is the most popular version of XHTML. This DTD is at http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-transitional.dtd.
- The Frameset XHTML 1.0 DTD— This DTD is the same as the Transitional DTD, but it uses the <frameset> element for frames rather than the <body> element. This DTD is at http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-frameset.dtd.
Because the most popular version of XHTML today is the Transitional version, you'll use that version today.
Introducing XHTML 1.1
XHTML version 1.1 exists as a W3C recommendation, which is at http://www.w3.org/TR/xhtml11. XHTML 1.1 is a strict version of XHTML, and has yet to be really accepted among Web page authors. XHTML 1.1 eliminates all the elements and attributes that were deprecated in HTML 4.0—and a few more as well. The differences between XHTML 1.0 and XHTML 1.1 are listed at http://www.w3.org/TR/xhtml11/changes.html#a_changes.
XHTML 1.1's major difference from XHTML 1.0 is that its DTD is designed to be modular. (The W3C refers to XHTML 1.1 as "modular XHTML.") This means that the XHTML 1.1 DTD is really very short; it's simply a DTD driver (refer to Day 5, "Handling Attributes and Entities in DTDs") and just includes other DTDs as needed. It is available at http://www.w3.org/TR/xhtml11/xhtml11_dtd.html#a_xhtml11_driver. The idea here is that you can tailor XHTML 1.1 as you like for specific devices, which might not support all XHTML. For example, a PDA or cell phone might not support hyperlinks, and so you can omit those in a DTD driver, as discussed on Day 5. (However, several modules are marked "required" in the XHTML 1.1 DTD, and they cannot be omitted.)
Introducing XHTML 2.0
The newest version of XHTML is XHTML 2.0, currently in working draft form. The XHTML 2.0 Working Draft is at http://www.w3.org/TR/xhtml2.
Like XHTML 1.1, XHTML 2.0 is modular. However, it appears to be a radical rethinking of the HTML world; XHTML 2.0 strips out all display elements, for example. Here's what the current working draft says:
- The original version of HTML was designed to represent the structure of a document, not its presentation. Even though presentation-oriented elements were later added to the language by browser manufacturers, HTML is at heart a document structuring language. XHTML2 takes HTML back to these roots, by removing all presentation elements, and subordinating all presentation to stylesheets. This gives greater flexibility, and more powerful presentation possibilities, since CSS can do more than the presentational elements of HTML ever did.
The XHTML 2.0 DTD is not yet published fully; the closest you can come right now is a selection of modules, which are available at http://www.w3.org/TR/xhtml2/xhtml2-doctype.html#s_doctype.
XHTML 2.0 is not designed to be backward compatible with HTML or earlier versions of XHTML. In addition, there are new parts to XHTML 2.0 that don't appear in earlier versions, such as support for XForms and XML Events. However, there's little support for these items as yet.
Introducing XHTML Basic
There's one more version XHTML, now a W3C recommendation—XHTML Basic. XHTML Basic is a very small subset of XHTML, reduced to a very minimum so that it can be supported by devices considerably simpler than standard PCs, such as PDAs and cell phones. The recommendation for XHTML Basic is at http://www.w3.org/TR/xhtml-basic. Its DTD appears at http://www.w3.org/TR/xhtml-basic/#a_driver.
Now that you've been introduced to XHTML, let's start using it.