We're back after a server migration that caused effbot.org to fall over a bit harder than expected. Expect some glitches.

PyZone Archive Files

Fredrik Lundh | November 2006

A PyZone archive file represents a collection of documents, such as a zone, in a single XML file.

Here’s an outline of this format:

<zone name='identifier' last-modified='timestamp'>
  <article name='identifier' category='list of categories'>
    <title> article title </title>
    <body>
       article body text (an XHTML body fragment), minus the title
    </body>
    <comments count='count'> (optional)
      <comment> text </comment> (optional)
      ...
    </comments>
    <terms source='mechanism'> (optional)
      <term> phrase </term>
      ...
    <terms>
    ...
    <source> source url </source> (optional)
</zone>

Elements

The body element contains XHTML body fragments. Link targets in a body can be either usual “http:” targets (for external links), or special “link:” targets, which need to be converted by the renderer. A link target has the following syntax:

    link:target-domain:identifier

where the target-domain is one of

zone
Articles within this zone.
python
The standard Python namespace, with keywords, builtins, and library functions. To identify what a link points to, start by checking the first part against available keywords, builtins, and library modules, in that order. You can then use remaining parts of the link, if any, to drill down further, or just link to the top-level concept. There’s currently no mechanism to distinguish between builtins and modules with the same name (e.g. repr).
svn
The python source code namespace. This is used to refer to Python source files. The identifier is the full path to the file, relative to the source directory.
c
A C function or macro, either part of C’s standard library, or the Python C library.
pep
Python enhancement proposals. The identifier is the pep number, given as a decimal integer. (the number may or may not have leading zeros, so it should be normalized by the link translator).
rfc
Internet RFC. The identifier is the rfc number, given as a decimal integer.

The comments element may be included for articles with comments; if present, it usually only contains a count attribute. You can use the source element, if present, to link back to the page that holds the comments.

Each article may also have one or more terms elements. These contain terms and keywords, either added manually, or via automatic term extraction mechanisms.

Examples

The Python FAQ staging area is available as an archive file. You can get a copy from this URL:

http://effbot.org/pyfaq.xml (~400k)

If you decide to use this for anything except testing, please use a conditional fetch to make sure that you only download it if it has actually changed. You can use something like:

import urllib2

def get_signature(uri):
   request = urllib2.Request(uri)
   request.get_method = lambda: "HEAD"
   http_file = urllib2.urlopen(request)
   return "/".join((
       http_file.headers["last-modified"],
       http_file.headers["etag"],
       http_file.headers["content-length"]
       ))

to get get the file signature, and do a full fetch if the signature has changed since you last downloaded the file.