GRDDLGRDDL (Gleaning Resource Descriptions from Dialects of Languages) はメタデータが埋め込まれた XHTML とメタデータを抽出するルールを記述した XSLT スタイルシートなどを結びつける仕組みです。 Web 上には沢山の情報が存在しますが、大部分は人間が理解できるように HTML 形式で書かれたものです。HTML 形式とは別に、コンピュータが理解できる RDF 形式で情報を提供することをコンテンツ製作者に望むのは、負担が大きくなり難しいでしょう。仮に提供していても、2つの整合性を合わせ続けることは困難です。GRDDL はウェブページから自動的に RDF を生成する手段として利用することが可能です。 GRDDL を用いれば、XSLT スタイルシートの簡単なルールに従い XHTML を記述することによってそのページの RDF を提供することができます。例えば、XHTML から RSS を抽出するための XSLT スタイルシートが W3C から提供されています。以下にそのスタイルシートの一部を示します。 1:<xsl:for-each select='.//h:div[@class="item"]'>
2: <xsl:variable name="itemURI">
3: <xsl:call-template name="uri:expand">
4: <xsl:with-param name="there" select='.//h:a[@rel="details"]/@href'/>
5: <xsl:with-param name="base" select="$Base"/>
6: </xsl:call-template>
7: </xsl:variable>
8: <item rdf:about="{$itemURI}">
9: <title>
10: <xsl:choose>
11: <xsl:when test="h:h2">
12: <xsl:value-of select='normalize-space(h:h2)'/>
13: </xsl:when>
14: <xsl:otherwise>
15: <xsl:value-of select='normalize-space(h:h3)'/>
16: </xsl:otherwise>
17: </xsl:choose>
18: </title>
19: <description>
20: <xsl:value-of select='normalize-space(h:p)'/>
21: </description>
22: <link><xsl:value-of select="$itemURI"/></link>
23: <xsl:variable name="dateElt" select='h:p/*[@class="date"]'/>
24: <dc:date>
25: <xsl:choose>
26: <xsl:when test="contains(normalize-space($dateElt),' ')">
27: <xsl:call-template name="hr:format-date">
28: <xsl:with-param name="DDMonthYYYY" select="translate($dateElt,':','')"/>
29: </xsl:call-template>
30: </xsl:when>
31: <xsl:when test="contains($dateElt,'-')">
32: <xsl:value-of select="translate($dateElt,':','')"/>
33: </xsl:when>
34: </xsl:choose>
35: </dc:date>
36: </item>
37:</xsl:for-each>
接頭辞となっている dc:, h:, uri:, rdf: はそれぞれ Dublin Core, XHTML, URI, RDF の名前空間に結び付けられていて、接頭辞のない要素は RSS の名前空間に属しています。ここではスタイルシート解説は行いませんが、このスタイルシートでは RSS の item 要素と XHTML の <div class="item"> 要素を対応させています(1行目)。そのため、コンテンツ製作者は RSS の item として抜き出してほしい情報を <div class="item"> 要素としてまとめればよいということになります。例えば、XHTML の一部分に <h1>コンテンツを更新!</h1> <p> 花粉症対策についてまとめてみました。(2005-04-12) → <a href="http://www.4dd.co.jp/contents/">コンテンツページへ</a> </p> という記述があり(要素はすべて XHTML の名前空間に属しているとします)、これを RSS の item として抜き出したい場合は、 <div class="item">
<h1>コンテンツを更新!</h1>
<p>
花粉症対策についてまとめてみました。(2005年04月12日)
→ <a href="http://www.4dd.co.jp/contents/">コンテンツページへ</a>
</p>
</div>
とすればよいということになります。さらに、item に関して詳細に記述しているページへのリンクを <div class="item"> 要素に含まれる <a> 要素の中から抽出します。抽出ルールは rel 属性の値が "details" である <a> 要素の href 属性です(4行目)。そのため、item に関する詳細情報があるページへのリンクが "http://www.4dd.co.jp/contens/" ならば、 <div class="item">
<h1>コンテンツを更新!</h1>
<p>
花粉症対策についてまとめてみました。(2005年04月12日)
→ <a href="http://www.4dd.co.jp/contents/" rel="details">コンテンツページへ</a>
</p>
</div>
と記述することでリンクを抽出できます。同様に、item のタイトルは <div class="item"> 要素に含まれる <h2> か <h3> 要素に対応し(12行目、15行目)、item の説明は <div class="item"> 要素の最初の <p> 要素に対応し(20行目)、item の更新日時情報は <div class="item"> 要素の <p> 要素に含まれる class 属性が "date" のもので DDMonthYYYY (12Apr2005) や YYYY-MM-DD といったフォーマットに従った要素に対応します(23行目)。この対応ルールに従い XHTML を書き換えると、 <div class="item">
<h2>コンテンツを更新!</h2>
<p>
花粉症対策についてまとめてみました。(<span class="date">2005-04-12</span>)
→ <a href="http://www.4dd.co.jp/contents/" rel="details">コンテンツページへ</a>
</p>
</div>
となり、この XSLT スタイルシートに従い RSS に変換を行うと、 <item rdf:about="http://www.4dd.co.jp/contents/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://purl.org/rss/1.0/">
<title>コンテンツを更新!</title>
<description>
花粉症対策についてまとめてみました。(2005-04-12)
→ コンテンツページへ
</description>
<link>http://www.4dd.co.jp/contents/</link>
<dc:date>2005-04-12</dc:date>
</item>
となります。簡単なルールに従って XHTML を記述することによって RSS を自動作成できることがわかります。 それでは、GRDDL により XHTML と XSLT スタイルシートとの関連付けを行う方法を示します。まず、XHTML の <head> 要素に "data-view" プロファイルを指定します。 <head profile="http://www.w3.org/2003/g/data-view"> このプロファイルには transformation というリンクタイプが定められており、以下のような <link> 要素を <head> 要素に記述することで XHTML と XSLT スタイルシートとの関連付けを行えます。 <link rel="transformation" href="http://www.w3.org/2000/08/w3c-synd/home2rss.xsl" /> 今回は、先ほど例で示した XHTML から RSS を抽出するための( "http://www.w3.org/2000/08/w3c-synd/home2rss.xsl" にある)XSLT スタイルシートを用いましたが、その他の XSLT スタイルシート( GRDDL を利用するアプリケーションさえ理解していれば XSLT スタイルシートである必要もない)を用いる場合は、href 属性にスタイルシートが存在する URI を記述してやります。この <link> 要素を複数列挙し、複数の XSLT スタイルシートを使用することも可能です。 先ほどの例では既存の XSLT スタイルシートを用いましたが、RSS を抽出するという同じ目的でも独自のスタイルシートを使うことが考えられます。独自のスタイルシートを用いることで、元のページデザインをほとんど崩さなくてもよい、相対リンクアドレスに対応させることができる、といった利点が挙げられます。以下に、実際にサイトに適用した例を示します。
ここでは Techscore というサイトの更新情報ページから RSS ファイルを自動生成しています。次に、先ほどから利用している XHTML から RSS を抽出する XSLT スタイルシートを、対象となる XHTML に合うように変更し、独自の XSLT スタイルシートを作成しています。XHTML 文書の link 要素ではこのスタイルシートを利用してページを変換するよう link 要素で指定しています。GRDDL を利用して生成した RSS は、事前に作成したものを RSS ファイルとしても置いています。 |
![]()
![]()
|