[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Processing external DTD subset as part of DTD validation
Mikko Saesmaa wrote: > As far as we know, JAXP does not support the validation of DTDs > directly. Our original idea was to wrap the DTD inside the > prolog of a dummy document instance. The problem with this approach > is that this way we would pass the declarations to the parser as an > /internal/ DTD subset, which has different restrictions on the use of > parameter entities than an external subset. This came up recently on another list. It is possible to distinguish the internal from external DTD subset using a pure SAX parser, particularly Xerces. (Crimson has some bugs in this area.) The trick is to follow the entities and look for one named "[dtd]". That's the internal susbet. Here's how XOM does it: protected boolean inExternalSubset = false; // We have a problem here. Xerces gets this right, // but Crimson and possibly other parsers don't properly // report these entities, or perhaps just not tag them // with [dtd] like they're supposed to. public void startEntity(String name) { if (name.equals("[dtd]")) inExternalSubset = true; } public void endEntity(String name) { if (name.equals("[dtd]")) inExternalSubset = false; } That said, it might still be better to look at the native Xerces APIs if they suit your needs. -- Elliotte Rusty Harold elharo@m... XML in a Nutshell 3rd Edition Just Published! http://www.cafeconleche.org/books/xian3/ http://www.amazon.com/exec/obidos/ISBN=0596007647/cafeaulaitA/ref=nosim
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|