<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            elementFormDefault="qualified"
            xmlns="meta.dhis.hisp.org"
            targetNamespace="meta.dhis.hisp.org">

<!-- Meta Object holding all other objects -->
  <xsd:element name="meta" type="Meta" />
  <!-- DE group of objects -->
  <xsd:element name="dataElementCategoryOption" type="DataElementCategoryOption"/>
  <xsd:element name="dataElementCategory" type="DataElementCategory"/>
  <xsd:element name="dataElementCategoryCombo" type="DataElementCategoryCombo"/>
  <xsd:element name="dataElement" type="DataElement" />
  <!-- Indicator group of objects -->
  <xsd:element name="indicatorType" type="IndicatorType" />
  <xsd:element name="indicator" type="Indicator" />
  <xsd:element name="indicatorGroup" type="IndicatorGroup" />
  <!-- OrgUnit group of objects -->
  <xsd:element name="organisationUnit" type="OrganisationUnit" />
  <xsd:element name="organisationUnitGroup" type="OrganisationUnitGroup" />
  <xsd:element name="organisationUnitLevel" type="OrganisationUnitLevel" />
  <!-- Data Set and all other linked objects [periodtype, dataentryform, section] -->
  <xsd:element name="periodType" type="PeriodType" />
  <xsd:element name="dataEntryForm" type="DataEntryForm" />
  <xsd:element name="dataSet" type="DataSet" />
  <xsd:element name="section" type="Section" />

<xsd:complexType name="Meta">
    <xsd:sequence>
      <xsd:element ref="dataElementCategoryOption" minOccurs="0" maxOccurs="unbounded" />
      <xsd:element ref="dataElementCategory" minOccurs="0" maxOccurs="unbounded" />
      <xsd:element ref="dataElementCategoryCombo" minOccurs="0" maxOccurs="unbounded" />
      <xsd:element ref="dataElement" minOccurs="0" maxOccurs="unbounded" />

      <xsd:element ref="indicatorType" minOccurs="0" maxOccurs="unbounded" />
      <xsd:element ref="indicator" minOccurs="0" maxOccurs="unbounded" />
      <xsd:element ref="indicatorGroup" minOccurs="0" maxOccurs="unbounded" />

      <xsd:element ref="organisationUnitLevel" minOccurs="0" maxOccurs="unbounded" />
      <xsd:element ref="organisationUnit" minOccurs="0" maxOccurs="unbounded" />
      <xsd:element ref="organisationUnitGroup" minOccurs="0" maxOccurs="unbounded" />

      <xsd:element ref="periodType" minOccurs="0" maxOccurs="unbounded" />
      <xsd:element ref="dataEntryForm" minOccurs="0" maxOccurs="unbounded" />
      <xsd:element ref="dataSet" minOccurs="0" maxOccurs="unbounded" />
      <xsd:element ref="section" minOccurs="0" maxOccurs="unbounded" />

    </xsd:sequence>
</xsd:complexType>

<xsd:complexType name="DataElementCategoryOption">
    <xsd:all>
      <xsd:element name="id" type="xsd:int" minOccurs="1" maxOccurs="1" />

      <xsd:element name="name">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:maxLength value="30" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>

    </xsd:all>
</xsd:complexType>

<xsd:complexType name="DataElementCategory">
    <xsd:sequence>

      <xsd:element name="id" type="xsd:int" minOccurs="1" maxOccurs="1" />

      <xsd:element name="name">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:maxLength value="30" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>

	  <xsd:element name="categoryOptions" type="xsd:int"  minOccurs="1" maxOccurs="unbounded" />

    </xsd:sequence>

</xsd:complexType>

<xsd:complexType name="DataElementCategoryCombo">
      <xsd:sequence>

      <xsd:element name="id" type="xsd:int" minOccurs="1" maxOccurs="1" />

      <xsd:element name="name">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:maxLength value="30" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>

	  <xsd:element name="categories" type="xsd:int"  minOccurs="1" maxOccurs="unbounded" />

    </xsd:sequence>

