RSSを作る
はじめに
RSS(RDF Site Summary)で更新内容を公開してみることにした.難しいことはしていなくて,トップページの新着に書いてある内容をRSSにしてみただけである.「RSSとは何なのか?」については,参考サイトを参照したほうが早いと思う.
更新は毎週日曜日だし,更新内容もたいしたことはない.果たして利用価値があるのかどうかについては・・・.まあ,細かいことは作ってから考えるとしよう.
RSSに記述する内容
上述した通り,公開する内容はトップページの新着に書いた内容である.2004.1.4の新着のHTMLは以下の通りとなる.
<dt><a href="whatsnew/index.html">新着</a></dt>
<dd>
2004.1.4
<ul>
<li><a href="saijiki/index.html">歳時記</a>に2003.12.28から2004.1.3までを追加.</li>
<li><a href="links/index.html">リンク</a>に「東急東横線目黒線・新丸子タウン情報マップ」を追加.</li>
</ul>
</dd>
</dl>
これの元になるXMLは以下の通り.全文は付録につけたので,興味のある方は参照してほしい.
<content href="whatsnew/index.html" name="新着">
2004.1.4
<ul>
<li><a href="saijiki/index.html">歳時記</a>に2003.12.28から2004.1.3までを追加.</li>
<li><a href="links/index.html">リンク</a>に「東急東横線目黒線・新丸子タウン情報マップ」を追加.</li>
</ul>
</content>
このXMLからRSSを作るXSLTを用意することになる.
HeadLine-Editorで作ってみた
いきなりXSLTを書き始めても訳が分からなくなりそうなので,とりあえずサンプルをHeadline-Editor Liteで作ってみた.
以下のようなRSSができた.なるほど,こんな風に作れば良いわけだな.
<?xml version="1.0" encoding="utf-8" ?>
<rdf:RDF
xmlns="http://purl.org/rss/1.0/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xml:lang="ja">
<channel rdf:about="http://www.dab.hi-ho.ne.jp/sasa/rss/whatsnew.rdf">
<title>眠る猫の頁</title>
<link>http://www.dab.hi-ho.ne.jp/sasa/</link>
<dc:date>2004-01-02T21:26:13+09:00</dc:date>
<items>
<rdf:Seq>
<rdf:li rdf:resource="http://www.dab.hi-ho.ne.jp/sasa/biboroku/index.html"/>
<rdf:li rdf:resource="http://www.dab.hi-ho.ne.jp/sasa/saijiki/index.html"/>
</rdf:Seq>
</items>
</channel>
<item rdf:about="http://www.dab.hi-ho.ne.jp/sasa/biboroku/index.html">
<title>リンク</title>
<link>http://www.dab.hi-ho.ne.jp/sasa/biboroku/index.html</link>
<dc:date>2004-1-4</dc:date>
<description>「東急東横線目黒線・新丸子タウン情報マップ」を追加.</description>
</item>
<item rdf:about="http://www.dab.hi-ho.ne.jp/sasa/saijiki/index.html">
<title>新着</title>
<link>http://www.dab.hi-ho.ne.jp/sasa/saijiki/index.html</link>
<dc:date>2004-1-4</dc:date>
<description>2003.12.28から2004.1.3までを追加.</description>
</item>
</rdf:RDF>
XSLT作成
ということで作ってみた.日付の形式をDoublin Coreモジュールにあわせて変換している(2004.1.4→2004-01-04)ぐらいで,それほど凝ったことはやっていない.また,便利そうだったのでHeadline-Editor Lite版にはなかったSyndicationモジュールを追加している.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns="http://purl.org/rss/1.0/"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
version="1.0">
<xsl:output
method="xml"
encoding="utf-8"
indent="yes"/>
<xsl:variable name="base" select="'http://www.dab.hi-ho.ne.jp/sasa/'"/>
<!-- Doublin Coreに合わせて日付の形式をyyyy.m.dからyyyy-mm-ddに変換 -->
<xsl:template name="update">
<xsl:variable name="update"
select="normalize-space(/root/content[@name='新着']/text())"/>
<!-- /root/content[@name='新着']/text()だけだと不要な空白/改行が残る.normalize-spaceでそれらを削除 -->
<xsl:variable name="yyyy"
select="format-number(substring-before($update,'.'),'0000')"/>
<xsl:variable name="mm"
select="format-number(substring-before(substring-after($update,'.'),'.'),'00')"/>
<xsl:variable name="dd"
select="format-number(substring-after(substring-after($update,'.'),'.'),'00')"/>
<xsl:value-of select="concat($yyyy,'-',$mm,'-',$dd)"/>
</xsl:template>
<xsl:template match="/">
<rdf:RDF xml:lang="ja">
<channel rdf:about="{concat($base,'rss/whatsnew.rdf')}">
<title><xsl:value-of select="/root/@title"/></title>
<link><xsl:value-of select="concat($base,'index.html')"/></link>
<description>日々思うことやシステム開発の小技について</description>
<dc:creator>foo@bar</dc:creator>
<dc:date><xsl:call-template name="update"/></dc:date>
<dc:language>ja</dc:language>
<!-- Syndicationモジュールの記述を追加 -->
<sy:updatePeriod>weekly</sy:updatePeriod>
<sy:updateFrequency>1</sy:updateFrequency>
<sy:updateBase><xsl:call-template name="update"/></sy:updateBase>
<items>
<rdf:Seq>
<xsl:apply-templates select="/root/content[@name='新着']/ul/li/a"/>
</rdf:Seq>
</items>
</channel>
<xsl:apply-templates select="/root/content[@name='新着']/ul/li"/>
</rdf:RDF>
</xsl:template>
<xsl:template match="/root/content[@name='新着']/ul/li/a">
<rdf:li rdf:resource="{concat($base,@href)}"/>
</xsl:template>
<xsl:template match="/root/content[@name='新着']/ul/li">
<item rdf:about="{concat($base,a/@href)}">
<title><xsl:value-of select="a/text()"/></title>
<link><xsl:value-of select="concat($base,a/@href)"/></link>
<dc:date><xsl:call-template name="update"/></dc:date>
<description><xsl:value-of select="."/></description>
</item>
</xsl:template>
</xsl:stylesheet>
できたRSSは以下の通り.XSLTプロセッサのXTを使ってXMLからRSSへの変換を行っている.また,なぜか字下がうまい具合にできず,実際は字下げのない状態でできる.そのままだと見にくいので整形してある.
<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF
xml:lang="ja"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns="http://purl.org/rss/1.0/">
<channel rdf:about="http://www.dab.hi-ho.ne.jp/sasa/rss/whatsnew.rdf">
<title>眠る猫の頁</title>
<link>http://www.dab.hi-ho.ne.jp/sasa/index.html</link>
<description>日々思うことやシステム開発の小技について</description>
<dc:creator>foo@bar</dc:creator>
<dc:date>2004-01-04</dc:date>
<dc:language>ja</dc:language>
<sy:updatePeriod>weekly</sy:updatePeriod>
<sy:updateFrequency>1</sy:updateFrequency>
<sy:updateBase>2004-01-04</sy:updateBase>
<items>
<rdf:Seq>
<rdf:li rdf:resource="http://www.dab.hi-ho.ne.jp/sasa/saijiki/index.html"/>
<rdf:li rdf:resource="http://www.dab.hi-ho.ne.jp/sasa/links/index.html"/>
</rdf:Seq>
</items>
</channel>
<item rdf:about="http://www.dab.hi-ho.ne.jp/sasa/saijiki/index.html">
<title>歳時記</title>
<link>http://www.dab.hi-ho.ne.jp/sasa/saijiki/index.html</link>
<dc:date>2004-01-04</dc:date>
<description>歳時記に2003.12.28から2004.1.3までを追加.</description>
</item>
<item rdf:about="http://www.dab.hi-ho.ne.jp/sasa/links/index.html">
<title>リンク</title>
<link>http://www.dab.hi-ho.ne.jp/sasa/links/index.html</link>
<dc:date>2004-01-04</dc:date>
<description>リンクに「東急東横線目黒線・新丸子タウン情報マップ」を追加.</description>
</item>
</rdf:RDF>
参考サイト
- The Web KANZAKI/RSS -- サイト情報の要約と公開
- “RSS RDF”検索文字にしてGoogleで検索すると一番最初に出てくる.それだけのことはあって,大変分かりやすい.
- @IT/サイトの更新情報を提供する標準言語RSS
- 三部構成で概要は一番最初の記事.
- InfoMaker
- RSSエディタのHeadLine-Editor LiteやRSSリーダのHeadLine-Readerをダウンロード可能.作成するRSSファイルの元となるファイルの作成や,作ったRSSの検証にこの二つのソフトを使用した.
- RSS Reader Panel
- Mozilla FirebirdにRSS読込み機能を追加するextension.
- Feed Validator for Atom and RSS
- RSSバリデータ.
- W3C RDF Validation Service
- RSSバリデータ.
- XT
- XSLTプロセッサ
付録
RSSの元になったXMLファイルの全文である.
<?xml version="1.0" encoding="UTF-8"?>
<root title="眠る猫の頁">
<img width="333" height="250" src="cat.jpg" alt=""/>
<content href="whatsnew/index.html" name="新着">
2004.1.4
<ul>
<li><a href="saijiki/index.html">歳時記</a>に2002.12.28から2003.1.3までを追加.</li>
<li><a href="links/index.html">リンク</a>に「東急東横線目黒線・新丸子タウン情報マップ」を追加.</li>
</ul>
</content>
<content href="saijiki/index.html" name="歳時記">
日々の出来事など.
</content>
<content href="http://www.paw.hi-ho.ne.jp/sasa/ryokoki/index.html" name="旅行記">
旅先での写真や駄文を.
</content>
<content href="hyoryuki/index.html" name="漂流記">
システム開発への私見です.
</content>
<content href="biboroku/index.html" name="備忘録">
教えてもらったことやできたことを忘れないうちに.
</content>
<content href="zatsuroku/index.html" name="雑録">
その他雑多なものが色々.
</content>
<content href="links/index.html" name="リンク">
友人・知合い,便利なソフトウェア,参考になるサイト等.
</content>
<content>
「眠る猫の頁」にリンクを張りたい方は<a href="about.html">リンクについて</a>へ.
</content>
<ancher href="http://www.nakka.com/wwwc/">
<banner src="http://www.nakka.com/wwwc/wwwc_meta.png" alt="WWWC META Check"/>
</ancher>
<ancher href="http://validator.w3.org/check?uri=http://www.dab.hi-ho.ne.jp/sasa/">
<banner src="links/banner/valid-xhtml11.png" alt="Valid XHTML 1.1"/>
</ancher>
<ancher href="http://jigsaw.w3.org/css-validator/validator?uri=http://www.dab.hi-ho.ne.jp/sasa/">
<banner src="links/banner/vcss.png" alt="Valid CSS" />
</ancher>
<ancher href="http://www.anybrowser.org/campaign/anybrowser_jp.html">
<banner src="links/banner/biga.gif" alt="ブラウザを制限しません"/>
</ancher>
<ancher href="http://feedvalidator.org/check?url=http://www.dab.hi-ho.ne.jp/sasa/rss/whatsnew.rdf">
<banner src="links/banner/valid-rss.png" alt="Valid RSS"/>
</ancher>
</root>