<?xml version="1.0" encoding="UTF-8"?>
<!--
 * Copyright 2001-2009 The Apache Software Foundation.
 *
 * Licensed 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.
 *
 */ -->
<!-- 
  In this file, you only need to edit the tModelKey just below.  This will determine your root partition; the base that all system-generated
  keys will use.  The keywords "uddi" and "keygenerator" must enclose the partition, but you are free to edit the interior.  The general format
  is a domain name followed by a colon-delimited list of keywords (known as key-specific strings).
  
  Examples:
  
  uddi:www.mycompany.com:registry:keygenerator
  uddi:uddi.acme.com:keygenerator
  uddi:engineering.umich.edu:soa:ubr:keygenerator
 -->
<tModel tModelKey="uddi:another.juddi.apache.org:keygenerator" xmlns="urn:uddi-org:api_v3">
  <name>uddi-org:keyGenerator</name>
  <description>Root domain key generator</description>
  <overviewDoc>
    <overviewURL useType="text">
      http://uddi.org/pubs/uddi_v3.htm#keyGen</overviewURL>
  </overviewDoc>
  <categoryBag>
    <keyedReference tModelKey="uddi:uddi.org:categorization:types" keyName="uddi-org:types:keyGenerator"
      keyValue="keyGenerator" />
  </categoryBag>
</tModel>
