Singpolyma

Archive of "XOXO"

Archive for the "XOXO" Category

XOXO Data Tools

Posted on

So you’ve got some XOXO content or are using an XOXO Blog Format template… what can you do with it? This post lists tools that work with XOXO content. Please notify me if you know of any that aren’t listed here.

Conversion

  • Outline Convert — auto-detects input format from URL or direct input and then converts to a specified output format (XOXO and OPML currently supported, RSS/ATOM supported on input only).

Syndication

  • Blogger Recent Comments — pulls data from XOXO Blog Format templates (or hAtom templates with the comments extension) and creates comments feeds in RSS2.0, JavaScript, and JSON. It assumes nanoseconds in the timestamp.
  • hAtom2RSS — converts XOXO Blog Format or hAtom data to RSS 2.0. Supports all the XOXO Blog Format extensions when in hAtom mode.
  • feed2hAtom — converts an RSS or ATOM feed to XOXO Blog Format-compatible hAtom

Misc

  • XOXO Validator — checks a URL or inputted code snippet for XML well-formedness and the precense of valid XOXO sections.
Tags:

XOXO Blog Format

Posted on

The purpose of this format is to define a standard way of marking up blogs with XOXO. This is a derivation of, and not an actual part of, the XOXO specification. This format is actually a hybrid format between XOXO and hAtom.

Terms

  • A reccomended field is one that should be included in output meant to comply with this format
  • An optional field is one that does not need to be included
  • A-fields are fields stored within the markup of the primary <a> tag in an XOXO element
  • Alternate-A fields are one stored with second, third, etc <a> tags
  • DL-fields are ones stored within the optional <dl> list

Note that no fields will be marked as ‘required’. This is because, in full compliance with the XOXO specification, the only required field is ‘TEXT’ (the direct contents of the <li> or <a> tag).

Classes
This is a hybrid format between XOXO and hAtom and parsers are expected to be able to read either ‘half’ of the format. XOXO-only versions of this format should have the classes ‘xoxo’ and ‘posts’ on their root tag. hAtom-only (or hAtom with extensions) versions should use the hAtom ‘hfeed’ class. Data complying with both ‘halves’ of this format should have all three classes on the root. Neither hAtom nor XOXO actually requires any classes at all on the root, but if no data is found with any combination of the classes specified here parsers are to treat the entire document as hAtom. Then, if still no data is found, parsers should look for XOXO data that does not have the proper classes.

Meta Data
The first element will is considered by this format to be metadata for the entire section if rel=home. This part of the format is not found in hAtom and is only supported in XOXO-only or hybrid versions of this format. The following fields are defined for metadata:

  • TEXT — blog title
  • TITLE — blog description
  • HREF — URL to blog main page
  • CLASS — ID of blog
  • Alternate-a rel=alternate
    • TEXT — immaterial, just a label
    • HREF — URL to blog feed

Subnodes
Subnodes, as defined by this format, encapsulate the comments on a post. Comment encapsulation is not supported by hAtom but is considered by this format to be an extension thereof. hAtom-only documents may be extended to encapsulate comments by outputting an XOXO section with the same fields specified for subnodes in this format in each hentry where there are comments. This XOXO element must have the classes ‘xoxo’ and ‘comments’.

The TEXT Field

  • The TEXT field on elements stores the title of the post encapsulated by that section.
  • The TEXT field on subnodes is immaterial.

A-Fields
On elements:

  • HREF (reccomended) — this field stores the permalink URL to the post
  • TITLE (optional) — this field stores the timestamp of the post (seconds or nanoseconds since the epoch)
  • REL — should be set to ‘bookmark’, in keeping with hAtom
  • CLASS — should be set to ‘entry-title’, in keeping with hAtom (Note: if there are no A-fields, TEXT must be encapsulated in a tag and given the class ‘entry-title’ to maintain hAtom compatability)

On subnodes:

  • HREF (reccomended) — this field stores the permalink URL to the comment. If the field contents begin with ‘#’ the parser is expected to resolve it based on the post URL.
  • TITLE (optional) — this field stores the timestamp of the comment (seconds or nanoseconds since the epoch)

