<?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 xmlns="http://maven.apache.org/XDOC/2.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/xsd/xdoc-2.0.xsd">

  <properties>
    <title>Title</title>
    <author>Author</author>
    <date>Date</date>
  </properties>

  <body>

    <section name="Some Paragraph">
      <p>Paragraph 1, line 1. Paragraph 1, line 2.</p>
      <p>Paragraph 2, line 1. Paragraph 2, line 2.</p>
    </section>

    <section name="Section title">
      <subsection name="Sub-section title">
        <h4>Sub-sub-section title</h4>
        <h5>Sub-sub-sub-section</h5>
        <h6>Sub-sub-sub-sub-section</h6>

        <ul>
          <li>List item 1.</li>
          <li>List item 2. <p>Paragraph contained in list item 2.</p>
            <ul>
              <li>Sub-list item 1.</li>
              <li>Sub-list item 2.</li>
            </ul>
          </li>
          <li>List item 3. Force end of list:</li>
        </ul>

        <source>Verbatim text not contained in list item 3</source>

        <ol style="list-style-type: decimal">
          <li>Numbered item 1. <ol style="list-style-type: upper-alpha">
              <li>Numbered item A.</li>
              <li>Numbered item B.</li>
            </ol>
          </li>
          <li>Numbered item 2.</li>
        </ol>

        <p>List numbering schemes: [[1]], [[a]], [[A]], [[i]], [[I]].</p>

        <dl compact="compact">
          <dt>
            <b>Defined term 1</b>
          </dt>
          <dd>of definition list.</dd>
          <dt>
            <b>Defined term 2</b>
          </dt>
          <dd>of definition list. <source>Verbatim text in a box </source>
          </dd>
        </dl>

        <p>--- instead of +-- suppresses the box around verbatim text.</p>

        <img src="figure" alt="Figure caption"/>

        <table align="center">
          <caption>Table caption</caption>
          <tr valign="top">
            <th align="center">Centered<br/>cell 1,1</th>
            <th align="left">Left-aligned<br/>cell 1,2</th>
            <th align="right">Right-aligned<br/>cell 1,3</th>
          </tr>
          <tr valign="top">
            <td align="center">cell 2,1</td>
            <td align="left">cell 2,2</td>
            <td align="right">cell 2,3</td>
          </tr>
        </table>

        <p>No grid, no caption:</p>

        <table align="center">
          <tr valign="top">
            <td align="center">cell</td>
            <td align="center">cell</td>
          </tr>
          <tr valign="top">
            <td align="center">cell</td>
            <td align="center">cell</td>
          </tr>
        </table>

        <p>Horizontal line:</p>
        <hr/>

        <p>New page.</p>

        <p><i>Italic</i> font. <b>Bold</b> font. <tt>Monospaced</tt> font.</p>

        <p>
          <a id="anchor" name="anchor">Anchor</a>. Link to <a href="#anchor">Anchor</a>.
          Link to <a href="http://www.pixware.fr">http://www.pixware.fr</a>. Link to <a
            href="#anchor">showing alternate text</a>. Link to <a
            href="http://www.pixware.fr">Pixware home page</a>. </p>

        <p>Force line<br/>break.</p>

        <p>Non&#160;breaking&#160;space.</p>

        <p>Escaped special characters:<br/> ~<br/> =<br/> -<br/> +<br/> *<br/> [<br/> ]<br/>
          &lt;<br/> &gt;<br/> {<br/> }<br/> \ </p>

        <p>Copyright symbol: &#169; &#169; &#169;.</p>

      </subsection>
    </section>

  </body>

</document>
