File isorelax-maven-project.xsd of Package isorelax

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'
  elementFormDefault="qualified">
  <xs:element name="project">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="extend" minOccurs="0"/>
        <xs:element ref="pomVersion"/>
        <xs:element ref="id"/>
        <xs:element ref="name"/>
        <xs:element ref="groupId" minOccurs="0"/>
        <xs:element ref="currentVersion"/>
        <xs:element ref="organization"/>
        <xs:element ref="inceptionYear"/>
        <xs:element ref="package" minOccurs="0"/>
        <xs:element ref="logo" minOccurs="0"/>
        <xs:element ref="gumpRepositoryId" minOccurs="0"/>
        <xs:element ref="description" minOccurs="0"/>
        <xs:element ref="shortDescription"/>
        <xs:element ref="url" minOccurs="0" />
        <xs:element ref="issueTrackingUrl" minOccurs="0"/>
        <xs:element ref="siteAddress" minOccurs="0"/>
        <xs:element ref="siteDirectory" minOccurs="0"/>
        <xs:element ref="distributionDirectory" minOccurs="0"/>
        <xs:element ref="repository" minOccurs="0"/>
        <xs:element ref="versions" minOccurs="0"/>
        <xs:element ref="branches" minOccurs="0"/>
        <xs:element ref="mailingLists" minOccurs="0"/>
        <xs:element ref="developers"/>
        <xs:element ref="contributors" minOccurs="0"/>
        <xs:element ref="licenses" minOccurs="0"/>
        <xs:element ref="dependencies" minOccurs="0"/>
        <xs:element ref="build"/>
        <xs:element ref="reports" minOccurs="0"/>
        <xs:element ref="properties" minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="extend" type='xs:string'/>
  <xs:element name="connection" type='xs:string'/>
  <xs:element name="developerConnection" type='xs:string'/>
  <xs:element name="currentVersion" type='xs:string'/>
  <xs:element name="description" type='xs:string'/>
  <xs:element name="distributionDirectory" type='xs:string'/>
  <xs:element name="name" type='xs:string'/>
  <xs:element name="groupId" type='xs:string'/>
  <xs:element name="artifactId" type='xs:string'/>
  <xs:element name="gumpRepositoryId" type='xs:string'/>
  <xs:element name="id" type='xs:string'/>
  <xs:element name="inceptionYear" type='xs:gYear'/>
  <!-- not anyURI as it can contain ${pom....} -->
  <xs:element name="issueTrackingUrl" type='xs:string'/>
  <xs:element name="logo" type='xs:string'/>
  <xs:element name="package" type='xs:string'/>
  <xs:element name="pomVersion" type='xs:string'/>
  <xs:element name="shortDescription" type='xs:string'/>
  <xs:element name="siteAddress" type='xs:string'/>
  <xs:element name="siteDirectory" type='xs:string'/>
  <!-- not anyURI as it can contain ${pom....} -->
  <xs:element name="url" type='xs:string'/>

  <!-- /repository element -->
  <xs:element name="repository">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="connection"/>
        <xs:element ref="developerConnection" minOccurs="0"/>
        <xs:element ref="url" minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <!-- /organization element -->
  <xs:element name="organization">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="name"/>
        <xs:element ref="url" minOccurs="0" />
        <xs:element ref="logo" minOccurs="0" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <!-- /versions element -->
  <xs:element name="versions">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="version" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <!-- /versions/version element -->
  <xs:element name="version">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="id"/>
        <xs:element ref="name"/>
        <xs:element ref="tag"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <!-- /versions/version/tag and branches/branch/tag-->
  <xs:element name="tag" type='xs:string'/>
  
  <!-- /branches element -->
  <xs:element name="branches">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="branch" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <!-- /branches/branch element -->
  <xs:element name="branch">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="tag"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <!-- /mailingLists element -->
  <xs:element name="mailingLists">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="mailingList" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <!-- /mailingLists/mailingList element -->
  <xs:element name="mailingList">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="name"/>
        <xs:element ref="subscribe"/>
        <xs:element ref="unsubscribe"/>
        <xs:element ref="archive" minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <!-- /mailingLists/mailingList/subscribe element -->  
  <xs:element name="subscribe" type='xs:string'/>
  <!-- /mailingLists/mailingList/unsubscribe element -->  
  <xs:element name="unsubscribe" type='xs:string'/>
  <!-- /mailingLists/mailingList/archive element -->  
  <xs:element name="archive" type='xs:string'/>
  
  <!-- /developers element -->
  <xs:element name="developers">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="developer" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <!-- /developers/developer element -->
  <xs:element name="developer">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="name"/>
        <xs:element ref="id"/>
        <xs:group ref="contactDetails" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <!-- /developers/developer/contactDetails group and
       /contributors/contributor/contactDetails group -->
  <xs:group name="contactDetails">
      <xs:sequence>
        <xs:element ref="email"/>
        <xs:element name="organization" type='xs:string' minOccurs="0"/>
        <xs:element ref="roles" minOccurs="0" />
        <xs:element ref="url" minOccurs="0" />
        <xs:element ref="timezone" minOccurs="0" />
      </xs:sequence>
  </xs:group>

  <!-- contactDetails/email element -->
  <xs:element name="email" type='xs:string'/>

  <!-- contactDetails/roles element -->
  <xs:element name="roles">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="role" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <!-- contactDetails/roles/role element -->
  <xs:element name="role" type='xs:string'/>

  <!-- type for contactDetails/roles/timezone element -->  
  <xs:simpleType name="timezoneType">
    <xs:restriction base="xs:decimal">
      <xs:minInclusive value="-18"/>
      <xs:maxInclusive value="+18"/>
    </xs:restriction>
  </xs:simpleType> 
  
  <!-- contactDetails/roles/timezone element
       Stores a decimal that is the offset to GMT.
    -->  
  <xs:element name="timezone" type='timezoneType'/>

  <!-- /contributors element -->  
  <xs:element name="contributors">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="contributor" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <!-- /contributors/contributor element -->
  <xs:element name="contributor">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="name"/>
        <xs:group ref="contactDetails" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <!-- /licenses element -->
  <xs:element name="licenses">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="license" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <!-- /licenses/license element -->
  <xs:element name="license">
    <xs:complexType>
      <xs:sequence>
        <!-- name of the license, e.g. ASL 1.1 -->
        <xs:element ref="name" minOccurs="0"/>
        <!-- fetchable version of the license -->
        <xs:element ref="url" minOccurs="0" />
        <!-- 'manual' or 'repo' -->
        <xs:element ref="distribution" minOccurs="0" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <!-- /licenses/license/distribution element -->
  <xs:element name="distribution">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:pattern value="manual|repo"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  
  <!-- /dependencies element -->
  <xs:element name="dependencies">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="dependency" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <!-- /dependencies/dependency element -->
  <xs:element name="dependency">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="id" minOccurs="0" />
        <xs:element ref="groupId" minOccurs="0" />
        <xs:element ref="artifactId" minOccurs="0" />
        <xs:element name="version" type="xs:string" />
        <xs:element ref="jar" minOccurs="0"/>
        <xs:element ref="type" minOccurs="0"/>
        <xs:element ref="url" minOccurs="0"/>
        <xs:element ref="properties" minOccurs="0" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <!-- /dependencies/dependency/type element -->
  <xs:element name="type" type='xs:string'/>
  <!-- /dependencies/dependency/jar element -->
  <xs:element name="jar" type='xs:string'/>
  
  <!-- /build element -->
  <xs:element name="build">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="nagEmailAddress" minOccurs="0"/>
        <xs:element ref="sourceDirectory" minOccurs="0"/>
        <xs:element ref="sourceModifications" minOccurs="0"/>
        <xs:element ref="unitTestSourceDirectory" minOccurs="0"/>
        <xs:element ref="integrationUnitTestSourceDirectory" minOccurs="0"/>
        <xs:element ref="aspectSourceDirectory" minOccurs="0"/>
        <xs:element ref="unitTest" minOccurs="0"/>
        <xs:element ref="integrationUnitTest" minOccurs="0"/>
        <xs:element ref="resources" minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="nagEmailAddress" type='xs:string'/>

  <xs:element name="sourceDirectory" type='xs:string'/>
  
  <xs:element name="sourceModifications">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="sourceModification" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  
  <xs:element name="sourceModification">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="className" type='xs:string'/>
        <xs:element ref="includes" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="excludes" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  
  <xs:element name="unitTestSourceDirectory" type='xs:string'/>
  <xs:element name="integrationUnitTestSourceDirectory" type='xs:string'/>
  <xs:element name="aspectSourceDirectory" type='xs:string'/>
  
  <xs:element name="unitTest">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="includes" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="excludes" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="resources" minOccurs="0" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="includes">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="include" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="excludes">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="exclude" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="include" type='xs:string'/>
  <xs:element name="exclude" type='xs:string'/>
  
  <xs:element name="integrationUnitTest">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="includes" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="excludes" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="resources">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="resource" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="directory" type='xs:string'/>
  <xs:element name="targetPath" type='xs:string'/>
  <xs:element name="filtering" type="xs:boolean" />

  <xs:element name="resource">
    <xs:complexType>
      <xs:sequence>
        <!-- FIXME: I think that this defaults to basedir, need a check -->
        <xs:element ref="directory" minOccurs="0"/>
        <xs:element ref="targetPath" minOccurs="0"/>
        <xs:element ref="includes" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="excludes" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="filtering" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element> 

  <xs:element name="reports">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="report" minOccurs="0" maxOccurs="unbounded" 
          type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="properties">
    <xs:complexType>
      <xs:sequence>
        <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="classloader">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:pattern value="root|root.maven"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>

</xs:schema>