NAME

XML::Atom::Syndication - a portable client for consuming RFC 4287 Atom Syndication Feeds.

DESCRIPTION

This project is the result of scratching ones own itch. I was writing some web software needed a full-featured library for working with Atom feeds that was easy to distribute and install on wide range of environments. Many of my software's target audience are relative novices working with low-cost shared hosting environments. (A significant number don't even have shell access!) Creating a library that was easy to install even by FTP was a paramount requirement that many other options failed to meet.

Originally the module began as a very spartan XPath driven interface. At the time the format had just been introduced and was still vague and very extremely volatile. It was a pretty wretched piece of software, but it got me through while the Atom Working Group worked out the details of the Atom Syndication Format.

Since that time the Atom Syndication Format (ASF) has made its way through numerous drafts and is now an approved standard of the IETF as RFC 4287.

Beginning with version 0.9, XML::Atom::Syndication has been completely rewritten to provide better functionality and structure in working with a stable Atom format specification.

The interface and a fair bit of the code was based on that of XML::Atom. It owes a great deal to its authors, Ben Trott and Tatsuhiko Miyagawa, and all its contributors.

As of version 0.16, XML::Atom defaults to version 0.3 which is now deprecated. Baseline 1.0 support has been built-in however many of the changes that were introduced (category elements, dropping the mode attribute in the content construct) have yet to be implemented. I'm sure this will change eventually, but it currently is a differentiator between the two implementations. XML::Atom::Syndication supports 0.3, but defaults 1.0.

More importantly this implementation is not tied to specific XML parsers -- XML::LibXML or XML::XPath (expat) as is the case with XML::Atom. Both of these parsers libraries require compilation which can be a major hurdle if you are not in charge of your hosting environment. By using SAX at the core, this Atom implementation will work with whatever parser it can find including the default pure perl option that XML::SAX is distributed with.

Unlike XML::Atom, this distribution focuses on the Atom syndication format and not the publishing protocol. The publishing protocol is still being worked out and is not an official standard at this time.

ENCODING

Perl has a spotty history of supporting international character sets prior to version 5.8.1. All caveats and cautions apply when using this package with character sets other then ASCII with versions of Perl before that time.

When used with Perl 5.8.1 and higher XML::Atom::Syndication will look for the encoding in the XML declaration and convert it to UTF-8 right before parsing. This simplifies further processing a great deal. Perl 5.8+ uses UTF-8 internally and numerous other modules (such as XML::Writer) will only work with UTF-8 encoded content.

I found this also has the added benefit of making this package more portable. Perl's built-in encoding converters are more extensive then what typically ships with the standard parser. By converting to UTF-8 using Perl's system before parsing the potential for an encoding module dependency is eliminated. All XML parsers must support UTF-8.

All output using XML::Atom::Syndication::Writer will be in UTF-8 regardless of the original encoding before parsing.

DEPENDENCIES

XML::Elemental 2.01
XML::Writer 0.600
Class::ErrorHandler
MIME::Base64

SEE ALSO

XML::Atom, XML::RAI

http://www.atomenabled.org/developers/syndication/atom-format-spec.php

LICENSE

The software is released under the Artistic License. The terms of the Artistic License are described at http://www.perl.com/language/misc/Artistic.html.

AUTHOR & COPYRIGHT

Except where otherwise noted, XML::Atom::Syndication is Copyright 2004-2007, Timothy Appnel, tima@cpan.org. All rights reserved.

2 POD Errors

The following errors were encountered while parsing the POD:

Around line 31:

=begin without a target?

Around line 152:

'=end' without a target?