diff --git a/doc/guix.texi b/doc/guix.texi
index 8c5697589f..4afe1af6c0 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -11144,17 +11144,14 @@ Search Paths
 to be found in @file{xml} sub-directories---nothing less.  The search
 path specification looks like this:
 
+@c This is defined at (guix search-paths) as $XML_CATALOG_FILES.
 @lisp
-(package
-  (name "libxml2")
-  ;; some fields omitted
-  (native-search-paths
-   (list (search-path-specification
-          (variable "XML_CATALOG_FILES")
-          (separator " ")
-          (files '("xml"))
-          (file-pattern "^catalog\\.xml$")
-          (file-type 'regular)))))
+(search-path-specification
+ (variable "XML_CATALOG_FILES")
+ (separator " ")
+ (files '("xml"))
+ (file-pattern "^catalog\\.xml$")
+ (file-type 'regular))
 @end lisp
 
 Worry not, search path specifications are usually not this tricky.
@@ -11190,15 +11187,16 @@ Search Paths
 though it can be any symbol returned by @code{stat:type} (@pxref{File
 System, @code{stat},, guile, GNU Guile Reference Manual}).
 
-In the libxml2 example above, we would match regular files; in the
-Python example, we would match directories.
+In the @env{XML_CATALOG_FILES} example above, we would match regular
+files; in the Python example, we would match directories.
 
 @item @code{file-pattern} (default: @code{#f})
 This must be either @code{#f} or a regular expression specifying
 files to be matched @emph{within} the sub-directories specified by the
 @code{files} field.
 
-Again, the libxml2 example shows a situation where this is needed.
+Again, the @env{XML_CATALOG_FILES} example shows a situation where this
+is needed.
 @end table
 @end deftp
 
@@ -11206,6 +11204,15 @@ Search Paths
 To reduce duplications, some of them are pre-defined in @code{(guix
 search-paths)}.
 
+@defvar $SGML_CATALOG_FILES
+@defvarx $XML_CATALOG_FILES
+These two search paths indicate where the
+@url{https://www.oasis-open.org/specs/a401.htm,TR9401 catalog}@footnote{
+Alternatively known as SGML catalog.} or
+@url{https://www.oasis-open.org/committees/download.php/14809/xml-catalogs.html,
+XML catalog} files can be found.
+@end defvar
+
 @defvar $SSL_CERT_DIR
 @defvarx $SSL_CERT_FILE
 These two search paths indicate where X.509 certificates can be found
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index 8b82c272fc..267a35e560 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -601,12 +601,7 @@ (define-public perl-app-xml-docbook-builder
      (list perl-class-xsaccessor perl-test-trap))
     (native-search-paths
      ;; xsltproc's search paths, to avoid propagating libxslt.
-     (list (search-path-specification
-            (variable "XML_CATALOG_FILES")
-            (separator " ")
-            (files '("xml"))
-            (file-pattern "^catalog\\.xml$")
-            (file-type 'regular))))
+     (list $XML_CATALOG_FILES))
     (home-page "https://www.shlomifish.org/open-source/projects/docmake/")
     (synopsis "Translate DocBook/XML documentation into other file formats")
     (description
diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm
index cc26e2fa67..baf024820c 100644
--- a/gnu/packages/xml.scm
+++ b/gnu/packages/xml.scm
@@ -83,6 +83,7 @@ (define-module (gnu packages xml)
   #:use-module (guix build-system python)
   #:use-module (guix deprecation)
   #:use-module (guix utils)
+  #:use-module (guix search-paths)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages pkg-config))
 
@@ -225,14 +226,7 @@ (define-public libxml2
     (inputs (list xz))
     (propagated-inputs (list zlib)) ; libxml2.la says '-lz'.
     (native-inputs (list perl))
-    ;; $XML_CATALOG_FILES lists 'catalog.xml' files found in under the 'xml'
-    ;; sub-directory of any given package.
-    (native-search-paths (list (search-path-specification
-                                (variable "XML_CATALOG_FILES")
-                                (separator " ")
-                                (files '("xml"))
-                                (file-pattern "^catalog\\.xml$")
-                                (file-type 'regular))))
+    (native-search-paths (list $XML_CATALOG_FILES))
     (search-paths native-search-paths)
     (description
      "Libxml2 is the XML C parser and toolkit developed for the Gnome
@@ -1806,14 +1800,7 @@ (define-public opensp
                 (("^\tOSGMLNORM=`echo osgmlnorm\\|sed '\\$\\(transform\\)'`\\\\")
                  "\tOSGMLNORM=`echo osgmlnorm|sed '$(transform)'`")
                 (("^\t\\$\\(SHELL\\)\n") "")))))))
-    ;; $SGML_CATALOG_FILES lists 'catalog' or 'CATALOG' or '*.cat' files found
-    ;; under the 'sgml' sub-directory of any given package.
-    (native-search-paths (list (search-path-specification
-                                (variable "SGML_CATALOG_FILES")
-                                (separator ":")
-                                (files '("sgml"))
-                                (file-pattern "^catalog$|^CATALOG$|^.*\\.cat$")
-                                (file-type 'regular))))
+    (native-search-paths (list $SGML_CATALOG_FILES))
     (home-page "https://openjade.sourceforge.net/")
     (synopsis "Suite of SGML/XML processing tools")
     (description "OpenSP is an object-oriented toolkit for SGML parsing and
diff --git a/guix/search-paths.scm b/guix/search-paths.scm
index 5375fae34b..d325e57989 100644
--- a/guix/search-paths.scm
+++ b/guix/search-paths.scm
@@ -42,6 +42,8 @@ (define-module (guix search-paths)
             $SSL_CERT_DIR
             $SSL_CERT_FILE
             $TZDIR
+            $SGML_CATALOG_FILES
+            $XML_CATALOG_FILES
 
             %gcc-search-paths
 
@@ -154,6 +156,29 @@ (define $TZDIR
    (files '("share/zoneinfo"))
    (separator #f)))                     ;single entry
 
+;; Some packages (notably libxml2) make use of 'XML_CATALOG_FILES'
+;; and 'SGML_CATALOG_FILES' for remapping URI references or public/system
+;; identifiers to other URI references.
+(define $SGML_CATALOG_FILES
+  ;; $SGML_CATALOG_FILES lists 'catalog' or 'CATALOG' or '*.cat' files found
+  ;; under the 'sgml' sub-directory of any given package.
+  (search-path-specification
+   (variable "SGML_CATALOG_FILES")
+   (separator ":")
+   (files '("sgml"))
+   (file-pattern "^catalog$|^CATALOG$|^.*\\.cat$")
+   (file-type 'regular)))
+
+(define $XML_CATALOG_FILES
+  ;; $XML_CATALOG_FILES lists 'catalog.xml' files found in under the 'xml'
+  ;; sub-directory of any given package.
+  (search-path-specification
+   (variable "XML_CATALOG_FILES")
+   (separator " ")
+   (files '("xml"))
+   (file-pattern "^catalog\\.xml$")
+   (file-type 'regular)))
+
 (define (search-path-specification->sexp spec)
   "Return an sexp representing SPEC, a <search-path-specification>.  The sexp
 corresponds to the arguments expected by `set-path-environment-variable'."
