Next Previous Contents

2. APC AA RSS 1.0 module

2.1 Why RSS

While searching for the best way to specify the APC AA syndication mechanism, a focus was put onto doing it in a way that conforms to existing standards. There is one obvious standard for content syndication, namely RSS, and it became soon clear that RSS would be the basis for the APC AA inter node networking.

The first version of this document specified a new specific version of RSS which derived from RSS 0.91. RSS 0.91, however, itself does not conform to many standards itself. It was developed by Netscape Corp. and they used RSS 0.9 to develop it but stripped away many of the best features of RSS 0.9, that is in the first row, RDF compliance.

The 1.0 version of RSS now is RDF complaint again.

2.2 RSS 1.0, RDF, XML

RSS means RDF Site Summary.

In contrast to Netscape's RSS 0.91, RSS 1.0 is, as was RSS 0.9, an application of RDF (Resource Description Framework / http://www.w3.org/RDF/). RDF defines an abstract way to describe everything in the world that can possibly have a Uniform Resource Indicator (URI). RDF makes statements about resources. An RDF resource can be almost anything that can have a unique resource identifier (URI). This does not necessarily mean that the resource must be accessible through the Internet; it only means that it must have a unique identifier. The statements define values for properties of the resources. RDF makes an effort to cover a lot of different situations and aspects, most of them are not relevant for our purposes. RDF also defines a way to write down the statements using XML. The XML representation of RDF data can be written in more than one way for different purposes, though.

RSS defines a class of resources called channel. A channel is quite the same as what we call a feed or slice. A channel has, according to RSS, a title, a description and so on, and it has items. The items, in turn, have a title, a description and a link. RSS also defines XML as the obvious transport method for RSS data, and it makes some constraints on RDF regarding possible XML representations of the RSS data. The RSS specification is by far less verbose than RDF; the included examples and de facto usage make it much clearer.

