<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.8.0 Release Notes</title>
</head>
<body>
<h1>Apache UIMA Ruta&#8482; v2.8.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>
    This release contains changed in the analysis engine descriptor and the type system descriptors 
    and therefore requires an update of the Ruta projects. This can be accomplished for example by 
    right-click on the Ruta project, selecting "UIMA Ruta" and then "Update Project".
</p>
<p>
  <p>UIMA Ruta Language and Analysis Engine:</p>
  <ul>
  	<li>The analysis engine is able to generate debug information about inlined rules which includes also an extension of the ruta type system.</li>
    <li>Type expressions in dot notation for annotation expressions a new supported: a1:ANY a2:ANY{a1.type==a2.type -> Type};</li>
    <li>Matching on string literals is no more restricted to single RutaBasic annotations, e.g., it is not possible to write: "This is a test"{-> Test};</li>
    <li>Dictionary matching is now more robust concerning white spaces in the word list. The parameter dictRemoveWS is now also set to true by default.</li>
    <li>Fixed anchors at composed rule elements.</li>
    <li>Labels at macro actions are supported now.</li>
    <li>Fixed several bugs.</li>
  </ul>
  <p>UIMA Ruta Workbench:</p>
  <ul>
  	<li>New view for visualizing the explanation of inlined rules.</li>
    <li>Fixed problem with blocked build processes in Ruta projects with many scripts.</li>
    <li>Fixed bugs.</li>
  </ul>
</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>