3.3.3 事前解析用XML文書の作成

事前解析用XML文書は,解析対象のXML文書の構造的な特徴を考慮して作成します。事前解析用XML文書を作成する際は,次の指針に従ってください。

表3-2 事前解析用XML文書を作成するための指針

項番適用個所指針
1XML宣言解析対象のXML文書と一致させる。
2要素と属性解析対象のXML文書に記述されている要素と属性を記述する。
3要素と属性の順序解析対象のXML文書と一致させる。
4要素の入れ子構造解析対象のXML文書と一致させる。
5要素の繰り返し構造繰り返す可能性がある要素は,繰り返しの形で記述する。
6テキスト,CDATAセクション,属性値解析対象のXML文書と一致させる必要はない。
7DTD,コメント,処理命令記述する必要はない。

それぞれの指針について,具体的な記述例を示して説明します。

<この項の構成>
(1) XML宣言
(2) 要素と属性
(3) 要素と属性の順序
(4) 要素の入れ子構造
(5) 要素の繰り返し構造
(6) テキスト,CDATAセクション,属性値
(7) DTD,コメント,処理命令

(1) XML宣言

解析対象のXML文書にあるXML宣言を,そのまま事前解析用XML文書に記述してください。例を次の図に示します。

図3-4 XML宣言を記述する例(事前解析用XML文書の作成指針)

[図データ]

(2) 要素と属性

解析対象のXML文書にある要素や属性を,事前解析用XML文書に記述します。事前解析用XML文書に記述された要素や属性の情報は,生成される解析結果オブジェクトに記録されます。

解析対象のXML文書間で異なる要素や属性がある場合は,すべての要素や属性を事前解析用XML文書に記述します。例を次の図に示します。

図3-5 要素と属性を記述する例(事前解析用XML文書の作成指針)

[図データ]

ただし,要素中のテキスト,CDATAセクション,および属性値の内容については,解析対象のXML文書と一致させる必要はありません。詳細は,「(6) テキスト,CDATAセクション,属性値」を参照してください。

なお,次の記述はXML規格では区別されませんが,事前解析では異なる要素として区別されます。

解析対象のXML文書にこれらの要素がある場合は,事前解析用XML文書には区別して記述する必要があります。例を次の図に示します。

図3-6 空要素と空要素タグを記述する例(事前解析用XML文書の作成指針)

[図データ]

図3-7 改行文字・空白文字の数や位置が異なる要素を記述する例(事前解析用XML文書の作成指針)

[図データ]

(3) 要素と属性の順序

解析対象のXML文書にある要素や属性は,そのままの順序で事前解析用XML文書に記述します。例を次の図に示します。

図3-8 要素と属性を記述する例(事前解析用XML文書の作成指針・要素と属性の順序)

[図データ]

解析対象のXML文書に,同じ組み合わせで順序が異なる要素や属性が記述されている場合は,それらをすべて事前解析用XML文書に記述します。例を次の図に示します。

図3-9 同じ組み合わせで順序が異なる属性を記述する例(事前解析用XML文書の作成指針)

[図データ]

(4) 要素の入れ子構造

解析対象のXML文書にある要素の入れ子構造は,そのままの形で事前解析用XML文書に記述します。例を次の図に示します。

図3-10 要素の入れ子構造を記述する例(事前解析用XML文書の作成指針)

[図データ]

解析対象のXML文書に異なる入れ子構造が複数ある場合は,すべての入れ子構造を事前解析用XML文書に記述します。例を次の図に示します。

図3-11 要素の入れ子構造を複数記述する例(事前解析用XML文書の作成指針)

[図データ]

(5) 要素の繰り返し構造

解析対象のXML文書に繰り返す可能性がある要素がある場合は,繰り返す可能性がある要素を,2回以上連続で事前解析用XML文書に記述します。2回以上連続で記述することで,解析時に,繰り返す可能性がある要素として扱われます。なお,事前解析用XML文書に連続して記述する回数が2回以上であれば,解析対象のXML文書と繰り返しの回数が異なっても,高速パース機能の性能に影響はありません。例を次の図に示します。

図3-12 要素の繰り返し構造を記述する例(事前解析用XML文書の作成指針)

[図データ]

(6) テキスト,CDATAセクション,属性値

事前解析用XML文書に記述されたテキスト,CDATAセクション,および属性値の内容は,生成される解析結果オブジェクトに影響を与えません。このため,事前解析用XML文書のテキスト,CDATAセクション,および属性値の内容を,解析対象のXML文書と一致させる必要はありません。

また,テキストとCDATAセクションは区別されません(どちらを記述しても,生成される解析結果オブジェクトは同じです)。例を次の図に示します。

図3-13 テキスト,CDATAセクション,属性値を記述する例(事前解析用XML文書の作成指針)

[図データ]

内容を持つ要素(例:<a>12</a>)と空要素(例:<a></a>)は区別されます。また,改行,タブ,空白はテキストなので,これらのテキストを持つ要素(例:<a>[改行]</a>)と空要素(例:<a></a>)は区別されます。このため,解析対象のXML文書にこのような要素が含まれる場合は,事前解析用XML文書にすべての要素を区別して記述する必要があります。例を次の図に示します。

図3-14 空要素を記述する例(事前解析用XML文書の作成指針)

[図データ]

(7) DTD,コメント,処理命令

DTD,コメント,および処理命令は,解析結果オブジェクトには含まれません。このため,事前解析用XML文書にこれらを記述する必要はありません(記述しても生成される解析結果オブジェクトには影響しません)。例を次の図に示します。

図3-15 DTD,コメント,処理命令に関する例(事前解析用XML文書の作成指針)

[図データ]

ただし,解析対象のXML文書の中から参照されているエンティティを定義しているDTDは,事前解析用XML文書に記述する必要があります。例を次の図に示します。

図3-16 XML文書中から参照されているエンティティの定義を記述する例(事前解析用XML文書の作成指針)

[図データ]