2.4.2. コンストラクション・ルールとsosofo

 コンストラクション・ルールとは、大雑把にいうと SGML/XML 文書の各要素をどのように処理するかという規則のことです[7]。細かな点に目をつぶれば、スタイルシートを記述するということは、コンストラクション・ルールを記述することだともいえます。コンストラクション・ルールには、次の5つのタイプがあります。

  • query コンストラクション・ルール
  • id コンストラクション・ルール
  • element コンストラクション・ルール
  • root コンストラクション・ルール
  • default-element コンストラクション・ルール

 さて、コンストラクション・ルールは sosofo を返す構築式(construct-expression)を含んでいます。この一見意味不明な sosofo というのは、 a specification of a sequenceof flow objects (フロー・オブジェクトの指定の並び)のことです。コンストラクション・ルールは、構築式が返すsosofo をフロー・オブジェクト・ツリー(flow object tree,FOT)に追加していきます。DSSSL フォーマッタは、このようにして構築されたフロー・オブジェクト・ツリーをもとにフォーマット済み文書を出力します。


図2.2 文書フォーマットのおおまかな流れ

 本書では query およびid コンストラクション・ルールについては扱いませんので、残りの3つについて以下に構文を示します。

  • element コンストラクション・ルール
    (element (gi | qualified-gi) construct-expression)
  • root コンストラクション・ルール
    (root construct-expression)
  • default-element コンストラクション・ルール
    (default construct-expression)

 構文中の gi は SGML/XML 文書の要素(タグ)名をあらわします。また、 qualified-giは、 gi を要素とするリストをあらわします。たとえば、リスト2.1を例にすると、 article タグや section タグ、 title タグのそれぞれが gi であり、article タグの直後のtitle タグを(article title) としてあらわしたものが qualified-gi になります。

リスト2.1 [ article.sgml ]
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V4.2//EN">
<article>
  <title>Road to Objective-C</title>
  <section>
    <title>Introduction</title>
    ...
  </section>
</article>

 construct-expression は、先に説明した通り sosofo を返す式です。具体的には、次に説明する make 式や、(empty-sosofo) などの特定の手続きがこれにあたります。
 それぞれのコンストラクション・ルールの意味ですが、 element コンストラクション・ルールは SGML/XML の要素(element = タグ)に対するルール、 root は文書のルート(文書中のすべての要素の最上位に位置する仮想的な要素)に対するルール、default-element はすべての要素にマッチするデフォルトのルールになります。

グローブ

 DSSSL 規格には「グローブ」と呼ばれる特徴的な概念があります。詳細な技術的説明は本書の範疇をこえていますので割愛させていただき、簡単な紹介をしておくことにします。
 「グローブ」は原語では“grove” と綴り、この単語を辞書で調べると「木立[a]」などの訳語が書かれています。つまりコンピュータ・アルゴリズムでいうところの木(ツリー)の集合をさしています。
 DSSSL が変換処理やフォーマッティング処理を行う場合には、元となるSGML/XML 文書をグローブに変換し、このグローブに対して処理を適用し、結果となる一群のツリーを生成します。
 余談ですが、“grove” には“Graph Representation Of Property ValuEs” という形式的な定義が与えられています。ここでいうプロパティはSGML プロパティ(要素が持つデータや属性)を指しており、各SGML 要素がひとつの小さな木を形成していると考えることができます。また、グローブ全体から見た場合、これらのSGML 要素は節(ノード)としてとらえることができます。

[7]厳密にいえば、 SGML/XML 文書から構築されたソースグローブの各ノードの処理規則のことを指します。

<<prev      next>>