Web standards: these two words evoke different feelings in different people. Some will scoff and roll their eyes, some will get angry and declare the need for them, and some will get on a soapbox and preach to anyone who will listen. Whatever your view is, it is time to reach a common ground on which everyone can agree. The simple fact is that web standards enable the content of an application to be made available to a much wider range of people and technologies at lower costs and faster development speeds.
Using the standards that have been published on the Web (and making sure they validate) satisfies the following Web Accessibility Initiative-Web Content Accessibility Guidelines (WAI-WCAG) 1.0 guideline:
Priority 2 checkpoint 3.2: Create documents that validate to published formal grammars.
In the earlier years of the Web, the browser makers were to blame for difficulties in adopting web standards. Anyone that remembers the days of the 4.0 browsers, more commonly referred to as the "Browser Wars," will attest to the fact that nothing you did in one environment would work the same in another. No one can really blame Netscape and Microsoft for what they did at the time. Competition was stiff, so why would either of them want to agree on common formats for markup, for example?
This is no longer the case. Now developers are to blame for not adopting standards. Some developers are stuck with the mentality of the 1990s, when browser quirks mode, coding hacks, and other tricks were the only things that allowed code to work in all environments. Also at fault is "helpful" What You See Is What You Get (WYSIWYG) software that still generates code geared for 4.0 browsers without any real thought to document structure, web standards, separating structure from presentation, and so forth.
Not only does Ajax use each standard, but also these standards are either the fundamental building blocks of Ajax or may be used in exciting ways with Ajax web applications.
On January 26, 2000, the W3C published "XHTML 1.0: The Extensible HyperText MarkUp Language," a reformulation of HTML 4.01 as XML. Unfortunately, even today XHTML 1.0 is still not incorporated in a vast majority of web sites. It may be that people are taking the "if it ain't broke, don't fix it" mentality when it comes to changing their markup from HTML 4.01 to XHTML 1.0, it may be that people just do not see the benefits of XML, or it may be, as is especially true in corporate environments, that there is simply no budget to change sites that already exist and function adequately. Even after a second version of the standard was released on August 1, 2002, incorporating the errata changes made to that point, it still was not widely adopted.
On May 31, 2001, even before the second version of XHTML 1.0 was released, the W3C introduced the "XHTML 1.1—Module-based XHTML Recommendation." This version of XHTML introduced the idea of a modular design, with the intention that you could add other modules or components to create a new document type without breaking standards compliance (though it would break XHTML compliance); see Example 1-1. All deprecated features of HTML (presentation elements, framesets, etc.) were also completely removed in XHTML 1.1. This, more than anything, slowed the adoption of XHTML 1.1 in the majority of web sites, as few people were willing to make the needed changes—redesigning site layout without frames and adding additional attributes to elements, not to mention removing presentation and placing that into CSS. Contributing to XHTML 1.1's lack of deployment is the fact that it is not backward-compatible with XHTML 1.0 and HTML.
Example 1-1. The simplest XHTML 1.1 document
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <title>Example 1-1. The simplest XHTML 1.1 document</title> <meta http-equiv="content-type" content="text/xml; charset=utf-8" /> </head> <body> <div>Hello World!</div> </body> </html>
Although the vast majority of web sites out there are not following the XHTML 1.1 Recommendation, it has tremendous potential for certain key areas. The development of new applications on the Web, and the use of those applications on different platforms such as mobile and wireless devices, is leading to a greater rate of adoption than when XHTML 1.1 was first published. For this reason, I believe it is important to recognize the power and potential of XHTML 1.1. Therefore, we will follow this standard in nearly every example in this book (see Chapter 20 and Chapter 21 for different standards usage).
With that said, we must be mindful that the future of web application development is being proposed right now. Already the W3C has a working draft for an XHTML 2.0 specification. In XHTML 2.0, HTML forms are replaced with XForms, HTML frames are replaced with XFrames, and DOM Events are replaced with XML Events. It builds on past recommendations, but when the XHTML 2.0 Recommendation is published, it will define the beginning of a new era in web development. You should note that XHTML 2.0 is not designed to be backward-compatible. Development taking advantage of this recommendation will most likely be geared toward more specialized audiences that have the ability to view such applications, and not the general public. It will be some time before this recommendation gets its feet off the ground, but I felt that it was worth mentioning. You can find more information on the XHTML family of recommendations at http://www.w3.org/MarkUp/.
The Document Object Model, a Level 2 specification built onto
the existing DOM Level 1 specification, introduced modules to the
Core, View, Events,
Range modules were introduced on November 13, 2000. The
HTML module was introduced on January 9, 2003.
The DOM Level 3 specification built onto its predecessor as
well. The modules changed around somewhat, but what this version
added to DOM Level 2 was greater functionality to work with XML.
This was an important specification, as it adds to the functionality
of Ajax applications as well. The
Validation module was published on
December 15, 2003. The modules
Save were published on April 7, 2004.
Not all of the modules for DOM Level 3 have become
recommendations yet, and because of that they bear watching. The
Abstract Schemas module has been
a note since July 25, 2002;
Events has been a working group note since
November 7, 2003 (though it was updated April 13, 2006);
XPath has been a working group note since
February 24, 2004; and
Views and Formatting have been working
group notes since February 26, 2004. These modules will further
shape the ways in which developers can interact with the DOM,
subsequently shaping how Ajax applications perform as well.
The W3C's DOM Technical Reports page is located at http://www.w3.org/DOM/DOMTR.
The W3C proposed the "Cascading Style Sheets Level 2 (CSS2) Recommendation" on May 12, 1998. Most modern browsers support most of the CSS2 specifications, though there are some issues with full browser support, as you will see in the "Browsers" section, later in this chapter. The CSS2 specification was built onto the "Cascading Style Sheets Level 1 (CSS1) Recommendation," which all modern browsers should fully support.
Because of poor adoption by browsers of the CSS2 Recommendation, the W3C revised CSS2 with CSS2.1 on August 2, 2002. This version was more of a working snapshot of the current CSS support in web browsers than an actual recommendation. CSS2.1 became a Candidate Recommendation on February 24, 2004, but it went back to a Working Draft on June 13, 2005 to fix some bugs and to match the current browser implementations at the time.
Browsers are working toward full implementation of the CSS2.1 standard (some more than others), even though it is still a working draft, mainly so that when the newer Cascading Style Sheets Level 3 (CSS3) finally becomes a recommendation they will not be as far behind the times. CSS3 has been under development since 2000, and is important in that it also has taken into account the idea of modularity with its design. Beyond that, it defines the styles needed for better control of paged media, positioning, and generated content, plus support for Scalable Vector Graphics (SVG) and Ruby. These recommendations will take Ajax web development to a whole new level, but as of this writing CSS3 is very sparsely implemented. So, this book will primarily be using the CSS2.1 Recommendation for all examples, unless otherwise noted.
You can find more information on the W3C's progress on CSS at http://www.w3.org/Style/CSS/.
XML is the general language for describing different kinds of data, and it is one of the main data transportation agents used on the Web. The W3C's XML 1.0 Recommendation is now in its fifth edition: the first was published on February 10, 1998 while the latest edition was published on November 26, 2008. At the same time as edition three was being released (February 4, 2004), the W3C also published the XML 1.1 Recommendation, which gave consistency in character representations and relaxed names, allowable characters, and end-of-line representations. The second edition of XML 1.1 was published on September 29, 2006. Though both XML 1.0 and XML 1.1 are considered current versions, this book will not need anything more than XML 1.0.
People like XML for use on the Web for a number of reasons. It is self-documenting, meaning that the structure itself defines and describes the data within it. Because it is plain text, there are no restrictions on its use, an important point for the free and open Web. And both humans and machines can read it without altering the original structure and data. You can find more on XML at http://www.w3.org/XML/.
Even though Ajax is no longer an acronym and the X in AJAX is now just an x, XML is still an important structure to mention when discussing Ajax applications. It may not be the transportation mode of choice for many applications, but it may still be the foundation for the data that is being used in those applications by way of syndication feeds.
The type of syndication that we will discuss here is, of course, that in which sections of a web site are made available for other sites to use, most often using XML as the transport agent. News, weather, and blog web sites have always been the most common sources for syndication, but there is no limitation as to where a feed can come from.
The idea of syndication is not new. It first appeared on the Web around 1995 when R. V. Guha created a system called Meta Content Framework (MCF) while working for Apple. Two years later, Microsoft released its own format, called Channel Definition Format (CDF). It wasn't until the introduction of the RDF-SPF 0.9 Recommendation in 1999, later renamed to RSS 0.9, that syndication feeds began to take off.
For much more on syndication and feeds see Developing Feeds with RSS and Atom, by Ben Hammersley (O'Reilly).
RSS is not a single standard, but a family of standards, all using XML for their base structure. Note that I use the term standard loosely here, as RSS is not actually a standard. (RDF, the basis of RSS 1.0, is a W3C standard.) This family of standards for syndication feeds has a sordid history, with the different versions having been created through code forks and disagreements among developers. For the sake of simplicity, the only version of RSS that we will use in this book is RSS 2.0, a simple example of which you can see in Example 1-2.
Example 1-2. A modified RSS 2.0 feed from O'Reilly's News & Articles Feeds
<?xml version="1.0"?> <rss version="2.0"> <channel> <title>O'Reilly News/Articles</title> <link>http://www.oreilly.com/</link> <description>O'Reilly's News/Articles</description> <copyright>Copyright O'Reilly Media, Inc.</copyright> <language>en-US</language> <docs>http://blogs.law.harvard.edu/tech/rss</docs> <item> <title>Buy Two Books, Get the Third Free!</title> <link>http://www.oreilly.com/store</link> <guid>http://www.oreilly.com/store</guid> <description><![CDATA[ (description edited for display purposes...) ]]></description> <author>email@example.com (O'Reilly Media, Inc.)</author> <dc:date></dc:date> </item> <item> <title>New! O'Reilly Photography Learning Center</title> <link>http://digitalmedia.oreilly.com/learningcenter/</link> <guid>http://digitalmedia.oreilly.com/learningcenter/</guid> <description><![CDATA[ (description edited for display purposes...) ]]></description> <author>firstname.lastname@example.org (O'Reilly Media, Inc.)</author> <dc:date></dc:date> </item> </channel> </rss>
Make sure you know which RSS standard you are using:
Each syndication format is different from the next, especially RSS 1.0. (This version is more modular than the others, but also more complex.) Most RSS processors can handle all of them, but mixing pieces from different formats may confuse even the most flexible processors.
Because of all the different versions of RSS and resulting issues and confusion, another group began working on a new syndication specification, called Atom. In July 2005, the IETF accepted Atom 1.0 as a proposed standard. In December of that year, it published the Atom Syndication Format protocol known as RFC 4287 (http://tools.ietf.org/html/4287). An example of this protocol appears in Example 1-3.
There are several major differences between Atom 1.0 and RSS
2.0. Atom 1.0 is within an XML namespace, has a registered MIME
type, includes an XML schema, and undergoes a standardization
process. By contrast, RSS 2.0 is not within a namespace, is often
has no registered MIME type, does not have an XML schema, and is
not standardized, nor can it be modified, as per its
Example 1-3. A modified Atom feed from O'Reilly's News & Articles Feeds
<?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"> <title>O'Reilly News/Articles</title> <link rel="alternate" type="text/html" href="http://www.oreilly.com/" /> <subtitle type="text">O'Reilly's News/Articles</subtitle> <rights>Copyright O'Reilly Media, Inc.</rights> <id>http://www.oreilly.com/</id> <updated></updated> <entry> <title>Buy Two Books, Get the Third Free!</title> <id>http://www.oreilly.com/store</id> <link rel="alternate" href="http://www.oreilly.com/store"/> <summary type="html"> </summary> <author> <name>O'Reilly Media, Inc.</name> </author> <updated></updated> </entry> <entry> <title>New! O'Reilly Photography Learning Center</title> <id>http://digitalmedia.oreilly.com/learningcenter/</id> <link rel="alternate" href="http://digitalmedia.oreilly.com/learningcenter/"/> <summary type="html"> </summary> <author> <name>O'Reilly Media, Inc.</name> </author> <updated></updated> </entry> </feed>
XSLT is an XML-based language used to transform, or format, XML documents. On November 16, 1999, XSLT version 1.0 became a W3C Recommendation. As of January 23, 2007, XSLT version 2.0 is a Recommendation that works in conjunction with XPath 2.0. (Most browsers currently support only XSLT 1.0 and XPath 1.0.) XSLT uses XPath to identify subsets of the XML document tree and to perform calculations on queries. We will discuss XPath and XSLT in more detail in Chapter 5. For more information on the XSL family of W3C Recommendations, visit http://www.w3.org/Style/XSL/.
XSLT takes an XML document and creates a new document with all of the transformations, leaving the original XML document intact. In Ajax contexts, the transformation usually produces XHTML with CSS linked to it so that the user can view the data in his browser.