﻿<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:complexType name="PointType">
    <xs:attribute name="Key" type="xs:int" use="required" />
    <xs:attribute name="X" type="xs:double" use="required" />
    <xs:attribute name="Z" type="xs:double" use="required" />
  </xs:complexType>

  <xs:complexType name="CurveType">
    <xs:attribute name="Key" type="xs:int" use="required" />
    <xs:attribute name="HeadPoint" type="xs:int" use="required" />
    <!--references Key of PointType-->
    <xs:attribute name="EndPoint" type="xs:int" use="required" />
    <!--references Key of PointType-->
  </xs:complexType>

  <xs:complexType name ="LoopType">
    <xs:sequence>
      <xs:element name="Curves">
        <xs:complexType>
          <xs:sequence>
            <xs:element maxOccurs="unbounded" name="Curve">
              <xs:complexType>
                <xs:attribute name="Curve" type="xs:int" use="required" />
                <!--references Key of CurveType-->
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="Key" type="xs:int" use="required" />
  </xs:complexType>

  <xs:complexType name="SurfaceType">
    <xs:sequence>
      <xs:element name="InnerLoops">
        <xs:complexType>
          <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="unbounded" name="InnerLoop">
              <xs:complexType>
                <xs:attribute name="Loop" type="xs:int" use="required" />
                <!--references Key of LoopType-->
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="Key" type="xs:int" use="required" />
    <xs:attribute name="OuterLoop" type="xs:int" use="required" />
    <!--references Key of LoopType-->
  </xs:complexType>

  <xs:complexType name="GeometryType">
    <xs:sequence>
      <xs:element name="Points">
        <xs:complexType>
          <xs:sequence>
            <xs:element maxOccurs="unbounded" name="Point" type="PointType" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="Curves" >
        <xs:complexType>
          <xs:sequence>
            <xs:element maxOccurs="unbounded" name="Curve" type="CurveType" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="Loops" >
        <xs:complexType>
          <xs:sequence>
            <xs:element maxOccurs="unbounded" name="Loop" type="LoopType" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="Surfaces" >
        <xs:complexType>
          <xs:sequence>
            <xs:element maxOccurs="unbounded" name="Surface" type="SurfaceType" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="Left" type="xs:double" use="required" />
    <xs:attribute name="Right" type="xs:double" use="required" />
    <xs:attribute name="Bottom" type="xs:double" use="required" />
  </xs:complexType>
 
</xs:schema>