<?xml version="1.0" encoding="UTF-8"?>
<essay xml:lang="en" version="pto" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:gal="http://norman.walsh.name/rdf/gallery#">
<info>
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
<title>How?</title><biblioid class="uri">http://norman.walsh.name/2003/05/14/how</biblioid>
<volumenum>6</volumenum>
<issuenum>12</issuenum>
<pubdate>2003-05-14</pubdate>
<date>$Date: 2005-09-11 10:27:02 -0400 (Sun, 11 Sep 2005) $</date>
<author>
      <personname>
<firstname>Norman</firstname>
	<surname>Walsh</surname>
</personname>
    </author>
<copyright>
      <year>2003</year>
      <holder>Norman Walsh</holder>
    </copyright>
<abstract>
<para>How does this site work?</para>
</abstract>
<dc:subject rdf:resource="http://norman.walsh.name/knows/taxonomy#DocBook"/>
<dc:subject rdf:resource="http://norman.walsh.name/knows/taxonomy#RDF"/>
<dc:subject rdf:resource="http://norman.walsh.name/knows/taxonomy#SelfReference"/>
<dc:subject rdf:resource="http://norman.walsh.name/knows/taxonomy#Sticky"/>
</info>
<epigraph>
<attribution>
      <personname>
	<firstname>E. H.</firstname>
<surname>Gombrich</surname>
      </personname>
    </attribution>
<para xml:id="p1">To
probe a hole we first use a straight stick to see how far it takes us.
To probe the visible world we use the assumption that things are
simple until they prove to be otherwise.</para>
</epigraph>

<para xml:id="p2">This site uses RDF<indexterm>
      <primary>RDF</primary>
    </indexterm>
to manage a collection of mostly XML
resources. These resources are transformed using
XSLT<indexterm>
      <primary>XSLT</primary>
    </indexterm> and presented in
HTML<indexterm>
      <primary>HTML</primary>
    </indexterm> and
RSS<indexterm>
      <primary>RSS</primary>
    </indexterm>.
Most of the pages are built in a staging area so that
mostly static pages are served. Server-side includes are used to keep
the navigation information on each page up-to-date without rebuilding
every page every time the navigation changes.</para>

<para xml:id="p3">Every resource on the site contributes RDF metadata to a central store.
<link xlink:href="how.xml">This article</link>, for example, has
<link xlink:href="how.rdf">intrinsic metadata</link>.</para>

<para xml:id="p4">This metadata<indexterm>
      <primary>Metadata</primary>
    </indexterm>
is extracted by the build process. In addition to
the intrinsic metadata, each article on the site is catagorized into one or
more <link xlink:href="/knows/topics">topics</link>. The set of topics is taken
from a defined <link xlink:href="/knows/taxonomy">taxonomy</link>.</para>

<para xml:id="p5">This metadata is collected into an RDF description about each
resource:</para>

<programlisting>&lt;t:Article rdf:about="..."&gt;
  &lt;t:indexterm rdf:resource="..."/&gt;
  &lt;t:indexterm rdf:resource="..."/&gt;
  &lt;cvs:date&gt;...&lt;/cvs:date&gt;
  &lt;dc:creator rdf:resource="..."/&gt;
  &lt;dc:date&gt;...&lt;/dc:date&gt;
  &lt;dc:description&gt;...&lt;/dc:description&gt;
  &lt;dc:format&gt;application/xml&lt;/dc:format&gt;
  &lt;dc:rights&gt;...&lt;/dc:rights&gt;
  &lt;dc:subject rdf:resource="..."/&gt;
  &lt;dc:subject rdf:resource="..."/&gt;
  &lt;dc:title&gt;...&lt;/dc:title&gt;
  &lt;dc:type rdf:resource="..."/&gt;
&lt;/t:Article&gt;</programlisting>

<para xml:id="p6">The site navigation (topics, subjects, and dates) is constructed
from the metadata collection. The <link xlink:href="/index.rss">central RSS
feed</link> is built along with the navigation.</para>

<para xml:id="p7">Each individual article is validated, using RELAX NG<indexterm>
<primary>RELAX NG</primary>
    </indexterm>, against a
<link xlink:href="/schema/essay.rnc">customization</link> of the
<link xlink:href="http://docbook.org/">DocBook</link> schema.</para>

<para xml:id="p8">Finally, each page is assembled by the server for presentation.
The article, navigation, and page footer are pulled together and
shipped to the browser with some CSS<indexterm>
      <primary>CSS</primary>
    </indexterm>.
(You can add my voice to the
general rant about CSS support in browsers. This site looks pretty
good in Mozilla<indexterm>
      <primary>Web Browsers</primary>
<secondary>Mozilla</secondary>
    </indexterm> and other browsers with
good CSS support. It looks pretty bland in IE<indexterm>
      <primary>Web Browsers</primary>
<secondary>Internet Explorer</secondary>
    </indexterm>, but I think it's
legible.)</para>

<para xml:id="p9">Pages that are served directly in XML (RDF pages, the RSS feed, and
the FOAF<indexterm>
<primary>Friend of a friend (FOAF)</primary>
</indexterm> page) include a pointer to an XSL stylesheet. They are rendered
on the client side by browsers that support the
<literal>xml-stylesheet</literal> processing instruction.</para>

<para xml:id="p10">If that all sounds interesting, you can
<link xlink:href="/2003/06/16/build">build it</link> yourself.</para>

</essay>

