xfy.memo

xfy technology についての備忘録です。

2006 年 8 月のアーカイブ

2006 年 8 月 21 日 Unknown XVCD (xfy Basic Edition 1.3 用)

やっと自宅のネットワーク環境が復活しました。 xfy Basic Edition 1.3 がリリースされてから少し経ってしまいましたが、 Unknown XVCD を xfy Basic Edition 1.3 用に改訂しました。

Unknown XVCD

http://homepage.mac.com/shin_itani/xvcd/2006-08-21/unknown.xvcd

変更内容

h:html 要素のスタイル指定 (height プロパティ) を削除しました。

xfy Basic Edition 1.3 Beta までは、未知の XML ボキャブラリ (でマークアップされた部分) のレンダリング領域が間延びしてしまうのを防ぐために、 h:html 要素のスタイル指定 (height プロパティ) が必要でした。 xfy Basic Edition 1.3 からは、その必要がなくなった模様です。

テキストノードの値がプレーンテキストとして扱われるよう、データ型 (xvcd:plain-text) を明示しました。

xfy Basic Edition 1.3 Beta までは、テキストノードの値をプレーンテキストとして扱えなかった (?) ので、空白類文字だけから成るテキストノードが正しく出力されませんでした (filler 属性値または xvcd:filler 要素の内容が出力されてしまう)。 xfy Basic Edition 1.3 からは、データ型としてプレーンテキスト型 (xvcd:plain-text) を明示できるようになったので、空白類文字だけから成るテキストノードが正しく出力されるようになりました。

2006 年 8 月 24 日 DocBook 用のボキャブラリコンポーネントを作る (はじめに)

XVCD の理解を深めるために、 (DocBook の勉強も兼ねて) DocBook 用のボキャブラリコンポーネントを XVCD で作ってみようと思います。といっても、いきなり DocBook の仕様すべてをサポートするようなボキャブラリコンポーネントを作るのは大変なので、まずは DocBook のサブセットとなる簡易的な XML ボキャブラリを想定し、それをサポートすることを目指します。

補足

今までは〜用の XVCD を作るという表現を用いてきましたが、今後は〜用のボキャブラリコンポーネントを XVCD で作るという表現を用います。これは、 2 種類のボキャブラリコンポーネント (「VC デスティネーション用のボキャブラリコンポーネント」と「ボキャブラリコネクションで実現したボキャブラリコンポーネント」) の違いを明確にするためです。

現時点で想定する XML ボキャブラリ

DocBook のサブセットとして、下記の XML ボキャブラリを想定します。

上記 XML ボキャブラリのスキーマ

RELAX NG スキーマ (約 1.2KB)XML DTD (1KB 以下)

上記 XML ボキャブラリでマークアップされた XML 文書の例
<?xml version="1.0" encoding="utf-8"?>

<article xmlns="http://docbook.org/ns/docbook" version="5.0">
  <title>文書のタイトル (title)</title>
  <para>パラグラフ (paragraph)</para>
  <programlisting>プログラムリスト (program listing)</programlisting>
</article>

現時点でのボキャブラリコンポーネントの外部仕様

この XML ボキャブラリに対し、下記の機能を実装します。

各要素を表示する

まず、各要素を表示するために、ルートテンプレートと要素ノード用のテンプレート (4 種類) とを定義します。要素ノード用のテンプレートでは、次のように DocBook の各要素を XHTML の各要素にマッピングしています。

<?xml version="1.0" encoding="utf-8"?>

<xvcd:xvcd version="1.0"
  xmlns:xvcd = "http://xmlns.xfy.com/xvcd"
  xmlns:db   = "http://docbook.org/ns/docbook"
  xmlns:h    = "http://www.w3.org/1999/xhtml">

  <xvcd:vocabulary match="db:article" call-template="root" name="db:article"/>

  <xvcd:template name="root">
    <xvcd:apply-templates select="."/>
  </xvcd:template>

  <xvcd:template match="db:article">
    <h:html>
      <h:body>
        <xvcd:apply-templates select="child::db:*"/>
      </h:body>
    </h:html>
  </xvcd:template>

  <xvcd:template match="db:title">
    <h:h1>
      <xvcd:apply-templates/>
    </h:h1>
  </xvcd:template>

  <xvcd:template match="db:para">
    <h:p>
      <xvcd:apply-templates/>
    </h:p>
  </xvcd:template>

  <xvcd:template match="db:programlisting">
    <h:pre>
      <xvcd:apply-templates/>
    </h:pre>
  </xvcd:template>

</xvcd:xvcd>

この XVCD スクリプトを前述の XML 文書に適用すると、次のようになります。

スクリーンショット (PNG 形式、約 40KB)

各要素の内容 (テキストノード) を編集できるようにする

次に、各要素の内容 (テキストノード) を編集できるようにするために、テキストノード用のテンプレートを追加します。

    :
<xvcd:template match="text()">
  <xvcd:text-of select="."/>
