<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
           	xmlns:dnsValidator="it.nic.dns.validator"
       	 	targetNamespace="it.nic.dns.validator"
        	elementFormDefault="unqualified"
        	attributeFormDefault="unqualified">

	<xsd:include schemaLocation="DnsValidatorDataType.xsd" />

	<xsd:element name="result" type="dnsValidator:DnsValidatorResult" />

	<xsd:complexType name="DnsValidatorResult">
	  	<xsd:sequence>
	  		<xsd:element name="domain" type="xsd:string" />
	  		<xsd:element name="status" type="dnsValidator:Status" />
	  		<xsd:element name="validationId" type="xsd:string" />
	  		<xsd:element name="validationDate" type="xsd:dateTime"/>
	  		<xsd:element name="nameservers" type="dnsValidator:NameserverList" />
	  		<xsd:element name="tests" type="dnsValidator:ValidationTestList" />
	  		<xsd:element name="queries" type="dnsValidator:QueryList"/>
			<xsd:element name="dnsSecSection" type="dnsValidator:DnsSecSection" minOccurs="0" />
	  	</xsd:sequence>
	  	<xsd:attribute name="version" type="xsd:string"/>
	</xsd:complexType>

	<xsd:complexType name="DnsSecSection">
	  	<xsd:sequence>
			<xsd:element name="dsRecords" type="dnsValidator:DSRecordList"  minOccurs="0" />
	  		<xsd:element name="tests" type="dnsValidator:ValidationTestList" />
	  		<xsd:element name="queries" type="dnsValidator:QueryList"/>
	  	</xsd:sequence>
	</xsd:complexType>

	<xsd:simpleType name="Status">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="SUCCEEDED"/>
			<xsd:enumeration value="WARNING"/>
			<xsd:enumeration value="FAILED"/>
		</xsd:restriction>
	</xsd:simpleType>
	
	<!-- Query's type list, not complete -->
	<xsd:simpleType name="QueryType">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="ANY"/>
			<xsd:enumeration value="SOA"/>
			<xsd:enumeration value="NS"/>
			<xsd:enumeration value="A"/>
			<xsd:enumeration value="MX"/>
			<xsd:enumeration value="AAAA"/>
			<xsd:enumeration value="CNAME"/>
			<xsd:enumeration value="PTR"/>
			<xsd:enumeration value="TXT"/>
			<xsd:enumeration value="DNSKEY"/>
			<xsd:enumeration value="RRSIG"/>
			<xsd:enumeration value="DS"/>
		</xsd:restriction>
	</xsd:simpleType>
	
	<xsd:complexType name="ValidationTest">
		<xsd:sequence>
			<xsd:element name="nameserver" minOccurs="0" maxOccurs="unbounded" type="dnsValidator:NameserverResult"/>
			<xsd:element name="detail" type="dnsValidator:Detail" minOccurs="0" maxOccurs="unbounded"/>
		</xsd:sequence>
		<xsd:attribute name="name" type="xsd:string" use="required"/>
		<xsd:attribute name="status" type="dnsValidator:Status" />
		<xsd:attribute name="skipped" type="xsd:boolean" />
	</xsd:complexType>
	
	<xsd:complexType name="ValidationTestList">
	  	<xsd:sequence>
	  		<xsd:element name="test" type="dnsValidator:ValidationTest" minOccurs="1" maxOccurs="unbounded"/>
	  	</xsd:sequence>
	</xsd:complexType>
	
	<xsd:complexType name="QueryResult">
		<xsd:sequence>
			<xsd:element name="queryFor" type="xsd:string"/>
			<xsd:element name="type" type="dnsValidator:QueryType"/>
			<xsd:element name="destination" type="xsd:string"/>
			<xsd:element name="result" type="xsd:string"/>
		</xsd:sequence>
		<xsd:attribute name="id" type="xsd:int"/>
	</xsd:complexType>
	
	<xsd:complexType name="QueryList">
	  	<xsd:sequence>
	  		<xsd:element name="query" type="dnsValidator:QueryResult" minOccurs="0" maxOccurs="unbounded"/>
	  	</xsd:sequence>
	</xsd:complexType>
	
	<xsd:complexType name="NameserverResult">
		<xsd:sequence>
			<xsd:element name="detail" type="dnsValidator:Detail" minOccurs="0" maxOccurs="unbounded"/>
		</xsd:sequence>		
		<xsd:attribute name="name" use="required" type="xsd:string"/>
		<xsd:attribute name="status" use="required" type="dnsValidator:Status" />
	</xsd:complexType>
	
	<xsd:complexType name="Detail">
		<xsd:simpleContent>
			<xsd:extension base="xsd:string">
				<xsd:attribute name="name" use="optional" type="xsd:string"/>
				<xsd:attribute name="status" use="optional" type="dnsValidator:Status" />
				<xsd:attribute name="queryId" use="optional" type="xsd:int"/>
		</xsd:extension>
		</xsd:simpleContent>
	</xsd:complexType>
	

	<xsd:complexType name="NameserverList">
	  	<xsd:sequence>
	  		<xsd:element name="nameserver" type="dnsValidator:Nameserver" minOccurs="0" maxOccurs="unbounded"/>
	  	</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="DSRecordList">
		<xsd:sequence>
			<xsd:element name="dsRecord" type="dnsValidator:DSRecord" minOccurs="0" maxOccurs="unbounded"/>
		</xsd:sequence>
	</xsd:complexType>

</xsd:schema>
