@IT」にはない内容をエンジニアライフで技術紹介するコラム。広く議論する場になることを目指します。2017/12/25今回はmarkupdeclについて議論しますが、特に実装はありません。]これらの宣言は、後述する整形式性制約や妥当性制約で説明するように、宣言の全部あるいは一部にパラメータ実体を含むことができる。内部サブセットの中のパラメータ実体]・・・マークアップ宣言は、全部または一部がパラメータ実体の置換テキストで作られても良い。後述する各非終端(要素型宣言、属性リスト宣言など)の仕様書の生成規則は、すべてのパラメータ実体をインクルードした後の構文を記述する。条件付セクションを参照)で無視するものを除いた、DTDの中で、どこでも認識する。実体値リテラルの中でも認識する。宣言とPEの適切なネストパラメータ実体の置換テキストはマークアップ宣言の中で適切なネストになっていなければならない。マークアップ宣言(上述したmarkupdecl)にて、最初の文字または最後の文字がパラメータ実体の参照先の置換文字列に含まれるなら、同じ置換テキストに両方が含まれていなければいけない。■マークアップ宣言の種類W3Cの勧告では、--既にスタンドアロン文書宣言で説明した通り--、外部マークアップ宣言とマークアップ宣言があります。"外部"マークアップ宣言はintSubset("内部"サブセット)上のDeclSepがパラメータ実体の参照を置換した場合も含むので"外部"と言いながら理解しにくい部分を持ちます。マークアップ宣言はintSubset/extSubsetDecl内のmarkupdeclを示しつつも、extSubsetDecl上のmarkupdeclは特定条件でパラメータ実体を記載できるという異なる性質を持つため仕様が混乱します。そこで次のように考えると良いと思います。1と3を内部/外部マークアップ宣言と命名しても良いのですが、外部マークアップ宣言という用語は既に使われていてさらに混乱するかもしれないので使わないようにしています。対象となる範囲を作ることです。1については、intSubset/extSubsetDeclの構文を考えるとサブセットに記載できるモノの内、宣言間のパラメータ宣言と条件付セクションを除いたモノと表現しても良いでしょう。2については少し問題があります。整形式性制約:内部サブセットの中のパラメータ実体と整形式性制約以外の外部マークアップ宣言(DeclSep/extマークアップ宣言)の中のパラメータ実体における仕様の違いを定義してしまっているからです。このようなことをするならintMarkupdeclとextMarkupdeclを別途定義すべきであったと思います。※実装では別の生成規則として扱います。