<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl"
   href="http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl"?>
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
    "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [

    <!ENTITY xmlcatalog "<command>xmlcatalog</command>">
]>

<refentry>

<refentryinfo>
	<title>xmlcatalog Manual</title>
	<productname>libxml2</productname>
	<copyright>
		<year>2001</year>
		<year>2004</year>
	</copyright>
	<author>
		<firstname>John</firstname>
		<surname>Fleck</surname>
		<affiliation>
			<address>
				<email>jfleck@inkstain.net</email>
			</address>
		</affiliation>
	</author>
	<!-- still a bit buggy output, will talk to docbook-xsl upstream to fix this -->
	<!-- <releaseinfo>This is release 0.3 of the xmlcatalog Manual.</releaseinfo> -->
	<!-- <edition>0.3</edition> -->
</refentryinfo>

<refmeta>
	<refentrytitle>xmlcatalog</refentrytitle>
	<manvolnum>1</manvolnum>
</refmeta>

<refnamediv>
	<refname>xmlcatalog</refname>
	<refpurpose>
		Command line tool to parse and manipulate <acronym>XML</acronym>
		or <acronym>SGML</acronym> catalog files.
	</refpurpose>
</refnamediv>

<refsynopsisdiv>
	<cmdsynopsis>
	<command>xmlcatalog</command>
	<group choice="opt">
		<arg choice="plain"><option>--sgml</option></arg>
		<arg choice="plain"><option>--shell</option></arg>
		<arg choice="plain"><option>--create</option></arg>
		<arg choice="plain"><option>--del <replaceable>VALUE(S)</replaceable></option></arg>
		<arg choice="plain">
			<group choice="opt">
				<arg choice="plain">
					<option>--add
					 <replaceable>TYPE</replaceable>
					 <replaceable>ORIG</replaceable>
					 <replaceable>REPLACE</replaceable>
					</option>
				</arg>
				<arg choice="plain"><option>--add <replaceable>FILENAME</replaceable></option></arg>
			</group>		
		</arg>
		<arg choice="plain"><option>--noout</option></arg>
		<arg choice="plain"><option>--no-super-update</option></arg>
		<arg choice="plain">
			<group choice="opt">
				<arg choice="plain"><option>-v</option></arg>
				<arg choice="plain"><option>--verbose</option></arg>
			</group>
		</arg>
	</group>
	<arg choice="req" rep="norepeat"><replaceable>CATALOGFILE</replaceable></arg>
	<arg choice="req" rep="repeat"><replaceable>ENTITIES</replaceable></arg>
	</cmdsynopsis>
</refsynopsisdiv>

<refsect1 id="description">
	<title>DESCRIPTION</title>
	<para>
		&xmlcatalog; is a command line application allowing users to monitor and
		manipulate <acronym>XML</acronym> and <acronym>SGML</acronym> catalogs. It
		is included in <citerefentry>
			<refentrytitle>libxml</refentrytitle>
			<manvolnum>3</manvolnum>
		</citerefentry>.
	</para>
	<para>
		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 <acronym>XML</acronym> and <acronym>SGML</acronym> files.
	</para>
</refsect1>

