This is an example of text broken into long
What’s up?
What’s up?The parent node.
What’s up?
What’s up?Nothing much.
What would you like to drink?Whatever you have is fine.
What would you like to drink?
elements in the page, gives them a solid brown border three pixels wide, and sets the background color to blue: p { margin-left:5%;
width:90%;
border: solid 3px brown; background-color:blue }
That’s the essence of CSS; the rest is a multitude of detail. In particular, you need to know the following details: • the syntax of selectors • names of properties and their possible values • absolute and relative units of measurement • color representations • simple rules of inheritance All of these can be found at www.w3.org/Style/CSS/ and multiple excellent tutorials on the Web and in print. All the major browsers (Internet Explorer, Netscape, Mozilla, and Opera) support CSS for HTML quite well.
CSS for XML CSS can also be used with XML. Consider the simple schematic XML document shown in Listing 1-16 (in which r stands for root, and c stands for child): Listing 1-16. Simple XML Document, xml4css.xml
31
031ch01.qxp 5/10/02 2:40 PM Page 32
Chapter 1
The second line of this document (technically a processing instruction) associates a CSS stylesheet with it. The stylesheet looks like Listing 1-17. Listing 1-17. Simple CSS Stylesheet, style0.css r {background-color:#ffffef} c, d { display:block} c {padding:5;margin:5; border:solid 3px; width:200; text-align:center; font-family:verdana; font-size:14; color:maroon } d {background-color:lightblue; margin-left:50; border:solid 3px; width:200; text-align:center; font-family:verdana; font-size:36; color:green }
If you place xml4css.xml and style0.css in the same folder and open the XML file in Internet Explore 6 or another XML- and CSS-aware browser, the result will look like Figure 1-7.
Figure 1-7. XML with CSS in the browser
32
031ch01.qxp 5/10/02 2:41 PM Page 33
Welcome to XML
XSL, XSLT, and XSL-FO For all its simplicity and effectiveness, CSS has the following limitations: • CSS syntax is not XML and so requires a different parser. • CSS lacks facilities for selecting, sorting, and otherwise rearranging data. • CSS lacks high-end layout capabilities, such as multiple column layout, footnote placement, and conditional formatting. When XML was invented, work immediately started on a new stylesheet language to accompany XML. Initially, there was a single XSL language whose design closely followed DSSSL, the stylesheet language for SGML created by James Clark (who was also the technical lead in creating XML). The goal was to produce a stylesheet language for specifying how an XML document is to be displayed in multiple media, including the Web browser. Although that goal has not yet been reached, two other specifications—XSLT and XPath (both having to do with transforming rather than formatting XML)—became W3C recommendations in November 1999, even though they did not exist as independent projects until fairly late in that year. As the XSL project unfolded, different parts of it grew at different speeds, and their relative importance and state of preparedness were changing. Eventually, XSLT and XPath were carved out into separate projects and completed, whereas the document formatting part spent another two years before it became Recommendation in October 2001. That a style sheet language was needed for XML to function was obvious from the beginning: if users can define their own elements, they have to be able to specify how those elements will look when displayed in the browser window or other media. Also, from the beginning, the intent was to give XSL the ability to add, remove, and reorder the elements of the document tree, so that, for instance, the stylesheet could handle multiple reports from a database table, showing different fields and sorting records in different ways. As part of this functionality, XSL needed a way of referring to nodes and sets of nodes in the tree to select them for processing. Initially, the tree-transformation part of XSL was just an aid to the formatting part, but it proved to be easier to develop and build a consensus about. As XML’s role was evolving from a tool for document markup to (also being) a tool for data interchange among applications and components of applications, the transformation “module” was developing an independent significance, totally unrelated to formatting and display. At some point, a single XSL split into XSL for formatting and XSL for transformation (XSLT). The XSLT part was taken over by James Clark who brought it to a swift completion while at the same time producing xt, an open-source reference implementation of the XSLT processor.
33
031ch01.qxp 5/10/02 2:41 PM Page 34
Chapter 1
NOTE James Clark has since discontinued support for XT. It is supported and further developed by http://4xt.org.
As XSLT was taking shape, it was realized that the ability to select sets of nodes in a systematic way was needed not only for tree transformations but also for linking. As a result, that project also developed an independent existence under the name of XPath, and it was completed (on the same date as XSLT) by James Clark and Steve DeRose. The use of XSLT spread rapidly. Several excellent implementations are now available from Microsoft, Apache (based on work initially done at Lotus and Sun), Oracle, and Michael Kay. Of all the XML technologies that have been developed since 1997, XSLT and XPath are unquestionably the most successful and important. XSL-FO The formatting part of XSL took much longer to develop: it became a W3C recommendation only in October 2001. Its target area of application is high-end publishing, not necessarily in the browser, and not even necessarily in electronic form. To quote the specification: “Given a class of arbitrarily structured XML documents or data files, designers use an XSL stylesheet to express their intentions about how that structured content should be presented; that is, how the source content should be styled, laid out, and paginated onto some presentation medium, such as a window in a Web browser or a handheld device, or a set of physical pages in a catalog, report, pamphlet, or book” (www.w3.org/TR/xsl/slice1.html#section-N629-Introduction-and-Overview). To use XSL-FO, you need, in effect, two programs: an XSLT processor that converts XML to be displayed into an XSL-FO document and a rendering engine. In practice, the XSLT program operating as part of XSL-FO will typically perform two operations: a “pure” transformation to create the desired view of XML data (filter, rearrange, and add content as needed) and the XSL-FO transformation, to produce the desired display description. In this book, we concentrate on pure transformations, but we will show how to arrange multiple XSLT programs in a processing pipeline.
34
031ch01.qxp 5/10/02 2:41 PM Page 35
Welcome to XML
Displaying XML on the Client With the relationships among formatting languages clarified, we can list possible ways to display XML in the browser. Background information follows Table 1-2. Table 1-2. Approaches to Displaying XML in the Browser APPROACH
BROWSER REQUIREMENTS
Display XML directly, using CSS
XML- and CSS-aware browser
Transform XML into (X)HTML on the client using XSLT and display
XML- and XSLT-aware browser
Transform XML into (X)HTML on the server Any HTML browser using XSLT or programmatic APIs and display Use XSLT to transform XML into an XSL-FO document on the server; further transform into a displayable format such as PDF
Any browser with a PDF plugin
XML+CSS The latest versions of Internet Explorer (IE), Netscape, Mozilla, and Opera implement XML parsing and the basics of CSS styling quite well; so, for very simple cases, the first approach is workable. Opera and Mozilla are pushing this approach further by implementing CSS2 support for XML (in addition to HTML). With CSS2, one can display bulleted lists and tables directly in XML without transforming it into HTML. However, IE lags in this respect, and there are reports that Microsoft does not consider XML+CSS an important feature to support (http://lists.xml.org/archives/xml-dev/200109/msg00194.html). XML+XSLT on the Client, and More on Processing Pipelines The idea is to be able to give the browser the URL of an XML document that contains another URL for the stylesheet (which is also an XML document), and the browser displays the output of the transformation:
type=”text/xsl”?>
35
031ch01.qxp 5/10/02 2:41 PM Page 36
Chapter 1
Consider the steps involved in this processing chain: • As the document is loaded as a stream of characters, the XML parser within the browser parses it into a tree and identifies the processing instruction for the stylesheet. • The stylesheet is also loaded as a stream of characters and parsed into a tree. • The XSLT processor within the browser applies the stylesheet to the input tree; the browser renders the result using either a default stylesheet for HTML or a stylesheet for XML. The salient features of the process are as follows. • Both the input document and the stylesheet can be anywhere on the Internet. • The software involved—the XML parser and the XSLT processor—is standard and free. • The output of the process can be either displayed in the browser, piped into another processor, or both. At this point, we would like to recapitulate, with more background than before, the reasons why XML has been so quickly and widely accepted. • It is easy to switch between the character-sequence view of XML and the tree-structured-data view of XML. The software to perform that switch (the XML parser) is standard, of high quality, ubiquitous, and free. • Character sequences are easy to send over the network using standard protocols. • Tree-structured data is easy to work with. In particular, it is easy to transform one tree into another, changing either the text content, the markup, or both. The software that performs these tasks (the XSLT processor) is standard, of high quality, ubiquitous, and free. The APIs for working with XML tree data are open and widely supported standards. • Because XML can encode both data and metadata, applications that communicate using XML can discover each other and establish a communication channel without prior arrangements.
36
031ch01.qxp 5/10/02 2:41 PM Page 37
Welcome to XML
• It is easy to construct pipelines of XML processors in which each processor receives XML data, does some transformation and/or computation on it, and sends the result as XML to the next processor. (See Figure 1-8.)
Figure 1-8. XML processing pipeline
Four adjectives are repeated in this list of features: easy, standard, ubiquitous, and free. These are the key to XML’s success. XML is based on several simple ideas involving free software and wide acceptance. They combine to make XML a major enabling technology for interoperable distributed applications, themselves an enabling technology for commerce and cooperation. Browser Support XSLT support on the client side is, as of this writing, available for IE on the Windows platform, Mozilla, and Netscape. Mozilla and Netscape offer less support, but continue to improve. IE support follows a complex trajectory that deserves a separate section.
37
031ch01.qxp 5/10/02 2:41 PM Page 38
Chapter 1
XSLT, Internet Explorer, and MSXML Microsoft released a browser with XSLT support (IE5) before XSLT was finalized as a W3C recommendation. IE5, with MSXML 2 as XML parser and XSLT processor, supported a working draft of XSLT that was very different from the eventual standard. This resulted in great confusion among IE5 users and a great deal of indignation among the experts who had to explain in many forums why XSL files that work perfectly well in Internet Explorer do not work properly with other processors. MSXML 3 has implemented a fully conformant version of both the XML parser and XSLT processor. Although the browser continued to ship with the old nonconformant version, it is possible to download MSXSML 3 and install it with IE5.5. (See Appendix A for installation instructions.) The result is that you can indeed test XSLT programs on XML data by simply opening an XML file in the browser (assuming the file has a link to an XSLT stylesheet). MSXML 4 further improves both the parser and the XSLT processor, but, somewhat paradoxically, IE6 does not ship with MSXML 4. It does ship with the fully-conformant MSXML3. As for MSXML 4, it cannot be used with a browser at all, except via a script that creates the appropriate object and calls its methods. (You will see examples in later chapters.) In summary, XSLT support in major browsers (IE, Netscape, Mozilla) continues to improve. The strategy of transforming XML into XHTML for display in the browser may soon become a viable option, if you don’t mind additional computational load on your client machine. XML+XSLT => HTML on the Server This approach puts minimal requirements on the client and also reduces its computational load. Its drawback is that the client receives a document stripped of its metadata tags, which are replaced by the generic tags of HTML: even in a well-designed HTML or XHTML document, it is not easy to distinguish between a table of books and ISBNs and a table of last names and email addresses. XML+XSLT => XSL-FO on the Server This approach, as we mentioned, is not quite ready for prime time: the XSL-FO specification has been released as a W3C recommendation very recently (October 17, 2001), and rendering engines for browsers are not even mentioned in the list of features for the next release. (However, it is possible to transform XSL-FO into PDF and display using an Adobe plugin.) In general, XSL-FO intends to compete with professional formatting languages and tools such as TeX, QuarkXPress, and FrameMaker. For Web page display in the browser, CSS in combination with XSLT is completely adequate.
38
031ch01.qxp 5/10/02 2:41 PM Page 39
Welcome to XML
Conclusion In this chapter, we have covered the very basics of XML: what it is, how it evolves, who is in charge, and why it is great. The key concepts we introduced involve language, markup language, syntax (grammar), parsing, and interpretation. We explained how an XML parser converts a well-formed XML document into a tree structure. We presented the basics of XSLT. In the end, we had enough background to make the case that XML is the key technology of the Internet because it enables interoperability among programs and cooperation among people and organizations.
39
031ch01.qxp 5/10/02 2:41 PM Page 40
031ch02.qxp 5/10/02 2:39 PM Page 41
CHAPTER 2
Well-Formed Documents and Namespaces WITH BASIC DEFINITIONS and examples behind us, we can move on to a detailed discussion of the specifications. In this chapter, we concentrate on documents without DTDs because they have a simpler structure. Although occasionally mentioned in this chapter, DTDs and other approaches to validation (such as XML Schema and RELAX NG) will be introduced in Chapter 3. In outline, this chapter proceeds as follows: • HTML vs. XHTML • XHTML modularization and XHTML Basic • well-formed XML documents • names and namespaces • global attributes and XLink • namespace URI and RDDL (XHTML Basic + XLink) We will start with a comparison of HTML and XHTML.
HTML, XML, and XHTML HTML is by far the most familiar markup language. We will review its main features in comparison with XHTML to emphasize, one last time, the following basic facts. • HTML is a specific language defined in the SGML framework. • XML is not a language but a framework for defining languages. • XML is a revision of SGML.
41
031ch02.qxp 5/10/02 2:39 PM Page 42
Chapter 2
The main difference between XML languages and HTML and other SGML languages is that XML documents can be parsed without a DTD, whereas SGML documents (whether in HTML or any other SGML language) can be parsed only with the help of the DTD. This is because, in SGML languages, the end tag of an element can frequently be omitted even if the element is not empty: in HTML, you don’t have to close off your
s with a
. For HTML empty elements, the end tag is always optional: nobody putselement: Listing 2-1. An HTML Document
a paragraph with italics followed by a list
Another paragraph with a line break
in the middle.
What would the element tree for this document look like? Figure 2-1 shows one possibility.
42
031ch02.qxp 5/10/02 2:39 PM Page 43
Well-Formed Documents and Namespaces
Figure 2-1. Element tree of an HTML document Is this the only possible tree? Note that the
elements don’t have an end tag, so it would be consistent with the markup to make the
. In fact, we could even make the second
a child of the first. Is there a “correct” structure among these possibilities? The question is not academic because the page uses CSS, and a CSS style defined on an element is inherited by the element’s children. If
, its font will be large and maroon; otherwise, it will be small and black. Obviously, we can’t leave this decision to the browser’s parser: we need a rule. There is, indeed, such a rule; in fact, for every HTML element, there is a rule that stipulates which elements it can contain. The rule for
lists many possible children, but
a paragraph with italics followed by a list
Another paragraph with a line break
in the middle.
a paragraph followed by a list
What’s up?Nothing much.