XFR(XML Formatting Rule)リファレンス

XFR(XML Formatting Rule)の概要や使用方法、要素・属性を解説します。

1. 概要

XFR(XML Formatting Rule、以下、XFRと表記)の概要について、説明します。

1.1. 用途・役割

XFRは、保存するXML文書の書式を整える書式整形規則を記述するために使用します。XML文書で使用する要素ごとに、その要素の配置方法や要素内の空白の扱い、インデント位置を指定して、XML文書をソース表示したときの体裁を整えます。

1.2. 名前空間URI参照

XFRの名前空間URI参照は http://xmlns.xfy.com/xfr です。以下の説明でXFRの要素を記述するときは、xfr:という名前空間接頭辞を使用します。

2. XML文書へのXFRの割り当て

XFRを記述したXFRファイルを元に、XVCDプラグイン化ツールを使用してxfyプラグインJARファイルを作成し、xfyユーザーエージェントのプラグインフォルダに配置すると、XFRをXML文書に自動的に割り当てることができます。

また、scriptsフォルダへXFRファイルを配置する方法や、処理命令によって関連付けを記述する簡易的な使用法も用意されています。これらについては「xfy technologyのコンポーネント・アーキテクチャ」の「XMLスクリプト言語によるコンポーネントの簡易的な使用法」を参照してください。

3. XFRのボキャブラリに属する要素・属性

XFRのボキャブラリに属する要素・属性を解説します。

3.1. XML書式整形規則

XFRのボキャブラリで定義されている要素・属性は以下のとおりです。

xfr:xfr 要素

XFRで記述する書式整形規則全体を含む要素です。xfr:xfr要素の中に、複数の名前空間にわたった要素の書式整形規則を記述できます。

属性:

属性はありません。

内容:

xfr:xfr要素内には、 xfr:rule要素を、必要な数だけ記述できます。xfr:rule要素は省略可能です。省略した場合、XML文書の保存時の書式整形は行われません。

xfr:rule 要素

指定された要素の書式整形規則を記述する要素です。

属性:
namespace-uri (必須)

書式整形規則を適用する要素が定義されている名前空間を指定する属性です。URI文字列で記述します。

local-names (必須)

書式整形規則を適用する要素の、名前空間内のローカル名を指定する属性です。空白で区切って、複数の要素名を記述できます。

内容:

xfr:rule要素内には、以下の要素を必要に応じて任意の順序で記述できます。

xfr:content-output 要素

要素を保存するかしないかを指定する要素です。

xfr:content-output要素が記述されていない場合、defaultが適用されます。

属性:

属性はありません。

内容:

xfr:content-output要素には、要素を保存するかしないかを、次の文字列で記述します。

self
処理対象としている要素のタグは保存しますが、その子ノード(要素やテキストノードなど)は保存しません。
none
処理対象としている要素は、タグ・内容とも保存しません。
default
処理対象としている要素のタグ・内容とも保存します。

これ以外の文字列が記述された場合は、defaultが指定されたと見なされます。

xfr:preserve-whitespaces 要素

