- XML::LibXML doesn't cache the parsed DTDs it finds via catalogs or any other means (as far as I can tell). Nothing can be done about this.
- Catalogs can be used to tell where to find a number of DTDs.
- DTDs named in catalogs can be stored locally.
- The location of DTDs can be relative to the catalog, or absolute urls.
- XML::LibXML parses the catalog once per process.
- XML::LibXML loads the DTDs it finds in catalogs on demand.
- The last two points mean a catalog can contain DTDs that are rarely used, if ever.
I'm going to create XML::Catalogs (common code) and XML::Catalogs::HTML (installs and loads catalog of HTML DTDs). All you'll need to do to prevent the download of HTML DTDs will be:
use XML::Catalogs::HTML -libxml;