<?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.ruta_perspective">
  <title>UIMA Ruta Perspective</title>
  <para>
    The UIMA Ruta perspective is the main view to manage UIMA Ruta
    projects. There are several views associated with the UIMA Ruta
    perspective: Annotation Test, Annotation Browser, Selection,
    TextRuler and Ruta Query. Since Annotation Test, TextRuler and
    Ruta Query have a stand-alone functionality. They are explained
    in separate sections.
  </para>

  <para>
    To make it possible to reproduce all of the examples used below,
    switch to the UIMA Ruta Explain perspective within your Eclipse
    workbench.
    Import the UIMA Ruta example project and open the main
    UIMA Ruta script file 'Main.ruta'. Now press the 'Run' button (green
    arrow) and wait for the end of execution. Open the resulting xmiCAS
    file 'Test1.txt.xmi', which you can find in the output folder.
  </para>

  <section
    id="section.ugr.tools.ruta.workbench.ruta_perspective.annotation_browser">
    <title>Annotation Browser</title>
    <para>
      The Annotation Browser can be used to view the annotations
      created by the execution of a UIMA Ruta project. If an xmiCAS file
      is opened and active in the editor, the related annotations are shown
      in this view.
    </para>
    <para>
      The result of the execution of the UIMA Ruta example project is
      shown in <xref linkend='figure.ugr.tools.ruta.workbench.ruta_perspective.annotation_browser' />.
      You can see that there are 5 annotations of 5 different types in the document. 
      Highlighting of certain types can be controlled by the checkboxes in the tree view. 
      The names of the types are abbreviated by their package constituents. Full type names are provided by tooltips
      and can be copied into the clipboard by hitting 'ctrl + c'. 
      This can be especially useful to paste a type name into the Query View.    
    </para>
    <para>
      <figure
        id="figure.ugr.tools.ruta.workbench.ruta_perspective.annotation_browser">
        <title> Annotation Browser view
        </title>
        <mediaobject>
          <imageobject role="html">
            <imagedata width="300px" format="PNG" align="center"
              fileref="&imgroot;ruta/AnnotationBrowser_2.2.0.png" />
          </imageobject>
          <imageobject role="fo">
            <imagedata width="3.0in" format="PNG" align="center"
              fileref="&imgroot;ruta/AnnotationBrowser_2.2.0.png" />
          </imageobject>
          <textobject>
            <phrase>
              Annotation Browser view.
            </phrase>
          </textobject>
        </mediaobject>
      </figure>
    </para>
    <para>
      Moreover, this view has two possible filters. Using the
      <quote>Only types with...</quote>-filter leads to a list containing only those types that contain
      the entered text. 
      The <quote>Only annotations with...</quote>-filter leads to an analogous list. 
      Both list filters can be quickly activated by hitting the return key. 
    </para>
	<para>
		Type highlighting can be reset by the action represented by a
		switched-off light bulb at the top of the view. 
		The light bulb that is turned on sets all types visible in the tree view of the page highlighted in the CAS editor.   
	</para>
	<para>
      The offsets of selected annotations can be modified with ctrl + u (reduce begin), ctrl + i (increase begin), ctrl + o (reduce end), and ctrl + p (increase end).
    </para>
    <para>
      The user can choose whether parent types are displayed using the preference page <quote>UIMA Cas Editor -> Cas Editor Views</quote>.
    </para>
  </section>

  <section id="section.ugr.tools.ruta.workbench.ruta_perspective.selection">
    <title>Selection</title>
    <para>
      The Selection view is very similar to the Annotation Browser
      view, but only shows annotations that affect a specific text passage.
      To get such a list, click on any position in the opened xmiCAS
      document or select a certain text passage.
    </para>
    <para>
      If you select the text passage
      <literal>2008</literal>, the Selection view will be generated as shown in
      <xref linkend='figure.ugr.tools.ruta.workbench.ruta_perspective.annotation_browser' />.
    </para>
    <para>
      <figure id="figure.ugr.tools.ruta.workbench.ruta_perspective.selection">
        <title> Selection view
        </title>
        <mediaobject>
          <imageobject role="html">
            <imagedata width="560px" format="PNG" align="center"
              fileref="&imgroot;ruta/selection.png" />
          </imageobject>
          <imageobject role="fo">
            <imagedata width="5.5in" format="PNG" align="center"
              fileref="&imgroot;ruta/selection.png" />
          </imageobject>
          <textobject>
            <phrase>
              Selection view.
            </phrase>
          </textobject>
        </mediaobject>
      </figure>
    </para>
    <para>
      The Selection view has the same filtering and modification options as
      described in Annotation Browser view.
    </para>
  </section>

</section>