W3C Personal Feed Customisation How-To

Ryan Lee

19 June 2003

last rev. $Date: 2003/08/27 17:03:33 $

Contents: Introduction · Example · Basic Personal Feeds · Adding External Feeds · Adding Groups of Feeds · Upload Customizations

Introduction

At A Glance uses RSS 1.0 with some embellishments to control its configuration. The details of those embellishments are explained below. After reading this document, you should be able to generate a file containing your personal Glance feed preferences which successfully displays after uploading via the personal preferences interface [member-only]. This How-To assumes a working knowledge of RSS 1.0 terms and RDF.

Note the two namespaces used in this document: http://purl.org/rss/1.0/ for RSS 1.0, bound to rss:, and http://www.w3.org/2001/10/glance/vocab# for Glance, which is bound to glance: in all of the following text. Examples bind their own namespaces accordingly.

This documents a member-only feature; links to member-only examples are marked as such.

Example

Currently, there aren't any good tools to generate a personalized feed besides a text editor. For those comfortable editing RDF with their text editor of choice, this is what an excerpt from an average RSS 1.0 feed looks like:

<rdf:RDF
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:rss="http://purl.org/rss/1.0/"
  xmlns="http://purl.org/rss/1.0/">
 <channel rdf:about="">
  <title>W3C Web Ontology (WebOnt) Working Group (OWL)</title>
  <link>http://www.w3.org/2001/sw/WebOnt/</link>
  <items>
   <rdf:Seq>
    <rdf:li rdf:resource="#1"/>
    <rdf:li rdf:resource="#2"/>
    <rdf:li rdf:resource="#3"/>
    <rdf:li rdf:resource="#4"/>
    <rdf:li rdf:resource="#5"/>
   </rdf:Seq>
  </items>
 </channel>

 <item rdf:about="#1">
  <title>working toward completing dra...</title>
  <link>http://www.w3.org/2001/sw/WebOnt/</link>
  <description>working toward completing draft CR/PR request,
last call review status; collecting tools and implementation experience
(20 Feb from Connolly)</description>
 </item>

...

</rdf:RDF>

The At A Glance public configuration feed is the archetype for configuring which feeds Glance aggregates. It uses the same vocabulary as an RSS feed and introduces a hierarchy of channels. The feeds in the public, member, and team configurations are available by default to users with the correct permissions.

Note the hierarchy of channels, which happens to mirror the hierarchy of the W3C's organization. The following is an excerpt including a domain, activity, and activity-related feeds.

<!DOCTYPE rdf:RDF [
        <!ENTITY rdf 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
        <!ENTITY rdfs 'http://www.w3.org/2000/01/rdf-schema#'>
        <!ENTITY rss 'http://purl.org/rss/1.0/'>
	<!ENTITY gl 'http://www.w3.org/2001/10/glance/vocab#'>
	<!ENTITY this 'http://www.w3.org/2001/10/glance/config#'>
   ]>

<rdf:RDF xmlns:rdf="&rdf;"
         xmlns:rdfs="&rdfs;"
         xmlns:gl="&gl;"
         xmlns="&rss;">

<!-- Top Channel that includes all W3C Domains -->

<channel rdf:about="&this;glance">
  <gl:displayTitle>At A Glance</gl:displayTitle>
  <title>W3C At A Glance</title>
  <link>&this;glance</link>
  <description>One stop shopping for all of your W3C information
needs.</description>
  <items>
    <rdf:Seq>
      <rdf:li rdf:resource="&this;comm"/>
      <rdf:li rdf:resource="&this;tands"/>
      <rdf:li rdf:resource="&this;arch"/>
      <rdf:li rdf:resource="&this;interaction"/>
      <rdf:li rdf:resource="&this;wai"/>
      <rdf:li rdf:resource="&this;qappt"/>
    </rdf:Seq>
  </items>
</channel>

<!-- Channels for Domains -->

<channel rdf:about =" &this;tands">
  <gl:displayTitle>Tech / Society</gl:displayTitle>
  <title>W3C Technology and Society Domain</title>
  <link>http://www.w3.org/TandS/</link>
  <description>The W3C Technology and Society Domain seeks to develop
Web infrastructure to address social, legal, and public policy concerns.
</description>
  <items>
    <rdf:Seq>
      <rdf:li rdf:resource="&this;swa" />
    </rdf:Seq>
  </items>
