<?xml version="1.0"?>
<!--
    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>
    <properties>
        <title>Apache Commons VFS Core</title>
        <author email="dev@commons.apache.org">Apache Commons Developers</author>
    </properties>

    <body>

      <section name="About Apache Commons VFS Core">
        <p>
          This is the core module containing the Apache Commons VFS API,
          implementation as well as various
          <a href="../filesystems.html">file system providers</a>.
        </p><p>
          The documentation on how to use the API can be found in the
          <a href="../api.html">parent module</a>.
        </p>
      </section>

    </body>
</document>
