<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

	<xs:complexType name="configurations-conf">
        <xs:attribute name="name" type="xs:string" use="required"/>
        <xs:attribute name="transitive" type="xs:boolean"/>
        <xs:attribute name="extends" type="xs:string"/>
        <xs:attribute name="description" type="xs:string"/>
        <xs:attribute name="deprecated" type="xs:string"/>
        <xs:attribute name="visibility" default="public">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:enumeration value="private"/>
					<xs:enumeration value="public"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>

  <xs:element name="ivy-module">
      <xs:complexType>
        <xs:sequence>
  		    <xs:element name="info">
            	<xs:complexType>
			        <xs:sequence>
			      		<xs:element name="license" minOccurs="0" maxOccurs="unbounded">
			            	<xs:complexType>
					            <xs:attribute name="name" type="xs:string" use="required"/>
					            <xs:attribute name="url" type="xs:string"/>
			            	</xs:complexType>
			      		</xs:element>
			      		<xs:element name="ivyauthor" minOccurs="0" maxOccurs="unbounded">
			            	<xs:complexType>
					            <xs:attribute name="name" type="xs:string" use="required"/>
					            <xs:attribute name="url" type="xs:string"/>
			            	</xs:complexType>
			      		</xs:element>
			      		<xs:element name="repository" minOccurs="0" maxOccurs="unbounded">
			            	<xs:complexType>
					            <xs:attribute name="name" type="xs:string" use="required"/>
					            <xs:attribute name="url" type="xs:string"/>
					            <xs:attribute name="pattern" type="xs:string"/>
					            <xs:attribute name="ivys" type="xs:boolean"/>
					            <xs:attribute name="artifacts" type="xs:boolean"/>
			            	</xs:complexType>
			      		</xs:element>
			      		<xs:element name="description" minOccurs="0" maxOccurs="1">
			            	<xs:complexType mixed="true">
			            			<xs:sequence>
			            				<xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
					            	</xs:sequence>
					            <xs:attribute name="homepage" type="xs:string"/>
			            	</xs:complexType>
			      		</xs:element>
			        </xs:sequence>
		            <xs:attribute name="organisation" type="xs:string" use="required"/>
		            <xs:attribute name="module" type="xs:string" use="required"/>
		            <xs:attribute name="branch" type="xs:string"/>
		            <xs:attribute name="revision" type="xs:string"/>
		            <xs:attribute name="status" type="xs:string"/>
		            <xs:attribute name="publication" type="xs:string"/>
		            <xs:attribute name="resolver" type="xs:string"/>
		            <xs:attribute name="namespace" type="xs:string"/>
		            <xs:attribute name="default" type="xs:boolean"/>
	            </xs:complexType>
      		</xs:element>
      		<xs:element name="configurations" minOccurs="0">
			      <xs:complexType>
				        <xs:sequence>
				        	<xs:choice minOccurs="0" maxOccurs="unbounded">
					      		<xs:element name="conf" type="configurations-conf"/>
					      		<xs:element name="include">
					            	<xs:complexType>
							            <xs:attribute name="file" type="xs:string"/>
							            <xs:attribute name="url"  type="xs:string"/>
					            	</xs:complexType>
					      		</xs:element>
					      	</xs:choice>
				        </xs:sequence>
						<xs:attribute name="defaultconfmapping" type="xs:string"/>				  
						<xs:attribute name="confmappingoverride" type="xs:boolean" />      
			      </xs:complexType>
      		</xs:element>
      		<xs:element name="publications" minOccurs="0">
			      <xs:complexType>
				        <xs:sequence>
				      		<xs:element name="artifact" minOccurs="0" maxOccurs="unbounded">
				            	<xs:complexType>
							        <xs:sequence>
							      		<xs:element name="conf" minOccurs="0" maxOccurs="unbounded">
							            	<xs:complexType>
									            <xs:attribute name="name" type="xs:string" use="required"/>
							            	</xs:complexType>
							      		</xs:element>
							        </xs:sequence>
						            <xs:attribute name="name" type="xs:string"/>
						            <xs:attribute name="type" type="xs:string"/>
						            <xs:attribute name="ext" type="xs:string"/>
						            <xs:attribute name="conf" type="xs:string"/>
						            <xs:attribute name="url" type="xs:string"/>
				            	</xs:complexType>
				      		</xs:element>
				        </xs:sequence>
			      </xs:complexType>
      		</xs:element>
      		<xs:element name="dependencies" minOccurs="0">
			      <xs:complexType>
				        <xs:sequence>
				      		<xs:element name="dependency" minOccurs="0" maxOccurs="unbounded">
				            	<xs:complexType>
							        <xs:sequence>
							      		<xs:element name="conf" minOccurs="0" maxOccurs="unbounded">
							            	<xs:complexType>
										        <xs:sequence>
										      		<xs:element name="mapped" minOccurs="0" maxOccurs="unbounded">
										            	<xs:complexType>
												            <xs:attribute name="name" type="xs:string" use="required"/>
										            	</xs:complexType>
										      		</xs:element>
										        </xs:sequence>
									            <xs:attribute name="name" type="xs:string" use="required"/>
									            <xs:attribute name="mapped" type="xs:string"/>
							            	</xs:complexType>
							      		</xs:element>
							      		<xs:element name="artifact" minOccurs="0" maxOccurs="unbounded">
							            	<xs:complexType>
										        <xs:sequence>
										      		<xs:element name="conf" minOccurs="0" maxOccurs="unbounded">
										            	<xs:complexType>
												            <xs:attribute name="name" type="xs:string" use="required"/>
										            	</xs:complexType>
										      		</xs:element>
										        </xs:sequence>
									            <xs:attribute name="name" type="xs:string" use="required"/>
									            <xs:attribute name="type" type="xs:string"/>
									            <xs:attribute name="ext" type="xs:string"/>
									            <xs:attribute name="conf" type="xs:string"/>
									            <xs:attribute name="matcher" type="xs:string"/>
									            <xs:attribute name="url" type="xs:string"/>
							            	</xs:complexType>
							      		</xs:element>
							      		<xs:element name="include" minOccurs="0" maxOccurs="unbounded">
							            	<xs:complexType>
										        <xs:sequence>
										      		<xs:element name="conf" minOccurs="0" maxOccurs="unbounded">
										            	<xs:complexType>
												            <xs:attribute name="name" type="xs:string" use="required"/>
										            	</xs:complexType>
										      		</xs:element>
										        </xs:sequence>
									            <xs:attribute name="name" type="xs:string"/>
									            <xs:attribute name="type" type="xs:string"/>
									            <xs:attribute name="ext" type="xs:string"/>
									            <xs:attribute name="conf" type="xs:string"/>
									            <xs:attribute name="matcher" type="xs:string"/>
							            	</xs:complexType>
							      		</xs:element>
							      		<xs:element name="exclude" minOccurs="0" maxOccurs="unbounded">
							            	<xs:complexType>
										        <xs:sequence>
										      		<xs:element name="conf" minOccurs="0" maxOccurs="unbounded">
										            	<xs:complexType>
												            <xs:attribute name="name" type="xs:string" use="required"/>
										            	</xs:complexType>
										      		</xs:element>
										        </xs:sequence>
									            <xs:attribute name="org" type="xs:string"/>
									            <xs:attribute name="module" type="xs:string"/>
									            <xs:attribute name="name" type="xs:string"/>
									            <xs:attribute name="type" type="xs:string"/>
									            <xs:attribute name="ext" type="xs:string"/>
									            <xs:attribute name="conf" type="xs:string"/>
									            <xs:attribute name="matcher" type="xs:string"/>
							            	</xs:complexType>
							      		</xs:element>
							        </xs:sequence>
						            <xs:attribute name="org" type="xs:string"/>
						            <xs:attribute name="name" type="xs:string" use="required"/>
						            <xs:attribute name="branch" type="xs:string"/>
						            <xs:attribute name="rev" type="xs:string" use="required"/>
						            <xs:attribute name="force" type="xs:boolean"/>
						            <xs:attribute name="changing" type="xs:boolean" default="false"/>
						            <xs:attribute name="transitive" type="xs:boolean" default="true"/>
						            <xs:attribute name="conf" type="xs:string"/>
				            	</xs:complexType>
				      		</xs:element>
				        </xs:sequence>
						<xs:attribute name="defaultconf" type="xs:string"/>				        
						<xs:attribute name="defaultconfmapping" type="xs:string"/>				        
                        <xs:attribute name="confmappingoverride" type="xs:boolean" />
			      </xs:complexType>
      		</xs:element>
      		<xs:element name="conflicts" minOccurs="0">
			      <xs:complexType>
				        <xs:sequence>
				      		<xs:element name="manager" maxOccurs="unbounded">
				            	<xs:complexType>
						            <xs:attribute name="org" type="xs:string"/>
						            <xs:attribute name="module" type="xs:string"/>
						            <xs:attribute name="name" type="xs:string"/>
						            <xs:attribute name="rev" type="xs:string"/>
						            <xs:attribute name="matcher" type="xs:string"/>
				            	</xs:complexType>
				      		</xs:element>
				        </xs:sequence>
			      </xs:complexType>
      		</xs:element>
        </xs:sequence>
        <xs:attribute name="version" type="xs:string" use="required"/>
      </xs:complexType>
  </xs:element>

</xs:schema>