Alternate-A Fields
On elements:

  • When rel=comments (reccomended) this is not supported by hAtom is is considered by this format to be an extension thereof. To use this field in hAtom-only documents place a rel=comments link in the appropriate hentry elements.
    • TEXT — number of comments on post (if non-numeric, assumed unknown)
    • HREF — URL to comments on post
  • When rel=author (optional, required by hAtom)
    • TEXT — this field stores the name of the post author
    • HREF — URL to post author’s profile or home page

    To be compatible with hAtom, this link should be encapsulated in an ‘address’ tag with the classes ‘author’ and ‘vcard’. The link itself should have the classes ‘url’ and ‘fn’.

  • When rel=archive (optional) the ‘updated’-classed field is required by hAtom
    • TEXT — datetime-design-pattern datestamp for post
    • CLASS — should be set to ‘published’ and ‘updated’ for compatability with hAtom
    • HREF — URL to the archive the post is in
  • When rel=’alternate comments’ (optional) this is not supported by hAtom is is considered by this format to be an extension thereof. To use this field in hAtom-only documents place a rel=’alternate comments’ link in the appropriate hentry elements.
    • TEXT — immaterial, just a label
    • HREF — URL to feed for comments on post
  • When rel=external (optional) this is not supported by hAtom and is considered a mostly unnecessary piece of information. It is not supported as an extension and should only be used in XOXO-only or hybrid versions of this format.
    • TEXT — immaterial, just a label
    • HREF — URL to external link for post

On subnodes:

  • The first alternate-a tag is assumed to be data for the comment author (reccomended)
    • TEXT — author name / nickname
    • HREF — author URL

DL-Fields
On elements and subnodes:

  • body (reccomended, required by hAtom) — the post/comment body
    To maintain hAtom compatability the post body dd tag should be given the class ‘entry-content’

Subnodes only:

  • Author — Author name. Should only be set if the author has no URL and cannot be stored in the Alternate-A field. However, if there is an ‘a’ tag in the value of this field it should be parsed, the HREF used for author URL and the TEXT used for author name.

XOXO Blog Templates

Posted on

This is a list of all known XOXO Blog Format (and hAtom) compatible blog templates. Hackers/designers are encouraged to improve on them, but please try to keep them Valid XOXO. I would also ask that new templates/template improvements be sent back to me so I can list them here for others to use.

See notes on Blogger and hAtom.

New Blogger

  • Singpolyma Templates for the new Blogger — A set of New Blogger templates that are all XOXO Blog Format (and hAtom) compatible and have anywhere from no extra features to larger hacks implemented on them.

Blogger Classic

  • Singpolyma Templates — A set of Blogger Classic templates that are all XOXO Blog Format (and hAtom) compatible and have anywhere from no extra features to larger hacks implemented on them.

XOXO Developer’s Resources

Posted on

This is a collection of code resources and APIs for developers looking to work with XOXO in their scripts/applications. There isn’t much here yet, but the list will grow over time.

PHP
On some of these, the comments may state that attributes of the first node are considered to be metadata for the entire outline. This is actually up to the developer and the format of XOXO being parsed as there is nothing in the code to facilitate/enforce it.

  • Outline Classes [GPL] — A set of PHP4 and PHP5 comatible classes for both parseing and creating outline data, including XOXO, OPML, hAtom, JSON, and arbitrary XML.

The following, deprecated APIs, have been replaced by the Outline Classes

  • xoxo2array [GPL] — pass in any string containing XOXO data and it will return a nested array of the results. String indexes are considered attributes, numeric indexes are subnodes.
  • array2xoxo [GPL] — takes an array of the type returned by xoxo2array and returns an XOXO string of the data. It will also work with simple arrays.
  • There are also other APIs for working with this array type (for conversion purposes, etc)

Python

Java

  • XOXOWriter.java [Apache 2.0] — Contains two (overloaded) functions, makeXOXO and toXOXO, that create XOXO data from Lists and create XOXO documents from XOXO data, respectively
  • XOXOParser.java [Apache 2.0] — Contains a class definition for objects that parse XOXO data into themselves

XOXO Blog and Template

Posted on

I have started the XOXO Blog for the promotion of the XOXO microformat. (For those wondering what XOXO is, see my post What is XOXO?) The blog’s template is fully XOXO-paresable and I am working on changeing over my Blogger Comment Syndication service to parse XOXO formated compatible with this new concept, which is only slightly different from my original XOXO code, but is more compatible with other uses. All users of my service will have to switch to this new (hopefully better) code snippet, but I think it will ultimately be worth it. Blogs based off of an XOXO template (I’ll be publishing one and the specs soon. As you can see by looking at the XOXO Blog itself, I’m not much of a designer, but I’m proving the concept first. I’ll get other people to help me with looks later.) will be able to use the service directly with no added code.

Other benefits to the XOXO-template could include :

  • The ability to produce better post feeds by parseing the blog main page
  • The ability to parse the whole blog for backup/transfer to another service if needed

The XOXO blog itself will soon be populated with different tools, not only to go with XOXO templates, but to work with other uses for XOXO as well.

Tags: