/*
 * 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:  $
 */

package org.apache.xml.serializer.dom3;

/**
 * DOM Constants used by the DOM Level 3 LSSerializer implementation.
 *
 * @xsl.usage internal
 */
final class DOMConstants {
    //
    // Constants: DOM Level 3 feature ids
    //
    public static final String DOM3_REC_URL = "http://www.w3.org/TR/DOM-Level-3-LS";

    public static final String XERCES_URL = "http://xml.apache.org/xerces-2j";

    // The namespace used to qualified DOM Level 3 DOMConfiguration parameters
    public static final String S_DOM3_PROPERTIES_NS = "{"
            + DOMConstants.DOM3_REC_URL + "}";

    public static final String S_XERCES_PROPERTIES_NS = "{"
            + DOMConstants.XERCES_URL + "}";

    // xmlns namespaces 
    private static final String XMLNS_URI = "http://www.w3.org/2000/xmlns/";

    // namespace prefix
    private static final String XMLNS_PREFIX = "xmlns";

    // ************************************************************************
    // DOM Level 3 DOM Configuration parameter names
    // ************************************************************************
    // DOM Level 3 parameters defined in Core
    public static final String DOM_CANONICAL_FORM = "canonical-form"; // Unsupported, we only appear to support this

    public static final String DOM_CDATA_SECTIONS = "cdata-sections";

    public static final String DOM_CHECK_CHAR_NORMALIZATION = "check-character-normalization"; // Unsupported

    public static final String DOM_COMMENTS = "comments";

    public static final String DOM_DATATYPE_NORMALIZATION = "datatype-normalization"; // Unsupported

    public static final String DOM_ELEMENT_CONTENT_WHITESPACE = "element-content-whitespace";

    public static final String DOM_ENTITIES = "entities";

    public static final String DOM_INFOSET = "infoset";

    public static final String DOM_NAMESPACES = "namespaces";

    public static final String DOM_NAMESPACE_DECLARATIONS = "namespace-declarations";

    public static final String DOM_NORMALIZE_CHARACTERS = "normalize-characters"; // Unsupported

    public static final String DOM_SPLIT_CDATA = "split-cdata-sections";

    public static final String DOM_VALIDATE_IF_SCHEMA = "validate-if-schema"; // Unsopported

    public static final String DOM_VALIDATE = "validate"; // Unsopported

    public static final String DOM_WELLFORMED = "well-formed";

    // DOM Level 3 Save
    public static final String DOM_DISCARD_DEFAULT_CONTENT = "discard-default-content";

    public static final String DOM_FORMAT_PRETTY_PRINT = "format-pretty-print";

    public static final String DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS = "ignore-unknown-character-denormalizations"; // Unsupported

    public static final String DOM_XMLDECL = "xml-declaration";

    // DOM Properties
    public static final String DOM_ERROR_HANDLER = "error-handler";

    public static final String DOM_SCHEMA_TYPE = "schema-type"; // Unsupported

    public static final String DOM_SCHEMA_LOCATION = "schema-location"; // Unsupported

    // ************************************************************************

    // XSL Output properties
    // The xsl:output 'indent' property used in LSSerializer 
    public static final String S_XSL_OUTPUT_INDENT = "indent";

    // The xsl:output 'indent' property used in LSSerializer 
    public static final String S_XSL_OUTPUT_ENCODING = "encoding";

    // The xsl:output 'omit-xml-declaration' property used in LSSerializer 
    public static final String S_XSL_OUTPUT_OMIT_XML_DECL = "omit-xml-declaration";

    // The xerces serializer specific 'omit-xml-declaration' property used in LSSerializer 
    public static final String S_XML_VERSION = "xml-version";

    //     
    public static final String S_XSL_VALUE_ENTITIES = "org/apache/xml/serializer/XMLEntities";
    
    // Parameter values
    public static final String DOM3_EXPLICIT_TRUE = "explicit:yes";

    public static final String DOM3_DEFAULT_TRUE = "default:yes";

    public static final String DOM3_EXPLICIT_FALSE = "explicit:no";

    public static final String DOM3_DEFAULT_FALSE = "default:no";

    // DOM Exceptions
    public static final String DOM_EXCEPTION_FEATURE_NOT_FOUND = "FEATURE_NOT_FOUND";

    public static final String DOM_EXCEPTION_FEATURE_NOT_SUPPORTED = "FEATURE_NOT_SUPPORTED";

    public static final String DOM_LSEXCEPTION_SERIALIZER_ERR = "SERIALIZER_ERROR";

}
