OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

 


 

   DTD parameter entities

[ Lists Home | Date Index | Thread Index ]

I'm implementing parameter entity support for my XML parser (well I guess 
it can be truly called
XML parser when I've finished implementing this and some other DTD 
processing parts).

I think I understand what the XML 1.0 spec and 4.4 XML Processor Treatment 
of Entities and References
says about parameter entities - 4.4.5 Included in Literal etc. is easy to 
implement of course and
4.4.8 Included as PE seems quite clear; it says that parameter entity 
references can occur anywhere in DTD
but the fact that expansion will insert space (#x20) to the start and to 
the end of the expanded value places
some limitations for construct like
<!ENTITY % ENT "<!ENT">
<!ENTITY % ITY "ITY">
%ENT;%ITY; blaah "value"> <!-- will not work because it will expand to 
<!ENT ITY -->


I used the following petest.dtd for testing how various parsers work:
(PE references %ELEMNAME;%ATTNAME; are contiguous on purpose - there'll be 
space
between them when they're expanded)

<!ENTITY % ATTLIST "<!ATTLIST ">
<!ENTITY % CLOSE ">">
<!ENTITY % ELEMNAME "doc">
<!ENTITY % ATTNAME "att">
%ATTLIST; %ELEMNAME;%ATTNAME; CDATA #FIXED "value"%CLOSE;

the petest.xml doc was simple:
<!DOCTYPE doc SYSTEM "petest.dtd">
<doc/>

results (validation was off):
- RXP 1.4.0pre10: ok
- Expat 1.9.6: ok
- Xerces-J 2.6.2:
[Fatal Error] petest.dtd:8:10: The replacement text of parameter entity 
"%ATTLIS
T" must include properly nested declarations when the entity reference is 
used a
s a complete declaration.

Works fine if %ATTLIST; reference is replaced with <!ATTLIST i.e.
<!ATTLIST %ELEMNAME;%ATTNAME; CDATA #FIXED "value"%CLOSE;

- MSXML4 (version ?):
The replacement text for a parameter entity must be properly nested
with parenthesized groups. Error processing resource 'petest.dtd'.
Line 6, Position 10

doesn't even work if %ATTLIST; is replaced - will trigger error in %CLOSE;
this works:
<!ATTLIST %ELEMNAME;%ATTNAME; CDATA #FIXED "value">


Is there something I'm missing? Implementing parameter entity support
seems quite trivial (common design stage optimism perhaps ;-) )
but seeing how various parsers react I'm not quite sure if it'll be trivial 
at all.


with respect,
Toni Uusitalo






 

News | XML in Industry | Calendar | XML Registry
Marketplace | Resources | MyXML.org | Sponsors | Privacy Statement

Copyright 2001 XML.org. This site is hosted by OASIS