<refsect1 id="options">
	<title>OPTIONS</title>
	<para>
		&xmlcatalog; accepts the following options (in alphabetical order):
	</para>
	
	<variablelist>

		<varlistentry>
	<term>
		<option>--add
		 <replaceable>TYPE</replaceable>
		 <replaceable>ORIG</replaceable>
		 <replaceable>REPLACE</replaceable>
		</option>
	</term>
	<listitem>
		<para>
			Add an entry to <filename>CATALOGFILE</filename>. <replaceable>TYPE</replaceable>
			indicates the type of entry. Possible types are: <simplelist type="inline">
				<member><parameter>public</parameter></member>
				<member><parameter>system</parameter></member>
				<member><parameter>uri</parameter></member>
				<member><parameter>rewriteSystem</parameter></member>
				<member><parameter>rewriteURI</parameter></member>
				<member><parameter>delegatePublic</parameter></member>
				<member><parameter>delegateSystem</parameter></member>
				<member><parameter>delegateURI</parameter></member>
				<member><parameter>nextCatalog</parameter></member>
			</simplelist>. <replaceable>ORIG</replaceable> is the original
			reference to be replaced, and <replaceable>REPLACE</replaceable>
			is the <acronym>URI</acronym> of the replacement entity to be
			used. The <option>--add</option> option will not overwrite
			<filename>CATALOGFILE</filename>, outputting
			to <filename class="devicefile">stdout</filename>, unless
			<option>--noout</option> is used. The <option>--add</option> will
			always take three parameters even if some of the <acronym>XML</acronym>
			catalog constructs will have only a single argument.
		</para>
		<!--
			FIXME - Is my list of possible types correct? Are SGML types the same?
		-->
	</listitem>
		</varlistentry>

		<varlistentry>
	<term><option>--add <replaceable>FILENAME</replaceable></option></term>
	<listitem>
		<para>
			If the <option>--add</option> option is used following
			the <option>--sgml</option> option, only a single argument,
			a <replaceable>FILENAME</replaceable>, is used. This is used to add
			the name of a catalog file to an <acronym>SGML</acronym> supercatalog,
			a file that contains references to other included <acronym>SGML</acronym>
			catalog files.
		</para>
	</listitem>
		</varlistentry>

		<varlistentry>
	<term><option>--create</option></term>
	<listitem>
		<para>
			Create a new <acronym>XML</acronym> catalog. Outputs
			to <filename class="devicefile">stdout</filename>,
			ignoring <replaceable>filename</replaceable> unless <option>--noout</option> is
			used, in which case it creates a new catalog
			file <replaceable>filename</replaceable>.
		</para>
	</listitem>
		</varlistentry>

		<varlistentry>
	<term><option>--del <replaceable>VALUE(S)</replaceable></option></term>
	<listitem>
		<para>
			Remove entries from <replaceable>CATALOGFILE</replaceable>
			matching <replaceable>VALUE(S)</replaceable>. The <option>--del</option>
			option will not overwrite <replaceable>CATALOGFILE</replaceable>,
			outputting to <filename class="devicefile">stdout</filename>,
			unless <option>--noout</option> is used.
		</para>
	</listitem>
		</varlistentry>
		
		<varlistentry>
	<term><option>--noout</option></term>
	<listitem>
		<para>
			Save output to the named file rather than outputting
			to <filename class="devicefile">stdout</filename>.
		</para>
	</listitem>
		</varlistentry>
		
		<varlistentry>
	<term><option>--no-super-update</option></term>
	<listitem>
		<para>
			Do not update the <acronym>SGML</acronym> super catalog.
		</para>
	</listitem>
		</varlistentry>
		
		<varlistentry>
	<term><option>--shell</option></term>
	<listitem>
		<para>
			Run a shell allowing interactive queries on catalog
			file <replaceable>CATALOGFILE</replaceable>. For the set of available
			commands see <xref linkend="shell"/>.
		</para>
	</listitem>
		</varlistentry>
		
		<varlistentry>
	<term><option>--sgml</option></term>
	<listitem>
		<para>
			Uses <acronym>SGML</acronym> super catalogs for <option>--add</option>
			and <option>--del</option> options.
		</para>
	</listitem>
		</varlistentry>
		
		<varlistentry>
	<term><option>-v</option></term>
	<term><option>--verbose</option></term>
	<listitem>
		<para>Output debugging information.</para>
	</listitem>
		</varlistentry>
	
	</variablelist>

	<para>
		Invoking &xmlcatalog; non-interactively without a designated action
		(imposed with options like <option>--add</option>) will result in a lookup
		of the catalog entry for <replaceable>ENTITIES</replaceable> in the
		catalog denoted with <replaceable>CATALOGFILE</replaceable>. The
		corresponding entries will be output to the command line. This mode of
		operation, together with <option>--shell</option> mode and non-modifying
		(i.e. without <option>--noout</option>) direct actions, allows for
		a special shortcut of the void <replaceable>CATALOGFILE</replaceable>
		specification (possibly expressed as &quot;&quot; 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.
	</para>
</refsect1>

<refsect1 id="shell">
	<title>SHELL COMMANDS</title>
	<para>
		Invoking &xmlcatalog; with
		the <option>--shell <replaceable>CATALOGFILE</replaceable></option> option opens
		a command line shell allowing interactive access to the catalog file
		identified by <replaceable>CATALOGFILE</replaceable>. Invoking the shell
		provides a command line prompt after which the following commands (described in
		alphabetical order) can be entered.
	</para>
	
	<variablelist>

		<varlistentry>
	<term>
		<option>add
		 <replaceable>TYPE</replaceable>
		 <replaceable>ORIG</replaceable>
		 <replaceable>REPLACE</replaceable>
		</option>
	</term>
	<listitem>
		<para>
			Add an entry to the catalog file. <replaceable>TYPE</replaceable>
			indicates the type of entry. Possible types are: <simplelist type="inline">
				<member><parameter>public</parameter></member>
				<member><parameter>system</parameter></member>
				<member><parameter>uri</parameter></member>
				<member><parameter>rewriteSystem</parameter></member>
				<member><parameter>rewriteURI</parameter></member>
				<member><parameter>delegatePublic</parameter></member>
				<member><parameter>delegateSystem</parameter></member>
				<member><parameter>delegateURI</parameter></member>
				<member><parameter>nextCatalog</parameter></member>
			</simplelist>. <replaceable>ORIG</replaceable> is the original
			reference to be replaced, and <replaceable>REPLACE</replaceable>
			is the <acronym>URI</acronym> of the replacement entity to be
			used. The <option>--add</option> option will not overwrite
			<filename>CATALOGFILE</filename>, outputting
			to <filename class="devicefile">stdout</filename>, unless
			<option>--noout</option> is used. The <option>--add</option> will
			always take three parameters even if some of the <acronym>XML</acronym>
			catalog constructs will have only a single argument.
		</para>
	</listitem>
		</varlistentry>

		<varlistentry>
	<term><option>debug</option></term>
	<listitem>
		<para>
			Print debugging statements showing the steps &xmlcatalog; is executing.
		</para>
	</listitem>
		</varlistentry>

		<varlistentry>
	<term><option>del <replaceable>VALUE(S)</replaceable></option></term>
	<listitem>
		<para>
			Remove the catalog entry corresponding to <replaceable>VALUE(S)</replaceable>.
		</para>
	</listitem>
		</varlistentry>

		<varlistentry>
	<term><option>dump</option></term>
	<listitem>
		<para>Print the current catalog.</para>
	</listitem>
		</varlistentry>

		<varlistentry>
	<term><option>exit</option></term>
	<listitem>
		<para>Quit the shell.</para>
	</listitem>
		</varlistentry>
	
		<varlistentry>
	<term><option>public <replaceable>PUBLIC-ID</replaceable></option></term>
	<listitem>
		<para>
			Execute a Formal Public Identifier lookup of the catalog entry
			for <replaceable>PUBLIC-ID</replaceable>. The corresponding entry will be
			output to the command line.
		</para>
	</listitem>
		</varlistentry>

		<varlistentry>
	<term><option>quiet</option></term>
	<listitem>
		<para>Stop printing debugging statements.</para>
	</listitem>
		</varlistentry>
		
		<varlistentry>
	<term><option>system <replaceable>SYSTEM-ID</replaceable></option></term>
	<listitem>
		<para>
			Execute a Formal Public Identifier lookup of the catalog entry
			for <replaceable>SYSTEM-ID</replaceable>. The corresponding entry will be
			output to the command line.
		</para>
	</listitem>
		</varlistentry>

	</variablelist>
</refsect1>

<refsect1 id="environment">
	<title>ENVIRONMENT</title>
	<variablelist>

		<varlistentry>
	<term><envar>XML_CATALOG_FILES</envar></term>
	<listitem>
		<para><acronym>XML</acronym> catalog behavior can be changed by redirecting
			queries to the user's own set of catalogs. This can be done by setting
			the <envar>XML_CATALOG_FILES</envar> 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 <filename>/etc/xml/catalog</filename> catalog.
		</para>
	</listitem>
		</varlistentry>

	</variablelist>	
</refsect1>

<refsect1 id="diagnostics">
	<title>DIAGNOSTICS</title>
	<para>
		&xmlcatalog; return codes provide information that can be used when
		calling it from scripts.
	</para>
	<variablelist>

		<varlistentry>
	<term><errorcode>0</errorcode></term>
	<listitem>
		<para>No error</para>
	</listitem>
		</varlistentry>

		<varlistentry>
	<term><errorcode>1</errorcode></term>
	<listitem>
		<para>Failed to remove an entry from the catalog</para>
	</listitem>
		</varlistentry>

		<varlistentry>
	<term><errorcode>2</errorcode></term>
	<listitem>
		<para>Failed to save to the catalog, check file permissions</para>
	</listitem>
		</varlistentry>

		<varlistentry>
	<term><errorcode>3</errorcode></term>
	<listitem>
		<para>Failed to add an entry to the catalog</para>
	</listitem>
		</varlistentry>

		<varlistentry>
	<term><errorcode>4</errorcode></term>
	<listitem>
		<para>Failed to look up an entry in the catalog</para>
	</listitem>
		</varlistentry>

	</variablelist>
</refsect1>

<refsect1 id="seealso">
	<title>SEE ALSO</title>
	<para><citerefentry>
			<refentrytitle>libxml</refentrytitle>
			<manvolnum>3</manvolnum>
		</citerefentry>
	</para>
	<para>
		More information can be found at
		<itemizedlist>
			<listitem>
				<para><citerefentry>
						<refentrytitle>libxml</refentrytitle>
						<manvolnum>3</manvolnum>
					</citerefentry> web page <ulink url="https://gitlab.gnome.org/GNOME/libxml2"/>
				</para>
			</listitem>
			<listitem>
				<para><citerefentry>
						<refentrytitle>libxml</refentrytitle>
						<manvolnum>3</manvolnum>
					</citerefentry> catalog support web page
					at <ulink url="https://gitlab.gnome.org/GNOME/libxml2/-/wikis/Catalog-support"/>
				</para>
			</listitem>
			<listitem>
				<para>James Clark's <acronym>SGML</acronym> catalog
					page <ulink url="http://www.jclark.com/sp/catalog.htm"/>
				</para>
			</listitem>
			<listitem>
				<para><acronym>OASIS</acronym> <acronym>XML</acronym> catalog specification
					<ulink url="http://www.oasis-open.org/committees/entity/spec.html"/>
				</para>
			</listitem>
		</itemizedlist>
	</para>
</refsect1>

</refentry>
