我正在编写一个 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 in Literal,而不是Included as PE,它指出替换文本必须用一个前导和一个0x20 后一个0x20 放大 - 但不是在文字中。
任何指针?谢谢你。