XML documents often rely on Document Type Definitions (DTDs). While parsing a document with BaseX, entities can be resolved with respect to that particular DTD.By default, the DTD is only used for entity resolution.
XHTML, for example, defines its doctype via the following line:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
Fetching <code>xhtml1-strict.dtd</code> obviously involves network traffic. When dealing with single files, this may seem tolerable, but importing large collections benefits from caching these resources. Depending on the remote server, you will experience significant speed improvements when caching DTDs locally.
== XML Entity and URI Resolvers ==
comes with a default URI resolver that is usable out of the box.
To enable entity resolving you have to provide a valid XML Catalog file, so that the parser knows where to look for mirrored DTDs.
A simple working example for XHTML might look like this:
<pre class="brush:xml" start="0">
<catalog prefer="system" xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
<rewriteSystem systemIdStartString="http://www.w3.org/TR/xhtml1/DTD/" rewritePrefix="file:///path/to/dtds/" />
This rewrites all systemIds starting with: ''<nowiki>http://www.w3.org/TR/xhtml1/DTD/</nowiki>'' to ''file:///path/to/dtds/''.
When running BaseX in GUI mode, simply provide the path to your XML Catalog file in the ''Parsing'' Tab of the Database Creation Dialog.
Entity resolving only works if the [[Parsers#XML Parsers|internal XML parser]] is switched off (which is the default case).
If you use the internal parser, you can manually specify whether you want to parse DTDs and entities or not.
Using other Resolvers == There might be some cases when you do not want to use the built-in resolver that Java provides by default (via <code>com.sun.org.apache.xml.internal.resolver.*</code>). BaseX offers support for the Apache-maintained [http://xml.apache.org/commons XML Commons Resolver], available for download [http://xerces.apache.org/mirrors.cgi here]. To use it add '''resolver.jar''' to the classpath when [[Startup|starting BaseX]]: <pre class="brush:bash"> java -cp basex.jar:resolver.jar org.basex.BaseXServer </pre>
== More Information ==
*[http://en.wikipedia.org/wiki/Document_Type_Definition Wikipedia on Document Type Definitions]
*[http://xml.apache.org/commons/components/resolver/resolver-article.html Apache XML Commons Article on Entity Resolving]
*[http://java.sun.com/webservices/docs/1.6/jaxb/catalog.html XML Entity and URI Resolvers], Sun
*[http://www.oasis-open.org/committees/download.php/14810/xml-catalogs.pdf XML Catalogs. OASIS Standard, Version 1.1. 07-October-2005.]