One of the main goals that were followed when the RSS 1.0 specification ( http://purl.org/rss/1.0/) was developed was extensibility. RSS 1.0 has a feature that is called RSS modules which allows anyone to extend RSS 1.0 to add new fields for their purposes. The modularization is described in the RSS 1.0 module specification ( http://purl.org/rss/1.0/modules/).

RSS 1.0 modules use an XML feature called name spaces ( http://www.w3.org/TR/REC-xml-names/) to create separate and non conflicting name spaces for modules, so it is possible to "pull in" any RSS 1.0 module into an RSS 1.0 document. The parser will be able to recognize to which name space an element belongs and can thus ignore unknown elements.

There are three standard modules which "ship in the box" with RSS 1.0:

2.3 Requirements

The data model we need must be able to transport all data we want to exchange between nodes. This data describes

The term feed or slice is used in this section of this document to clarify that the data model is not limited to transport information about what we call slice in the Action Application; it is rather prepared to have information on a feed which, in the first implementation, will indeed come from a single slice of the Action Applications.

In this version of this specification, not all fields of any slice or feed are transported by the mechanism.

The data that describes the feed or slice we need to be able to carry is:

  1. The name of the feed or slice.
  2. The id of the slice or feed.
  3. A description for the feed or slice.
  4. A timestamp of the newest item in this slice.
  5. The categories used in items in this feed.
  6. A list of field names used in items in this feed.
  7. Timestamp of the latest item/s sent.

The data that describes the actual current items need to include:

  1. An item id.
  2. An item title.
  3. An item summary / description.
  4. The item text (if no link is present).
  5. A link to the item (if the item text is not present).
  6. The item category.
  7. The fields for the actual data.

2.4 RSS 1.0 data model evaluation

The RSS 1.0 standard ( http://purl.org/rss/1.0/) which we are about to extend defines a channel entity which consists of

and several other optional fields describing the channel which we won't use because those fields are not appropriate for our purposes.

Each item consists of three fields:

The Dublin Core module adds 15 new elements to both channels and items; these are:

The syndication module adds these three fields:

This means that we can use some of the fields of RSS 1.0 and the "out of the box modules", but we need to extend this so we can carry all of our information in it. This is particulary true because we have a requirement to carry formatting information and possibly other information with the individual field data content. For example, the APC AA can use HTML formatted text in every field. The DC module can carry plain text only, so we have to use our own fields to carry formatted versions of these fields.

The RSS content module, http://purl.org/rss/1.0/modules/content/, supports a <content:items> element which allows transportation of the actual content using any format and encoding. This is useful for us to transport the item's text. We narrow this spec by stating which of the features in this module we want to use so the implementation does not get too complex.

2.5 APC AA RSS module definition: General

This section defines the new RSS 1.0 module. It is hereby named "APC AA RSS module" or for short, "AA module".

The AA module must be declared in documents using the XML namespace syntax when using it. The URI to refer to the AA module is http://www.apc.org/rss/aa-module.html.

According to this specification, documents using the AA module can contain data for two different modes:

2.6 APC AA RSS module definition: Element syntax and model

Remarks

Within an RDF document, there are several spots where a resource - such as a channel, a category, a field or a news item - must be refered to using an unique identifier (URI). These URI do not necessarily refer to locations in the WWW. Whenever a URI is needed within this specification, the URI should consist of a valid domain name the sending host uses, followed by a unique number. This number will most likely be the AA internal id number everything has.

This specification specifies the following elements as the APC AA RSS module:

Elements existing in RSS 1.0, modified/extended

Elements within the <rdf:RDF> element

The obvious elements within the top level, all-enclosing <rdf:RDF> element are <channel> and <item> which are defined by RSS. The APC AA RSS module defines the following elements at that level:

Elements within the <channel> element

These elements appear within the <channel> element:

Elements within the <item> element

These elements appear within <item> elements. They mainly represent the content of the item while refering to categories and fields outside the item element.

2.7 APC AA RSS module definition: Element description

The data that describes the feed or slice contains three RDF containers. One of them is defined in RSS 1.0; it contains the items. The other two are defined by the AA module; they contain the slice's categories and fields, respectively.

For containers, RDF offers two concepts to represent items in the containers: As references items and as inline items. This specification only allows RDF containers containing references items within channels. This means that the containers only contain references to the actual items. The references are made up using rdf:resource attributes, and the actual items must appear elsewhere in the document.

The slice of feed data is carried as follows:

  1. The name of the feed or slice is carried within the existing <title> element.
  2. The description of the feed or slice is carried in the existing <description> element.
  3. The timestamp of the newest item in this feed or slice is carried in an AA module element <aa:NewestItemTimestamp>.
  4. The categories used in items in the feed or slice is carried in an AA module element <aa:categories> ( aa:categories in channel ) which contains an RDF RDF bag which in turn contains the categories. Each category is referred to using a unique URI in a rdf:resource attribute. Each category which appears here must appear again on its own as a <aa:category> element elsewhere in the document.
  5. The slice or feed id is carried in the Dublin core field <dc:identifier>.
  6. The list of fields used in items in the feed or slice is carried in a AA module element <aa:fields> which contains an RDF bag which in turn contains references to the fields. Each field is referred to using a unique URI in a rdf:reference attribute. Each field which appears here must appear again on its own as a <aa:field> element elsewhere in the document.
  7. The RDS <link> element is filled with a link to the original main slice page.

The categories referenced in the aa:categories in channel container must appear in the document data as follows:

The fields referenced in the aa:fields container must appear in the document data as follows:

The data that describes the actual items is carried as follows:

  1. The title of the item is carried in the existing RSS <title> element.
  2. The description of the item is carried in the existing RSS <description> element.
  3. The item id of the item is carried in the Dublin core field <dc:identifier>
  4. The link to the content is carried in the existing RSS <link> element. If there is no link, the link field will be empty.
  5. The item text is carried in the <content:items> element provided by the RSS content module http://purl.org/rss/1.0/modules/content/ with the following constraints:
  6. The item categories are carried in a AA module element <aa:categories> which contains a rdf:Bag container. The container contains the individual category references indicating the actual categories as described elsewhere in the document. The categories are referenced by using rdf:resource attributes.
  7. All other data fields are carried in the <aa:fielddata> elements. Additionally, all other field data is carried in standard Dublin Core (dc) fields if such a field exists and has not been used for other data. The following mapping list is used to map aa field types to dc fields (dc field - aa field): The DC field data elements only contain the field content as literal text in plain text format. For every aa field an item is added to the aa:fielddatacont container. The added item contains an <aa:fielddata> element. The <aa:fielddata> element contains

2.8 Character encoding

The encoding in use for a slice within apcrss messages will match the encoding of the slice data.

Within the text fields, the characters '<', '>' and '&' must be encoded using the existing XML mechanisms ('&lt;', '&gt;', '&amp;').

Date and time values are encoded using the w3c note http://www.w3.org/TR/NOTE-datetime.

2.9 Examples

Examples of RSS 1.0 / AA module data files are


Next Previous Contents