<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd"[
<!ENTITY imgroot "images/tools/ruta/workbench/" >
<!ENTITY % uimaents SYSTEM "../../target/docbook-shared/entities.ent" >  
%uimaents;
]>
<!-- 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. -->

<section id="section.ugr.tools.ruta.workbench.overview">
  <title>UIMA Ruta Workbench Overview</title>
  <para>
    The UIMA Ruta Workbench provides two main perspectives.
    <orderedlist numeration="arabic">
      <listitem>
        <para>
          The
          <quote>UIMA Ruta perspective</quote>, which provides the main functionality for working on UIMA Ruta projects. See
          <xref linkend='section.ugr.tools.ruta.workbench.ruta_perspective' />.
        </para>
      </listitem>
      <listitem>
        <para>
          The
          <quote>Explain perspective</quote>, which provides functionality primarily used to explain how a set of rules
          are executed on input documents. See
          <xref linkend='section.ugr.tools.ruta.workbench.explain_perspective' />.
        </para>
      </listitem>
    </orderedlist>
  </para>
  <para>
    The following image shows the UIMA Ruta perspective.
    <figure id="figure.ugr.tools.ruta.workbench.overview.ruta_perspective">
      <title> The UIMA Ruta perspective.
      </title>
      <mediaobject>
        <imageobject role="html">
          <imagedata width="576px" format="PNG" align="center"
            fileref="&imgroot;overview/screenshot_ruta_perspective_.png" />
        </imageobject>
        <imageobject role="fo">
          <imagedata width="5.5in" format="PNG" align="center"
            fileref="&imgroot;overview/screenshot_ruta_perspective_.png" />
        </imageobject>
        <textobject>
          <phrase>
            The UIMA Ruta perspective.
          </phrase>
        </textobject>
      </mediaobject>
    </figure>
    As you can see, the UIMA Ruta perspective provides an editor for editing documents, e.g.,
    UIMA Ruta scripts, and several views for different other tasks. The Script Explorer, for
    example, helps to manage your UIMA Ruta projects.
  </para>
  <para>
    The following
    <xref linkend='table.ugr.tools.ruta.workbench.overview.views' />
    lists all available UIMA Ruta views:
    <table id="table.ugr.tools.ruta.workbench.overview.views" frame="all">
      <title>UIMA Ruta views</title>
      <tgroup cols="2" colsep="1" rowsep="1">
        <colspec colname="c1" colwidth="1*" />
        <colspec colname="c2" colwidth="1*" />
        <thead>
          <row>
            <entry align="center">View</entry>
            <entry align="center">Detailed description</entry>
          </row>
        </thead>
        <tbody>
          <row>
            <entry>Annotation Test</entry>
            <entry>
              See
              <xref linkend='section.ugr.tools.ruta.workbench.testing.usage' />
            </entry>
          </row>
          <row>
            <entry>Applied Rules</entry>
            <entry>
              See
              <xref linkend='section.ugr.tools.ruta.workbench.explain_perspective.applied_rules' />
            </entry>
          </row>
          <row>
            <entry>Check Annotations</entry>
            <entry>
              See
              <xref linkend='section.tools.ruta.workbench.check' />
            </entry>
          </row>
          <row>
            <entry>Covering Rules</entry>
            <entry>
              See
              <xref linkend='section.ugr.tools.ruta.workbench.explain_perspective.covering_rules' />
            </entry>
          </row>
          <row>
            <entry>Created By</entry>
            <entry>
              See
              <xref linkend='section.ugr.tools.ruta.workbench.explain_perspective.created_by' />
            </entry>
          </row>
          <row>
            <entry>Failed Rules</entry>
            <entry>
              See
              <xref linkend='section.ugr.tools.ruta.workbench.explain_perspective.matched_and_failed_rules' />
            </entry>
          </row>
          <row>
            <entry>False Negative</entry>
            <entry>
              See
              <xref linkend='section.ugr.tools.ruta.workbench.testing.usage' />
            </entry>
          </row>
          <row>
            <entry>False Positive</entry>
            <entry>
              See
              <xref linkend='section.ugr.tools.ruta.workbench.testing.usage' />
            </entry>
          </row>
          <row>
            <entry>Matched Rules</entry>
            <entry>
              See
              <xref linkend='figure.ugr.tools.ruta.workbench.explain_perspective.matched_and_failed_rules' />
            </entry>
          </row>
          <row>
            <entry>Rule Elements</entry>
            <entry>
              See
              <xref linkend='section.ugr.tools.ruta.workbench.explain_perspective.rule_elements' />
            </entry>
          </row>
          <row>
            <entry>Rule List</entry>
            <entry>
              See
              <xref linkend='section.ugr.tools.ruta.workbench.explain_perspective.rule_list' />
            </entry>
          </row>
          <row>
            <entry>Statistics</entry>
            <entry>
              See
              <xref linkend='section.ugr.tools.ruta.workbench.explain_perspective.statistics' />
            </entry>
          </row>
          <row>
            <entry>Ruta Query</entry>
            <entry>
              See
              <xref linkend='section.ugr.tools.ruta.workbench.ruta_query' />
            </entry>
          </row>
          <row>
            <entry>TextRuler</entry>
            <entry>
              See
              <xref linkend='section.tools.ruta.workbench.textruler' />
            </entry>
          </row>
          <row>
            <entry>TextRuler Results</entry>
            <entry>
              See
              <xref linkend='section.tools.ruta.workbench.textruler' />
            </entry>
          </row>
          <row>
            <entry>True Positive</entry>
            <entry>
              See
              <xref linkend='section.ugr.tools.ruta.workbench.testing.usage' />
            </entry>
          </row>
        </tbody>
      </tgroup>
    </table>
  </para>
  <para>
    The following
    <xref linkend='table.ugr.tools.ruta.workbench.overview.wizards' />
    lists all UIMA Ruta wizards:
    <table id="table.ugr.tools.ruta.workbench.overview.wizards" frame="all">
      <title>UIMA Ruta wizards</title>
      <tgroup cols="2" colsep="1" rowsep="1">
        <colspec colname="c1" colwidth="1*" />
        <colspec colname="c2" colwidth="1*" />
        <thead>
          <row>
            <entry align="center">Wizard</entry>
            <entry align="center">Detailed description</entry>
          </row>
        </thead>
        <tbody>
          <row>
            <entry>Create UIMA Ruta project</entry>
            <entry>
              See
              <xref linkend='section.ugr.tools.ruta.workbench.projects.create_projects' />
            </entry>
          </row>
        </tbody>
      </tgroup>
    </table>
  </para>
</section>