thing-described-by.org

Below: Background | How This Site Works | Delegation of Authority | How to Mint a URI | Optimizing | Shortening Your URIs | Usage Policy

Thing-described-by.org is a 303-redirect service.  It provides a convenient mechanism for minting dereferenceable http URIs for things that are not necessarily web resources, such as people, cars or concepts in an ontology. 

Background

Name Versus Location.  HTTP URIs -- URIs that begin with "http://" -- are increasingly used as globally unambiguous names of things other than web pages.  For example, you could make up a URI to act as a globally unique name for yourself, or your car, or a particular concept in an ontology.   The nice thing about using HTTP URIs for this purpose is that the URI can double as a document locator, so you can easily place authoritative data about that URI where others will know to find it ("follow your nose").  For example, if you mint an HTTP URI to name a concept in an ontology, it is helpful to provide a document, accessible via that URI, that tells others what concept the URI is intended to name.

Resource Ambiguity.  However, using the same URI both as the name of the concept and the location of a web page describing that concept creates an ambiguity: Does the URI name the concept or the web page describing the concept?  To avoid such ambiguity, the W3C TAG recommends that the URI describing the concept should forward (using an HTTP 303 See Other status code) to a related URI for retrieving the descriptive document. 

URI Pairs.  This means that for each URI that you wish to use to name a concept (or other non-information resource), you need another URI for the related descriptive document.  Thing-described-by.org makes it easy to mint such URI pairs: after minting a URI, u, for your descriptive document, you can create another URI for the thing your descriptive document describes, merely by prepending "http://thing-described-by.org/?" to your document URI.  If the resulting URI is dereferenced in a browser, thing-described-by.org will automatically redirect the request to your document URI, per the W3C TAG's guidance.  This 303-redirect indicates that the URI http://thing-described-by.org/?u does not necessarily name an information resource

Many-to-one URI mappings.  Because the resulting concept URI is derived directly from the document URI, this results in a one-to-one mapping between concept URIs and document URIs.  However, fragment identifiers can be used in conjunction with thing-described-by.org to cause multiple document URIs (having the same absolute URI part but different fragment identifiers) to be based on the same physical document.  This causes multiple concept URIs to map one-to-one to document URIs (with fragment identifiers), which map many-to-one to a single physical document when the document URIs are dereferenced, as illustrated below (abbreviating thing-described-by.org as t-d-b.org):

http://t-d-b.org/?http://example.org#f1 --> http://example.org#f1 \
                                                                  +--> http://example.org
http://t-d-b.org/?http://example.org#f2 --> http://example.org#f2 /

How This Site Works

The web server for thing-described-by.org is configured as follows.  For any absolute URI u, any HTTP GET request on http://thing-described-by.org/?u will return an HTTP 303 See Other redirection to u.  Thing-described-by.org does this without knowing anything about u.  In particular, u does not need to be registered with thing-described-by.org in advance. If you are curious about the implementation details, or if you want to implement your own 303-redirect service, you can look at the files that implement this site.

Delegation of Authority

The following delegation of authority applies to all current and future times:
  1. If u is any absolute URI, then authority for defining what resource http://thing-described-by.org/?u names is hereby delegated to the owner of u as follows:
    1. If dereferencing u yields content that explicitly specifies what resource http://thing-described-by.org/?u names, then http://thing-described-by.org/?u names that resource.
    2. If dereferencing u yields content that does not explicitly specify what resource http://thing-described-by.org/?u names, then http://thing-described-by.org/?u names the primary subject of that content.
  2. If u#f is any URI having absolute URI u and fragment identifier f, then authority for defining what resource http://thing-described-by.org/?u#f names is hereby delegated to the owner of u#f as follows:
    1. If dereferencing u yields content that explicitly specifies what resource http://thing-described-by.org/?u#f names, then http://thing-described-by.org/?u#f names that resource.
    2. If dereferencing u yields content that does not explicitly specify what resource http://thing-described-by.org/?u#f names, then http://thing-described-by.org/?u#f names the primary subject of the content specified by u#f.

How to Mint a URI Using thing-described-by.org

Step 1: Allocate a document URI, u, where you plan to place authoritative information about the thing you wish to name.  u must be an absolute URI.

Step 2: Prepend "http://thing-described-by.org/?" to your document URI to create a new URI, http://thing-described-by.org/?u , for the thing you wish to name.

Step 3: Place authoritative information at your document URI, u, describing the meaning of your new URI, http://thing-described-by.org/?u .  This information may be in any format that you find useful, such as RDF or HTML.

Example

I own the domain dbooth.org and I want to create a URI as a globally unique name for myself, David Booth.

Step 1: Create a web page on my site describing me (David Booth):
    http://dbooth.org/2005/dbooth/
Step 2: Prepend "http://thing-described-by.org/?" to the URI from step 1, to create a new URI that will be used as a globally unique name for me:
    http://thing-described-by.org/?http://dbooth.org/2005/dbooth/
Step 3: In my web page from step 1, provide authoritative information about the meaning of the URI created in step 2 that acts as a globally unique name for me.  For example, if the page is written in English prose, it might say something like:

"The URI http://thing-described-by.org/?http://dbooth.org/2005/dbooth/ hereby acts as a globally unique name for the natural person named David Booth with email address dbooth@hp.com (as of 1-Jan-2005)."

Optimizing: Avoiding Unnecessary HTTP Requests

Software that is seeking authoritative information about a URI of the form  http://thing-described-by.org/?u may be tempted to send an HTTP GET request to thing-described-by.org.  However, since such a request will always be redirected to u, (using HTTP 303 See Other), the request is unnecessary and should be avoided.  Software authors are therefore encouraged to optimize away such requests and perform the HTTP GET directly on u.

Shortening Your URIs

If thing-described-by.org makes your URIs too long, you can use t-d-b.org instead.

Usage Policy

This site may be used by anyone for the purpose described above, though users are encouraged to perform the optimization described above.  It is currently owned and maintained by David Booth, though I would be happy to transfer ownership and maintenance to any suitable organization.


Comments?  Bug reports?  Contact David Booth david@dbooth.org

25-Apr-2010: Corrected a syntax error in the URI prefix.  Previous instructions said to write "http://thing-described-by.org?..." (note the missing "/" before the "?") instead of the correct "http://thing-described-by.org/?...".  The missing "/" would have caused an empty abs_path (RFC 2398) or path-absolute (RFC 3986), which is syntactically incorrect when a query string is presentThanks to Eric Hellman for kindly informing me of this error.
5-Jun-2008: Changed to using redirect.pl for doing the 303 redirects, because the apache rewriting was buggy. Also added a way to view the files that implement this site, fixed invalid HTML, added charset declaration and made minor editorial changes.
30-Jul-2007: Corrected a typo.
24-Apr-2007: Expanded delegation of authority to cover URIs with fragment identifiers, and implicit naming.
11-Apr-2007: Updated.
July 2005: Initial version.