##
# 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.
##
#
# $Id: output_unknown.properties 468654 2006-10-28 07:09:23Z minchau $
#
# Specify defaults when no method="..." is specified.
# This type of output will quickly switch to "xml" or "html"
# depending on the first element name.
#

# XSLT properties do not need namespace qualification.
method=xml
version=1.0
encoding=UTF-8
indent=no
omit-xml-declaration=no
standalone=no
media-type=text/xml

# Xalan-specific output properties.  These can be overridden in the stylesheet 
# assigning a xalan namespace.  For example:
# <xsl:stylesheet version="1.0"
#          xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
#          xmlns:xalan="http://xml.apache.org/xalan">
#  <xsl:output method="html" encoding="UTF-8"
#              xalan:content-handler="MyContentHandler"/>
#  ...
# Note that the colon after the protocol needs to be escaped.
{http\u003a//xml.apache.org/xalan}indent-amount=0
{http\u003a//xml.apache.org/xalan}content-handler=org.apache.xml.serializer.ToUnknownStream

