# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#=======================================================================
# CatalogManager.properties for Catalog Entity Resolver.
#
# This is the default properties file for your project.
# This facilitates local configuration of application-specific catalogs.
# If you have defined any local catalogs, then they will be loaded
# before Forrest's core catalogs.
#
# See the Apache Forrest documentation:
# http://forrest.apache.org/docs/your-project.html
# http://forrest.apache.org/docs/validation.html

# verbosity:
# The level of messages for status/debug (messages go to standard output).
# The setting here is for your own local catalogs.
# The verbosity of Forrest's core catalogs is controlled via
#  main/webapp/WEB-INF/cocoon.xconf
#
# The following messages are provided ...
#  0 = none
#  1 = ? (... not sure yet)
#  2 = 1+, Loading catalog, Resolved public, Resolved system
#  3 = 2+, Catalog does not exist, resolvePublic, resolveSystem
#  10 = 3+, List all catalog entries when loading a catalog
#    (Cocoon also logs the "Resolved public" messages.)
verbosity=1

# catalogs ... list of additional catalogs to load
#  (Note that Apache Forrest will automatically load its own default catalog
#  from main/webapp/resources/schema/catalog.xcat)
# Use either full pathnames or relative pathnames.
# pathname separator is always semi-colon (;) regardless of operating system
# directory separator is always slash (/) regardless of operating system
# The project catalog is expected to be at ../resources/schema/catalog.xcat
#catalogs=../resources/schema/catalog.xcat
# FIXME: Workaround FOR-548 "project DTD catalogs are not included
# when running as a servlet WAR". 
# Same catalog, different path
catalogs=../resources/schema/catalog.xcat;../../project/src/documentation/resources/schema/catalog.xcat

# relative-catalogs
# If false, relative catalog URIs are made absolute with respect to the
# base URI of the CatalogManager.properties file. This setting only 
# applies to catalog URIs obtained from the catalogs property in the
# CatalogManager.properties file
# Example: relative-catalogs=[yes|no]
relative-catalogs=no
