<?xml version="1.0" encoding="ISO-8859-1"?>

<!--
 ! 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="AsterixDB" xmlns="http://maven.apache.org/DECORATION/1.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd">
  <bannerLeft>
    <name>AsterixDB</name>
    <src>images/asterixlogo.png</src>
    <href>http://asterixdb.apache.org/</href>
  </bannerLeft>

  <version position="right"/>

  <poweredBy>
    <logo name="AsterixDB"
          href="http://asterixdb.apache.org/"
          img="images/asterixlogo.png"/>
  </poweredBy>

  <skin>
    <groupId>org.apache.maven.skins</groupId>
    <artifactId>maven-fluido-skin</artifactId>
    <version>1.7</version>
  </skin>
  <custom>
    <fluidoSkin>
      <!-- <topBarEnabled>true</topBarEnabled>
      <topBarIcon>
        <name>AsterixDB</name>
        <alt>AsterixDB</alt>
        <src>images/asterixlogo.png</src>
        <href>/index.html</href>
      </topBarIcon>
      <sideBarEnabled>false</sideBarEnabled> -->
      <!-- <topBarContainerStyle>width: 90%;</topBarContainerStyle> -->
      <sourceLineNumbersEnabled>true</sourceLineNumbersEnabled>
      <!-- <googlePlusOne /> -->
    </fluidoSkin>
  </custom>

  <body>
    <head>
      <![CDATA[<script>
        (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
        (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
        m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
        })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

        ga('create', 'UA-41536543-1', 'uci.edu');
        ga('send', 'pageview');
      </script>]]>
    </head>
    <links>
      <item name="Documentation Home" href="index.html"/>
    </links>

    <menu name="Get Started - Installation">
      <item name="Option 1: using NCService" href="ncservice.html"/>
      <item name="Option 2: using Ansible" href="ansible.html"/>
      <item name="Option 3: using Amazon Web Services" href="aws.html"/>
      <item name="Option 4: using YARN" href="yarn.html"/>
      <item name="Option 5: using Managix (deprecated)" href="install.html"/>
    </menu>

    <menu name = "AsterixDB Primer">
      <item name="Option 1: using SQL++" href="sqlpp/primer-sqlpp.html"/>
      <item name="Option 2: using AQL" href="aql/primer.html"/>
    </menu>

    <menu name="Data Model">
      <item name="The Asterix Data Model" href="datamodel.html"/>
    </menu>

    <menu name="Queries - SQL++">
      <item name="The SQL++ Query Language" href="sqlpp/manual.html"/>
      <item name="Builtin Functions" href="sqlpp/builtins.html"/>
    </menu>

    <menu name="Queries - AQL">
      <item name="The Asterix Query Language (AQL)" href="aql/manual.html"/>
      <item name="Builtin Functions" href="aql/builtins.html"/>
    </menu>

    <menu name="API/SDK">
      <item name="HTTP API" href="api.html"/>
      <item name="CSV Output" href="csv.html"/>
    </menu>

    <menu name="Advanced Features">
      <item name="Support of Full-text Queries" href="aql/fulltext.html"/>
      <item name="Accessing External Data" href="aql/externaldata.html"/>
      <item name="Support for Data Ingestion" href="feeds/tutorial.html"/>
      <item name="User Defined Functions" href="udf.html"/>
      <item name="Filter-Based LSM Index Acceleration" href="aql/filters.html"/>
      <item name="Support of Similarity Queries" href="aql/similarity.html"/>
    </menu>

    <menu ref="reports"/>

    <footer>
      <![CDATA[<div class="row-fluid">Apache AsterixDB, AsterixDB, Apache, the Apache
        feather logo, and the Apache AsterixDB 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>
