Lists Home |
Date Index |
Richard Tobin wrote:
> Perhaps you meant to say:
> <!ENTITY % a ' "Don't do it" said Jane'>
> <!ENTITY % b "I reached for my keyboard. %a;">
Yes, of course, thanks.
> The (non-existent) rule that strings must start and end in the same
> entity is not needed to make this well-formed. The EntityValue
> production applies *before* PE substitution (clearly, since it
> includes PEReference), so the double-quotes from %a; are not there
Oh, I wondered what the PEReference production was doing in there. So are
you saying that a quoted string can begin and end in different PEs?
I tried this example with a few well-known parsers :-
<!ELEMENT test ANY>
<!ENTITY % abc '"abc'>
<!ENTITY % xyz 'xyz"'>
<!ENTITY abcxyz %abc;%xyz;>
<!DOCTYPE test SYSTEM "test.dtd">
And here are the results:-
xmlvalid > /temp/test.dtd [5:1] : Fatal error: unexpected end of file within
rxp > Error: Quoted string goes past entity end in entity "abc" defined at
line 2 char 1 of file:///temp/test.dtd
msxml > Whitespace is not allowed at this location.
Line 00004: <!ENTITY abcxyz %abc;%xyz;>
Pos 00028: ---------------------------^
xerces > [Fatal Error] test.xml:2:15: The entity "abcxyz" was referenced,
but not declared.
So, every parser seems to agree its an error, but how they get there is not
always very obvious.