/**************************************************************
 * 
 * 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.
 * 
 *************************************************************/


#ifndef _com_sun_star_xml_UserDefinedAttributeSupplier_idl_
#define _com_sun_star_xml_UserDefinedAttributeSupplier_idl_

#ifndef __com_sun_star_container_XNameContainer_idl__ 
#include <com/sun/star/container/XNameContainer.idl>
#endif

module com { module sun { module star { module xml { 

/** A component that supports this service preserves XML attributes,
    unknown by its parser, that belong to the XML element representing
    it (the component).

    @since OOo 1.1.2

    @deprecated     because of typo in service name.
            Please use the service UserDefinedAttributesSupplier instead.

    @see    <type scope="com::sun::star::xml">UserDefinedAttributesSupplier</type>
*/
published service UserDefinedAttributeSupplier
{
    /** This container holds the <type>AttributeData</type> elements
        that represent uninterpreted XML attributes.

        <p>The idea behind this property is that a parser can stow
        away all attributes that it cannot handle by itself on reading
        an XML file.  When the file is stored again, the unknown
        attributes can be written back without loss.</p>

        <p>The
        <type scope="com::sun::star::container">XNameContainer</type>
        supports the service <type>AttributeContainer</type>.</p>

        @deprecated     because of typo in service name.
                Please use the service UserDefinedAttributesSupplier instead.

        @see    <type scope="com::sun::star::xml">UserDefinedAttributesSupplier</type>
     */
    [property] ::com::sun::star::container::XNameContainer  UserDefinedAttributes;
};

}; }; }; }; 

#endif
