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>