ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Craeg K Strong <>
Subject status of XMLCatalog load from file patch, questions
Date Tue, 30 Apr 2002 06:42:04 GMT

I have nearly finished the patch for XMLCatalogs loading from files.   I 
to share with the group some of my observations and questions.    My 
intent is to avoid
expressions of astonishment and horror as much as possible when my patch 
in tomorrow ;-)

I carefully reviewed Norm Walsh's code in xml-commons.   It is 
_definately_ the way
we want to go IMO.   It includes a number of really nice features:

- support for the latest OASIS standard "open catalog" format, both 
plain text and xml varieties
- support for John Cowan's XCatalog format
- his CatalogResolver implements _both_ org.xml.sax.EntityResolver _and_ 

The latest OASIS standard includes all sorts of advanced functionality, including
URN resolution, the ability to rewrite URIs using alternate prefixes, etc.  and it is 
fully supported by the resolver library.

It seems to me that John Cowan's alternate XCatalog spec is not being maintained
or enhanced anymore.  Consequently, the official OASIS specs have gone far beyond 
what XCatalog supports.   While the xml-commons resolver library does include a 
parser for the XCatalog format, I recommend that we (longer term) aim instead for the OASIS

standard. Alternatively, we could support both, but its more work.

Ultimately, we may want to support the full OASIS XML-format catalog grammar inline in
a buildfile, rather than only as an external file as I have implemented it.  
I stopped short of implementing the full grammar inline -- because it is alot of work,
and probably more than most ant buildfile writers need.  As long as we
can load in a full-spec external OASIS catalog file, that is probably good enough, no?

I also noticed that the current XMLCatalog implementation features the ability to find resources
inside jar files in the classpath.  Norm's resolver library does not include this feature,
and I think its a nice add.  I am proposing to keep this code as a secondary 
lookup after the original lookup is done using catalog.getResolvedEntity() (using Norm Walsh's

************ DETAILS:

I propose the following:

1) Add a new optional file attribute to <xmlcatalog>

<xmlcatalog id="mycatalog" file="foo/bar/catalog">
      publicId = "-//ArielPartners//DTD XML Article V1.0//EN"
      location = "com/arielpartners/knowledgebase/dtd/article.dtd"/>

2) refactor, add base class, sibling

Create a base class: ResourceLocation and two derived classes DTDLocation
and EntityLocation.   They correspond to the "PUBLIC" and "URI" catalog entry
types in the OASIS catalog spec.  We need to distinguish between the two, because
the resolver library calls different resolveXXX() methods based on entry type.

3) refactor resolveEntity() and add a new resolve() method in

This is the method for the JAXP URIResolver()  interface.  It will call the
same code currently in resolveEntity()

4) make call setURIResolver()

If an XMLCatalog exists, call _BOTH_ setEntityResolver() and setURIResolver(),
so the same catalog does double duty.  kewl.


What's the downside?    The major one I can think of is that ant needs to now include
all of the classes in the xml-commons resolver library.   That means either
they need to be directly included in ant.jar _or_ we need to include a separate
resolver.jar with ant.


OK that's (more than) enough for one email.  Please let me know what you all think.

As far as I know, there are as yet no tests for XMLCatalog.  Therefore, my patch will focus
the required changes to a) code b) documentation c) the ant build.xml file

Thanks very much!


To unsubscribe, e-mail:   <>
For additional commands, e-mail: <>

View raw message