At 10:12 2002 11 08 -0800, Bob Stayton wrote: >I had some further correspondence with Norm about >this problem. It turns out that relative system ids >can't be resolved by the Java resolver classes because >they never even see them in their original form. > >He explained that the SAX API resolves a relative system id >such as "docbookx.dtd" as relative to the document's >directory. The SAX API changed "docbookx.dtd" to >"file:/c:/XMLtest/catalogs/test/Saxon/docbookx.dtd" >in the parsing stage. That's why the resolver reports: > >resolveSystem(file:/c:/XMLtest/catalogs/test/Saxon/docbookx.dtd) > >instead of: > >resolveSystem(docbookx.dtd) > >He says there is no hook for the resolver classes to get >the original "docbookx.dtd" string for the resolver to >look up in the catalog. He says he argued against this >behavior at the time, but lost.
To put a sharper point on it, SAX is broken. When Norm tried to explain why and have it fixed, whoever all gets to make the decision decided to leave SAX broken. It's a real shame. There are tools (that don't use SAX to resolve external entities) that do work correctly. paul