<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE bookinfo PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
<!--
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.
-->  
<bookinfo>

    <releaseinfo>Version <?eval ${project.version}?></releaseinfo>

    <productname>Apache uimaFIT&#8482;</productname>

    <authorgroup>
      <corpauthor>Written and maintained by the Apache UIMA&#8482; Development Community</corpauthor>
    </authorgroup>

 <!--
    <mediaobject>
      <imageobject>
        <imagedata fileref="images/UIMAlogoLarge.png"/>
      </imageobject>
    </mediaobject>
 -->
    <legalnotice>
      <para> </para>
      <formalpara>
        <title>License and Disclaimer</title>

        <para>The ASF licenses this documentation
           to you under the Apache License, Version 2.0 (the
           "License"); you may not use this documentation except in compliance
           with the License.  You may obtain a copy of the License at
         
         <blockquote>
           <para><ulink url="http://www.apache.org/licenses/LICENSE-2.0"/></para>
         </blockquote>
         
           Unless required by applicable law or agreed to in writing,
           this documentation and its contents are distributed under the License 
           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.
         </para>
      </formalpara>
      <para> </para>
      <para> </para>
      <formalpara>
        <title>Trademarks</title>
        <para>All terms mentioned in the text that are known to be trademarks or 
        service marks have been appropriately capitalized.  Use of such terms
        in this book should not be regarded as affecting the validity of the
        the trademark or service mark.
        </para>
      </formalpara>
    </legalnotice>
    <copyright>
      <year><?eval ${project.inceptionYear}?></year>
      <year><?eval ${project.properties.buildYear}?></year>
      <holder>The Apache Software Foundation</holder>
    </copyright>
    <pubdate><?eval ${project.properties.buildMonth}?>, <?eval ${project.properties.buildYear}?></pubdate>
  </bookinfo>