<?xml version="1.0" encoding="UTF-8"?>
<!--
  Copyright 2002-2004 The Apache Software Foundation

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN" "http://apache.org/forrest/dtd/document-v12.dtd">
<document>
  <header>
    <title>Using Catalog Entity Resolver for local DTDs</title>
  </header>
  <body>
    <section id="overview">
      <title>Overview</title>
      <p>
        This is a collection of notes for configuring the Catalog Entity
        Resolver with your favourite XML tools (validating parsers and
        editors).
      </p>
      <p>
        All XML documents declare their ruleset - the Document Type Definition
        (DTD). When Forrest processes the documents, it uses the Resolver to
        find Forrest's local copies of the DTDs, rather than trundling out
        onto the network.
      </p>
      <p>
        Many Java-based XML tools already have an entity resolver, probably
        the same one that Forrest uses. Many non-Java tools also have an
        entity resolver. To use these tools with documents based on the
        Forrest DTDs, you need to configure the tools.
      </p>
      <note>
        The information provided here is not intended to endorse any
        particular tool.
      </note>
      <p>
        If you have any other configuration tips for a particular tool, then
        please send them to the forrest-dev mailing list.
      </p>
    </section>

    <section id="config">
      <title>General configuration notes</title>
      <p>
        The Forrest DTDs and supporting resources are in the Forrest
        distribution at <code>src/core/context/resources/schema/</code>
      </p>
      <p>
        Usually all that is required is to direct your tool to the "catalog"
        supplied by Forrest at either:
        <code>$FORREST/src/core/context/resources/schema/catalog.xcat</code>
        (for XML Catalog) or
        <code>$FORREST/src/core/context/resources/schema/catalog</code>
        (for TR 9401 Catalog).
      </p>
    </section>

    <section id="tools">
      <title>Configuring specific tools</title>

      <section id="system">
        <title>Operating system catalog</title>
        <p>
          Some operating systems already provide a system-wide catalog that
          is used by many tools. This is usually located at
          <code>/etc/xml/catalog</code> or at
          <code>/usr/share/sgml/catalog</code> files.
        </p>
        <p>
          For an XML Catalog, add this line:
        </p>
        <source><![CDATA[
<nextCatalog
catalog="/usr/local/cvs/xml-forrest/src/core/context/resources/schema/catalog.xcat"/>
        ]]></source>
        <p>
          For a TR 9401 Catalog, add this line:
        </p>
        <source><![CDATA[
CATALOG \
"/usr/local/cvs/xml-forrest/src/core/context/resources/schema/catalog"
        ]]></source>
        <p>
          Actually you probably do not want to touch that system catalog,
          so rather create your own catalog file in your home directory
          which refers to both the Forrest catalog and your system catalog.
        </p>
      </section>

      <section id="xmllint">
        <title>xmllint validating parser</title>
        <p>
          "xmllint" is part of the "libxml2" package.
          Set the SGML_CATALOG_FILES environment variable.
        </p>
        <source>
export SGML_CATALOG_FILES=$FORREST/src/core/context/resources/schema/catalog
xmllint --valid --catalogs --noout mydoc.xml
        </source>
      </section>

      <section id="onsgmls">
        <title>onsgmls validating parser</title>
        <p>
          "onsgmls" is part of the "Open SP" package.
          You need to also tell it where to find an "SGML declaration".
          The easiest way is to create your own little "my-catalog" file,
          containing this:
        </p>
        <source>
SGMLDECL "/usr/share/sgml/xml.dcl"
CATALOG \
"/usr/local/cvs/xml-forrest/src/core/context/resources/schema/catalog"
        </source>
        <p>
          Then point the parser at it:
        </p>
        <source>
onsgmls -c path/to/my-catalog -wall -wxml -s mydoc.xml
        </source>
      </section>

      <section id="jedit">
        <title>jEdit - Open Source programmer's text editor</title>
        <source><![CDATA[
Select the menu:
Utilities > Global Options > Plugins:XML > Catalogs
Select the "+" button, and use the "File System Browser"
to specify the TR9401 Catalog file:
"xml-forrest/src/core/context/resources/schema/catalog"
        ]]></source>
      </section>

      <section id="oxygenxml">
        <title>oXygen XML Editor</title>
        <source><![CDATA[
Select the menu:
External Tools > Preferences > XML Catalog
Specify the XML Catalog file:
"xml-forrest/src/core/context/resources/schema/catalog.xcat"
        ]]></source>
      </section>

      <section id="xmlspy">
        <title>xmlspy</title>
        <source><![CDATA[
Add the following entry to the file CustomCatalog.xml
(located in XMLSpy install directory):

<nextCatalog
catalog="file://localhost/C:/apache/xml-forrest/src/core/
context/resources/schema/catalog.xcat"/>
        ]]></source>
      </section>

      <section id="xxe">
        <title>XMLmind XML Editor</title>
          <section>
          <title>XXE v2.5p3+</title>
            <p>XXE only supports catalogs automatically detected via configuration files.  
            Download the <fork href="http://www.splike.com/howtos/xxe_forrest.html">XXE 
            Forrest Config</fork> files from splike.com; this also add support for WYSIWYG 
            editing of forrest documents.</p>
        </section>
        <section>
          <title>XXE v2.5p2 or prior</title>
          <source><![CDATA[
Select the menu:
Options > Options > Schema > Add File
Specify the XML Catalog file:
"xml-forrest/src/core/context/resources/schema/catalog.xcat"
        ]]></source>
          </section>
      </section>
    </section>

    <section id="info">
      <title>Further information and resources</title>
      <p>
        Forrest and Cocoon use the
        <link href="http://xml.apache.org/commons/components/resolver/">Catalog
        Entity Resolver</link>
        that is provided by the
        <link href="http://xml.apache.org/commons/">Apache XML Commons</link>
        project. The resolver is packaged with the Forrest distribution at
        <code>lib/core/xml-commons-resolver-x.y.jar</code>
      </p>
      <p>
        Other Forrest documentation has some notes about configuring the
        entity resolver for your own DTDs. See
        <link href="site:validation">XML Validation</link>.
      </p>
      <p>
        Cocoon has extensive documentation about the entity resolver. See
        <link href="ext:cocoon/catalogs">Entity resolution with catalogs</link>.
      </p>
    </section>
</body>
</document>
