<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 v3.1.0 Release Notes</title>
</head>
<body>
<h1>Apache UIMA Ruta&#8482; v3.1.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 provides compatibility to UIMA v3. An upgrade from UIMA Ruta v2 to this version requires 
  also an update to UIMA v3 of the overall application or Eclipse installation. Please refer to the 
  UIMA v3 user's guide for detailed information: https://uima.apache.org/d/uimaj-3.0.0/version_3_users_guide.html
</p>
<p>
  <p>UIMA Ruta Language and Analysis Engine:</p>
  <ul>
  	<li>New config parameter for internal indexing strategy.</li>
  	<li>New config parameter for indexing all debug information.</li>
  	<li>New config parameter for type disambiguation.</li>
  	<li>TextSeeder is the new default seeder (faster, no MARKUP annotations).</li>
    <li>Improved null check using label expression.</li>
    <li>Improved conjunctive and disjunctive rule elements.</li>
    <li>Improved conjunct rules.</li>
    <li>Improved implementation of SPLIT, FILL, ADD, REMOVE, AFTER.</li>
    <li>Improved documentation.</li>
  </ul>
  <p>UIMA Ruta Workbench:</p>
  <ul>
    <li>Fixed problems launching script using newer Java versions (LayerInstantiationException).</li>
    <li>Fixed console logging when launching scripts.</li>
    <li>Improved compatibility with dark mode.</li>
  </ul>
  <p>UIMA Ruta Maven Plugin:</p>
  <ul>
    <li>Fail on error by default.</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="https://uima.apache.org/get-involved.html">
  https://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="https://issues.apache.org/jira/browse/uima">https://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>