</xsd:complexType>

<xsd:complexType name="DataElement">
    <xsd:all>

      <xsd:element name="id" type="xsd:int" minOccurs="1" maxOccurs="1" />

      <xsd:element name="name">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:maxLength value="130" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>

      <xsd:element name="shortName">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:maxLength value="30" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>

      <xsd:element name="active">
        <xsd:simpleType>
          <xsd:restriction base="xsd:boolean">
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>  

      <xsd:element name="domainType">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:maxLength value="130" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>

      <xsd:element name="type">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:maxLength value="30" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>

      <xsd:element name="numberType">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:maxLength value="30" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>

      <xsd:element name="aggregationOperator">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:maxLength value="30" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>

      <xsd:element name="categoryCombo" type="xsd:int" minOccurs="1" maxOccurs="1" />

    </xsd:all>
</xsd:complexType>

<xsd:complexType name="IndicatorType">
      <xsd:all>

      <xsd:element name="id" type="xsd:int"  minOccurs="1" maxOccurs="1" />

      <xsd:element name="name">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:maxLength value="130" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>

	  <xsd:element name="factor" type="xsd:int"  minOccurs="1" maxOccurs="1" />

	  <xsd:element name="number" type="xsd:boolean"  minOccurs="1" maxOccurs="1" />

    </xsd:all>

</xsd:complexType>

<xsd:complexType name="Indicator">
      <xsd:all>

	  <xsd:element name="id" type="xsd:int" minOccurs="1" maxOccurs="1" />

      <xsd:element name="name">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:maxLength value="130" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>

      <xsd:element name="shortName">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:maxLength value="30" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>

      <xsd:element name="code" type="xsd:string" minOccurs="0" maxOccurs="1" />

      <xsd:element name="alternativeName" type="xsd:string" minOccurs="0" maxOccurs="1" />

      <xsd:element name="annualized" type="xsd:boolean"/>

      <xsd:element name="url" type="xsd:string" minOccurs="0" maxOccurs="1" />
      <xsd:element name="numerator" type="xsd:string" minOccurs="0" maxOccurs="1" />
      <xsd:element name="numeratorDescription" type="xsd:string" minOccurs="0" maxOccurs="1" />
      <xsd:element name="numeratorAggregationOperator" type="xsd:string" minOccurs="0" maxOccurs="1" />
      <xsd:element name="denominator" type="xsd:string" minOccurs="0" maxOccurs="1" />
      <xsd:element name="denominatorDescription" type="xsd:string" minOccurs="0" maxOccurs="1" />
      <xsd:element name="denominatorAggregationOperator" type="xsd:string" minOccurs="0" maxOccurs="1" />

      <xsd:element name="indicatorType" type="xsd:int" minOccurs="1" maxOccurs="1" />

    </xsd:all>

</xsd:complexType>

<xsd:complexType name="IndicatorGroup">
    <xsd:sequence>

      <xsd:element name="id" type="xsd:int" minOccurs="1" maxOccurs="1" />

      <xsd:element name="name">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:maxLength value="30" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>

	  <xsd:element name="members" type="xsd:int"  minOccurs="1" maxOccurs="unbounded" />

    </xsd:sequence>

</xsd:complexType>

<xsd:complexType name="OrganisationUnitLevel">
      <xsd:sequence>

      <xsd:element name="id" type="xsd:int"  minOccurs="1" maxOccurs="1" />

      <xsd:element name="name">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:maxLength value="130" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>

	  <xsd:element name="level" type="xsd:int"  minOccurs="1" maxOccurs="1" />

    </xsd:sequence>

</xsd:complexType> 

