カタログを DTD と XML スキーマをリダイレクトするために使用することができます。両方のケースのメカニズムの後ろにあるコンセプトは同じですが、違いの詳細は以下に説明されている通りです。
カタログは DTD への呼び出しをローカルの URI にリダイレクトするために使用されます。これはマッピング、カタログファイル、ローカルURI により必要とされるパブリックまたはシステム識別子により達成されます。XML ファイル内の DOCTYPE 宣言が 読み取れれると、パブリックまたはシステム識別子が必要とされるローカルリソースをカタログファイルマッピングによりロケートします。
人気のあるスキーマに関しては PUBLIC 識別子は通常定義済みです。このためカタログファイル内の URI のみがたたしいローカルコピーに対して PUBLIC 識別子 をマップします。XML ドキュメントが解析されると内部の PUBLIC 識別子が読み取られます。この識別子がカタログファイル内で見つかると、カタログファイル内の対応する URL がルックアップされ、スキーマがこのロケーションから読み取られます。例えば、 次の SVG ファイルが XMLSpy 内で開かれるとします:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="20" height="20" xml:space="preserve">
<g style="fill:red; stroke:#000000">
<rect x="0" y="0" width="15" height="15"/>
<rect x="5" y="5" width="15" height="15"/>
</g>
</svg>
カタログはこの SVG ファイルの PUBLIC 識別子を検索します。カタログファイルは以下のエントリを含んでいます:
<catalog>
...
<public publicId="-//W3C//DTD SVG 1.1//EN" uri="schemas/svg/svg11.dtd"/>
...
</catalog>
この場合 PUBLIC 識別子のために一致するものがあります。この結果 SVG DTD のためのルックアップが(カタログファイルに相対的な) URL schemas/svg/svg11.dtd にリダイレクトされます。これは SVG ファイルのために DTD として使用されるローカルファイルです。カタログ内で Public ID のためのマッピングが存在しない場合、 XML ドキュメント内の URL が使用されます (上の SVG ファイルのサンプルの場合、これはインターネット URL です: http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd)。
XMLSpy 内では XML スキーマをリダイレクトするためにカタログを使用することができます。XML インスタンスファイル内で、スキーマへのレファレンスが XML ドキュメントのトップレベルの要素の xsi:schemaLocation 属性内で発生します。例えば、
xsi:schemaLocation="http://www.xmlspy.com/schemas/orgchart OrgChart.xsd"
xsi:schemaLocation 属性の値には2つの部分があります: (上で緑色で表示されている)名前空間のパートと(ハイライトされている) URI パート。名前空間の部分は代替リソースをマップするためにカタログ内で使用されています。例えば、以下のカタログエントリは上のスキーマレファレンスを代替のロケーションのスキーマにリダイレクトします。
<uri name="http://www.xmlspy.com/schemas/orgchart" uri="C:\MySchemas\OrgChart.xsd"/>
通常 xsi:schemaLocation 属性の値の URI 部分は実際のスキーマのロケーションのパスです。しかしながら、スキーマがカタログを介して参照される場合、 URI の部分は実際の XML スキーマをポイントする必要はなく、 xsi:schemaLocation 属性の文法の妥当性が保持されるために存在する必要があります。Foo の値は、例えば、 属性の値の部分のが妥当であるために十分です。