出力XHTMLに関して

人狼BBSで扱われるXHTML出力の全てはCGI(index.rb)により生成される。

index.rb が出力するXHTMLの種類。

  • トップページ
  • 特定の村の特定の日の発言
  • 終了した村一覧

人狼BBSは、DOCTYPE宣言で「XHTML 1.0 Transitional」を名乗るXHTMLらしきデータを出力するが、残念ながら人狼BBSの出力はXHTMLの基準を満たしていない。XMLでもない。つまりXML規格でいうところの「XMLプロセッサ」で機械的に読み込むことができない。 できない理由は、次に述べるようなほんの些細なことなので、もったいない。

  • <img>タグなどが閉じていない
  • <table>タグの属性値がクォーティングされていない。
  • --->で終わるコメント(らしきもの)が存在する。

Jindolfは以下の決め付けの元、XHTMLの階層的な構造を解釈する事をはなからあきらめ、単純な正規表現のマッチングによってのみ人狼BBSの出力を解析するアプローチを取っている。

  • 人狼BBSは常にShift_JISでエンコーディングされたXHTMLのみ出力する。
  • 人狼BBSはPI(処理命令)やCDATAを出力しない。
  • 人狼BBSは複雑な文書定義を含んだDOCTYPE宣言を出力しない。
  • 人狼BBSはコメントを出力しない。

つまりJindolfはコメントをコメントと思わない。こんなんでいいんでしょうか。今のところ問題は発覚していない。

文字コードについて

人狼BBSがHTTPを用いてXHTMLを出力する際には、HTTPヘッダやXML宣言、metaタグなどを介して文字集合及び文字エンコーディングに"Shift_JIS"が指定される。 しかし人狼BBSはShift_JISで定義された文字集合(JIS X0201:1997 と JIS X0208:1997)以外の文字も発言として受け入れてしまう。そしてそのような文字が含まれた過去発言を出力してしまう。(いわゆるNEC漢字やIBM漢字と呼ばれる機種依存文字の問題)

Jindolfは、人狼BBSの出力するXHTMLは全て"Shift_JIS"で記述されていると決め付けている。機種依存文字の問題はjava.nio.charset.Charset.forName("Shift_JIS")に丸投げして内部ではUnicodeを使っている。今後の方針は不明。

ロボット除けについて

人狼BBSの出力する全てのXHTMLには

  <meta name="robots" content="noindex,nofollow">
  <meta name="robots" content="noarchive">
なるロボット除けのおまじないがheadタグ内に指定してある。

robots.txtは設置していない模様。

人狼BBS XHTML共通構造

最上位構造

<?xml XML宣言 ?>
<!DOCTYPE DOCTYPE宣言 >
<html>
  <head>
  </head>
  <body>
    ...BODY構造...
  </body>
</html>

BODY構造

※ tbody は実際には略され記述されていない。

<table>
  <tbody>
    <tr>
      <td>   ← ここで全体をセンタリング指定
        <table>  ← ここで500px幅指定
          <tbody>
            <tr>
              <td>   ← ここでセンタリング指定
                <a><img></a>    ← タイトル画像
                ...メイン部...
                ...フッタ部...
              </td>
            </tr>
          </tbody>
        </table>
      </td>
    </tr>
  </tbody>
</table>

メイン部

<div class="main">
    <form>.....</form>  ←  ログイン(ログアウト)フォーム。

    <div class="login_form">  ← E国では替りにこちら。
      <a href="index.rb?cmd=to_sign_in">sign in</a>
    </div>

    村名

    <p>
      ...各日付へのリンク
    </p>

    フィルタへのリンク

    以下、
    <div class="message">
      ...メッセージ
    </div>
    の繰り返し。

    <p>参加者はログインして下さい。</p> ←進行中の村で現れる事がある。
    <p>ゲーム参加者希望者はログインして下さい。</p> ←進行中の村で現れる事がある。

    <a>
      ...次の日へのリンク
    </a>

</div>