<!--
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.
-->
<project name="VXQuery">
  <bannerLeft>
    <name>VXQuery</name>
    <src>../images/VXQuery.png</src>
    <href>../index.html</href>
  </bannerLeft>

  <bannerRight>
    <name>Apache Software Foundation</name>
    <src>../images/asf_logo_wide.png</src>
    <href>http://www.apache.org/</href>
  </bannerRight>

  <skin>
    <groupId>org.apache.maven.skins</groupId>
    <artifactId>maven-fluido-skin</artifactId>
    <version>1.5</version>
  </skin>

  <body>
    <menu ref="reports"/>
    <menu name="Open Items">
      <item name="Missing Functions" href="missing-functions.html"/>
      <item name="Missing Operators" href="missing-operators.html"/>
    </menu>
    <footer><![CDATA[
      <div class="row-fluid">Apache VXQuery, VXQuery, Apache, the Apache
        feather logo, and the Apache VXQuery project logo are either
        registered trademarks or trademarks of The Apache Software
        Foundation in the United States and other countries.
        All other marks mentioned may be trademarks or registered
        trademarks of their respective owners.</div>
    ]]></footer>
  </body>
</project>

