## Name

xmlcatalog — Command line tool to parse and manipulate XML or SGML catalog files.

## Synopsis

`xmlcatalog` [[--shell] | [--create] | [--add `type` `orig` `replace`] | [--del `values`] | [--noout] | [--verbose]] [``catalogfile``] [``entities``]

## Introduction

xmlcatalog is a command line application allowing users to monitor and manipulate XML and SGML catalogs. It is included in libxml2.

Its functions can be invoked from a single command from the command line, or it can perform multiple functions in interactive mode. It can operate on both XML and SGML files.

## Command Line Options

`--shell` `filename`
  Run a shell allowing interactive queries on catalog file `filename`.
`--create` `filename`
  Create a new XML catalog. Outputs to stdout, ignoring `filename` unless `--noout` is used, in which case it creates a new catalog file `filename`.
`--add` `'type'` `'orig'` `'replace'` `filename`

  Add an entry to catalog file `filename`. `type` indicates the type of entry. Possible types are 'public', 'system', 'rewriteSystem', 'delegatePublic', 'delegateSystem'amd 'rewriteURI'. `'orig'` is the original reference to be replaced, and `'replace'` is the URI of the replacement entity to be used. The `--add` option will not overwrite `filename`, outputing to stdout, unless `--noout` is used. The `--add` will always take three parameters even if some of the XML catalog constructs will have only a single argument.

  If the `--add` option is used following the `--sgml` option, only a single argument, a `filename`, is used. This is used to add the name of a catalog file to an SGML supercatalog, a file that contains references to other included SGML catalog files.

`--del` `'values'` `filename`
  Remove entries from the catalog file `filename` matching `'values'`. The `--del` option will not overwrite `filename`, outputing to stdout, unless `--noout` is used.
`--noout`
  Save output to the named file rather than outputing to stdout.
`--sgml`
  Uses SGML Super catalogs for --add and --del options
`-v` or `--verbose`
  output debugging information.

## Shell Commands

Invoking xmlcatalog with the `--shell` `filename` option opens a command line shell allowing interactive access to the catalog file identified by `filename`. Invoking the shell provides a command line prompt after which commands can be entered.

`public` `'PublicID'`
  Execute a public identifier lookup of the catalog entry for `'PublicID'`. The corresponding entry will be output to the command line.
`system` `'SystemID'`
  Execute a public identifier lookup of the catalog entry for `'SystemID'`. The corresponding entry will be output to the command line.
`add` `'type'` `'orig'` `'replace'`
  Add an entry to the catalog file. `type` indicates the type of entry. Possible types are 'public', 'system', 'rewriteSystem', 'delegatePublic' and 'delegateSystem'. `'orig'` is the original reference to be replaced, and `'replace'` is the URI of the replacement entity to be used.
`del` `'values'`
  Remove the catalog entry corresponding to `'values'`.
`dump`
  Print the current catalog.
`debug`
  Print debugging statements showing the steps xmlcatalog is executing.
`quiet`
  Stop printing debugging statements.
`exit`
  Quit the shell.

## Return values

xmlcatalog's return codes provide information that can be used when calling it from scripts.

0: normal

1: Failed to remove an entry from the catalog

2: Failed to save to the catalog, check file permissions

3: Failed to add an entry to the catalog

4: Failed to lookup and entry in the catalog

## Catalogs

Catalog behavior can be changed by redirecting queries to the user's own set of catalogs. This can be done by setting the `XML_CATALOG_FILES` environment variable to a list of catalogs. An empty one should deactivate loading the default `/etc/xml/catalog` default catalog.

## References

libxml web page

libxml catalog support web page:

James Clark's SGML catalog page:

OASIS XML catalog specification: