This version of the RSD specification contains modifications in order to make the document self contained, such as including the example. Nothing else has been altered from the original. This pointer must remain in any copies of this document. Thanks --Daniel 08/11/2003
Thu, Oct 31, 2002; by Daniel Berlinger
Really Simple Discovery is a way to help client software find the services needed to read, edit, or "work with" weblogging software. Although I talk about weblogging software, there's no reason this format can't apply to other forms of web client/system software that I wasn't considering, or may not even exist as of this writing. (There is an example below where I did just that.) This format is simple but flexible. One of the deisgn goals was to ensure that it would be human writeable. This was my "test" for ensuring that the format was easy for everyone to implement.
The goal is simple. To reduce the information required to UserName, Password, and homepage URL.
Hopefully, it'll work for you.
Daniel
PS For early adopters there is a BDG for moving from 0.6 to 1.0. Thanks for jumping in.
"I'm afraid I could not get very far with Archipelago. The download and install was fine, but I'm not sure what to set for the rest. I have my account with blogger (that I use now) and the site itself is hosted somewhere else. Both of these have different names and passwords. What do I do?"The solution I propose below will simplify the discovery of settings information by reducing the information a user must supply to three well known elements. Assuming that the RSD file is generated by the blogging software (Radio, Manila, Moveable Type, SnipSnap, Conversant, Drupal, etc.) the other required bits of information not well known to the user can be easliy discovered and supplied. Blogger has "plant.blogger.com", "api/RPC2", and the blogID. The "Path to Service is case sensitive. If a user enters "/api/rpc2" in their preferences they get an error in html, courtesy of Tomcat, that states "The requested resource (/rpc2) is not available.". The error message is subject to change in format. This same problem could apply to every case. Moveable Type uses an endpoint of "mt/mt-xmlrpc.cgi", and the domain level of the URL depends on the installation. The site identifier is the blogID number. Manila and Radio use "rpc2", case insensitive. Manila's domain level URL depends on the installation but it does provide the "sitename" through the ManilaRPC API. Whew! Radio has a consistent siteID (as of this writing). Conversant has its own API plus support for basic Blogger API. It uses x|x|x identifier where the various flexible elements of Conversant are "x". Familiarity with Conversant is somewhat required. These elements are also required when specifiying a message, so you need a message "number" that looks like this x|x|x|123. Path to service is rpc2, and case insensitive (not tested). As you can imagine, plenty of folks have struggled to get this information exactly correct for each case. Anything that helps automate the process or gives users up to date information on the specific service their employing would help mitigate this difficulty. I'd think that something simple, like an xml document that lists the critical info would be about right. It should be simple enough to be written by hand. I'm calling this document "Really Simple Discoverability". I want to address the needs of blogging software, not be terribly general at first, and leave room for growth. I hope the RSS and XML folks dive in and help create a great format. The goal is to reduce the information required to set up editing software to three well known elements. UserName, Password, and homepage URL. Any other critical bits should either be defined in the related RSD file, or discoverable using the information provided. Jon Udell provided another piece to the puzzle, reminding me about the RSS link we have buried in our homepages. A similar link would serve the purpose here. This idea as it relates to RSS (I believe) was first proposed by Mark Pilgrim. It works perfectly here as well. By inserting a link such this <link rel="EditURI" type="application/rsd+xml" title=\"RSD" href="http:\//whereever the rsd.xml lives." /> into a homepage's header we uncouple the need to know where to find the RSD file. Each vendor can control where it makes sense for them to "place" the RSD file, accessible via the embedded URL. Client software only need to look at the homepage headers to discover where to look for more information. Excellent. At the same time, it has been suggested that we have a "best practice" location that represents a location where clients can try to find the file in cases where the link above has been removed, broken, or simply is not present. Having surveyed where folks are keeping their RSS files, we recommend http:\//www.userdomain.com/rsd.xml (There can be validation issues with the closed form (<something />) as shown above, which is important for say XHMTL but not for HTML 4.01 Transitional. The link will work just as well either way.) <service> is a container element. It's a hedge against the future. Sub-elements of <service>
<?xml version="1.0" ?>
<rsd version="1.0" xmlns="http://archipelago.phrasewise.com/rsd" >
<service>
<engineName>Blog Munging CMS</engineName>
<engineLink>http://www.blogmunging.com/ </engineLink>
<homePageLink>http://www.userdomain.com/ </homePageLink>
<apis>
<api name="MetaWeblog" preferred="true" apiLink="http://example.com/xml/rpc/url" blogID="123abc" />
<api name="Blogger" preferred="false" apiLink="http://example.com/xml/rpc/url" blogID="123abc" />
<api name="MetaWiki" preferred="false" apiLink="http://example.com/some/other/url" blogID="123abc" />
<api name="Antville" preferred="false" apiLink="http://example.com/yet/another/url" blogID="123abc" />
<api name="Conversant" preferred="false" apiLink="http://example.com/xml/rpc/url" blogID="">
<settings>
<docs>http://www.conversant.com/docs/api/ </docs>
<notes>Additional explanation here.</notes>
<setting name="service-specific-setting">a value</setting>
<setting name="another-setting">another value</setting>
...
</settings>
</api>
</apis>
</service>
</rsd>
Here is an
early example of an RSD file for the RESTLog API.
Developers are welcome
to extend RSD using modules defined in namespaces, as specified by the W3C. A RSD feed
may contain elements not described on this page, only if those elements are
defined in a namespace. All core RSD elements are defined in a namespace. Below
is an example that extends RSD to include two additional elements generatorAgent
and errorReportsTo. Another example can be found further down
the page. Example
(optional module)
Extension and modification should occur via modules. This should
provide enough flexibility for anyone to extend the format in the direction they
require. Backward compatibility must be maintained by any future
versions. As an example I wrote a module
for Dave's weblog
archives format. Everyone wants easy access to archives! And it displays how
RSD can be flexible about its purpose. *
Stephan Schmidt, Seth Dillingham, Brent Simmons, and Dave Winer have all lent a hand in getting
this together. Their support and ideas are greatly appreciated. I also would
like to thank all the developers who decided to join the fun and implement RSD
prior to 1.0. It really helped other developers understand what RSD is
accomplishing.