<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.4.0 Release Notes</title>
</head>
<body>
<h1>Apache UIMA Ruta&#8482; v2.4.0 Release Notes</h1>

<h2>Contents</h2>
<p>
<a href="#what.is.uima-ruta">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-ruta">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>
  <p>UIMA Ruta Language and Analysis Engine:</p>
  <ul>
    <li>Explicit referencing of annotations with variables, labels and addresses</li>
    <li>Helper methods for applying rules directly in Java code</li>
    <li>New action for splitting annotations</li>
    <li>New block for resetting match context</li>
    <li>Import of uimaFIT analysis engines with manditory parameters</li>
    <li>Macros for conditions and actions (prototypical)</li>
    <li>Limited support of UIMA arrays (prototypical)</li>
    <li>Many, many bug fixes and improvements</li>
  </ul>
  <p>UIMA Ruta Workbench:</p>
  <ul>
    <li>More support of external files</li>
    <li>Bug fixes</li>
  </ul>
  <p>
    This release requires an update of script projects and its descriptors in the UIMA Ruta Workbench, 
   e.g, by deleting all descriptors and updating the script project.
   Right-click on a project and select "UIMA Ruta -&gt; Convert to UIMA Ruta project
</p>
</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>