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


Help: OASIS Mailing Lists Help | MarkMail Help



   Re: [xml-dev] Processing external DTD subset as part of DTD validation

[ Lists Home | Date Index | Thread Index ]

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@metalab.unc.edu
XML in a Nutshell 3rd Edition Just Published!


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

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