<?xml version="1.0"?>
<!--***********************************************************
 * 
 * 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.
 * 
 ***********************************************************-->


<oor:component-schema xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" oor:name="Accelerators" oor:package="org.openoffice.Office" xml:lang="en-US">
    <info>
        <desc>Configuration of Accelerators replacing the old not XCU-based configuration</desc>
    </info>
	<templates>
		<group oor:name="Key">		
            <info>
                <desc>document the Key format</desc>
            </info>	
            <prop oor:name="Command" oor:type="xs:string" oor:localized="true">
				<info>
					<desc>e.g..uno:About</desc>
				</info>
            </prop>	
		</group>
		<set oor:name="Module" oor:node-type="Key">
            <info>
                <desc>point to a module of OOo</desc>
            </info>		
		</set>
	</templates>
	<component>
	    <group oor:name="PrimaryKeys">
	        <info>
	            <desc>contains the preferred keys</desc>
	        </info>
	        <set oor:name="Global" oor:node-type="Key">
	            <info>
				    <desc>Defined as key-values pairs</desc>
	            </info>
	        </set>
	        <set oor:name="Modules" oor:node-type="Module">
	            <info>
				    <desc>containing the modules of OOo, defined as key-values pairs</desc>
	            </info>
	        </set>	        
	    </group>
	    <group oor:name="SecondaryKeys">
	        <info>
	            <desc>contains the secondary keys</desc>
	        </info>
	        <set oor:name="Global" oor:node-type="Key">
	            <info>
				    <desc>Defined as key-values pairs</desc>
	            </info>
	        </set>
	        <set oor:name="Modules" oor:node-type="Module">
	            <info>
				    <desc>containing the modules of OOo, defined as key-values pairs</desc>
	            </info>
	        </set>	        
	    </group>	    
	</component>
</oor:component-schema>
