<?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.    
-->

<analysisEngineDescription xmlns="http://uima.apache.org/resourceSpecifier">
	<frameworkImplementation>org.apache.uima.java
	</frameworkImplementation>
	<primitive>true</primitive>
	<annotatorImplementationName>opennlp.uima.sentdetect.SentenceDetector</annotatorImplementationName>
	<analysisEngineMetaData>
		<name>Sentence Detector</name>
		<description></description>
		<version>${pom.version}</version>
		<vendor>Apache Software Foundation</vendor>
		<configurationParameters>
			<configurationParameter>
				<name>opennlp.uima.SentenceType</name>
				<type>String</type>
				<multiValued>false</multiValued>
				<mandatory>true</mandatory>
			</configurationParameter>
			<configurationParameter>
				<name>opennlp.uima.ContainerType</name>
				<type>String</type>
				<multiValued>false</multiValued>
				<mandatory>false</mandatory>
			</configurationParameter>
		</configurationParameters>
		
		<configurationParameterSettings>
			<nameValuePair>
				<name>opennlp.uima.SentenceType</name>
				<value>
					<string>org.apache.opennlp.annotations.Sentence</string>
				</value>
			</nameValuePair>
		</configurationParameterSettings>
		
		<typeSystemDescription>
			<imports>
				<import location="TypeSystem.xml" />
			</imports>
		</typeSystemDescription>
		
		<capabilities>
			<capability>
				<inputs />
				<outputs />
				<languagesSupported>
					<language>en</language>
				</languagesSupported>
			</capability>
		</capabilities>
	</analysisEngineMetaData>

	<externalResourceDependencies>
		<externalResourceDependency>
			<key>opennlp.uima.ModelName</key>
			<interfaceName>opennlp.uima.sentdetect.SentenceModelResource</interfaceName>
		</externalResourceDependency>
	</externalResourceDependencies>
</analysisEngineDescription>