</channel>

<!-- Channels for Activities -->

<channel rdf:about="&this;swa">
  <gl:displayTitle>Semantic Web</gl:displayTitle>
  <title>W3C Semantic Web Activity</title>
  <link>http://www.w3.org/2001/sw/</link>
  <description>The W3C Semantic Web Activity</description>
  <items>
    <rdf:Seq>
      <rdf:li rdf:resource="http://www.w3.org/2001/sw/Overview-events.rss"/>
      <rdf:li rdf:resource="http://rdfig.xmlhack.com/index.rss"/>
      <rdf:li rdf:resource="http://www.w3.org/2001/sw/WebOnt/scrapedFeed.rss"/>
    </rdf:Seq>
  </items>
</channel>

<!-- Channels -->

<channel rdf:about="http://www.w3.org/2001/sw/Overview-events.rss"> 
   <gl:displayTitle>News and Events</gl:displayTitle>
</channel>

<channel rdf:about="http://rdfig.xmlhack.com/index.rss">
   <gl:displayTitle>SW/RDF IG</gl:displayTitle>
</channel>

...

</rdf:RDF>

Basic Personal Feeds

The basic personal feed, which you can obtain by exporting your current preferences, [member-only] must be based on the channel http://www.w3.org/2001/10/glance/personal#personal. The RDF exported by Glance may look a little odd when compared to the average RSS 1.0 feed, but the serialization (done through the Jena toolkit) is correct.

The channels included in the exported references point at channels available through Glance's default configuration. Those shouldn't be modified or appended to since Glance will first try to refer to its default configuration when displaying feeds.

<rdf:RDF
  xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
  xmlns:NS0='http://www.w3.org/2001/10/glance/vocab#'
  xmlns:rss='http://purl.org/rss/1.0/'
 >
  <rdf:Description rdf:about='http://www.w3.org/2001/10/glance/personal#personal'>
    <rdf:type rdf:resource='http://purl.org/rss/1.0/channel'/>
    <NS0:displayTitle>Custom Glance</NS0:displayTitle>
    <rss:title>W3C At A Glance - Custom</rss:title>
    <rss:link>http://www.w3.org/2001/10/glance/personal#personal</rss:link>
    <rss:description>Your custom view of W3C information and news.</rss:description>
    <rss:items rdf:nodeID='A0'/>
  </rdf:Description>
  <rdf:Description rdf:nodeID='A0'>
    <rdf:type rdf:resource='http://www.w3.org/1999/02/22-rdf-syntax-ns#Seq'/>
    <rdf:_1 rdf:resource='http://www.w3.org/2001/10/glance/config#tands'/>
    <rdf:_2 rdf:resource='http://www.w3.org/2000/08/w3c-synd/home.rss'/>
  </rdf:Description>
  <rdf:Description rdf:about='http://www.w3.org/2000/08/w3c-synd/home.rss'>
    <NS0:displayTitle>Home Page</NS0:displayTitle>
  </rdf:Description>
  <rdf:Description rdf:about='http://www.w3.org/2001/10/glance/config#tands'>
    <NS0:displayTitle>Tech / Society</NS0:displayTitle>
  </rdf:Description>
</rdf:RDF>

Adding External Feeds

To add an external feed, include it as an rss:item in the appropiate rss:items list, then add it as an individual rss:channel with a glance:displayTitle.

