I have found it much easier to install the LibXML tools to maintain the catalog. The binary to use is "xmlcatalog". That binary allows you to create a catalog, add entries to it and delete entries from it. The documentation for the tool can be found here: http://xmlsoft.org/catalog.html The sequence for getting the catalog working is: 1) install LibXML toolset and include the xmlcatalog binary in your path environment variable. 2) download a file that you wish to cache. For example, I started with the html4 strict dtd. (curl or wget) 3) create a directory to hold both the catalog and the cached files. 4) create your catalog and add an entry to it. E.g. xmlcatalog -v --create catalog.xml xmlcatalog -v --noout --add "public" ""-//W3C/DTD HTML 4.01//EN" "file:///d:/www/pvc/xml/catalogs/html4/strict.dtd" catalog.xml 5) test your catalog xmlcatalog -v catalog.xml "-//W3C/DTD HTML 4.01//EN" (the command will respond with the location to which the request will be redirected, which was the parameter in the add command above). 6) set the environment variable which tells LibXML where to find the catalog file. The documentation is not very clear on this, but it works for me when I point it to the catalog file itself, not the directory in which the catalog file lives (despite the name of the environment variable). e.g. set XML_CATALOG_FILES d:\www\pvc\xml\catalogs\catalog.xml. Remember that in windows this is set through system properties / environment variables and that you need to restart any shells / command prompts before the setting will be apparent. Test it by typing 'set' at the command prompt. In Unix variants, export the variable from the command prompt and test it with env. Now the PHP DOM Validation should make use of the catalog and not have to go out to the W3C servers to get the DTD in order to validate the document.