Changes

Jump to navigation Jump to search
82 bytes added ,  15:26, 27 February 2020
no edit summary
XHTML, for example, defines its doctype via the following line:
<pre classsyntaxhighlight lang="brush:xml">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
</presyntaxhighlight>
Fetching <code>xhtml1-strict.dtd</code> from the W3C’s server 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.
A simple working example for XHTML might look like this:
<pre classsyntaxhighlight lang="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/" />
</catalog>
</presyntaxhighlight>
This rewrites all systemIds starting with: <code><nowiki>http://www.w3.org/TR/xhtml1/DTD/</nowiki></code> to <code>file:///path/to/dtds/</code>. For example, if the following XML file is parsed:
<pre classsyntaxhighlight lang="brush:xml" start="0">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"/>
</presyntaxhighlight>
The XHTML DTD <code>xhtml1-transitional.dtd</code> and all its linked resources will now be loaded from the specified path.
Consider a library of reusable XSLT stylesheets. For performance reasons, this library will be cached locally. However, the import URI for a given stylesheet should always be the same, independent of the accidental relative or absolute path that it is stored at locally. Example:
<pre classsyntaxhighlight lang="brush:xml">
<xsl:import href="http://acme.com/xsltlib/acme2html/1.0/acme2html.xsl"/>
</presyntaxhighlight>
The XSLT stylesheet might not even be available from this location. The URI serves as a canonical location identifier for this XSLT stylesheet. A local copy of the <code>acme2html/1.0/</code> directory is expected to reside somewhere, and the location of this directory relative to the local XML catalog file is specified in an entry in this catalog, like this:
<pre classsyntaxhighlight lang="brush:xml">
<rewriteURI uriStartString="http://acme.com/xsltlib/acme2html/1.0/" rewritePrefix="../acmehtml10/"/>
</presyntaxhighlight>
This way, XSLT import URIs don’t have to be adjusted for the relative or absolute locations of the XSLT library’s local copy.
When using a catalog within an XQuery Module, the global <code>db:catfile</code> option may not be set in this module. You can set it via pragma instead:
<pre classsyntaxhighlight lang="brush:xquery">
(# db:catfile xmlcatalog/catalog.xml #) {
xslt:transform(db:open('acme_content')[1], '../acmecustom/acmehtml.xsl')
}
</presyntaxhighlight>
It is assumed that this stylesheet <code>../acmecustom/acmehtml.xsl</code> (location relative to the current XQuery script or module) imports <code>acme2html/1.0/acme2html.xsl</code> by its canonical URI that will be resolved to a local URI by the catalog resolver.
Bureaucrats, editor, reviewer, Administrators
13,550

edits

Navigation menu