Chapter 9. RSS, SOAP, and Other XML Applications

Contents:

In the next couple of chapters, we'll cover, at long
last, what happens when we pull together all the abstract tools and
strategies we've discussed and start having XML
dance for us. This is the land of the XML application, where parsers
all have a bone to pick, picking up documents with a goal in mind. No
longer satisfied with picking out the elements and attributes and
calling it a day, these higher-level tools look for meaning in all
that structure, according to directives that have been programmed
into it.

When we say XML application, we are specifically referring to
XML-based document formats, not the computer programs (applications
of another sort) that do stuff with them. You may run across
statements such as "GreenMonkeyML is an XML
application that provides semantic markup for green
monkeys." Visiting the project's
home page at http://www.greenmonkey-markup.com, we might
encounter documentation describing how this specific format works,
example documents, suggested uses for it, a DTD or schema used to
validate GreenMonkeyML documents, and maybe an online validation
tool. This content would all fit into the definition of an XML
application.

This chapter looks at XML applications that already have a strong
presence in the Perl world, by way of publicly available Perl modules
that know how to handle them.

9.1. XML Modules

The term XML
modules
narrows us down from the Perl modules on CPAN that send mail, process
images, and play games, but it still leaves us with a very broad
cross section. So far in this book, we have exhaustively covered Perl
extensions that can perform general XML processing, but none that
perform more targeted functions based on general processing. In the
end, they hand you a plate of XML chunklets, free of any inherent
meaning, and leave it to you to decide what happens next. In many of
the examples we've provided so far in this book, we
have written programs that do exactly this: invoke an XML parser to
chew up a document and then cook up something interesting out of the
elements and attributes we get back.

However, the modules we're thinking about here give
you more than the generic parse-and-process module family by building
on one of the parsers and abstracting the processing in a specific
direction. They then provide an API that, while it might still
contain hooks into the raw XML, concentrates on methods and routines
particular to the XML application that they implement.

We can divide these XML application-mangling Perl modules into three
types. We'll examine an example of each in this
chapter, and in the next chapter, we'll try to make
some for ourselves.

XML application helpers

Helper modules are the humblest of the lot. In practice, they are
often little more than wrappers around raw XML processors, but
sometimes that's all you need. If you find yourself
writing several programs that need to read from and write to a
specific XML-based document format, a helper module can provide
common methods, freeing the programmer from worrying about the
application's exact document format or its
well-formedness in generated output. The module will take care of all
that.

Programming helpers that use XML

This small but growing category describes Perl extensions that use
XML to do cool stuff in your program, even if your
program's input or output has little to do with XML.
Currently, the most prominent examples involve the terrifying,
DBI-like powers of XML::SAX, the whole PerlSAX2
family, and individual tools like the
XML::Generator::DBI module, which crossbreeds
existing Perl modules for database manipulation and SAX processing.

Full-on applications that use XML

Finally, we have software that uses XML, but has so many layers of
abstraction between its intended purpose and the underlying XML that
calling it an XML application is like calling Microsoft Word a C
application. For example, working with SOAP::Lite
involves documents that are barely human-readable and exist only in
memory until they're shot over the Internet via
HTTP; the role of XML in SOAP is completely transparent.