<?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 name="Apache Commons RDF">

  <bannerLeft>
    <name>Apache Commons RDF</name>
    <src>/images/commonsrdf-logo.png</src>
    <alt>Apache Commons RDF logo</alt>
    <href>https://commons.apache.org/proper/commons-rdf/</href>
  </bannerLeft>

  <publishDate format="dd MMMM yyyy" position="left" />
  <version position="none"/>

  <skin>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-skin</artifactId>
    <version>4.1</version>
  </skin>

  <custom>
    <meta>
      <description>Apache Commons RDF</description>
      <keywords>Apache, Commons, RDF</keywords>
    </meta>
    <footer>
      <div class="center">
      Apache Commons, Apache, the Apache feather logo, and the Apache Commons 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>
  </custom>

  <body>
    <menu name="Project">
      <item name="Home"                 href="/index.html" />
      <item name="Introduction"         href="/introduction.html" />
      <item name="API"                  href="/apidocs/index.html?org/apache/commons/rdf/api/package-summary.html" />
      <item name="Implementations"      href="/implementations.html" />
      <item name="User Guide"           href="/userguide.html" />
      <item name="Download"             href="/download.html" />
      <item name="Contributing"         href="/contributing.html" />
      <item name="Team"                 href="/team-list.html" />
    </menu>
    <menu name="Tools">
      <item name="Mailing Lists"        href="/mail-lists.html" />
      <item name="Source (Git)"         href="https://git-wip-us.apache.org/repos/asf/commons-rdf.git" />
      <item name="Source (GitHub mirror)" href="https://github.com/apache/commons-rdf/" />
      <item name="Issues (Jira)"        href="https://issues.apache.org/jira/browse/COMMONSRDF" />
    </menu>
    <!-- disabled due to COMMONSRDF-50
    <menu ref="modules" />
    -->
  </body>

  <poweredBy>
    <logo name="Maven" href="http://maven.apache.org/"
          img="http://maven.apache.org/images/logos/maven-feather.png"/>
  </poweredBy>

</project>