<rdf:RDF
  xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
  xmlns:NS0='http://www.w3.org/2001/10/glance/vocab#'
  xmlns:rss='http://purl.org/rss/1.0/'
 >
  <rdf:Description rdf:about='http://www.w3.org/2001/10/glance/personal#personal'>
    <rdf:type rdf:resource='http://purl.org/rss/1.0/channel'/>
    <NS0:displayTitle>Custom Glance</NS0:displayTitle>
    <rss:title>W3C At A Glance - Custom</rss:title>
    <rss:link>http://www.w3.org/2001/10/glance/personal#personal</rss:link>
    <rss:description>Your custom view of W3C information and news.</rss:description>
    <rss:items rdf:nodeID='A0'/>
  </rdf:Description>
  <rdf:Description rdf:nodeID='A0'>
    <rdf:type rdf:resource='http://www.w3.org/1999/02/22-rdf-syntax-ns#Seq'/>
    <rdf:_1 rdf:resource='http://www.w3.org/2001/10/glance/config#tands'/>
    <rdf:_2 rdf:resource='http://www.w3.org/2000/08/w3c-synd/home.rss'/>
    <rdf:_3 rdf:resource='http://www.example.org/feed.rdf'/>
  </rdf:Description>
  <rdf:Description rdf:about='http://www.w3.org/2000/08/w3c-synd/home.rss'>
    <rdf:type rdf:resource='http://purl.org/rss/1.0/channel'/>
    <NS0:displayTitle>Home Page</NS0:displayTitle>
  </rdf:Description>
  <rdf:Description rdf:about='http://www.w3.org/2001/10/glance/config#tands'>
    <rdf:type rdf:resource='http://purl.org/rss/1.0/channel'/>
    <NS0:displayTitle>Tech / Society</NS0:displayTitle>
  </rdf:Description>
  <rdf:Description rdf:about='http://www.example.org/feed.rdf'>
    <rdf:type rdf:resource='http://purl.org/rss/1.0/channel'/>
    <NS0:displayTitle>An Example Feed</NS0:displayTitle>
  </rdf:Description>
</rdf:RDF>

If the channel appears to be blank when displaying in Glance, then the URI the RSS feed sits at and the channel the feed is actually about are probably different. You'll have to look in the feed, determine which URI the channel claims to be about, and use that instead of the location of the feed. In addition, you'll need to add a glance:feed property to the channel. See the example below where the feed is located at http://www.example.org/feed.rdf but is actually about the channel http://www.example.org/. See the ESW Wiki feed for a live example of a feed with a different channel URI.

  <rdf:Description rdf:about='http://www.w3.org/2001/10/glance/personal#personal'>
    <rdf:type rdf:resource='http://purl.org/rss/1.0/channel'/>
    <NS0:displayTitle>Custom Glance</NS0:displayTitle>
    <rss:title>W3C At A Glance - Custom</rss:title>
    <rss:link>http://www.w3.org/2001/10/glance/personal#personal</rss:link>
    <rss:description>Your custom view of W3C information and news.</rss:description>
    <rss:items rdf:nodeID='A0'/>
  </rdf:Description>
  <rdf:Description rdf:nodeID='A0'>
    <rdf:type rdf:resource='http://www.w3.org/1999/02/22-rdf-syntax-ns#Seq'/>
    <rdf:_3 rdf:resource='http://www.example.org/'/>
  </rdf:Description>
  <rdf:Description rdf:about='http://www.example.org/'>
    <rdf:type rdf:resource='http://purl.org/rss/1.0/channel'/>
    <NS0:displayTitle>An Example Feed</NS0:displayTitle>
    <NS0:feed rdf:resource='http://www.example.org/feed.rdf'/>
  </rdf:Description>
</rdf:RDF>

Adding Groups of Feeds

Adding a group is essentially the same as adding an external feed, except at another point in the hierarchy. The group should be fully described using a rss:title, rss:description, glance:displayTitle, and rss:items and be included in the appropriate list of feeds.

<rdf:RDF
  xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
  xmlns:NS0='http://www.w3.org/2001/10/glance/vocab#'
  xmlns:rss='http://purl.org/rss/1.0/'
 >
  <rdf:Description rdf:about='http://www.w3.org/2001/10/glance/personal#personal'>

...

    <rdf:_2 rdf:resource='http://www.w3.org/2000/08/w3c-synd/home.rss'/>
    <rdf:_3 rdf:resource='#Industry'/>
  </rdf:Description>

...

  <rss:channel rdf:about='#Industry'>
    <NS0:displayTitle>Industry</NS0:displayTitle>
    <rss:title>Industry</rss:title>
    <rss:description>News from the industry</rss:description>
    <rss:items>
      <rdf:Seq>
        <rdf:li rdf:resource='http://www.example.org/industry.rss'/>
        <rdf:li rdf:resource='http://www.example.com/summaries.rss'/>
      </rdf:Seq>
    </rss:items>
  </rss:channel>
  <rss:channel rdf:about='http://www.example.org/industry.rss'>
    <NS0:displayTitle>Industry News</NS0:displayTitle>
  </rss:channel>
  ...
</rdf:RDF>

Upload Customizations

You can store your personalized feed on your hard disk or on the web. Glance can deal with uploaded files or with URIs. The upload interface is available on the preferences page [member-only].

A working example is available on the web.