mastodon.cardina1.red は、数々の独立したMastodonサーバーのうちのひとつです。サーバーに登録してFediverseのコミュニティに加わってみませんか。

サーバーの情報

3
人のアクティブユーザー

書き途中だった XML lexer に1ヶ月ぶりに手を付けようと思っていたが、さっそく DTD の難儀な仕様で鬱になってきた

parameter entity reference が DTD の (一部例外を除いて) 任意の場所で展開されうるから、 lexer からは各種 declaration が開かれているか閉じられているか以上の文法的判断ができなくなりそうな感じ

Extensible Markup Language (XML) 1.0 (Fifth Edition)
w3.org/TR/2008/REC-xml-2008112

> Well-formedness constraint: PEs in Internal Subset
>
> In the internal DTD subset, parameter-entity references MUST NOT occur within markup declarations; they may occur where markup declarations can occur.

うーん?

www.w3.orgExtensible Markup Language (XML) 1.0 (Fifth Edition)

> Parameter entity references are recognized anywhere in the DTD (internal and external subsets and external parameter entities),

と言ってる直後にこれだよ、結局どうなんだ

w3.org/TR/2008/REC-xml-2008112

> Examples of element type declarations:
>
> ```
> (中略)
> <!ELEMENT %name.para; %content.para; >
> ```

……で、これのどこが " MUST NOT occur within markup declarations" なんだ?
(cf. <w3.org/TR/2008/REC-xml-2008112>)

www.w3.orgExtensible Markup Language (XML) 1.0 (Fifth Edition)

あーはいはいはい、この %name.para; %content.para; の例は external DTD 内で有効な例であって、 internal DTD subset 内では "MUST NOT occur within markup declarations" が効いてこの記述は使えないのね。完全に理解した

さて、

【悲報】 internal DTD subset 内の markup declaration 内で parameter entity reference のパースを実装してしまった