<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.3.1 Release Notes</title>
</head>
<body>
<h1>Apache UIMA Ruta&#8482; v2.3.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 Ruta&#8482; is a rule-based script language supported by Eclipse-based tooling.
      The language is designed to enable rapid development of text processing applications within Apache UIMA&#8482;. 
      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>
  This is a bugfix release. It fixes diverse problems of the rule inference, the ruta-maven-plugin and the UIMA Ruta Workbench.
</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>