<html>
  <!--
   ***************************************************************
   * 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.
   ***************************************************************
   -->

<head>
  <title>Apache UIMA Ruta v2.2.1 Release Notes</title>
</head>
<body>
<h1>Apache UIMA&#8482; Ruta v2.2.1 Release Notes</h1>

<h2>Contents</h2>
<p>
<a href="#what.is.uima-as">1. What is UIMA Ruta</a><br/>
<a href="#major.changes">2. Major Changes in this Release</a><br/>
<a href="#get.involved">3. How to Get Involved</a><br/>
<a href="#report.issues">4. How to Report Issues</a><br/>
<a href="#list.issues">5. List of JIRA Issues Fixed in this Release</a>
</p>  
   
<h2><a name="what.is.uima-as">1. What is UIMA Ruta?</a></h2>

     <p>
  			Apache UIMA&#8482; Ruta is a rule-based script language supported by Eclipse-based tooling.
      The language is designed to enable rapid development of text processing applications within UIMA. 
      A special focus lies on the intuitive and flexible domain specific language for defining 
      patterns of annotations. The Eclipse-based tooling for Ruta, called the Ruta Workbench,
      was created to support the user and to facilitate every step when writing Ruta rules. Both the 
      Ruta rule language and the Ruta Workbench integrate smoothly with Apache UIMA.
			</p>

<h2><a name="major.changes">2. Major Changes in this Release</a></h2>
<p>
<h3>UIMA Ruta Language and Analysis Engine:</h3>
<ul>
  <li>
    Bug fixes
  </li>
 </ul>
<h3>UIMA Ruta Workbench:</h3>
 <ul>
  <li>
    Bug fixes
  </li>
 </ul>
</p>
<p>
Please see the <a href="README">README</a> for further information. 
</p> 
  
  
<h2><a name="get.involved">3. How to Get Involved</a></h2>
<p>
The Apache UIMA Ruta project really needs and appreciates any contributions, 
including documentation help, source code and feedback.  If you are interested
in contributing, please visit 
<a href="http://uima.apache.org/get-involved.html">
  http://uima.apache.org/get-involved.html</a>.
</p>
  
<h2><a name="report.issues">4. How to Report Issues</a></h2>
<p>
The Apache UIMA project uses JIRA for issue tracking.  Please report any 
issues you find at 
<a href="http://issues.apache.org/jira/browse/uima">http://issues.apache.org/jira/browse/uima</a>
</p>
  
<h2><a name="list.issues">5. List of JIRA Issues Fixed in this Release</a></h2>

Click <a href="issuesFixed/jira-report.html">issuesFixed/jira-report.html</a> for the list of 
issues fixed in this release.

</body>
</html>