私は DTD パーサーを書いていますが、パラメーター エンティティを展開する方法が少しわかりません。たとえば、この DTD の抜粋は有効ですか?
<!ENTITY % xx '%zz;'>
<!ENTITY % zz '<!ENTITY tricky "error-prone" >' >
<!ENTITY % abcd '%xx;'>
<!ENTITY % ef 'c'>
<!ENTITY % gh '%ab%ef;d;'>
%gh;
より具体的には、エンティティ gh が正しく展開されるかどうか知りたいです。私の意見では %ef; 最初に 'c' に展開し、次に新しく形成された PE 参照 %abcd; に展開する必要があります。%xx に展開する必要があります。等々。
私が見たほとんどのパーサーは、%ab を PE 参照として識別し、その PE が定義されていないために失敗します。しかし、パーサーがこのように動作することを要求する標準にはまったく参照が見つかりませんでした。私が見つけた唯一の参考文献は、 Included as PEではなく、Included in Literalでした。ここでは、置換テキストを 0x20 の先頭と 0x20 の後に 1 つずつ拡大する必要があると述べていますが、リテラルではありません。
ポインタはありますか?ありがとうございました。