<?xml version="1.0" encoding="UTF-8"?>
<!--
  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 xmlns="http://maven.apache.org/DECORATION/1.7.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/DECORATION/1.7.0 http://maven.apache.org/xsd/decoration-1.7.0.xsd"
    name="${project.name}">

  <publishDate position="left"/>
  <version position="left"/>

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

  <bannerLeft>
    <name>Apache Any23: Anything to Triples</name>
    <src>images/logo-any23.png</src>
    <href>./index.html</href>
  </bannerLeft>

  <bannerRight>
    <name>Apache Any23</name>
    <src>http://www.apache.org/images/feather-small.gif</src>
    <href>http://www.apache.org/</href>
  </bannerRight>

  <body>
    <menu name="${project.name}">
      <item name="Introduction"      href="./index.html"/>
      <item name="Downloads"         href="./download.html" collapse="true">
        <item name="Sources"         href="./download.html#Apache_Any23_Sources" />
        <item name="Core"            href="./download.html#Apache_Any23_Core" />
        <item name="Basic Crawler"   href="./download.html#Basic_Crawler" />
        <item name="HTML Scraper"    href="./download.html#HTML_Scraper" />
        <item name="Office Scraper"  href="./download.html#Office_Scraper" />
        <item name="Service"         href="./download.html#Apache_Any23_Service" />
      </item>
      <item name="Install"           href="./install.html"/>
    </menu>

    <menu name="Documentation">
      <item name="Getting Started"   href="./getting-started.html"/>
      <item name="Supported Formats" href="./supported-formats.html"/>
      <item name="Extractors"        href="./extractors.html"/>
      <item name="Configuration"     href="./configuration.html"/>
      <item name="REST Service"      href="./service.html"/>
      <item name="Any23 Plugins"     href="./any23-plugins.html"/>
      <item name="APIs Doc"          href="./apidocs/index.html"/>
      <item name="Developers Guide"  href="./developers.html" collapse="true">
        <item href="./build-src.html"                  name="Build from sources"/>
        <item href="./dev-data-extraction.html"        name="Data Extraction"/>
        <item href="./dev-data-conversion.html"        name="Data Conversion"/>
        <item href="./dev-validation-fix.html"         name="Validation and Fixing"/>
        <item href="./dev-xpath-extractor.html"        name="XPath Extractor"/>
        <item href="./dev-microformat-extractors.html" name="Microformat Extractors"/>
        <item href="./dev-microdata-extractor.html"    name="Microdata Extractor"/>
        <item href="./dev-csv-extractor.html"          name="CSV Extractor"/>
        <item href="./release-howto.html"              name="HowTo Release"/>
      </item>
    </menu>

    <menu ref="reports"/>

    <menu name="Misc">
      <item name="Acknowledgements" href="./acknowledgements.html"/>
      <item name="PoweredBy"        href="./poweredby.html"/>
    </menu>

    <menu name="ASF">
      <item name="How Apache Works" href="http://www.apache.org/foundation/how-it-works.html"/>
      <item name="Foundation" href="http://www.apache.org/foundation/"/>
      <item name="Sponsoring Apache" href="http://www.apache.org/foundation/sponsorship.html"/>
      <item name="Thanks" href="http://www.apache.org/foundation/thanks.html"/>
    </menu>

    <footer>
      <![CDATA[<div class="row span16">Apache Any23, Apache, the Apache feather logo, and the Apache Any23 project logos are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.
      </div>]]>
    </footer>

  </body>

</project>
