Undefined Database Configuration B地区ex|お勉強:RSS対応に関するメモ


exB - extreme B-AREA -

多くの常連が無駄死にで無かったことの証の為に・・・ 再び一陣の先頭を守る為に! 正門よ!私は帰ってきた!!

ウェブ制作 - RSS対応に関するメモ

RSSはSEOに有効な技術であるが、SEOのためにRSSが存在するわけではない。

この文書は書きかけ。Oct, 2007

きほん

RSSを定義するならXMLを利用してサイトの要約を交換し合う仕組みの総称。総称としたのは、RSSの正式名称が複数存在するからである。

RDF Site Summary
RSS 0.9とRSS 1.0での正式名称。
Rich Site Summary
RSS 0.91での正式名称。
Really Simple Syndication
RSS2.0での正式名称。

ああ、ややこしい。日本での普及状況はRSS1.0が主流らしい。1.0と2.0の関係はバージョンアップではなくまったくの別物で互換性もない。優劣があるわけではなくどちらを選ぶかは目的に依存、って話。もちろん両方実装しても構わない。

RSS1.0

メタ情報の記述に主眼が置かれたRSS。と書くと神崎大先生あたりに喜ばれそうだ。

RSS2.0

Netspaceが著作権、日付情報などの要素を加えて拡張した仕様、RSS0.91をベースにしたRSS。リッチコンテンツの配信(Syndication)に主眼が置かれている。Atomとも関連が深い。

RDF

XMLを利用してサイトの要約を交換し合うための構文のひとつ。RSS2.0ではRDFは採用されていない。

Atom

フォーマットやプロトコルなど、Web Syndicationのための仕様の総称。

サイトへの実装

方法はいくつかあるが、大きく分けると手動生成/自動生成に分けられる。

最も原始的なのはサイト更新の都度、自力でXMLをマークアップするやり方であるが非現実的である。たぶんそんな手間のかかる作業を続けられるわけがない。続いてクライアントサイド/サーバーサイドどっちでもいいから、プログラムにより必要な情報を都度入力してRSSを生成するやり方がある。ブログなどのCMSを利用しない手作りサイトでの現実的な解決手段だが、記事と別にRSSを別途記述するのはなんとも二度手間の感は拭えない。更新頻度の高いサイトにおいてはRSSの作成の手間が記事の妨げになるという本末転倒なことになり兼ねない。

現在RSSの配信を行っているサイトの多くはブログであろう。特に制作者が意識することなく記事と同時にRSSも自動生成されている(それがSEOという形で間接的にブログの普及に貢献することになったのだろう)。通常の人であれば、更新頻度の高いコンテンツについてはブログサービスを利用するのが最も現実的な選択と思われる。蛇足になるが、RSSを意識して記事を書く必要があるかどうかは議論の余地があるところだが、本当によい記事であれば自動生成されたRSSであってもよい要約を生むのではないだろうか?

さて問題は更新頻度がそれなりに高く、かつMovableTypeなどのようにRSSを自動生成する仕組みが実装されていない手作りサイトの場合である。要するにうちだ。たとえばB地区はinclude以外ほぼプログラムが介在しない。逆に完地区はほぼシステム化されてはいるものの、設計が古く(悪い意味で言ってるんぢゃねぇぞ)RSS生成は実装されていない。

B地区~手作りサイトの場合

こいつはやっかいだ。少なくともオレにとっては。理屈はわかるんだよ、variableな部分のソースを特定し、正規表現なりで検索・抽出してXML吐き出すスクリプトを組めば済む話。もちろんそれには正しい要素とid属性、class属性のマークアップが行われている必要があるが。たとえばこんな感じ。

<div class="entry">
<h3 id="entry_2007-10-11">2007-10-11 見出し</h3>
    <div class="entry_body">
    <p>ついにやってきたオレの時代…</p>
        <div class="entry_content">
        <h4 id="entry_2007-10-11_01">見出し</h4>
        <p>夢なんて見るもんじゃない…</p>
        </div>
    </div>
</div>

