Revision as of 23:04, 5 February 2008 by (Talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)



FOAF Autodiscovery

What is it? and how can i use it?

Autodiscovery is a means for automatically finding machine-processable resources associated with a particular web page. The discovery can be automated because the resource is linked to in a well-defined way (using the HTML

Autodiscovery was first popularised in the 'blogging community who adopted a standard link format for associating an RSS feed with a 'blog home page. This allowed RSS readers to automatically find the RSS file when pointed at the blog home page.

FOAF Autodiscovery adopts the same technique, and uses the following link format:

<link rel="meta" type="application/rdf+xml" title="FOAF" href="foaf.rdf" />

This tag should be placed inside the
tag of your web page as follows,

substituting the link to your FOAF file instead of "Template:foaf.rdf"

<link rel="meta" type="application/rdf+xml" title="FOAF" href="foaf.rdf" />

You may also want to add a FOAF Icons to your web page to indicate to readers that there is a link to the FOAF document embedded in the page.

You can embed the link anywhere you choose. You may choose to include it only on the home page, or the "about me" page, or both. It's entirely up to you.

There are several applications that use the FOAF Autodiscovery including the FOAF Autocreation tool and the FOAF Explorer. The Ping FOAFnaut Bookmarklet uses Autodiscovery to trigger FOAFnaut to update itself.

rel="meta" history and standards

The original 1997 RDF standards effort proposed that linked metadata be indicated in HTML documents using the rel="meta" construct. The link type was mentioned in the finally 1999 RDF recommendation from W3C. The Dublin Core community also recommended this approach for many years. However rel="meta" was never standardised within HTML. Although HTML allows for non-W3C link types, the later RDFCore WG at W3C chose to de-emphasise the "meta" link type, in favour of "alternate", which was more established within HTML.

Due to the extent of deployed practice, the current practice within the FOAF community is to continue to use rel="meta".

In the tradition of Postel's Law, applications that consume FOAF/RDF are encouraged for the sake of robustness to also look for rel="alternate" in HTML link types.

Since FOAF essentially defines a dictionary of terms, rather than a stand-alone document format, FOAF statements are often mixed within RDF documents that are primarily using other vocabularies. FOAF terms may also be used in the RDFS/OWL definition of other RDF terms, and so documents that don't even name the FOAF namespace may nevertheless contain information than can usefully be merged with other information in FOAF-oriented applications. Consequently, FOAF consuming applications can use any indicator of RDF content (such as the application/rdf+xml) as a hint that there may be FOAF-relevant information to be found there.

"Semantic" Autodiscovery

Can this approach be generalised for wider use? Here is a proposal and discussion...

The format described above for FOAF Autodiscovery is this:

<link rel="meta" type="application/rdf+xml" title="FOAF" href="foaf.rdf"/>

This seems a bit weird. Would a FOAF file be an "metainformation" for the document? If it is in a person's profile page, it would. However, this autodiscovery isn't used only in profile pages...

Therefore, we need to indicate the relationship between FOAF files and documents.Here's one solution.

<link rel="meta FOAF.MAKER" type="application/rdf+xml" title="FOAF" href="foaf.rdf"/>

Adding the value FOAF.MAKER to the rel attribute, that will mean "foaf.rdf is a metainformation of a maker for this document."

But now, machines won't know the linktype "FOAF.MAKER", so we have to also include the path to the foaf schema document. The complete "semantic autodiscovery" will be like this.

<link rel="schema.FOAF" href=""/>
<link rel="meta FOAF.MAKER" type="application/rdf+xml" title="FOAF" href="foaf.rdf"/>

This coding style is from Expressing Dublin Core in HTML/XHTML meta and link elements in


This is an interesting debate. It relates to the difficulty of saying what the topic of some complex RDF is - markup can be simultaneously about a Person and a Document. Imagine we have a homepage (home.html) and some RDF/XML statements in a separate document, index-meta.rdf. The RDF includes statements about the owner of the homepage, as well as about the page itself. Example:

<rdf:RDF (...)>
<foaf:Document rdf:about="home.html">
  <dc:title>Dan's home page</dc:title>
  <eg:size>10 k</eg:size>
  <foaf:maker rdf:nodeID="dan" />
  <foaf:topic rdf:nodeID="dan" />
<foaf:Person rdf:nodeID="dan">
  <foaf:name>Dan Brickley</foaf:name>
  <foaf:made rdf:resource="home.html" />
  <foaf:workplaceHomepage rdf:resource=""/>
  <foaf:homepage rdf:resource="home.html" />
  <foaf:mbox rdf:resource=""/>
  <foaf:mbox rdf:resource=""/>

As a document, this RDF/XML is equally "about" the person (dan) and the document (home.html). Even if the majority of statements in it were to relate to the person, there is still an intuitive sense in which those statements are still statements are about the document too.

Consider some questions we might ask about the document:

 * "Where does the author of this document work?"
 * "How old is the author?"
 * "What contact email addresses are there for the author...?"

...such questions are these are typical "document metadata" questions. They are in a broad sense information about the document, but in a narrow sense, information about a person. This situation relates to many of the difficulties that people have encountered when dealing with Dublin Core, and metadata in general: everything is connected. Metadata that is seemingly "about" a Document or Image, very often also needs to be "about" a Person, a Place, a DateTime, etc. Metadata requirements are all interconnected; RDF was designed as a highly interconnected approach to describing things. It allows a single file (eg. index-meta.rdf) to contain statements about both a Document, a Person, etc.

The FOAF Autodiscovery mechanism was designed in a similar way. It is a somewhat loose hint, allowing for a single RDF/XML file to perhaps be mostly about the Person, or perhaps mostly about the Document.

It makes a (previously unarticulated) assumption: information about the author of a document can also be considered metadata about the document itself. So long as the RDF/XML describes some relationship between Person and Document, it should be true that everything we learn about the Person also adds to our indirect knowledge of the document.

So... revisiting the proposal above... The claim is that we may be being "weird" sometimes to say that a person description is metadata about the document, when really it is just about the maker of the document. The proposal is, in such cases, to use "meta FOAF.MAKER" as the link relationship type, instead of just "meta". The central point to discuss here might be that this autodiscovery isn't used only in profile pages....

For discussion:

 * are statements about the author of a profile page (homepage etc) ok to consider 'meta' information about the page too? (yes/no/...?)
 * ...what other kinds of pages are there, where this might be weird/wrong?

Maybe an example:

 * danbri makes a page, bristol.html, about Bristol
 * we want a LINK REL pointing to a foaf file for the maker of that page, eg danbri-foaf.rdf
 * we want, somewhere (in the page? in the RDF?) to say that danbri made the page
 * we don't want to confuse the page with the person


Is this wrong/wierd to include in bristol.html?

<link rel="meta" type="application/rdf+xml" title="FOAF" href="danbri-foaf.rdf"/>


 * it is true that danbri-foaf.rdf provides metadata about the maker of the document bristol.html
 * ...but it doesn't say that danbri made the document
 * ...if danbri-foaf.rdf is danbri's general foaf file, the RDF probably doesn't say that either 
 * it is perhaps a bit weird (but not wrong/false) to provide info about the maker of the document, while not mentioning that the person _is_ the maker of the document
 * so it would be useful to have a way of saying ... "...and that person made this".

Viewed this way, the proposal above is a "value adding" proposal, not a bugfix.

Related proposals:

Edd Dumbill makes a very similar proposal: "Indicating HTML and RDF authorship with FOAF". He proposes...

  <meta name="foaf:maker"
    content="foaf:mbox" />


 <meta name="foaf:maker"
   content="foaf:mbox_sha1sum '1ba3bffdd13a136d38b77542f2e26fd1dc0042f2' />

Differences, discussion, synthesis...:

 * Edd doesn't use the <link rel="schema.FOAF" href="..."/> approach
 * this approach does not depend on the contents of external RDF/XML files
 * both approaches overlap with the scope of Dublin Core, which also seeks a way of describing document authorship (but generally doesn't point off to further RDF metadata)
 * ... where next? 

The difficulty of including full RDF/XML inline within HTML is a complicating factor here. There is work in progress to develop techniques for doing so, either directly (via schema modularisation) or indirectly, via transformations.

Further reading:

 * Mail Archives
 * [ESW:EmbeddingRDFinHTML] and associated GRDDL proposal, and example.
 * can the proposal in this page, or Edd's, or both, be used as examples with the GRDLL proposal?