<?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.
-->
<set xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="5.0" 
      xmlns:xl="http://www.w3.org/1999/xlink"
      xmlns:xi="http://www.w3.org/2001/XInclude"
      xsi:schemaLocation="http://docbook.org/ns/docbook ../../content/dtd/docbook.xsd"
      xmlns="http://docbook.org/ns/docbook">

    <info>
        <title>Apache OFBiz official documentation.</title>
        <copyright><year>2009</year><holder>Apache Foundation.</holder></copyright>
        <abstract>
        <para>
            This Book is currently in an experimental stage. It will be the start of moving the OFBiz documentation from the current 
            <link xl:href="http://docs.ofbiz.org">OFBiz documentation site</link> and the old ofbiz website (Entity documents) to the OFBiz content component. 
            The layout is currently open for discussion by the OFBiz community. 
        </para>
        <para>
            The advantages of using it within OFBiz are:
            <orderedlist>
                <listitem><para>No external system required for documentation</para></listitem>
                <listitem><para>The content of the internal help files can be used within the documentation</para></listitem>
                <listitem><para>The documentation always has the same version as the system (It is part of it)</para></listitem>
                <listitem><para>The content is stored in a internationally accepted <link xl:href="http://docbook.org">'DocBook'</link> format</para></listitem>
                <listitem><para>The content can be easily presented in the selected visual schemas (To be implemented)</para></listitem>
            </orderedlist>
        </para>
        <para>
            If you want to contribute to this document, you are very welcome.
            Several possibilities exist:
            <orderedlist>
                <listitem><para>Convert existing OFBiz documents on the <link xl:href="http://docs.ofbiz.org">OFBiz documentation site to the <link xl:href="http://docbook.org">docbook</link> format</link></para></listitem>
                <listitem><para>Write new document chapters for an OFBiz component</para></listitem>
                <listitem><para>Write new Help screens which can be inserted as sections in the document.</para></listitem>
            </orderedlist>
            How to contribute? It depends if you have a local OFBiz system or not. If you have, check the appendix for an explanation how the document text is stored within the OFBiz system.
            If you do not have a local OFBiz system write your text in an xml editor using the DocBook V5.0 schema's.
            If you have text to contribute create a Jira issue and upload your text to the issue.           
        </para>
        </abstract>
    </info> 

    <xi:include href="ApacheOfbizUser.xml"/>
    <xi:include href="ApacheOfbizTechnical.xml"/>

</set>