<?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.
-->
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V2.0//EN" "http://forrest.apache.org/dtd/document-v20.dtd">
<document>
  <header>
    <title>Welcome to the org.apache.forrest.plugin.input.doap Plugin</title>
  </header>
  <body>
    <section id="overview">
      <title>Apache Forrest - org.apache.forrest.plugin.input.doap Plugin</title>
      <p>
        Renders DOAP files in a human readable form, provides various indexes of
        DOAP collections and allows the extraction of contact details from a set
        of DOAP files.
      </p>
    </section>
    <section>
      <title>Project Details</title>
      <p>
        Project details are generated from a project descriptor file. This file
        can be in any of the following formats:
      </p>
      <ul>
        <li>DOAP</li>
        <li>DOAP over ATOM</li>
      </ul>
      <note>
        We need your help in adding more formats.
      </note>
      <p>
        The location of this descriptor file is specified in the locationmap
        with the hint <code>doap.descriptor</code>. This defaults to a file
        called doap.xml in the root of your project's content directory. To place
        your descriptor in a different location simply add a matcher like that
        shown below in your project locationmap file.
      </p>
      <source>
<![CDATA[
    <match pattern="doap.descriptor.projectDetails">
      <location src="[path/to/descriptor/file]" />
    </match>    
      ]]>
      </source>
      <p>
        To retrieve the project DOAP file in its raw form request the file
        <code>/projectDetails/source.xml</code>.
      </p>
      <p>
        To retrieve the project details page request the file
        <code>/projectDetails.[FORMAT]</code>.
      </p>
      <section>
        <title>Multiple Projects</title>
        <p>
          You can use the doap plugin to pull together project
          information for multiple projects. For example, take a look at the
          project details for <a href="projectDetails/forrest.html">Apache
          Forrest</a>.
        </p>
        <p>
          Using the locationmap you can retrieve this content from anywhere you
          want, for example, the DOAP file for the Forrest project comes from
          directly from SVN, thus we are always assured of it being up to date.
        </p>
        <p>
          To retrieve the project details of another project make a request for
          <code>projectDetails/[PROJECT_NAME].html</code>. For
          this to work your project locationmap must have an entry like this:
        </p>
        <source>
<![CDATA[    
    <match pattern="doap.descriptor.forrest">
      <location src="http://svn.apache.org/repos/asf/forrest/trunk/site-author/content/doap.xml"/>
    </match>    
        ]]>
        </source>
        <warning>
          FOR-910 "project DOAP file retrieved numerous times during docs
          generation" so use a local copy instead.
        </warning>
        <p>
          Of course, if you have a central location for all your project
          descriptor files you could use a match like this:
        </p>
        <source>
<![CDATA[    
    <match pattern="doap.descriptor.*">
      <location src="path_to_descriptors/{1}.xml"/>
    </match>    
        ]]>
        </source>
        <warning>
          The indexing of projects (described below) does not currently work
          with wildcard matchers in the locationmap.
        </warning>
      </section>
      <section>
        <title>Project Indexes</title>
        <p>
          The system will automatically create an index of projects from your
          projects locationmap file. For example, the "Projects" section of the
          navigation on the left is automatically generated.
        </p>
        <note>
          There is considerable repetition in the indexes in this demo. The
          intention is to show the range of indexes that can be created. You
          should select the most suitable for your individual project.
        </note>
        <warning>
          The indexes to be included in your site navigation only work correctly
          when generating a static site. You should only use page based indexes
          for dynamic sites.
        </warning>
      </section>
      <section>
        <title>Contact Lists</title>
        <p>You can extract a comma separated list of contact details contained
        in the collection of DOAP files by requesting 
        <a href="projectDetails/contacts.csv">projectDetails/contacts.csv</a>.</p>
      </section>
      <section>
        <title>Categories</title>
        <warning>This functionality is alpha quality and may change in the near future.
        In fact this was written by someone (me) who knows very little of RDF and currently
        has no network access or texts to inform this implementation. It is very likely there
        is a much better way to do this in the RDF world, I've tried, as much as possible,
        to make it possible to refactor this code when I'm more informed about how to do
        this. Use at your own risk, or better still, tell us how to improve it.</warning>
        
        <p>Projects can be assigned to one or more categories using the <code>doap:category</code>
        element. We recommend the use of an <code>rdf:resource</code> attribute to
        identify the category the project applies to. But what value should be given 
        to the <code>rdf:resource</code> attribute?</p>
        
        <p>At present we are using the categories defined by the Apache Software 
        Foundation. In the future we are likely to use the JISC standards catalogue
        as well.</p>
        
        <fixme author="rdg">Add links to previous para</fixme>
        
        <p>When rendering the category this plugin will attempt to resolve a proper name
        for the category. First, it will look in the <code>categoriesDefinitions.xml</code>
        file contained within this plugin. If no match is found in there it will look for
        a <code>dc:title</code> attribute in the doap file itself. If no such attribute is
        found it will use the value of <code>rdf:resource</code> attribute.</p>
      </section>
    </section>
    <section>
        <title>Dispatcher</title>
        <p>
          The DOAP plugin provides dispatcher templates for working with DOAP
          files. For usage instructions see the docs for the
          <a href="/ls.contracts.org.apache.forrest.plugin.input.doap.html">doap
          templates</a>.
        </p>
    </section>
    <section id="samples">
      <title>Samples</title>
      <p>
        This section includes links to a number of samples using this plugin.
        The plugin is intended to be self documenting through these samples. If
        you require further help please ask on the user mailing list.
      </p>
      
      <section>
        <title>Project Details</title>
      
        <ul>
          <li><a href="projectDetails/projectDetails.source.xml">Source XML file</a></li>
          <li><a href="projectDetails/projectDetails.rdf">Source RDF file (if the source file is an RDF/XML file this will be the same as the previous example - currently only RDF/XML is supported)</a></li>
          <li><a href="projectDetails/projectDetails.html">Descriptor page for this plugin</a></li>
          <li><a href="projectDetails/forrest.html">Descriptor page for Forrest</a></li>
          <li><a href="projectDetails/index/byLang.html">Index by language</a></li>
          <li><a href="projectDetails/index/byLang/Java.html">Index by specific language (Java)</a></li>
          <li><a href="projectDetails/index/byCategory.html">Index by category</a></li>
          <li><a href="projectDetails/allProjects.json">JSON file for all projects</a></li>
        </ul>
      </section>
      
      <section>
        <title>Maintainer Details</title>
        <ul>
          <li><a href="projectDetails/allMaintainers.rdf">All maintainers</a> for all projects in FOAF format</li>
          <li><a href="projectDetails/contacts.csv">Comma separated list of project contacts who have a recorded email address</a></li>
        </ul>
      </section>
      
      <section>
        <title>In Development Features</title>
      
          <ul>
            <li><a href="exhibitTest.html">Browse the catalogue using Exhibit from MIT</a></li>
            <li>Record relationships between projects. This is a simple relatedTo property
            and is not intended to replace detailed build information. 
            <warning>This feature currently uses a "relatedTo" proeprty that has been
            placed in the asfext namespace. Hwoever, at the time of writing this addition
            to the asfext namespace has not been approved.</warning></li>
          </ul>
      </section>
      
      <note>
        The more samples included here the easier it is for users to understand
        this plugin. If you can provide additional samples please do so.
      </note>
    </section>
  </body>
</document>
