<?xml version="1.0" encoding="UTF-8" ?> 
<!--
 * 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.
 -->

<taeDescription xmlns="http://uima.apache.org/resourceSpecifier">
  <frameworkImplementation>org.apache.uima.cpp</frameworkImplementation>
  <primitive>true</primitive>
<annotatorImplementationName>dummyAnnot</annotatorImplementationName>


<analysisEngineMetaData>
  <name>dummy</name>
  <description>place holder for type and index definitinons.</description>
  <version>1.0</version>
  <vendor>IBM</vendor>


<!--
  Configuration Parameter Definitions
-->
        <configurationParameters/>

<!--
        Values for the configuration parameters
-->
        <configurationParameterSettings/>
 

<!--
        TypeSystem Definition
-->

<typeSystemDescription>
  <imports>
    <import location="testTypeSystem.xml"/>
  </imports>
</typeSystemDescription>
        

<!--
Capabilities: Inputs, Outputs, and Preconditions
-->
<capabilities>
  <capability>
    <inputs/>
    <outputs/>
    <languagesSupported/>
  </capability>
</capabilities>

</analysisEngineMetaData>
</taeDescription>