こんなマークアップがされてたらRSS生成は楽だろな。titleはh3、dateはentry_yyyy-mm-dd、linkはファイル名+id属性、descriptionはentry_body内のpの先頭100文字くらいを拾ってくればよし。1日に複数記事を書いていて、それを反映したいならentry_content内のh4+entry_yyyy-mm-dd_nnあたりから拾ってくればよし。

ただねぇ・・・ここでのdivってvalidではあっても厳密には本来不要だろ?そういう要素を記事に含めるのって美しくないし、結局コンテンツの後方互換の観点からもよろしくないんじゃないかしら(だからってpにclass/id属性つけるなんて言語道断)。オレがどうもブログを好きになれないのも、そんなシステムの都合のためのマークアップが多すぎるからなんだよ。見栄えのためのマークアップとどこが違うんだ?

本来なら、これだけでいい。

<h3 id="entry_2007-10-11">2007-10-11 記事見出し</h3>
<p>ついにやってきたオレの時代…</p>
    <h4 id="entry_2007-10-11_01">見出し</h4>
    <p>夢なんて見るもんじゃない…</p>

究極はISO-HTMLに行き着くのだろう(XHTML2.0のsection要素もシステムの都合という意味ではdivとさして変わらん、というかシステムの都合で生み出されたのがsectin要素というのが正しい)。そこまで言わないにしても、divは少なければ少ないほど美しい。そんなわけで、手法はわかっているもののエレガントな実装を苦悩しているのである。

完地区~システム化されたサイトの場合

新着情報や更新履歴の表示スクリプトが実装されているのであれば、出力をHTMLではなくXMLに変更するだけで済むはず(済んだ)。ケースバイケースなので凡例はないよ。

実装上の注意

いっぱいあるんだろうけど、まだよくわかってない。

文字参照

XMLにおいて実体参照として利用できる文字参照のは次の5つのみ。XHTMLで利用できるものがそのまま使えるわけではないようだ。

  • &lt;(<)
  • &gt;(>)
  • &amp;(&)
  • &quot;(")
  • &apos;(')

但し、数値文字参照は利用できる。たとえば&#64;(@)などである。つまり元のソースでも上記以外は数値文字参照でコーディングする癖をつけておくのが安全と思われる。もっとも&apos;はXHTMLで定義されているにも関わらずブラウザ対応が遅れているのでこれも数値文字参照の&$39;や&x0027;を用いたほうがよいだろう。なお参照できる文字はISO制定のものだけとなっている。要するにUnicode。

RSSにスタイルを定義する

RSSはプログラムのためのフォーマットであるから、そのままの状態では人間様相手の可視性が考慮されていない。RSSリーダーは独自に見栄えを定義しているが、制作者が定義することも可能。

XSLT

RSSにスタイルを定義するには直接CSSファイルを指定して適用させることも可能ではあるものの、本来はXSLTを経由させるのが正しい方法だろう。XSLTははXMLの文書定義を変更するための仕組みで、要するにXSLTを経由させることでXML文書であるRSSをHTML(XHTML)に変換し、変換後の文書に対してスタイルを適用させる、って話。RSSファイルをindex.xmlとした場合、参照するスタイルをindex.xslとし、さらにindex.cssを参照させる、という関係になる。なおどちらの方法もRSSとしての情報交換には影響しない。

直接CSSを指定する方法に比べ、XSLTによるスタイル指定のメリットは出力ソースを自由に変更できる点にある。つまりヘッダやフッタなどを必要に応じて追加し、サイトデザインとの一貫性を持たせることも可能である。またCDATA内のimg要素を表示するのは、CSS直接指定では不可能。まあ実際に見たほうが早い。

参考:あるサイト(何)におけるRSSのスタイルの違い

IE7やFirefox2ではXSLTによるスタイル指定が軽くシカトされてしまうので違いを確認できないかもしれない。これを回避するための(XSLTによるスタイルを適用させるための)hack手法をいくつかのサイトで見かけたが、他のRSSリーダーで読めなくなる可能性があるような弊害があるらしい。実装がおかしい特定ブラウザに対する利便性のために本筋を逸脱してもしょうがないのでここでは紹介しないことにした。そもそもそこまでしてRSSでやるようなことでもないのだ。

XSLに踏み込むのはまたの機会に。