<?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="MRQL">
  <bannerLeft>
    <name>Apache MRQL</name>
    <href>http://mrql.incubator.apache.org/</href>
  </bannerLeft>
  <bannerRight>
    <src>http://incubator.apache.org/images/egg-logo.png</src>
    <href>http://incubator.apache.org/</href>
  </bannerRight>

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

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

  <custom>
    <fluidoSkin>
      <topBarEnabled>true</topBarEnabled>
      <sideBarEnabled>false</sideBarEnabled>
    </fluidoSkin>
  </custom>

  <body>
    <links position="left">
      <item name="Wiki" href="http://wiki.apache.org/mrql/" />
      <item name="JIRA" href="https://issues.apache.org/jira/browse/MRQL" />
      <item name="GIT" href="https://git-wip-us.apache.org/repos/asf?p=incubator-mrql.git" />
      <item name="Twitter" href="http://twitter.com/apacheMRQL" />
    </links>

   <breadcrumbs position="left">
      <item name="Apache" href="http://www.apache.org/" />
      <item name="Apache Incubator" href="http://incubator.apache.org/" />
    </breadcrumbs>

    <menu name="Information">
      <item name="Overview" href="index.html"/>
      <item name="Who We Are" href="team-list.html" />
    </menu>

    <menu name="Resources">
      <item name="Developers" href="developers.html" />
      <item name="Mailing Lists" href="mail-lists.html" />
      <item name="Issue Tracking" href="issue-tracking.html" />
    </menu>

    <menu name="Documentation">
      <item name="Getting Started" href="getting_started.html" />
      <item name="Research Papers and Presentations" href="http://wiki.apache.org/mrql/Publications" />
    </menu>

    <menu name="Related Projects">
      <item name="Hadoop" href="http://hadoop.apache.org/" />
      <item name="Hama" href="http://hama.apache.org/" />
      <item name="Spark" href="http://spark.incubator.apache.org/" />
    </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>

  </body>
</project>