要素内のテキストデータに含まれる空白文字列を、そのまま保存するかしないかを指定する要素です。空白文字列は、XML仕様で空白として扱われる文字(#x20#x9#xD#xA)の組み合わせだけで成立した文字列です。

空白文字列の保存の指定方法として、XML文書中で直接xml:space="preserve"が記述されている場合は、そちらの指定が優先されます。

xfr:preserve-whitespaces要素をtrueと指定した場合、対象となる要素の子孫要素の内容にも指定された値が適用されます。子孫要素でxfr:preserve-whitespaces要素をfalseと指定した場合であっても、祖先要素で指定されたtrueの指定が優先されます。

xfr:preserve-whitespaces要素が記述されていない場合、falseが適用されます。

属性:

属性はありません。

内容:

xfr:preserve-whitespaces要素には、要素内のテキストデータに含まれる空白文字列を、そのまま保存するかしないかを、真偽値で記述します。trueを指定すると、要素内に含まれる空白文字列はそのまま保存されます。true以外を指定すると、親要素の指定を引き継ぎます。すべての祖先要素にさかのぼってもtrueが指定されていない場合、XMLの連続する空白文字は1つの半角空白に置き換えられます。

xfr:inline 要素

要素をインライン形式で書式整形するかしないかを指定する要素です。

xfr:inline要素が記述されていない場合、falseが適用されます。

属性:

属性はありません。

内容:

xfr:inline要素には、要素をインライン形式で書式整形するかしないかを、真偽値で記述します。trueを指定すると、インライン形式で書式整形されます。true以外を指定すると、親要素の指定を引き継ぎます。すべての祖先要素にさかのぼってもtrueが指定されていない場合、ブロック形式であると扱われます。

xfr:tab 要素

書式整形規則を適用する要素のインデント位置を基準に、その子要素に対する相対インデント位置を、タブの数で指定します。双方ともブロック形式である場合に指定が有効となります。xfr:tab要素が記述されていない場合、相対インデント位置には1が適用されます。

属性:

属性はありません。

内容:

書式整形規則を適用する要素のインデント位置を基準に、その子要素に対する相対インデント位置を、タブの数(整数値)で指定します。 内容に何も記述されていない場合、および整数値と解釈できないものを記述した場合は、保存時に警告が出力された上で相対インデント位置には1が適用されます。

xfr:empty-element-tag 要素

内容が空の要素を出力するときに、空要素タグを使用するかしないかを指定します。空要素タグは次の形式です。

<xhtml:title />

空要素タグを使用しない場合は、次のように開始タグと終了タグを使った形で出力されます。

<xhtml:title></xhtml:title>

xfr:empty-element-tag要素が記述されていない場合、trueが適用されます。

属性:

属性はありません。

内容:

xfr:empty-element-tag要素には、空要素を空要素タグで出力するかしないかを、真偽値で記述します。falseを指定すると、空要素タグを利用せずに書式整形されます。false以外を指定すると、親要素の指定を引き継ぎます。すべての祖先要素にさかのぼってもfalseが指定されていない場合、空要素タグを利用します。

4. 書式整形規則の処理

XFRで記述された書式整形規則は、 xfr:rule要素で指定された要素を対象として処理されます。この章では、書式整形規則が処理されるときの規則間の優先順位について説明します。

4.1. 書式整形規則間の優先順位

書式整形規則を適用する対象の要素にXFRで指定された整形規則は、以下の優先順位によって処理が行われます。

  • xfr:content-output要素の値が"self"ならば、対象要素自身のみを書き込み、内容を保存しません。また、"none"ならば対象要素自身を含めて何も保存しません。
  • 編集対象のXML文書で、保存する要素のxml:space属性の値が"preserve"ならば、内容に含まれる空白文字列をそのまま保存します。
  • xfr:preserve-whitespaces要素の値が"true"ならば、内容に含まれる空白文字列をそのまま保存します。
  • xfr:inline要素の値が"true"ならば、インライン形式で保存します。
  • インライン形式でないならば、 xfr:tab要素で指定された数値でインデントして保存します。

優先度の高い条件に該当した場合は、その条件に対する処理だけが行われます。そのほかに優先度の低い条件にも該当しても、その条件に対する処理は行われません。その結果、対象要素に対してほかの整形規則が記述されていても無効となります。

特に、空白保持に関しては、XFRの指定(xfr:preserve-whitespaces)よりも、編集対象のXML文書自体に記述されているxml:space="preserve"が優先される点に注意してください。

また、各書式整形規則には、親要素に対する指定が子要素にも適用されるものがあります。詳細はそれぞれの整形規則を指定する要素の説明をご覧ください。

4.2. 書式整形規則の結合

1つのXFRファイル内で、名前空間もローカル名も同じ要素に対して複数の書式整形規則を記述した場合、それらの規則は結合されます。例として、foo要素に書式整形規則を適用する場合で説明します。

次のXFRファイルの場合、foo要素には、 xfr:inline要素xfr:white-space要素の両方の書式整形規則が適用されます。

<!-- foo要素を複数のxfr:ruleに記述した例 -->
<xfr:xfr xmlns:xfr="http://xmlns.xfy.com/xfr">
    <xfr:rule namespace-uri="http://hoge" local-names="foo">
        <xfr:inline>true</xfr:inline>
    </xfr:rule>
    <xfr:rule namespace-uri="http://hoge" local-names="foo">
        <xfr:preserve-whitespaces>true</xfr:preserve-whitespaces>
    </xfr:rule>
</xfr:xfr>

しかし、次のXFRファイルの場合は、foo要素に対して書式整形規則が重複して指定されたと判断されて、無効となります。

<!-- 不正なXFR記述例 -->
<xfr:xfr xmlns:xfr="http://xmlns.xfy.com/xfr">
    <xfr:rule namespace-uri="http://hoge" local-names="foo">
        <xfr:inline>true</xfr:inline>
    </xfr:rule>
    <xfr:rule namespace-uri="http://hoge" local-names="foo">
        <xfr:inline>true</xfr:inline>
    </xfr:rule>
</xfr:xfr>

また、同一の要素に対する書式整形規則が異なるXFRファイルに記述されている場合は、書式整形規則は結合されずに、どちらか一方だけが有効となります。どちらの規則が有効になるかは不定です。