本家「@IT」にはない内容をエンジニアライフで技術紹介するコラム。広く議論する場になることを目指します。

第050回_DeclSep

»
今回はDeclSepについて議論します。

DeclSepのW3Cの勧告内容

----W3C勧告----
2.8 Prolog and Document Type Declaration
・・・
[28a] DeclSep ::= PEReference | S [WFC: PE Between Declarations]

・・・
Well-formedness constraint: PE Between Declarations

The replacement text of a parameter entity reference in a DeclSep must match the production extSubsetDecl.
・・・
Like the internal subset, the external subset and any external parameter entities referenced in a DeclSep must consist of a series of complete markup declarations of the types allowed by the non-terminal symbol markupdecl, interspersed with white space or parameter-entity references. However, portions of the contents of the external subset or of these external parameter entities may conditionally be ignored by using the conditional section construct; this is not allowed in the internal subset but is allowed in external parameter entities referenced in the internal subset.
----W3C勧告----
----日本語訳----
2.8 プロローグと文書型宣言
・・・
[28a] DeclSep ::= PEReference | S [整形式性制約: 宣言の間のパラメータ実体参照]
・・・
整形式性制約 宣言の間のパラメータ実体

DeclSepの中のパラメータ実体の参照が指す置換文字列は、extSubsetDeclの生成規則にマッチしなければならない。
・・・
内部サブセットと同じく、外部サブセットとDeclSepの構文として現れる外部パラメータ実体の参照は、非終端シンボルmarkupdeclで許される一連の完全なマークアップ宣言でなければいけない。尚、一連の完全なマークアップ宣言には、ホワイトスペースやパラメータ実体の参照を含むことができる。内部サブセットと異なる点は、外部サブセットや外部パラメータ実体の内容は、条件付セクションを使うことによって条件的に無視してもよい。; 条件付セクションは内部サブセットでは(直接は)利用できないが、内部サブセットの中に現れる外部パラメータ実体参照では利用できる。
----日本語訳----

DeclSepの仕様整理

呼び方
DeclSepは、明確には何の略かが判りません。よって正しい呼び方もわかりません。構文から見ると、マークアップ宣言とマークアップ宣言の間のホワイトスペースを表現するので、マークアップ宣言(declaration)の区切り子(separator)と呼ぶと良いかもしれません。
# DeclSep = declaration separator ?

また、DeclSepに現れるパラメータ実体の参照は、「マークアップ宣言の間のパラメータ実体参照」「宣言の間のパラメータ実体参照」「DeclSep PE Ref」
のいずれかで呼ぶことにします。

生成規則
生成規則は、
 DeclSep ::= PEReference | S
です。

マークアップ宣言の間のパラメータ実体参照に対する再スキャン
マークアップ宣言の間のパラメータ実体参照を処理するまでに文字列に対して2回のスキャンを行います。

-1回目のスキャン
パラメータ実体の実体値は、登録処理の時に
EntityValue::='"' ([ˆ%&"] | PEReference | Reference)* '"'
| "'" ([ˆ%&'] | PEReference | Reference)* "'"
の構文に従って、構文解析器(その内部で条件付字句解析器)で処理します。

-2回目のスキャン
パラメータ実体の回でずっと後に説明することになりますが、パラメータ実体の参照はパラメータ実体の参照を認識した時点で直ちに置換テキストに置き換えます。パラメータ実体の参照を認識できる個所は
EntityValueの中
DeclSep
DeclSep/extSubsetマークアップ宣言の中の先頭と末尾を含まない位置
の3つがあります。もし、DeclSepとしてパラメータ実体の参照を認識した場合は、置換テキストをextSubsetDeclの構文に与えて再スキャンします。(字句解析、構文解析をやり直します)

実装はパラメータ実体のテーブルを作成した後で紹介します。
Comment(0)

コメント

コメントを投稿する