<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd"[
<!ENTITY imgroot "images/tools/tools.textmarker/" >
<!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.
-->
<chapter id="ugr.tools.tm.overview">
  <title>TextMarker Overview</title>
  <para>
   
  </para>
  <section id="ugr.tools.tm.overview.intro">
    <title>What is TextMarker?</title>
    <para>
      Apache UIMA&#8482; TextMarker 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 
      and a special focus lies on the intuitive and flexible domain specific language for defining 
      patterns of annotations. Writing rules for information extraction or other text processing 
      applications is a tedious process. The Eclipse-based tooling for TextMarker, called the TextMarker Workbench,
      was created to support the user and to facilitate every step when writing TextMarker rules.
      The TextMarker rule language and the TextMarker Workbench integrate both smoothly with Apache UIMA.
    </para>
  </section>
  
  <section id="ugr.tools.tm.overview.gettingstarted">
    <title>Getting started</title>
    <para>
      This section gives a short roadmap how to read the documentation and gives some recommendations how to 
      start developing TextMarker-based applications. This documentation assumes that the user knows about 
      the core concepts of Apache UIMA. Knowledge about the meaning and usage of at least the terms <quote>CAS</quote>, 
      <quote>Feature Structure</quote>, <quote>Annotation</quote>, <quote>Type</quote>, <quote>Type System</quote> 
      and <quote>Analysis Engine</quote> is required. Please refer to the documentation of Apache UIMA for an introduction.
    </para>
    <para>  
      Unexperienced users that want to learn about TextMarker can start with the next two sections: 
      <xref linkend="ugr.tools.tm.overview.coreconcepts"/>
      gives a short overview about the core ideas and features of the TextMarker language and Workbench. 
      This section introduces the main concepts of the TextMarker language. It explains how TextMarker rules 
      are composed and applied, and discusses the advantages of the TextMarker system.
      The following <xref linkend="ugr.tools.tm.overview.examples"/> approaches the TextMarker language using a different
      perspective. Here, the language is introduced only with examples. The first example starts with explaining how a simple rule
      looks like, and each following example extends the syntax or semantics of the TextMarker language. 
      After the consultation of these two sections, the reader should know enough to start writing her first TextMarker-based application.
    </para>  
    <para>
      The TextMarker Workbench was created to support the user and to facilitate the development process. It is strongly recommended to 
      use this Eclipse-based IDE since it, for example, automatically configures the component descriptors and provides editing support like
      syntax checking. <xref linkend="section.ugr.tools.tm.workbench.install"/> describes how the TextMarker Workbench is installed.
      TextMarker rules can of course also be applied on CAS without using the TextMarker Workbench. 
      <xref linkend="ugr.tools.tm.ae.basic.apply"/> contains examples how to execute TextMarker rules in plain java.
      A good way to get started with TextMarker is to play around with an exemplary TextMarker project, e.g., 
      <uri>https://svn.apache.org/repos/asf/uima/sandbox/trunk/TextMarker/example-projects/ExampleProject</uri>. This TextMarker project 
      contains some simple rules for processing citation metadata.
    </para>  
    <para>    
      <xref linkend="ugr.tools.tm.language.language"/> and <xref linkend="ugr.tools.tm.workbench"/> provide 
      more detailed descriptions and can be referred to in order to gain knowledge about specific parts 
      of the TextMarker language or the TextMarker Workbench.    
    </para>  
  </section>
  
  <section id="ugr.tools.tm.overview.coreconcepts">
    <title>Core Concepts</title>
    <para>
      The TextMarker language is an imperative rule language extended with scripting elements. A TextMarker rule defines a
      pattern of annotations with additional conditions. If this pattern applies, then the actions of the rule are performed 
      on the matched annotations. A rule is composed of a sequence of rule elements and a rule element essentially consist of four parts: 
      A matching condition, an optional quantifier, a list of conditions and a list of actions.
      The matching condition is typically a type of an annotation by which the rule element matches on the covered text of one of those annotations.
      The quantifier specifies, whether it is necessary that the rule element successfully matches and how often the rule element may match.
      The list of conditions specify additional constraints that the matched text or annotations need to fulfill. The list of actions defines
      the consequences of the rule and often create new annotations or modify existing annotations. 
      They are only applied if all rule elements of the rule have successfully matched. Examples for TextMarker rules can be found in 
      <xref linkend="ugr.tools.tm.overview.examples"/>.
    </para>
    <para>
      When TextMarker rules are applied on a document, respectively on a CAS, then they are always grouped in a script file. However, a TextMarker
      script file contains not only rules, but also other statements. First of all, each script file starts with a package declaration followed by
      a list of optional imports. Then, common statements like rules, type declarations or blocks build the body and functionality of a script.
      <xref linkend="ugr.tools.tm.ae.basic.apply"/> gives an example, how TextMarker scripts can be applied in plain Java.
      TextMarker script files are naturally organized in TextMarker projects, which is a concept of the TextMarker Workbench. 
      The structure of a TextMarker project is described in <xref linkend="section.ugr.tools.tm.workbench.projects"/>
    </para>
    <para>
      The inference of TextMarker rules, that is the approach how the rules are applied, can be described as imperative, depth-first matching.
      In contrast to similar rule-based systems, TextMarker rules are applied in the order they are defined in the script.
      The imperative execution of the matching rules may have disadvantages, but also many advantages like an increased rate of development or 
      an easier explanation. The second main property of the TextMarker inference is the depth-first matching. When a rule matches on a pattern of annotations, then
      an alternative is always tracked until it has matched or failed before the next alternative is considered. Therefore, the behavior of a rule may change, if 
      it has already matched on a early alternative and thus performed an action, which influences some constraints of the rule.
      Examples, how TextMarker rules are applied, are given in <xref linkend="ugr.tools.tm.overview.examples"/>.
    </para>
    <para>
      The TextMarker language provides the possibility to approach an annotation problem in different ways. Let us distinguish 
      some approaches as an example.
      It is common in the TextMarker language to create many annotations of different types. These annotations are probably not the targeted annotation of the domain,
      but can be helpful to incrementally approximate that interesting annotation. This enables the user to work <quote>bottom-up</quote> and <quote>top-down</quote>.
      In the former approach, the rules add incrementally more complex annotations using simple ones until the target annotation could be created.
      In the latter approach, the rules get more and more specific while partitioning the document in smaller segments, which result in the targeted annotation in the end.
      By using many <quote>helper</quote>-annotations the engineering task becomes easier and more comprehensive.
      The TextMarker language provides distinctive language elements for different tasks. There are, for example, actions 
      that are able to create new annotations, actions that are able to remove annotations and actions that are able to modify the
      offsets of an annotation. This enables - amongst other things - an transformation-based approach. The user starts by creating general rules that are able to
      annotate most of the interesting text fragments. Then, instead of making these rules more complex by adding more conditions for situations where they fail,
      additional rules are defined that correct the mistakes of the general rules, e.g., by deleting false positive annotations.
      <xref linkend="ugr.tools.tm.overview.examples"/> provides some examples how TextMarker rules can be engineered.
    </para>
    <para>
      Manually writing rules is a tedious and error-prone process. The <link linkend="ugr.tools.tm.workbench">TextMarker Workbench</link>
      was developed for facilitate writing rules by providing as much tooling support as possible. This includes, for example, syntax checking and auto completion, which
      make the development less error-prone. The user can annotate documents and use these documents as unit tests for test-driven development or 
      quality maintenance. Sometimes, it is necessary to debug the rules because they did not match as expected. For this use case, the explanation perspective provides views
      that explain every detail of the matching process. Finally, the TextMarker language can also be used by the tooling, for example, by the <quote>Query</quote> view.
      Here, the user can use TextMarker rules as query statements in order to investigate annotated documents.
    </para>
    <para>
      TextMarker smoothly integrates with Apache UIMA. First of all, the TextMarker rules are applied using a generic Analysis Engine and thus TextMarker scripts can 
      easily added to Apache UIMA pipelines. TextMarker also provides the functionality to import and use other UIMA components like Analysis Engines and Type Systems.
      TextMarker rules can refer to every type defined in an imported type system and the TextMarker Workbench generates a type system descriptor file containing all 
      types that were defined in a script file. Any Analysis Engine can be executed by rules as long as their implementation is available in the classpath. Therefore,
      functionality outsourced in an arbitrary Analysis Engine can be added and used within TextMarker.
    </para>
  </section>
  
  <section id="ugr.tools.tm.overview.examples">
    <title>Learning by Example</title>
    <para>
      This section gives a short introduction to the TextMarker language by explaining the rule syntax 
      and inference with some simplified examples. It is recommended to use the TextMarker Workbench to write TextMarker rules
      in order to gain the advantages like syntax checking. A short description how to install the TextMarker Workbench 
      is given <link linkend="section.ugr.tools.tm.workbench.install">here</link>. The following examples make use of the 
      annotations added by the default seeding of the TextMarker Analysis Engine. There meaning is explained along with the examples. 
    </para>
    <note><para>
      The examples in this section are not valid script files as they are missing at least a package declaration. 
      In order to obtain a valid script file, please ensure that all used types are imported or declared and 
      that a package declaration like <quote>PACKAGE uima.textmarker.example;</quote> is added in the first line of the script.
    </para></note>
    <para>
      The first example consists of a declaration of a type followed by a simple rule. Type declaration always starts with the keyword 
      <quote>DECLARE</quote> followed by the short name of the new type. The namespace of the type is equal to the package declaration of the script file.
      There is also the possibility to create more complex types with features or specific parent types, but this will be neglected for now.
      In the example, a simple annotation type with the short name <quote>Animal</quote> is defined.
      After the declaration of the type, a rule with one rule element is given. 
      TextMarker rules in general can consist of a sequence of rule elements. Simple rule elements themselves consist of four parts: A matching condition,
      an optional quantifier, an optional list of conditions and an optional list of actions. The rule element in the 
      following example has a matching condition <quote>W</quote>, an annotation type standing for normal words. 
      Statements like declarations and rules always end with a semicolon. 
    </para>
    
    <programlisting><![CDATA[DECLARE Animal;
W{REGEXP("dog") -> MARK(Animal)};]]></programlisting>

    <para>
      The rule element also contains one condition and one action, both surrounded by curly parentheses. In order to distinguish conditions from actions,
      they are separated by <quote>-></quote>. The condition <quote>REGEXP("dog")</quote> indicates that the matched 
      word must match the regular expression <quote>dog</quote>. If the matching condition and the additional regular expression are fulfilled, then the action
      is executed, which creates a new annotation of the type <quote>Animal</quote> with the same offsets as the matched token.
      The default seeder does actually not add annotations of the type <quote>W</quote>, but annotations of the types <quote>SW</quote> and 
      <quote>CW</quote> for small written words and capitalized words, which both have the parent type <quote>W</quote>.
    </para>

    <para>
      Since it is tedious to create Animal annotation by matching on different regular expression, we apply an external dictionary in the next example.
      The first line defines a word list named <quote>AnimalsList</quote>, which is located in the resource folder (the file <quote>Animals.txt</quote> 
      contains one animal name in each line). After the declaration of the type, a rule uses this word list to find all occurrences of animals
      in the complete document.
    </para>

    <programlisting><![CDATA[WORDLIST AnimalsList = 'Animals.txt;'
DECLARE Animal;
Document{-> MARKFAST(Animal, AnimalsList)};
]]></programlisting>
    
    <para>
      The matching condition of the rule element refers to the complete document, or more specific to the annotation of the type 
      <quote>DocumentAnnotation</quote> which covers the whole document.
      The action <quote>MARKFAST</quote> of this rule element then creates an annotation of the type <quote>Animal</quote> for each found
      entry of the dictionary <quote>AnimalsList</quote>.
    </para>
    
    <para>
      The next example introduces rules with more than one rule element, whereby one of them is a composed rule element. The goal of the following rule tries to
      annotate occurrences of animals separated by commas, e.g., <quote>dog, cat, bird</quote>. 
    </para>
    
    <programlisting><![CDATA[DECLARE AnimalEnum;
(Animal COMMA)+{-> MARK(AnimalEnum,1,2)} Animal;]]></programlisting>
    
    <para>
      The rule consists of two rule elements, <quote>(Animal COMMA)+{-> MARK(AnimalEnum,1,2)}</quote> being the first rule element and 
      <quote>Animal</quote> the second one. Lets take a closer look at the first rule element. This rule element is actually composed of two normal rule elements, 
      that are <quote>Animal</quote> and <quote>COMMA</quote>, and contains a greedy quantifier and one action. Therefore, this rule element matches on 
      one Animal annotation and a following comma. This is repeated until one of the inner rule elements do not match anymore. Then, there has to be
      another Animal annotation afterwards, specified by the second rule element of the rule. In this case, the rule matches and its action is executed:
      The MARK action creates a new annotation of the type <quote>AnimalEnum</quote>. However, in contrast to the previous examples, this action also
      contains two number. Those numbers refer to the rule elements, that should be used to calculate the span of the created annotation. The numbers 
      <quote>1, 2</quote> state that the new annotation should start with the first rule element, the composed one, and should end with the second rule element.
    </para>

    <para>
      Lets make the composed rule element a bit more complex. The following rule also matches on lists of animals, which are
      separated by semicolon. Therefore, a disjunctive rule element is added, indicated by the symbol <quote>|</quote>, which matches on
      annotations of the type <quote>COMMA</quote> or <quote>SEMICOLON</quote>.
    </para>
    <programlisting><![CDATA[(Animal (COMMA | SEMICOLON))+{-> MARK(AnimalEnum,1,2)} Animal;]]></programlisting>

    <para>
      Rule elements can of course contain more then one condition. The rule in the next example tries to identify headlines, which are bold, 
      underlined and end with a colon.
    </para>

    <programlisting><![CDATA[DECLARE Headline;
Paragraph{CONTAINS(Bold, 90, 100, true), 
    CONTAINS(Underlined, 90, 100, true), ENDSWITH(COLON) 
    -> MARK(Headline)};]]></programlisting>
    
    <para>
      The matching condition of this rule element is given with the type <quote>Paragraph</quote>, thus the rule takes a look at all Paragraph annotations.
      The rule matches only if the three conditions, separated by commas, are fulfilled. The first condition <quote>CONTAINS(Bold, 90, 100, true)</quote> states that
      90%-100% of the matched paragraph annotation should also be annotated with annotations of the type <quote>Bold</quote>. The boolean parameter <quote>true</quote>
      indicates that amount of Bold annotations should be calculated relatively to the matched annotation. Therefore, the two numbers <quote>90,100</quote> are interpreted as
      percent amounts. The exact calculation of the coverage is dependent on the tokenization of the document and is neglected for now. The second condition 
      <quote>CONTAINS(Underlined, 90, 100, true)</quote> consequently states that the paragraph should also contain at least 90% of annotations of the type <quote>underlined</quote>.
      The third condition <quote>ENDSWITH(COLON)</quote> finally forces the Paragraph annotation to end with a colon. It is only fulfilled, if there is an annotation of the type
      <quote>COLON</quote>, whose end offset is equal to the end offset of the matched Paragraph annotation.
    </para>
    
    <para>
      The readability and maintenance of rules does not increase if more and more conditions are added.
      One of the strengths of the TextMarker language is that it provides always different approaches to solve an annotation task. The next two examples 
      introduce actions for transformation-based rules.  
    </para>
    
    <programlisting><![CDATA[Headline{-CONTAINS(W) -> UNMARK(Headline)};]]></programlisting>
    
    <para>
      This rule consists of one condition and one action. The condition <quote>-CONTAINS(W)</quote> is negated (indicated by the character <quote>-</quote>), 
      and is therefore only fulfilled if there are no annotations of the type <quote>W</quote> within the bound of the matched Headline annotation.
      The action <quote>UNMARK(Headline)</quote> removes the matched Headline annotation. Put into simple words, headlines that contain no words at all are not headlines.
    </para>
    
    <para>
      The next rule does not remove an annotation, but changes its offsets dependent on the context.
    </para>
    
    <programlisting><![CDATA[]]>Headline{-> SHIFT(Headline, 1, 2)} COLON;</programlisting>
    
    <para>
      Here, the action <quote>SHIFT(Headline, 1, 2)</quote> expands the matched Headline annotation to the next colon if that Headline annotation
      is followed by a COLON annotation.
    </para>
    
    <para>
      TextMarker rules can of course contain arbitrary conditions and actions, which is illustrated by the next example.
    </para>
    
    <programlisting><![CDATA[DECLARE Month, Year, Date;
ANY{INLIST(MonthsList) -> MARK(Month), MARK(Date,1,3)}
    PERIOD? NUM{REGEXP(".{2,4}") -> MARK(Year))};]]></programlisting>

    <para>
      This rule consists of three rule elements. The first one matches on any token, whose covered token occurs in a word lists named <quote>MonthsList</quote>.
      The second rule element is optional and does not need to be fulfilled, which is indicated by the quantifier <quote>?</quote>. The last rule element matches
      on numbers that fulfill the regular expression <quote>REGEXP(".{2,4}"</quote> and are therefore at least two characters to a maximum of four character long.
      If this rule successfully matches on a text passage, then its three actions are executed: An annotation of the type <quote>Month</quote> is created for the first rule element,
      an annotation of the type <quote>Year</quote> is created for the last rule element and an annotation of the type <quote>Date</quote> 
      is created for the span of all three rule elements. If the word list contains the correct entries, then this rule matches on strings like 
      <quote>Dec. 2004</quote>, <quote>July 85</quote> or <quote>11.2008</quote> and creates the corresponding annotations.
    </para>

    <para>
      After introducing the composition of rule elements, the default matching strategy is examined. The two rules in the next example just create an annotation
      for a sequence of arbitrary tokens with the only difference of one condition.
    </para>

    <programlisting><![CDATA[DECLARE Text1, Text2;
ANY+{ -> MARK(Text1)};
ANY+{-PARTOF(Text2) -> MARK(Text2)};]]></programlisting>

    <para>
      The first rule matches on each occurrence of an arbitrary token and continues this until the end of the document is reached. 
      This is of course caused by the greedy quantifier <quote>+</quote>. Note that this rule considers each occurrence of an token and is therefore
      executed for each token resulting many overlapping annotations. Let this behavior be illustrated with an example:
      When applied on the document <quote>Peter works for Frank</quote>, the rule creates four annotations with the covered texts 
      <quote>Peter works for Frank</quote>, <quote>works for Frank</quote>, <quote>for Frank</quote> and <quote>Frank</quote>.
      The rule first tries to match on the token <quote>Peter</quote> and continues its matching. Then, it tries to match on the token <quote>works</quote> and
      continues its matching, and so on.
    </para>
    <para>
      In this example, the second rule only returns one annotation, which covers the complete document. This is caused by the additional
      condition <quote>-PARTOF(Text2)</quote>. The PARTOF condition is fulfilled, if the matched annotation is located within an annotation of the given type, or
      put in simple words, if the matched annotation is part of an annotation of the type <quote>Text2</quote>. When applied on the 
      document <quote>Peter works for Frank</quote>, the rule matches on the first token <quote>Peter</quote>, continues its match and 
      creates an annotations of the type <quote>Text2</quote> for the complete document. Then it tries to match on the second token <quote>works</quote>, but fails, 
      because this token is already part of an Text2 annotation.
    </para>
    
    <para>
      TextMarker rules can not only be used to create or modify annotations, but also to create features for annotations. The next example defines 
      and assigns a relation about employment, by storing the given annotations as feature values.
    </para>
    
    <programlisting><![CDATA[DECLARE Annotation EmplRelation 
    (Employee employeeRef, Employer employerRef);
Sentence{CONTAINS(EmploymentIndicator) -> CREATE(EmplRelation,
    "employeeRef" = Employee, "employerRef" = Employer)};]]></programlisting>

    <para>
      The first statement of this example is a declaration that defines a new type of annotation named <quote>EmplRelation</quote>. 
      This annotation has two features: 
      One feature with the name <quote>employeeRef</quote> of the type <quote>Employee</quote> and 
      one feature with the name <quote>employerRef</quote> of the type <quote>Employer</quote>.
      The second statement of this example, that is a simple rule, creates one annotation of the type <quote>EmplRelation</quote> for
      each Sentence annotation that contains at least one annotation of the type EmploymentIndicator. Additionally to creating an annotation,
      the CREATE action also assigns an annotation of the <quote>Employee</quote>, which needs to be located within the span of the matched sentence, 
      to the feature <quote>employeeRef</quote> and an Employer annotation to the feature <quote>employerRef</quote>. The annotations mentioned in this 
      example need of course to be present in advance.
    </para>

    <para>
      In the last example, the values of features were defined as annotation types. However, also primitive 
      types can be used, as will be shown in the next example, together with a short introduction of variables.
    </para>

    <programlisting><![CDATA[DECLARE Annotation MoneyAmount(STRING currency, INT amount);
INT moneyAmount;
STRING moneyCurrency;
NUM{PARSE(moneyAmount)} SPECIAL{REGEXP("€") -> MATCHEDTEXT(moneyCurrency),
    CREATE(MoneyAmount, 1, 2, "amount" = moneyAmount,
        "currency" = moneyCurrency)};]]></programlisting>

    <para>
      First, a new annotation with the name <quote>MoneyAmount</quote> and two features is defined, one string feature and one integer feature.
      Then two TextMarker variables are declared, one integer variable and one string variable. The rule matches on a number, whose value is stored 
      in the variable <quote>moneyAmount</quote>, followed by a special token that needs to be equal to the string <quote>€</quote>. Then,
      the covered text of the special annotation is stored in the string variable <quote>moneyCurrency</quote> and annotation of the
      type <quote>MoneyAmount</quote> spanning over both rule elements is created. Additionally, the variables are assigned as feature values.
    </para>

    <para>
      TextMarker script files with many rules can quickly get confusing. Therefore, TextMarker allows to import other script files in order to increase
      the modularity of a project or to create rule libraries. The next example imports the rules together with all known types of another script file
       and calls that script file.
    </para>

    <programlisting><![CDATA[SCRIPT uima.textmarker.example.SecondaryScript;
Document{-> CALL(SecondaryScript)};]]></programlisting>

    <para>
      The script file with the name <quote>SecondaryScript.tm</quote> located in the package <quote>uima/textmarker/example</quote> is imported and executed
      by the CALL action on the complete document. The script needs to be located in the folder specified by the parameter 
      <link linkend="ugr.tools.tm.ae.basic.parameter.scriptPaths">scriptPaths</link>. It is also possible to import script files of other TextMarker projects, e.g.,
      by adapting the configuration parameters of the TextMarker Analysis Engine or 
      by setting a project reference in the project properties of a TextMarker project.
    </para>

    <para>
      The types of important annotations of the application are often defined in a separate type system. The next example shows how to import those types.
    </para>

    <programlisting><![CDATA[TYPESYSTEM my.package.NamedEntityTypeSystem;
Person{PARTOF(Organization) -> UNMARK(Person)};
]]></programlisting>

    <para>
      The type system descriptor file with the name <quote>NamedEntityTypeSystem.xml</quote> located in the package <quote>my/package</quote> is imported.
      The descriptor needs to be located in a folder specified by the parameter 
      <link linkend="ugr.tools.tm.ae.basic.parameter.descriptorPaths">descriptorPaths</link>.
    </para>


    <para>
      It is sometimes easier to express some functionality with control structures known by programming languages rather than to engineer all functionality 
      only with matching rules. The TextMarker language provides the BLOCK element for some of those use cases. 
      The TextMarker BLOCK element starts with the keyword <quote>BLOCK</quote> followed by its name in parentheses. The name of a block has two purposes:
      On the one hand, its easier to distinguish the block if they have different names, e.g., in the 
      <link linkend="section.ugr.tools.tm.workbench.explain_perspective">explain perspective</link> of the TextMarker Workbench. On the other hand,
      the name can be used to execute this block using the CALL action. Hereby, it is possible to access only specific sets of rules of other script files, 
      or to implement a recursive call of rules. After the name of the block, a single rule element is given, which has curly parentheses, 
      even if no conditions or actions are specified. Then, the body of the block is framed by curly brackets.
    </para>

    <programlisting><![CDATA[BLOCK(English) Document{FEATURE("language", "en")} {
    // rules for english documents
}
BLOCK(English) Document{FEATURE("language", "de")} {
    // rules for german documents
}]]></programlisting>

    <para>
      This example contains two simpler BLOCK statements. The rules defined with the block are only executed if the condition in the head of the block is fulfilled.
      Therefore, the rules of the first block are only considered if the feature <quote>language</quote> of the document annotation has the value <quote>en</quote>.
      Following this, the rules of the second block are only considered for german documents.
    </para>

    <para>
      The rule element of the block definition can also refer to other annaotion types than <quote>Document</quote>. While the last example implemented something similar 
      to an if-statement, the next example provides a show case for something similar to a for-each-statement.
    </para>

    <programlisting><![CDATA[DECLARE SentenceWithNoLeadingNP;
BLOCK(ForEach) Sentence{} {
    Document{-STARTSWITH(NP) -> MARK(SentenceWithNoLeadingNP)};
}
]]></programlisting>
    
    <para>
      Here, the rule in the block statement is performed for each occurence of an annotation of the type <quote>Sentence</quote>. 
      The rule within the block matches on the complete document, which is the current sentence in the context of the block statement. 
      As a consequence, this example creates an annotation of the type <quote>SentenceWithNoLeadingNP</quote> for each sentence 
      that does not start with an NP annotation.
    </para>

    <para>
      Lets take a closer look on what exactly the TextMarker rules match. The following rule matches on a word followed by another word:
    </para>
    <programlisting><![CDATA[W W;]]></programlisting>
    
    <para>
      To be more precise, this rule matches on all documents like <quote>Apache UIMA</quote>, <quote>   Apache     UIMA   </quote>, <quote>ApacheUIMA</quote>,
      <quote><![CDATA[Apache <b>UIMA</b>]]></quote>. There are two main reasons for this: First of all, this depends on how the available annotations are defined. The default seeder
      for the inital annotations creates an annotation for all characters until a upper case character occurs. Thus, the string <quote>ApacheUIMA</quote> consists of 
      two tokens.
      However, more important, the TextMarker language provides a concept of visibility of the annotations. By default, all annotations of the types 
      <quote>SPACE</quote>, <quote>NBSP</quote>, <quote>BREAK</quote> and <quote>MARKUP</quote> (whitespace and XML elements) are filtered and not visible. This holds of course for
      their covered text too. The rule elements skip all positions of the
      document where those annotations occur. Therefore, the rule in the last example matches on all examples. Without the default filtering settings, 
      with all annotations set to visible, the rule matches only on the document <quote>ApacheUIMA</quote> since it is the only one that contains two word annotations without
      any whitespace between them. 
    </para>
    
    <para>
      The filtering setting can also be modified by the TextMarker rules themselves. The next example provides some rules that extend and limit 
      the amount of visible text of the document.
    </para>
    
    <programlisting><![CDATA[Sentence;
Document{-> RETAINTYPE(SPACE)};
Sentence;
Document{-> FILTERTYPE(CW)};
Sentence;
Document{-> RETAINTYPE, FILTERTYPE};]]></programlisting>

    <para>
      The first rule simply matches on sentences that starts not with any filtered type. Sentences that start with whitespace or markup, 
      for example, are not considered. 
      The next rule retains all text that is covered by annotations of the type <quote>SPACE</quote> meaning 
      that the rule elements are now sensible to whitespaces. Therefore, the following rule will match on sentences that start with whitespaces.
      The third rule now filters the type <quote>CW</quote> with the consequence that all capitalized words are invisible.
      If the following rule now wants to match on sentences, then this is only possible for Sentence annotations that do not start with a capitalized word.
      The last rule finally resets the filtering setting to the default configuration in the TextMarker Analysis Engine.
    </para>
    
    <para>
      The next exmaple gives a showcase for importing external Analysis Engines and for modifying the documents by creating a new view named <quote>modified</quote>.
      Additional Analysis Engines can be imported with the keyword <quote>ENGINE</quote> followed by the name of the descriptor. These imported Analysis Engines can be 
      executed with the actions <quote>CALL</quote> or <quote>EXEC</quote>. If the executed Analysis Engine adds, removes or modifies annotations, then their types need 
      to be mentioned when calling the descriptor, or else those annotations will not be correctly processed by the following TextMarker rules.
    </para>

    <programlisting><![CDATA[ENGINE utils.Modifier;
Date{-> DEL};
MoneyAmount{-> REPLACE("<MoneyAmount/>")};
Document{-> COLOR(Headline, "green")};
Document{-> EXEC(Modifier)};
]]></programlisting>

  <para>
    In this example, we first import an Analysis Engine defined by the descriptor <quote>Modifier.xml</quote> located in the folder <quote>utils</quote>. 
    The descriptor needs, of course, be located in the folder specified by the parameter <link linkend="ugr.tools.tm.ae.basic.parameter.descriptorPaths">descriptorPaths</link>.
    The first rule deletes all text covered by annotations of the type <quote>DEL</quote>. The second rule replaces the text of all annotations of the type <quote>MoneyAmount</quote> 
    with the string <quote><![CDATA[<MoneyAmount/>]]></quote>. The third rule remembers to set the background color of text in Headline annotation to green. The last rule
    finally performs all of these changes in an additonal view called <quote>modified</quote>.
  </para>

  </section>
  
  <section id="ugr.tools.tm.ae">
    <title>UIMA Analysis Engines</title>
    <para>This section gives an overview of the UIMA Analysis Engines shipped with TextMarker. The most 
      important one is <quote>TextMarkerEngine</quote>, a generic analysis engine, which is able to interpret 
      and execute script files. The other analysis engines provide support for some additional functionality or
      add certain types of annotations.
    </para>
    <section id="ugr.tools.tm.ae.basic">
      <title>TextMarker Engine</title>
      <para>
         This generic Analysis Engine is the most important one for the TextMarker language since it is
         responsible for applying the TextMarker rules on a CAS. Its functionality is configured by the configuration parameters, 
         which, for example, specify the rule file that should be executed. In the TextMarker IDE, a basic template named <quote>BasicEngine.xml</quote>
         is given in the descriptor folder of a TextMarker project and correctly configured descriptors typically named <quote>MyScriptEngine.xml</quote>
         are generated in the descriptor folder corresponding to the package namespace of the script file.
         The available configuration parameters of the TextMarker Analysis Engine are described in the following.   
      </para>
      <section id="ugr.tools.tm.ae.basic.apply">
      <title>Apply TextMarker Analysis Engine in plain Java</title>
        <para>
          Let's assume that you wrote the TextMarker rules using the TextMarker Workbench, which already creates correctly configured descriptors.
          In this case, you can simply use the following java code to apply the TextMarker script.
        </para>
          <programlisting><![CDATA[File specFile = new File("pathToMyWorkspace/MyProject/descriptor/"+
    "my/package/MyScriptEngine.xml");
XMLInputSource in = new XMLInputSource(specFile);
ResourceSpecifier specifier = UIMAFramework.getXMLParser().
    parseResourceSpecifier(in);
// for import by name... set the datapath in the ResourceManager
AnalysisEngine ae = UIMAFramework.produceAnalysisEngine(specifier);
CAS cas = ae.newCAS();
cas.setDocumentText("This is my document.");
ae.process(cas);]]></programlisting>
      <note><para>
        The TextMarker Analysis Engine utilizes type priorities. If the CAS object is 
        not created using the TextMarker Analysis Engine descriptor by other means, then please 
        provide the necessary type priorities for a valid execution of the TextMarker rules.
      </para></note>
      <para>
        If the TextMarker script was written, for example, with a common text editor and no configured descriptors are yet available, 
        then the following java code can be used, which, however, is only applicable for executing single script files that do not import 
        additional components or scripts. In that case the other parameters, e.g., <quote>additionalScripts</quote>, need to be configured correctly.
      </para>
      <programlisting><![CDATA[URL aedesc = TextMarkerEngine.class.getResource("BasicEngine.xml");
XMLInputSource inae = new XMLInputSource(aedesc);
ResourceSpecifier specifier = UIMAFramework.getXMLParser().
    parseResourceSpecifier(inae);
ResourceManager resMgr = UIMAFramework.newDefaultResourceManager();
AnalysisEngineDescription aed = (AnalysisEngineDescription) specifier;
TypeSystemDescription basicTypeSystem = aed.getAnalysisEngineMetaData().
    getTypeSystem();

Collection<TypeSystemDescription> tsds = 
    new ArrayList<TypeSystemDescription>();
tsds.add(basicTypeSystem);
// add some other type system descriptors 
// that are needed by your script file   
TypeSystemDescription mergeTypeSystems = CasCreationUtils.
    mergeTypeSystems(tsds);
aed.getAnalysisEngineMetaData().setTypeSystem(mergeTypeSystems);
aed.resolveImports(resMgr);
        
AnalysisEngine ae = UIMAFramework.produceAnalysisEngine(aed, 
    resMgr, null);
File scriptFile = new File("path/to/file/MyScript.tm");
ae.setConfigParameterValue(TextMarkerEngine.SCRIPT_PATHS, 
    new String[] { scriptFile.getParent().getAbsolutePath() });
String name = scriptFile.getName().substring(0, 
    scriptFile.getName().length() - 3);
ae.setConfigParameterValue(TextMarkerEngine.MAIN_SCRIPT, name);
ae.reconfigure();
CAS cas = ae.newCAS();
cas.setDocumentText("This is my document.");
ae.process(cas);]]></programlisting>
      
      </section>
      <section id="ugr.tools.tm.ae.basic.parameter">
        <title>Configuration Parameters</title>
        <para>
          The configuration parameters of the TextMarker Analysis Engine can be separated into three
          different groups: parameters for the setup of the environment (<link linkend='ugr.tools.tm.ae.basic.parameter.mainScript'>mainScript</link>
          to <link linkend='ugr.tools.tm.ae.basic.parameter.additionalExtensions'>additionalExtensions</link>), 
          parameters that change the behavior of the analysis engine (<link linkend='ugr.tools.tm.ae.basic.parameter.reloadScript'>reloadScript</link>
          to <link linkend='ugr.tools.tm.ae.basic.parameter.simpleGreedyForComposed'>simpleGreedyForComposed</link>) 
          and parameters for creating additional information how the rules were executed 
          (<link linkend='ugr.tools.tm.ae.basic.parameter.debug'>debug</link>
          to <link linkend='ugr.tools.tm.ae.basic.parameter.createdBy'>createdBy</link>). First, a short overview of the configuration parameters is given in
          <xref linkend='table.ugr.tools.tm.ae.parameter' />. Then all parameters are described in detail with examples.
        </para>
        <para>
          To change the value of any configuration parameter within a TextMarker script, the CONFIGURE action (see <xref linkend='ugr.tools.tm.language.actions.configure' />)
          can be used. For changing behaviour of <link linkend='ugr.tools.tm.ae.basic.parameter.dynamicAnchoring'>dynamicAnchoring</link> the DYNAMICANCHORING action 
          (see <xref linkend='ugr.tools.tm.language.actions.dynamicanchoring' />) is recommended.
        </para>
        <para>
          <table id="table.ugr.tools.tm.ae.parameter" frame="all">
            <title>Configuration parameters of the TextMarker Analysis Engine   </title>
            <tgroup cols="3" colsep="1" rowsep="1">
              <colspec colname="c1" colwidth="1.2*" />
              <colspec colname="c2" colwidth="2*" />
              <colspec colname="c3" colwidth="0.8*" />
              <thead>
                <row>
                  <entry align="center">Name</entry>
                  <entry align="center">Short description</entry>
                  <entry align="center">Type</entry>
                </row>
              </thead>
              <tbody>
                <row>
                  <entry>
                    <link linkend='ugr.tools.tm.ae.basic.parameter.mainScript'>mainScript</link>
                  </entry>
                  <entry>Name with complete namespace of the script which will be interpreted and
                    executed by the analysis engine.
                  </entry>
                  <entry>Single String</entry>
                </row>
                <row>
                  <entry>
                    <link linkend='ugr.tools.tm.ae.basic.parameter.scriptEncoding'>scriptEncoding</link>
                  </entry>
                  <entry>Encoding of all TextMarker script files.</entry>
                  <entry>Single String</entry>
                </row>
                <row>
                  <entry>
                    <link linkend='ugr.tools.tm.ae.basic.parameter.scriptPaths'>scriptPaths</link>
                  </entry>
                  <entry>List of absolute locations, which contain the neccessary script files like
                    the main script.
                  </entry>
                  <entry>Multi String</entry>
                </row>
                <row>
                  <entry>
                    <link linkend='ugr.tools.tm.ae.basic.parameter.descriptorPaths'>descriptorPaths</link>
                  </entry>
                  <entry>List of absolute locations, which contain the neccessary descriptor files
                    like type systems.
                  </entry>
                  <entry>Multi String</entry>
                </row>
                <row>
                  <entry>
                    <link linkend='ugr.tools.tm.ae.basic.parameter.resourcePaths'>resourcePaths</link>
                  </entry>
                  <entry>List of absolute locations, which contain the neccessary resource files like
                    word lists.
                  </entry>
                  <entry>Multi String</entry>
                </row>
                <row>
                  <entry>
                    <link linkend='ugr.tools.tm.ae.basic.parameter.additionalScripts'>additionalScripts</link>
                  </entry>
                  <entry>List of names with complete namespace of additional scripts, which can be
                    referred to.
                  </entry>
                  <entry>Multi String</entry>
                </row>
                <row>
                  <entry>
                    <link linkend='ugr.tools.tm.ae.basic.parameter.additionalEngines'>additionalEngines</link>
                  </entry>
                  <entry>List of names with complete namespace of additional analysis engines, which
                    can be called by TextMarker rules.
                  </entry>
                  <entry>Multi String</entry>
                </row>
                <row>
                  <entry>
                    <link linkend='ugr.tools.tm.ae.basic.parameter.additionalEngineLoaders'>additionalEngineLoaders</link>
                  </entry>
                  <entry>List of class names of implementations that are able to perform additional
                    task when loading external analysis engines.
                  </entry>
                  <entry>Multi String</entry>
                </row>
                <row>
                  <entry>
                    <link linkend='ugr.tools.tm.ae.basic.parameter.additionalExtensions'>additionalExtensions</link>
                  </entry>
                  <entry>List of factory classes for additional extensions of the TextMarker language
                    like proprietary conditions.
                  </entry>
                  <entry>Multi String</entry>
                </row>
                <row>
                  <entry>
                    <link linkend='ugr.tools.tm.ae.basic.parameter.reloadScript'>reloadScript</link>
                  </entry>
                  <entry>Option to initialize the rule script each time the analysis engine processes
                    a CAS.
                  </entry>
                  <entry>Single Boolean</entry>
                </row>
                <row>
                  <entry>
                    <link linkend='ugr.tools.tm.ae.basic.parameter.seeders'>seeders</link>
                  </entry>
                  <entry>List of class names that provide additional annotations before the rules are
                    executed.
                  </entry>
                  <entry>Multi String</entry>
                </row>
                <row>
                  <entry>
                    <link linkend='ugr.tools.tm.ae.basic.parameter.defaultFilteredTypes'>defaultFilteredTypes</link>
                  </entry>
                  <entry>List of complete type names of annotations that are invisible by default.
                  </entry>
                  <entry>Multi String</entry>
                </row>
                <row>
                  <entry>
                    <link linkend='ugr.tools.tm.ae.basic.parameter.removeBasics'>removeBasics</link>
                  </entry>
                  <entry>Option to remove all inference annotations after execution of the rule script.
                  </entry>
                  <entry>Single Boolean</entry>
                </row>
                <row>
                  <entry>
                    <link linkend='ugr.tools.tm.ae.basic.parameter.dynamicAnchoring'>dynamicAnchoring</link>
                  </entry>
                  <entry>Option to allow rule matches to start at any rule element.</entry>
                  <entry>Single Boolean</entry>
                </row>
                <row>
                  <entry>
                    <link linkend='ugr.tools.tm.ae.basic.parameter.lowMemoryProfile'>lowMemoryProfile</link>
                  </entry>
                  <entry>Option to decrease the memory consumption when processing a large CAS.</entry>
                  <entry>Single Boolean</entry>
                </row>
                <row>
                  <entry>
                    <link linkend='ugr.tools.tm.ae.basic.parameter.simpleGreedyForComposed'>simpleGreedyForComposed</link>
                  </entry>
                  <entry>Option to activate a different inferencer for composed rule elements.</entry>
                  <entry>Single Boolean</entry>
                </row>
                <row>
                  <entry>
                    <link linkend='ugr.tools.tm.ae.basic.parameter.debug'>debug</link>
                  </entry>
                  <entry>Option to add debug information to the CAS.</entry>
                  <entry>Single Boolean</entry>
                </row>
                <row>
                  <entry>
                    <link linkend='ugr.tools.tm.ae.basic.parameter.debugWithMatches'>debugWithMatches</link>
                  </entry>
                  <entry>Option to add information about the rule matches to the CAS.</entry>
                  <entry>Single Boolean</entry>
                </row>
                <row>
                  <entry>
                    <link linkend='ugr.tools.tm.ae.basic.parameter.debugOnlyFor'>debugOnlyFor</link>
                  </entry>
                  <entry>List of rule ids. If provided, then debug information is only created for
                    those rules.
                  </entry>
                  <entry>Multi String</entry>
                </row>
                <row>
                  <entry>
                    <link linkend='ugr.tools.tm.ae.basic.parameter.profile'>profile</link>
                  </entry>
                  <entry>Option to add profile information to the CAS.</entry>
                  <entry>Single Boolean</entry>
                </row>
                <row>
                  <entry>
                    <link linkend='ugr.tools.tm.ae.basic.parameter.statistics'>statistics</link>
                  </entry>
                  <entry>Option to add statistics of conditions and actions to the CAS.</entry>
                  <entry>Single Boolean</entry>
                </row>
                <row>
                  <entry>
                    <link linkend='ugr.tools.tm.ae.basic.parameter.createdBy'>createdBy</link>
                  </entry>
                  <entry>Option to add additional information, which rule created a annotation.
                  </entry>
                  <entry>Single Boolean</entry>
                </row>
              </tbody>
            </tgroup>
          </table>
        </para>
        <section id="ugr.tools.tm.ae.basic.parameter.mainScript">
          <title>mainScript</title>
          <para>
            This parameter specifies the rule file that will be executed by the analysis engine and is
            therefore one of the most important ones. The extact name of the script is given by the complete namespace of the file, which corresponds to its location
            relative to the given parameter <link linkend='ugr.tools.tm.ae.basic.parameter.scriptPaths'>scriptPaths</link>.
            The single names of packages (or folders) are separated by periods. An exemplary value for this parameter could be "org.apache.uima.Main", 
            whereas "Main" specifies the file containing the rules and "org.apache.uima" its package.
            In this case, the analysis engine loads the script file "Main.tm", which is located in the folder structure "org/apache/uima/".
            This parameter has no default value and has to be provided, although it is not specified as mandatory.
          </para>
        </section>
        <section id="ugr.tools.tm.ae.basic.parameter.scriptEncoding">
          <title>scriptEncoding</title>
          <para>
            This parameter specifies the encoding of the rule files. Its default value is "UTF-8".
          </para>
        </section>
        <section id="ugr.tools.tm.ae.basic.parameter.scriptPaths">
          <title>scriptPaths</title>
          <para>
            The parameter scriptPaths refers to a list of String values, which specify the possible locations of script files. 
            The given locations are absolute paths. A typical value for this parameter is for example "C:/TextMarker/MyProject/script/".
            If the parameter <link linkend='ugr.tools.tm.ae.basic.parameter.mainScript'>mainScript</link> is set to org.apache.uima.Main, 
            then the absolute path of the script file has to be "C:/TextMarker/MyProject/script/org/apache/uima/Main.tm". 
            This parameter can contain multiple values, as the main script can refer to multiple projects similar to a class path in Java.
          </para>
        </section>
        <section id="ugr.tools.tm.ae.basic.parameter.descriptorPaths">
          <title>descriptorPaths</title>
          <para>
            This parameter specifies the possible locations for descriptors like analysis engines or type systems, similar to the parameter
            <link linkend='ugr.tools.tm.ae.basic.parameter.scriptPaths'>scriptPaths</link> for the script files. A typical value for this parameter 
            is for example "C:/TextMarker/MyProject/descriptor/".
            The relative values of the parameter <link linkend='ugr.tools.tm.ae.basic.parameter.additionalEngines'>additionalEngines</link> are
            resolved to these absolute locations.
            This parameter can contain multiple values, as the main script can refer to multiple projects similar to a class path in Java.
          </para>
        </section>
        <section id="ugr.tools.tm.ae.basic.parameter.resourcePaths">
          <title>resourcePaths</title>
          <para>
            This parameter specifies the possible locations of additional resources like word lists or CSV tables. The string values have to contain absolute
            locations, for example, "C:/TextMarker/MyProject/resources/".
          </para>
        </section>
        <section id="ugr.tools.tm.ae.basic.parameter.additionalScripts">
          <title>additionalScripts</title>
          <para>
            The parameter additionalScripts is defined as a list of string values and contains script files, which are additionally loaded by the analysis engine. These script files are specified by their 
            complete namespace, exactly like the value of the parameter <link linkend='ugr.tools.tm.ae.basic.parameter.mainScript'>mainScript</link> 
            and can be refered to by language elements, e.g., by executing the containing rules. An exemplary value of this parameter is "org.apache.uima.SecondaryScript". In this example, the main script could import 
            this script file by the declaration "SCRIPT org.apache.uima.SecondaryScript;" and then could execute it with the rule 
            "Document{-> CALL(SecondaryScript)};". 
          </para>
        </section>
        <section id="ugr.tools.tm.ae.basic.parameter.additionalEngines">
          <title>additionalEngines</title>
          <para>
            This parameter contains a list of additional analysis engines, which can be executed by the TextMarker rules. The single values
            are given by the name of the analysis engine with their complete namespace and have to be located relative to one value of the parameter
            <link linkend='ugr.tools.tm.ae.basic.parameter.descriptorPaths'>descriptorPaths</link>, the location, where the analysis engine searches for the descriptor file.
            An exmaple for one value of the parameter is "utils.HtmlAnnotator", which points to the descriptor "HtmlAnnotator.xml" in the folder "utils".
          </para>
        </section>
        <section id="ugr.tools.tm.ae.basic.parameter.additionalEngineLoaders">
          <title>additionalEngineLoaders</title>
          <para>
            The parameter "additionalEngineLoaders" specifies a list of optional implementations of the interface 
            "org.apache.uima.textmarker.extensions.IEngineLoader", which can be used to application-specific configurations of
            additional analysis engines.
          </para>
        </section>
        <section id="ugr.tools.tm.ae.basic.parameter.additionalExtensions">
          <title>additionalExtensions</title>
          <para>
            This parameter specifies optional extensions of the TextMarker language. The elements of the string list must implement the interface 
            "org.apache.uima.textmarker.extensions.ITextMarkerExtension". With those extensions, application-specific conditions and actions can be
            added to the set of provided ones.
          </para>
        </section>
        <section id="ugr.tools.tm.ae.basic.parameter.reloadScript">
          <title>reloadScript</title>
          <para>
            This boolean parameter indicates whether the script or resource files should be reloaded when processing a CAS. The default value is set to false. 
            In this case, the script files are loaded when the analysis engine is initialized. If script files or resource files are extended, e.g., a dictionary is filled
            yet when a collection of documents are processed, then the parameter is needed to be set to true in order to include the changes.
          </para>
        </section>
        <section id="ugr.tools.tm.ae.basic.parameter.seeders">
          <title>seeders</title>
          <para>
            This list of string values refers to implementations of the interface "org.apache.uima.textmarker.seed.TextMarkerAnnotationSeeder", 
            which can be used to automatically add annotations to the CAS. The default value of the parameter is a single seeder, namely "org.apache.uima.textmarker.seed.DefaultSeeder"
            that adds annotations for token classes like CW, MARKUP or SEMICOLON. Remember that additional annotations can also be added with 
            an additional engine that is executed by a TextMarker rule.
          </para>
        </section>
        <section id="ugr.tools.tm.ae.basic.parameter.defaultFilteredTypes">
          <title>defaultFilteredTypes</title>
          <para>
            This parameter specifies a list of types, which are filtered by default when executing a script file. Using the default values of this parameter,
            whitespaces, line breaks and markup elements are not visible to TextMarker rules. The visibility of annotations and therefore the covered text can be changed
            using the actions <link linkend='ugr.tools.tm.language.actions.filtertype'>FILTERTYPE</link> and 
            <link linkend='ugr.tools.tm.language.actions.retaintype'>RETAINTYPE</link>.
          </para>
        </section>
        <section id="ugr.tools.tm.ae.basic.parameter.removeBasics">
          <title>removeBasics</title>
          <para>
            This parameter specifies whether the inference annotations created by the analysis engine should be removed after processing the CAS.
            The default value is set to false.
          </para>
        </section>
        <section id="ugr.tools.tm.ae.basic.parameter.dynamicAnchoring">
          <title>dynamicAnchoring</title>
          <para>
            If this parameter is set to true, then the TextMarker rules are not forced to start to match with the first rule element. 
            Rather the rule element referring to the most rare type is chosen. Therefore, this option can be utilized to optimize the performance.
            Please mind that the matching result can vary in some cases when greedy rule elements are applied.
            The default value is set to false.
          </para>
        </section>
        <section id="ugr.tools.tm.ae.basic.parameter.lowMemoryProfile">
          <title>lowMemoryProfile</title>
          <para>
            This parameter specifies whether the memory consumption should be reduced. This parameter should be set to true for 
            very large CAS documents (e.g., > 500k tokens), but it also reduces the performance. The default value is set to false.
          </para>
        </section>
        <section id="ugr.tools.tm.ae.basic.parameter.simpleGreedyForComposed">
          <title>simpleGreedyForComposed</title>
          <para>
            This parameter specifies whether a different inference strategy for composed rule elements should be applied. This option is only neccessary, 
            if the composed rule element is expected to match very often, e.g., a rule element like (ANY ANY).
            The default value of this parameter is set to false.
          </para>
        </section>
        <section id="ugr.tools.tm.ae.basic.parameter.debug">
          <title>debug</title>
          <para>
            If this parameter is set to true, then additional information about the execution of a rule script is added to the CAS.
            The actual information is specified by the following parameters.
            The default value of this parameter is set to false.
          </para>
        </section>
        <section id="ugr.tools.tm.ae.basic.parameter.debugWithMatches">
          <title>debugWithMatches</title>
          <para>
            This parameter specificies whether the match information (covered text) of the rules should be stored in the CAS.
            The default value of this parameter is set to false.
          </para>
        </section>
        <section id="ugr.tools.tm.ae.basic.parameter.debugOnlyFor">
          <title>debugOnlyFor</title>
          <para>
            This parameter specifies a list of rule-ids that enumerate the rule for which debug information should be created. 
            No specific ids are given by default.
          </para>
        </section>
        <section id="ugr.tools.tm.ae.basic.parameter.profile">
          <title>profile</title>
          <para>
            If this parameter is set to true, then additional information about the runtime of applied rules is added to the CAS.
            The default value of this parameter is set to false.
          </para>
        </section>
        <section id="ugr.tools.tm.ae.basic.parameter.statistics">
          <title>statistics</title>
          <para>
            If this parameter is set to true, then additional information about the runtime of TextMarker language elements like conditions and actions
            is added to the CAS.
            The default value of this parameter is set to false.
          </para>
        </section>
        <section id="ugr.tools.tm.ae.basic.parameter.createdBy">
          <title>createdBy</title>
          <para>
            If this parameter is set to true, then additional information is added to the CAS about what annotation was created by which rule.
            The default value of this parameter is set to false.
          </para>
        </section>
      </section>
    </section>
    <section id="ugr.tools.tm.ae.annotationwriter">
      <title>Annotation Writer</title>
      <para>
        This Analysis Engine can be utilized to write the covered text of annotions in a text file whereas each covered text is put into a new line.
        If the Analyis engine, for example, is configured for the type uima.example.Person, then all the covered texts of all person annotions are stored
        in a text file, one person in each line.
        A descriptor file for this Analysis Engine is located in the folder <quote>descriptor/utils</quote> of a TextMarker project.
      </para>
      <section id="ugr.tools.tm.ae.annotationwriter.parameter">
        <title>Configuration Parameters</title>
        <para>
        </para>
        <section id="ugr.tools.tm.ae.annotationwriter.parameter.output">
          <title>Output</title>
          <para>
            This string parameter specifies the absolute path of the resulting file named <quote>output.txt</quote>. However, if an annotation of the 
            type <quote>org.apache.uima.examples.SourceDocumentInformation</quote> is given, then the value of this parameter is interpreted to be relative
            to the URI stored in the annotation and the name of the file will be adapted to the name of the source file. The TextMarker IDE automatically adds
            the SourceDocumentInformation annotation when the user launches a script file. The default value of this parameter is <quote>/../output/</quote>.
          </para>
        </section>
        <section id="ugr.tools.tm.ae.annotationwriter.parameter.encoding">
          <title>Encoding</title>
          <para>
           This string parameter specifies the encoding of the resulting file. The default value of this parameter is <quote>UTF-8</quote>.
          </para>
        </section>
        <section id="ugr.tools.tm.ae.annotationwriter.parameter.type">
          <title>Type</title>
          <para>
            Only the covered texts of annotations of the type specified with this parameter are stored in the resulting file.
            The default value of this parameter is <quote>uima.tcas.DocumentAnnotation</quote>, which will store the complete document in a new file.
          </para>
        </section>
      </section>
    </section>
    <section id="ugr.tools.tm.ae.plaintext">
      <title>Plain Text Annotator</title>
      <para>
        This Analysis Engines adds annotations for lines and paragraphs.
        A descriptor file for this Analysis Engine is located in the folder <quote>descriptor/utils</quote> of a TextMarker project. There are no configuration parameters
      </para>
    </section>
    <section id="ugr.tools.tm.ae.modifier">
      <title>Modifier</title>
      <para>
        The Modifier Analysis Engine can be used to create an additional view <quote>modified</quote>, which contains all textual modifications and HTML highlightings that
        were specified by the executed rules. Therefore, this Analysis Engine can be applied, e.g., 
        for anonymization where all annatotions of persons are replaced by the string <quote>Person</quote>. 
        Furthermore, the content of the new view can optionally be stored in a new HTML file.
        A descriptor file for this Analysis Engine is located in the folder <quote>descriptor/utils</quote> of a TextMarker project.
      </para>
      <section id="ugr.tools.tm.ae.modifier.parameter">
        <title>Configuration Parameters</title>
        <para>
        </para>
        <section id="ugr.tools.tm.ae.modifier.parameter.styleMap">
          <title>styleMap</title>
          <para>
            This string parameter specifies the name of the style map file created by the Style Map Creator Analysis Engine, which stores the colors for
            additional highlightings in the modified view.
          </para>
        </section>
        <section id="ugr.tools.tm.ae.modifier.parameter.descriptorPaths">
          <title>descriptorPaths</title>
          <para>
            This parameter can contain multiple string values and specifies the absolute paths where the style map file can be found.
          </para>
        </section>
        <section id="ugr.tools.tm.ae.modifier.parameter.outputLocation">
          <title>outputLocation</title>
          <para>
            This string parameter specifies the absolute path of the resulting file named <quote>output.modified.html</quote>. However, if an annotation of the 
            type <quote>org.apache.uima.examples.SourceDocumentInformation</quote> is given, then the value of this parameter is interpreted to be relative
            to the URI stored in the annotation and the name of the file will be adapted to the name of the source file. The TextMarker IDE automatically adds
            the SourceDocumentInformation annotation when the user launches a script file. The default value of this parameter is <quote>/../</quote>.
          </para>
        </section>
      </section>
    </section>
    <section id="ugr.tools.tm.ae.html">
      <title>HMTL Annotator</title>
      <para>
        This Analysis Engine provides support for HTML files by adding annotations for the HTML elements. Using the default values, the HTML Annotator creates annotations
        for each HTML element spanning the content of the element, whereas the most common elements are represented by own types. 
        The document <quote><![CDATA[This text is <b>bold</b>.]]></quote>, for example, would be annotated with an annotation of the type 
        <quote>org.apache.uima.textmarker.type.html.B</quote> for the word <quote>bold</quote>. The HTML annotator can be configured 
        in order to include the start and end element in the created annotations. Additionally, the Analysis Engine is also able to strip the HTML element, 
        but retraining the HTML annotations. Thereby, an HTML document can be converted to a plain text document, which contains the annotations about the HTML layout.
        A descriptor file for this Analysis Engine is located in the folder <quote>descriptor/utils</quote> of a TextMarker project.
      </para>
      <section id="ugr.tools.tm.ae.html.parameter">
        <title>Configuration Parameters</title>
        <para>
        </para>
        <section id="ugr.tools.tm.ae.html.parameter.plainTextOutput">
          <title>plainTextOutput</title>
          <para>
            This parameter specifies whether a new document without the HTML elements should be created. The default value is <quote>false</quote>.
          </para>
        </section>
        <section id="ugr.tools.tm.ae.html.parameter.outputViewName">
          <title>outputViewName</title>
          <para>
            This parameter specifies in which view the optional new document without HTML element should be stored.
          </para>
        </section>
        <section id="ugr.tools.tm.ae.html.parameter.onlyContent">
          <title>onlyContent</title>
          <para>
            This parameter specifies whether created annotations should cover only the content of the HTML elements or also their start and end element. 
            The default value is <quote>true</quote>
          </para>
        </section>
      </section>
    </section>
    <section id="ugr.tools.tm.ae.stylemap">
      <title>Style Map Creator</title>
      <para>
        This Analysis Engine can be utilized to create style map information, which is needed by the Modifier Analysis Engine in order to create
        highlightings for some annotations.
        Style map information can be created using the <link linkend='ugr.tools.tm.language.actions.color'>COLOR</link> action.
        A descriptor file for this Analysis Engine is located in the folder <quote>descriptor/utils</quote> of a TextMarker project.
      </para>
      <section id="ugr.tools.tm.ae.stylemap.parameter">
        <title>Configuration Parameters</title>
        <para>
        </para>
        <section id="ugr.tools.tm.ae.stylemap.parameter.styleMap">
          <title>styleMap</title>
          <para>
            This string parameter specifies the name of the style map file created by the Style Map Creator Analysis Engine, which stores the colors for
            additional highlightings in the modified view.
          </para>
        </section>
        <section id="ugr.tools.tm.ae.stylemap.parameter.descriptorPaths">
          <title>descriptorPaths</title>
          <para>
            This parameter can contain multiple string values and specifies the absolute paths where the style map fgile can be found.
          </para>
        </section>
      </section>
    </section>
    <section id="ugr.tools.tm.ae.xmi">
      <title>XMI Writer</title>
      <para>
        This Analysis Engine is able to serialize the processed CAS to an XMI file. One use case for the XMI Writer is, for example, a rule-based sort,
        which stores the processed XMI files in different folder, dependent on the execution of the rules, e.g., whether a pattern of annotations occurs or not.
        A descriptor file for this Analysis Engine is located in the folder <quote>descriptor/utils</quote> of a TextMarker project.
      </para>
      <section id="ugr.tools.tm.ae.xmi.parameter">
        <title>Configuration Parameters</title>
        <para>
        </para>
        <section id="ugr.tools.tm.ae.xmi.parameter.output">
          <title>Output</title>
          <para>
            This string parameter specifies the absolute path of the resulting file named <quote>output.xmi</quote>. However, if an annotation of the 
            type <quote>org.apache.uima.examples.SourceDocumentInformation</quote> is given, then the value of this parameter is interpreted to be relative
            to the URI stored in the annotation and the name of the file will be adapted to the name of the source file. The TextMarker IDE automatically adds
            the SourceDocumentInformation annotation when the user launches a script file.
            The default value is <quote>/../output/</quote>
          </para>
        </section>
      </section>
    </section>
  </section>
</chapter>