document関数の例の第一回は、最も単純なdocument(絶対URI) というパターンの例を、RSSの再利用という形で紹介します。
document(絶対URI)の場合、そのURIであらわされるリソースのXMLノードツリーのルートノードのみを含むノード集合が返されます。それだけですので別に例示する程の話でもありませんが、ちょうど旧agendaの最新版を整形しているXSLTスタイルシートで使用しているので急遽書いてみることにしました。さて:
Weblogの最新版では、最新の記事一つだけを紹介し、それ以前の数点は「最近の記事一覧」としてアンカーと概要のみを掲載することにしました。dive into markの「older posts」の真似です。
「最近の記事一覧」のアンカーリストは、RSS文書から引っ張ってきたデータをHTMLに変換する形で、XSLT(スタイルシートとプロセッサ)に行わせます。
<xsl:template name="olderPosts">
<xsl:variable name="rss.nodeset"
select="document('http://members.jcom.home.ne.jp/jintrick/Personal/putdata.xml')" />
<dl>
<xsl:for-each
select="$rss.nodeset/descendant::rss:item[string(child::slash:section) = 'agenda']">
<dt>
<a href="{@rdf:about}">
<xsl:value-of select="string(child::rss:title)" />
</a>
</dt>
<dd>
<dl>
<dt>更新日時</dt>
<dd>
<xsl:value-of select="string(child::dc:date)" />
</dd>
<dt>概要</dt>
<dd>
<xsl:value-of select="string(child::rss:description)" />
</dd>
</dl>
</dd>
</xsl:for-each>
</dl>
</xsl:template>
これを任意の位置でcall-templateするだけです。というわけで、XSLTの話題として面白くもなんともありませんというか、RSSの再利用の話ですかこれは。他のサブサイトのホームページで、最近更新した文書をこのような形で紹介すると便利かもしれません。
他に、document関数を利用して、サイト全体のRSSをサブサイトのRSSに分割したりできます。その場合、サブサイトを識別する何らかの要素がRSS文書の各item要素内に必要です。前述の例では、サイト「Personnel」の更新情報としてのRSSの中に、サブサイト「agenda」の更新情報が含まれており、サブサイト「agenda」の更新アイテム(主語)については、slash dotモジュールを利用して、slash:section要素(述語)にagendaというテキストノード(目的語)を入れて識別しています。