[
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!
http://www.cafeconleche.org/books/xian3/
http://www.amazon.com/exec/obidos/ISBN=0596007647/cafeaulaitA/ref=nosim
|