</xvcd:template>
    :

また、見栄えを整えるためにスタイル定義 (下記) を追加します。

全体
  • 行間: 1/3 行分

文書のタイトル
  • 段落前の余白: 1 行分

  • 段落後の余白: 1/2 行分

  • 下ボーダー: 1/10 文字分、 60% のグレー、実線

  • 文字サイズ: 本文の 1.73 倍 (= 1.2 倍 * 1.2 倍 * 1.2 倍)

  • 文字位置: 右寄せ

パラグラフ
  • 段落前の余白: なし

  • 段落後の余白: 1 行分

プログラムリスト
  • 段落前の余白: なし

  • 段落後の余白: 1 行分

  • 上下のパディング: 1/4 行分

  • 左右のパディング: 3/4 文字分

  • 左ボーダー: 1/4 文字分、 60% のグレー、実線

  • 背景色: 93% のグレー

この XVCD スクリプトを前述の XML 文書に適用すると、次のようになります。

スクリーンショット (PNG 形式、約 40KB)

まとめ

現時点での XVCD スクリプトです。

2006 年 8 月 26 日 DocBook 用のボキャブラリコンポーネントを作る (空要素用のプレースホルダ)

引き続き、 DocBook 用のボキャブラリコンポーネントに手を加えていきます。

現時点でのボキャブラリコンポーネントの外部仕様

DocBook 用のボキャブラリコンポーネントとして、下記の機能を実装します。

空要素用のプレースホルダを表示する

空要素用のプレースホルダを表示するために、各 xvcd:apply-templates 要素内に xvcd:filler 要素を記述します。プレースホルダには、下記の文字列を表示します。

    :
<xvcd:template match="db:title">
  <h:h1>
    <xvcd:apply-templates>
      <xvcd:filler>
        <h:var class=" xvcd:filler ">
          <xvcd:text-of select="." filler="タイトル"/>
        </h:var>
      </xvcd:filler>
    </xvcd:apply-templates>
  </h:h1>
</xvcd:template>

<xvcd:template match="db:para">
  <h:p>
    <xvcd:apply-templates>
      <xvcd:filler>
        <h:var class=" xvcd:filler ">
          <xvcd:text-of select="." filler="パラグラフ"/>
        </h:var>
      </xvcd:filler>
    </xvcd:apply-templates>
  </h:p>
</xvcd:template>

<xvcd:template match="db:programlisting">
  <h:pre>
    <xvcd:apply-templates>
      <xvcd:filler>
        <h:var class=" xvcd:filler ">
          <xvcd:text-of select="." filler="プログラムリスト"/>
        </h:var>
      </xvcd:filler>
    </xvcd:apply-templates>
  </h:pre>
</xvcd:template>
    :

また、プレースホルダ用のスタイル定義 (下記) を追加します。

この XVCD スクリプトを前述の XML 文書に適用すると、次のようになります。

スクリーンショット (PNG 形式、約 32KB)

リファクタリング

上記で xvcd:filler 要素を追加した xvcd:apply-templates 要素群は、 (xvcd:text-of 要素の filler 属性値を除いて) すべて同じ構造をしています。記述の重複を避けるために、これらの xvcd:apply-templates 要素を名前付きテンプレート (テンプレート名: apply-templates.with-filler) として切り出します。

    :
<xvcd:template name="apply-templates.with-filler">
  <xvcd:param name="filler"/>

  <xvcd:apply-templates>
    <xvcd:filler>
      <h:var class=" xvcd:filler ">
        <xvcd:text-of select=".">
          <xvcd:filler>
            <xvcd:value-of select="$filler"/>
          </xvcd:filler>
        </xvcd:text-of>
      </h:var>
    </xvcd:filler>
  </xvcd:apply-templates>
</xvcd:template>
    :

apply-templates.with-filler テンプレートにはパラメータが一つ備わっています (パラメータ名: filler)。このテンプレートを呼び出す際は、プレースホルダに表示したい文字列を filler パラメータに指定して呼び出します。

    :
<xvcd:template match="db:title">
  <h:h1>
    <xvcd:call-template name="apply-templates.with-filler">
      <xvcd:with-param name="filler" select="'タイトル'"/>
    </xvcd:call-template>
  </h:h1>
</xvcd:template>

<xvcd:template match="db:para">
  <h:p>
    <xvcd:call-template name="apply-templates.with-filler">
      <xvcd:with-param name="filler" select="'パラグラフ'"/>
    </xvcd:call-template>
  </h:p>
</xvcd:template>

<xvcd:template match="db:programlisting">
  <h:pre>
    <xvcd:call-template name="apply-templates.with-filler">
      <xvcd:with-param name="filler" select="'プログラムリスト'"/>
    </xvcd:call-template>
  </h:pre>
</xvcd:template>
    :

まとめ

現時点での XVCD スクリプトです。


Powered by Movable Type 3.2-ja-2

Copyright © 2005, 2006 Shin All rights reserved.