Web メンテナンスのためのメモ

概要

すべてのページは CVS にて管理されてます。ページの更新には、専用の CVS のアカウントが必要です。CVS についての詳細は省略します。

XML (XHTML) に XSLT のスタイルシートを適用して、HTML を生成しています。

XHTML によってコンテンツを記述し、ナビゲーションバーや飾りなど、どのページでも共通なものは XSLT スタイルシートに記述します。それらを XSLT プロセッサに通して、HTML が生成されます。これらは CVS でコミットした際に自動実行されます。

ページによっては特別な XML ファイルも使用されます。

ルール

URL と実ファイルの対応のルール

/foo/bar.html という URL のページは /foo/bar.xhtml という XHTML ファイルにコンテンツを記述します。

これらは build スクリプト (という名前の Makefile) で対応付けられますので、ページを追加する場合は build スクリプトにエントリを追加してください。

共通に使用されるスタイルシート

トップの common.xsl がどのページにも適用されます。ナビゲーションの部分は sitemap.xml に定義しています。sitemap.xml は XBEL 形式で記述されており、xbel2navi.xsl によって HTML に変換され、ナビゲーションバーとして埋めこまれます。

「ニュース」の更新

「ニュース」は news/ ディレクトリにある年別のファイル (2002年であれば /news/2002.xml) に記述します。このファイルはニュース項目ごとに g:newsitem 要素を並べたものになっています (g: は名前空間 http://www.gnome.gr.jp/xml/web に関連付けられた名前空間接頭辞です)。たとえば以下のとおり。

  <g:newsitem id="20">
    <g:date year="2002" month="12" day="23" />
    <g:title>
      GTK+ ユーザ・インタフェース 2.2.0 リリース!
    </g:title>
    <g:item>
      GTK+ ツールキットと関連するライブラリ (GLib/ATK/Pango) の
      最新版のリリースです。
    </g:item>
    <g:url href="http://mail.gnome.org/..../msg00090.html">
      GTK+ user interface libraries, version 2.2
    </g:url>
  </g:newsitem>

g:newsitem タグの id 属性には記事の(各年における)通し番号を指定します。g:title 要素ではニュースのタイトル、g:item 要素ではニュースの本文、g:url 要素では関連リンクを示します。これらのうち、g:titleg:item は必須で、g:url はあってもなくても構いませんし、複数あっても構いません。

これらのファイルに記述したもののうち、どの項目が使われるのかについては、/index.xhtml において指定します。

    <g:from year="2002" id="8" />
    <x:include href="news/2002.xml" />

と書けば、2002年の id属性が 8 以降の記事が /index.html で使用されます。

コンテンツ記述のルール

現在のところ、XHTML 1.0 Transitional 形式を使っています。どのページも原則的に、

<?xml encoding="euc-jp"?>
<!DOCTYPE html
     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
  xmlns:x="http://www.w3.org/2001/XInclude"
  xmlns:g="http://www.gnome.gr.jp/xml/web"
  xmlns="http://www.w3.org/1999/xhtml"
  xml:lang="ja">
  <head>
    <title>タイトル</title>
  </head>
  <body>
    <h1>タイトル</h1>

    <div class="topic">
    <h2>トピック1</h2>
    ......
    </div>

    <div class="topic">
    <h2>トピック2</h2>
    ......
    </div>

    ......
  </body>
</html>

という単純な XHTML です。ナビゲーションバーとか、フッタとか、背景や色指定などは基本的に書かないで下さい。それらはスタイルシートで自動的に付加されます。

<a href="...."><img src="..." /> などの「リンク」の URI は、www.gnome.gr.jp (bonobo.gnome.gr.jp) 内のコンテンツを指す場合は、「サーバ内絶対 URI」または「サーバ内相対 URI」を使ってください。

後述しますが、出力ではサーバ内絶対 URI は相対 URI に自動変換されるので、../ の数などに悩む必要はありません。

XHTML と HTML の違い

普通の HTML とほとんど同じですが、おおざっぱにいって以下のところが異なります。

他サイトのコンテンツの反映

現在、RSS を利用して FootNotes <http://www.gnomedesktop.org/> の情報をトップページに反映するようにしています。wget で定期的に RSS を取得し、RSS の内容が更新されていたら XSLT で (_rss2xhtml.xsl)で) XHTML 素片に変換します。それを /index.xhtml から XInclude で読みこんでいます。

処理系

www.gnome.gr.jp では wk という独自の XSLT 処理プログラムを使っています。これは、LibXSLT を使って書かれた特化した XSLT 処理系です。内容は、

というものです。出力で必ず相対 URI が使われるので、file:///your/work/direcotry/moge.html をブラウザに指定するなどして、Web サーバを使わずにページのデバッグをするのに便利です。path 変数はナビゲーションバーでの条件判定に使われます。

普通に libXSLT 附属の xsltproc を使い、その出力に適当なフィルタをかければ実現できそうなものですが、なんとなく C で書いてあります。

更新手順

http://bonobo.gnome.gr.jp/~kusano/wk-0.2.tar.gzからソースコードを取ってコンパイルして適当に path の通ったところに入れてください。

LibXSLT や wk をインストールしたら、以下の手順で更新できます。

  1. CVS で CVS repositry から www.gnome.gr.jp/web の内容を取り出す
  2. 取りだしたディレクトリの直下に cache というディレクトリを作っておく
  3. cache の中で % wget -O gnomedesktop.rss http://www.gnomedesktop.org/backend.php と入力し、FootNotes の RSS を取得しておく
  4. 取りだしたディレクトリ直下にある build スクリプトを実行 (% ./build)
  5. % galeon -n file://$PWD/index.html などとやって、生成結果を確認

TODO