<?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.
	 ***************************************************************
   -->
   
<typeSystemDescription  xmlns="http://uima.apache.org/resourceSpecifier">
	<name>TutorialTypeSystem</name>
	<description>Type System Definition for the tutorial examples - as of Exercise 1</description>
	<vendor>The Apache Software Foundation</vendor>
	<version>1.0</version>
	<types>
		<typeDescription>
			<name>org.apache.uima.tutorial.RoomNumber</name>
			<description></description>
			<supertypeName>uima.tcas.Annotation</supertypeName>
			<features>
				<featureDescription>
					<name>building</name>
					<description>Building containing this room</description>
					<rangeTypeName>uima.cas.String</rangeTypeName>
				</featureDescription>
			</features>
		</typeDescription>
	</types>
</typeSystemDescription>