<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.1.0 Release Notes</title>
</head>
<body>
<h1>Apache UIMA&#8482; Ruta v2.1.0 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>
   Combinations of rule elements that specify no sequential constraint
  </li>
  <li>
    Rule elements with inlined rules, which are interpreted as "actions" or "conditions"
  </li>
  <li>
    Dot notation for accessing features, also available as matching conditions
  </li>
  <li>
    Implicit actions and conditions
  </li>
  <li>
    New analysis engines for CAS manipulation
  </li>
  <li>
    Direct import of uimaFIT analysis engines without descriptor
  </li>
  <li>
    RutaEngine is now a uimaFIT component
  </li>
  <li>
    Manual specification of the start anchor for a rule match
  </li>
  <li>
    Many bug fixes
  </li>
 </ul>
<h3>UIMA Ruta Workbench:</h3>
 <ul>
  <li>
    Compatible with uimaj 2.4.2 and Eclipse Kepler
  </li>
  <li>
    New framework for constraint-driven evaluation
  </li>
  <li>
    Two new rule learning algorithms for the TextRuler Framework
  </li>
  <li>
    New views, e.g., Annotation Check and Html viewer
  </li>
  <li>
   Combinations with java projects
  </li>
  <li>
    Open CAS Editor at Eclipse startup causes less problems
  </li>
  <li>
    Many 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>