<?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.
 */
 -->
<document xmlns="http://maven.apache.org/DOCUMENT/1.0.1"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/DOCUMENT/1.0.1 file:../../../../../../doxia/doxia-core/target/generated-site/xsd/document-1.0.1.xsd"
  outputName="doxia-1.1.1">

  <meta>
    <title>Apache Maven Doxia</title>
    <author>The Apache Maven Project</author>
    <keyWords>
      <keyWord>Content generation framework</keyWord>
      <keyWord>Lightweight markup language</keyWord>
      <keyWord>APT</keyWord>
      <keyWord>FML</keyWord>
      <keyWord>XDOC</keyWord>
    </keyWords>
  </meta>

  <toc name="Table of Contents">
    <item name="What is Doxia?" ref="index.html"/>
    <item name="Overview" ref="overview.html"/>
    <item name="FAQ" ref="faq.html"/>
    <item name="Resources" ref="resources.html"/>
    <item name="FML Format" ref="references/fml-format.html"/>
    <item name="XDoc Format" ref="references/xdoc-format.html"/>
  </toc>

  <cover>
    <coverTitle>Apache Maven Doxia Test</coverTitle>
    <coverSubTitle>v. 1.1.1-SNAPSHOT</coverSubTitle>
    <coverType>User Guide</coverType>
    <companyName>The Apache Software Foundation</companyName>
    <companyLogo>http://www.apache.org/images/asf_logo_wide.png</companyLogo>
    <projectLogo>./images/doxia-logo.png</projectLogo>
  </cover>
</document>
