---
name: "xmlcatalog"
section: "1"
platform: "linux"
package: "libxml2"
version: "2.15.4-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "macos"]
url: "https://new.carta.tech/xmlcatalog"
---

# xmlcatalog(1)

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

## NAME

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

## SYNOPSIS

**xmlcatalog** \[**--sgml** \| **--shell** \| **--convert** \| **--create** \| **--del** *VALUE(S)* \| \[ **--add** *TYPE* *ORIG* *REPLACE*  \| **--add** *FILENAME*\] \| **--noout** \| **--no-super-update** \| \[**-v** \| **--verbose**\]\] {*CATALOGFILE*} {*ENTITIES*...}

## DESCRIPTION

**xmlcatalog** is a command line application allowing users to monitor and manipulate XML and SGML catalogs. It is included in [**libxml**(3)](/libxml/3.md).

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.

## OPTIONS

**xmlcatalog** accepts the following options (in alphabetical order):

**--add** *TYPE* *ORIG* *REPLACE*

Add an entry to CATALOGFILE. *TYPE* indicates the type of entry. Possible types are: *public*, *system*, *uri*, *rewriteSystem*, *rewriteURI*, *delegatePublic*, *delegateSystem*, *delegateURI*, *nextCatalog*. *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 CATALOGFILE, outputting 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.

- **--add** *FILENAME*

  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.

- **--convert**

  Convert SGML catalog to XML.

- **--create**

  Create a new XML catalog. Outputs to stdout, ignoring *filename* unless **--noout** is used, in which case it creates a new catalog file *filename*.

- **--del** *VALUE(S)*

  Remove entries from *CATALOGFILE* matching *VALUE(S)*. The **--del** option will not overwrite *CATALOGFILE*, outputting to stdout, unless **--noout** is used.

- **--noout**

  Save output to the named file rather than outputting to stdout.

- **--no-super-update**

  Do not update the SGML super catalog.

- **--shell**

  Run a shell allowing interactive queries on catalog file *CATALOGFILE*. For the set of available commands see the section called “SHELL COMMANDS”.

- **--sgml**

  Uses SGML super catalogs for **--add** and **--del** options.

- **-v**, **--verbose**

  Output debugging information.

Invoking **xmlcatalog** non-interactively without a designated action (imposed with options like **--add**) will result in a lookup of the catalog entry for *ENTITIES* in the catalog denoted with *CATALOGFILE*. The corresponding entries will be output to the command line. This mode of operation, together with **--shell** mode and non-modifying (i.e. without **--noout**) direct actions, allows for a special shortcut of the void *CATALOGFILE* specification (possibly expressed as "" in the shell environment) appointing the default system catalog. That simplifies the handling when its exact location is irrelevant but the respective built-in still needs to be consulted.

## SHELL COMMANDS

Invoking **xmlcatalog** with the **--shell** *CATALOGFILE* option opens a command line shell allowing interactive access to the catalog file identified by *CATALOGFILE*. Invoking the shell provides a command line prompt after which the following commands (described in alphabetical order) can be entered.

**add** *TYPE* *ORIG* *REPLACE*

Add an entry to the catalog file. *TYPE* indicates the type of entry. Possible types are: *public*, *system*, *uri*, *rewriteSystem*, *rewriteURI*, *delegatePublic*, *delegateSystem*, *delegateURI*, *nextCatalog*. *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 CATALOGFILE, outputting 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.

**debug**

Print debugging statements showing the steps **xmlcatalog** is executing.

**del** *VALUE(S)*

Remove the catalog entry corresponding to *VALUE(S)*.

**dump**

Print the current catalog.

**exit**

Quit the shell.

**public** *PUBLIC-ID*

Execute a Formal Public Identifier lookup of the catalog entry for *PUBLIC-ID*. The corresponding entry will be output to the command line.

**quiet**

Stop printing debugging statements.

**system** *SYSTEM-ID*

Execute a Formal Public Identifier lookup of the catalog entry for *SYSTEM-ID*. The corresponding entry will be output to the command line.

## ENVIRONMENT

**XML\_CATALOG\_FILES**

XML 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 space-separated list of catalogs. Use percent-encoding to escape spaces or other characters. An empty variable should deactivate loading the default catalog from /etc/xml/catalog or, more specifically, ${sysconfdir}/xml/catalog.

## DIAGNOSTICS

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

**0**

No error

**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 look up an entry in the catalog

## SEE ALSO

[**libxml**(3)](/libxml/3.md)

More information can be found at

• [**libxml**(3)](/libxml/3.md) web page **https://gitlab.gnome.org/GNOME/libxml2**

• [**libxml**(3)](/libxml/3.md) catalog support web page at **https://gitlab.gnome.org/GNOME/libxml2/-/wikis/Catalog-support**

• James Clark's SGML catalog page **http://www.jclark.com/sp/catalog.htm**

• OASIS XML catalog specification **http://www.oasis-open.org/committees/entity/spec.html**

## AUTHOR

**John Fleck** \<jfleck@inkstain.net\>

## COPYRIGHT

Copyright © 2001, 2004\