<xsd:complexType name="OrganisationUnit">
      <xsd:all>

      <xsd:element name="id" type="xsd:int"  minOccurs="1" maxOccurs="1" />

      <xsd:element name="name">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:maxLength value="130" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>

	  <xsd:element name="parent" type="xsd:int"  minOccurs="0" maxOccurs="1" />
      <xsd:element name="openingDate" type="xsd:date" minOccurs="0" maxOccurs="1" />
      <xsd:element name="closedDate" type="xsd:date" minOccurs="0" maxOccurs="1" />
      <xsd:element name="comment" type="xsd:string" minOccurs="0" maxOccurs="1" />
      <xsd:element name="geoCode" type="xsd:string" minOccurs="0" maxOccurs="1" />
      <xsd:element name="featureType" type="xsd:string" minOccurs="0" maxOccurs="1" />
      <xsd:element name="coordinates" type="xsd:string" minOccurs="0" maxOccurs="1" />
      <xsd:element name="url" type="xsd:string" minOccurs="0" maxOccurs="1" />
      <xsd:element name="contactPerson" type="xsd:string" minOccurs="0" maxOccurs="1" />
      <xsd:element name="address" type="xsd:string" minOccurs="0" maxOccurs="1" />
      <xsd:element name="email" type="xsd:string" minOccurs="0" maxOccurs="1" />
      <xsd:element name="phoneNumber" type="xsd:string" minOccurs="0" maxOccurs="1" />

	  <xsd:element name="active" type="xsd:boolean"  minOccurs="1" maxOccurs="1" />

    </xsd:all>

</xsd:complexType>

<xsd:complexType name="OrganisationUnitGroup">
      <xsd:sequence>

      <xsd:element name="id" type="xsd:int"  minOccurs="1" maxOccurs="1" />

      <xsd:element name="name">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:maxLength value="130" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>

	  <xsd:element name="members" type="xsd:int"  minOccurs="0" maxOccurs="unbounded" />

    </xsd:sequence>

</xsd:complexType> 

<xsd:complexType name="PeriodType">
      <xsd:sequence>

      <xsd:element name="id" type="xsd:int"  minOccurs="1" maxOccurs="1" />

      <xsd:element name="name">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:maxLength value="130" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>

    </xsd:sequence>

</xsd:complexType>  

<xsd:complexType name="DataEntryForm">
      <xsd:sequence>

      <xsd:element name="id" type="xsd:int"  minOccurs="1" maxOccurs="1" />

      <xsd:element name="name">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:maxLength value="130" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>

	<xsd:element name="htmlCode" type="xsd:string"  minOccurs="1" maxOccurs="1" />

    </xsd:sequence>

</xsd:complexType>   


<xsd:complexType name="DataSet">
      <xsd:sequence>

      <xsd:element name="id" type="xsd:int"  minOccurs="1" maxOccurs="1" />

      <xsd:element name="name">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:maxLength value="130" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>

	<xsd:element name="dataEntryForm" type="xsd:int"  minOccurs="0" maxOccurs="1" />
	<xsd:element name="dataElements" type="xsd:int"  minOccurs="0" maxOccurs="unbounded" />
    <xsd:element name="sources" type="xsd:int"  minOccurs="0" maxOccurs="unbounded" />
	<xsd:element name="sections" type="xsd:int"  minOccurs="0" maxOccurs="unbounded" />

    </xsd:sequence>

</xsd:complexType>   

<xsd:complexType name="Section">
      <xsd:sequence>

      <xsd:element name="id" type="xsd:int"  minOccurs="1" maxOccurs="1" />

      <xsd:element name="name">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:maxLength value="130" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>

	<xsd:element name="dataSet" type="xsd:int"  minOccurs="0" maxOccurs="1" />
	<xsd:element name="dataElements" type="xsd:int"  minOccurs="0" maxOccurs="unbounded" />
    <xsd:element name="sortOrder" type="xsd:int"  minOccurs="0" maxOccurs="unbounded" />

    </xsd:sequence>

</xsd:complexType>        
        
</xsd:schema>