<?xml version="1.0" encoding="UTF-8" ?>

<xsd:schema
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns="http://maven-plugins.sourceforge.net/tasks/1_0_0"
  targetNamespace="http://maven-plugins.sourceforge.net/tasks/1_0_0"
  elementFormDefault="qualified">

  <xsd:element name="document">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="properties" />
        <xsd:element ref="body" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="properties">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="title" />
        <xsd:element ref="author" maxOccurs="unbounded" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="title">
    <xsd:complexType mixed="true" />
  </xsd:element>

  <xsd:element name="author">
    <xsd:complexType mixed="true">
      <xsd:attribute name="email" type="xsd:string" use="required" />
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="body">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="category" maxOccurs="unbounded" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="category">
    <xsd:complexType>
      <xsd:choice>
        <xsd:element ref="subcategory" maxOccurs="unbounded"/>
        <xsd:element ref="task"  maxOccurs="unbounded"/>
      </xsd:choice>
      <xsd:attribute name="owner" type="xsd:string" use="required" />
      <xsd:attribute name="name" type="xsd:NMTOKEN" use="required" />
      <xsd:attribute name="description" type="xsd:string" use="required" />
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="subcategory">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="task" maxOccurs="unbounded" />
      </xsd:sequence>
      <xsd:attribute name="name" type="xsd:string" use="required" />
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="task">
    <xsd:sequence>
      <xsd:any namespace="##any" processContents="lax"
        minOccurs="0" maxOccurs="unbounded" /> 
    </xsd:sequence>
    <xsd:complexType mixed="true">
      <xsd:attribute name="creator" type="xsd:string" use="required" />
      <xsd:attribute name="priority" type="xsd:string" use="optional" />
      <xsd:attribute name="effort" type="xsd:string" use="optional" />
      <xsd:attribute name="startdate" type="xsd:string" use="optional" />
      <xsd:attribute name="enddate" type="xsd:string" use="optional" />
      <xsd:attribute name="status" type="xsd:string" use="optional" />
      <xsd:attribute name="assignedto" type="xsd:string" use="optional" />
      <xsd:attribute name="version" type="xsd:string" use="optional" />
    </xsd:complexType>
  </xsd:element>

</xsd:schema>
