<?xml version="1.0" encoding="UTF-8"?>
<!--W3C Schema XPG. CSfot development-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="Views">
		<xs:annotation>
			<xs:documentation>Контейнер вида отображения параметрического объекта 2d 3d</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="View" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attribute name="active" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:byte">
						<xs:enumeration value="1"/>
						<xs:enumeration value="0"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="View">
		<xs:annotation>
			<xs:documentation>Представления параметрического объекта в 2d или 3d.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Primitives"/>
				<xs:element ref="Grips"/>
				<xs:element ref="NodeAttributes"/>
				<xs:element ref="LimitationArea"/>
				<xs:element ref="UniversalIdManager"/>
				<xs:element ref="ShellArr" minOccurs="0"/>

			</xs:sequence>
			<xs:attribute name="id" use="required">
				<xs:annotation>
					<xs:documentation>Идентификатор вида представления</xs:documentation>
				</xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:byte">
						<xs:enumeration value="0"/>
						<xs:enumeration value="1"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="UniversalIdManager">
		<xs:complexType>
			<xs:attribute name="CurVal" use="required" type="xs:int"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="ShellArr">
		<xs:annotation>
			<xs:documentation>элементы сеток</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Shell" maxOccurs="unbounded" />
			</xs:sequence>
		</xs:complexType>
	</xs:element>

	<xs:element name="Shell">
		<xs:annotation>
			<xs:documentation>Элемент сетки</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:choice>
				<xs:element ref ="SurfaceShellArr"/>
				<xs:element ref ="SurfaceMeshArr"/>
				<xs:element name ="SurfaceData">
					<xs:annotation>
						<xs:documentation>закодированные данные shell или mesh в кодировке base64</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:choice>
			<xs:attribute name="uId" use="required" type="xs:int">
				<xs:annotation>
					<xs:documentation>идентификатор</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="version" use="optional">
				<xs:annotation>
					<xs:documentation>версия объекта</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="SurfaceShellArr">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="SurfaceShell" maxOccurs="unbounded" />
			</xs:sequence>
		</xs:complexType>
	</xs:element>

	<xs:element name="SurfaceMeshArr">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="SurfaceMesh" maxOccurs="unbounded" />
			</xs:sequence>
		</xs:complexType>
	</xs:element>

	<xs:element name="SurfaceShell">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="VertexList" minOccurs="0"/>
				<xs:element ref="FaceList" minOccurs="0"/>
				<xs:element ref="EdgeDataArr" minOccurs="0"/>
				<xs:element ref="FaceDataArr" minOccurs="0"/>
			</xs:sequence>
			<xs:attribute name="AutoGenerateNormals" use="required">
				<xs:annotation>
					<xs:documentation>автоматическая генерация нормалей</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="VertexCount" type="xs:int">
				<xs:annotation>
					<xs:documentation>количество уникальных вершин</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="FaceListSize" type="xs:int">
				<xs:annotation>
					<xs:documentation>количество граней</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="FaceCount" type="xs:int">
				<xs:annotation>
					<xs:documentation>количество треугольников</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="EdgeCount" type="xs:int">
				<xs:annotation>
					<xs:documentation>количество ребер</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="EdgeDataArr">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="VertexList" minOccurs="0"/>
				<xs:element ref="FaceList" minOccurs="0"/>
				<xs:element ref="EdgeDataArr" minOccurs="0"/>
				<xs:element ref="FaceDataArr" minOccurs="0"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>

	<xs:element name="FaceDataArr">
		<xs:annotation>
			<xs:documentation>Содержит данные о цвете и видимости контура</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="ColorsArr"/>
				<xs:element ref="VisibilityArr"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>

	<xs:element name="ColorsArr">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="Color">
					<xs:annotation>
						<xs:documentation>данные цвета элемента</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:attribute name="index" use="required" type="xs:int">
							<xs:annotation>
								<xs:documentation>индекс элемента</xs:documentation>
							</xs:annotation>
						</xs:attribute>
						<xs:attribute name="value" use="required">
							<xs:annotation>
								<xs:documentation>индекс элемента</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:int">
									<xs:minExclusive value="0"/>
									<xs:maxExclusive value="256"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>

	<xs:element name="VisibilityArr">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="Visibility">
					<xs:annotation>
						<xs:documentation>данные о способе отображения элемента</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:attribute name="value">
							<xs:simpleType>
								<xs:restriction base="xs:byte">
									<xs:enumeration value ="0" >
										<xs:annotation>
											<xs:documentation>не отображать элемент</xs:documentation>
										</xs:annotation>
									</xs:enumeration>
									<xs:enumeration value ="1" >
										<xs:annotation>
											<xs:documentation>отображать элемент</xs:documentation>
										</xs:annotation>
									</xs:enumeration>
									<xs:enumeration value ="2" >
										<xs:annotation>
											<xs:documentation>отображать силуэт элемента</xs:documentation>
										</xs:annotation>
									</xs:enumeration>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>

	<xs:element name="FaceData">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="ColorsArr"/>
				<xs:element ref="VisibilityArr"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	

	<xs:element name="VertexList">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="Point" maxOccurs="unbounded">
					<xs:complexType>
						<xs:attribute name="index" type="xs:integer">
							<xs:annotation>
								<xs:documentation>индекс вершины</xs:documentation>
							</xs:annotation>
						</xs:attribute>
						<xs:attribute name="x" type="xs:double">
							<xs:annotation>
								<xs:documentation>положение вершины по оси X</xs:documentation>
							</xs:annotation>
						</xs:attribute>
						<xs:attribute name="y" type="xs:double">
							<xs:annotation>
								<xs:documentation>положение вершины по оси Y</xs:documentation>
							</xs:annotation>
						</xs:attribute>
						<xs:attribute name="z" type="xs:double">
							<xs:annotation>
								<xs:documentation>положение вершины по оси Z</xs:documentation>
							</xs:annotation>
						</xs:attribute>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>


	<xs:element name="FaceList">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="Point" maxOccurs="unbounded">
					<xs:complexType>
						<xs:attribute name="index" type="xs:integer">
							<xs:annotation>
								<xs:documentation>индекс вершины</xs:documentation>
							</xs:annotation>
						</xs:attribute>
						<xs:attribute name="x" type="xs:double">
							<xs:annotation>
								<xs:documentation>положение вершины по оси X</xs:documentation>
							</xs:annotation>
						</xs:attribute>
						<xs:attribute name="y" type="xs:double">
							<xs:annotation>
								<xs:documentation>положение вершины по оси Y</xs:documentation>
							</xs:annotation>
						</xs:attribute>
						<xs:attribute name="z" type="xs:double">
							<xs:annotation>
								<xs:documentation>положение вершины по оси Z</xs:documentation>
							</xs:annotation>
						</xs:attribute>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>




	<xs:element name="SurfaceMesh">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="VertexList" />
			</xs:sequence>
			<xs:attribute name="AutoGenerateNormals" use="required">
				<xs:annotation>
					<xs:documentation>автоматическая генерация нормалей</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Rows" type="xs:int">
				<xs:annotation>
					<xs:documentation>количество строк в сетке</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Columns" type="xs:int">
				<xs:annotation>
					<xs:documentation>количество столбцов в сетке</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="Tags">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Tag"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="Tag">
		<xs:complexType>
			<xs:attribute name="value" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:byte">
						<xs:enumeration value="0"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="Specification">
		<xs:annotation>
			<xs:documentation>Спецификации, содержащий компоненты параметрического объекта и их параметры</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Element"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="Primitives">
		<xs:annotation>
			<xs:documentation>Список параметров параметрического объекта</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Element"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="Parametric">
		<xs:annotation>
			<xs:documentation>Корневой элемент XPG</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Specification"/>
				<xs:element ref="Graphics"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	
	
	
	
	<xs:element name="Nodes">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Node" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="NodeData">
		<xs:annotation>
			<xs:documentation>Данные об положении стыка в пространсве</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="z" use="required" type="xs:string">
				<xs:annotation>
					<xs:documentation>формулы для вычисления координат стыка</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="y" use="required" type="xs:string">
				<xs:annotation>
					<xs:documentation>формулы для вычисления координат стыка</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="x" use="required" type="xs:string">
				<xs:annotation>
					<xs:documentation>формулы для вычисления координат стыка</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="visible.formula" use="required">
				<xs:annotation>
					<xs:documentation>формула для вычисления видимости стыка</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="visible" use="required">
				<xs:annotation>
					<xs:documentation>Видимости стыка</xs:documentation>
				</xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:byte">
						<xs:enumeration value="0"/>
						<xs:enumeration value="1"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="position.z" use="required" type="xs:double">
				<xs:annotation>
					<xs:documentation>координаты стыка</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="position.y" use="required" type="xs:double">
				<xs:annotation>
					<xs:documentation>координаты стыка</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="position.x" use="required" type="xs:double">
				<xs:annotation>
					<xs:documentation>координаты стыка</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="nodeId" use="required" type="xs:byte">
				<xs:annotation>
					<xs:documentation>индекс</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="linkDirFormula.z" use="required" type="xs:string">
				<xs:annotation>
					<xs:documentation>формулы для вычисления вектора направления стыка</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="linkDirFormula.y" use="required"  type="xs:string">
				<xs:annotation>
					<xs:documentation>формулы для вычисления вектора направления стыка</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="linkDirFormula.x" use="required" type="xs:string">
				<xs:annotation>
					<xs:documentation>формулы для вычисления вектора направления стыка</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="linkDir.z" use="required" type="xs:int">
				<xs:annotation>
					<xs:documentation>координаты вектора направления стыка</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="linkDir.y" use="required"  type="xs:int">
				<xs:annotation>
					<xs:documentation>координаты вектора направления стыка</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="linkDir.x" use="required"  type="xs:int">
				<xs:annotation>
					<xs:documentation>координаты вектора направления стыка</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="elementIdGraphics" use="required" type="xs:int">
				<xs:annotation>
					<xs:documentation>вспомогательный индекс группы</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="elementId" use="required" type="xs:int">
				<xs:annotation>
					<xs:documentation>вспомогательный индекс используется для ассоциирования узла с параметрами</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="NodeAttributes">
		<xs:annotation>
			<xs:documentation>Содержит атрибуты узлов, включаемых в объект</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="NodeData" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="Node">
		<xs:annotation>
			<xs:documentation>Данные по описанию узла</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Element"/>
			</xs:sequence>
			<xs:attribute name="z" use="required" type="xs:double">
				<xs:annotation>
					<xs:documentation>Координаты узла Z в СК объекта</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="y" use="required" type="xs:double">
				<xs:annotation>
					<xs:documentation>Координаты узла Y в СК объекта</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="x" use="required" type="xs:double">
				<xs:annotation>
					<xs:documentation>Координаты узла X в СК объекта</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="type" use="required">
				<xs:annotation>
					<xs:documentation>тип узла</xs:documentation>
				</xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:byte">
						<xs:enumeration value="0">
							<xs:annotation>
								<xs:documentation>промежуточный узел</xs:documentation>
							</xs:annotation>
						</xs:enumeration>
						<xs:enumeration value="1">
							<xs:annotation>
								<xs:documentation>узел на линии</xs:documentation>
							</xs:annotation>
						</xs:enumeration>
						<xs:enumeration value="2">
							<xs:annotation>
								<xs:documentation>обычный узел</xs:documentation>
							</xs:annotation>
						</xs:enumeration>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="norm.z" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:byte">
						<xs:enumeration value="1"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="norm.y" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:byte">
						<xs:enumeration value="0"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="norm.x" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:byte">
						<xs:enumeration value="0"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="id" use="required" type="xs:int">
				<xs:annotation>
					<xs:documentation>индекс узла</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="dir.z" use="required">
				<xs:annotation>
					<xs:documentation>координаты вектора нормали узла Z</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="dir.y" use="required">
				<xs:annotation>
					<xs:documentation>координаты вектора нормали узла Y</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="dir.x" use="required">
				<xs:annotation>
					<xs:documentation>координаты вектора нормали узла X</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="class" type="xs:normalizedString"  default="linCSNode">
				<xs:annotation>
					<xs:documentation>Класс объекта-обработчика узла</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="LimitationArea">
		<xs:annotation>
			<xs:documentation>Описание монтажной зоны оборудования</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Element"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="Grips">
		<xs:annotation>
			<xs:documentation>Содержит описание дополнительных «Ручек» для трансформации объекта или его частей</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Element"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="Graphics">
		<xs:annotation>
			<xs:documentation>Описывает примитивы, составляющие параметрический объект, их относительное положение. А также узлы подключения</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Views"/>
				<xs:element ref="Nodes"/>
			</xs:sequence>
			<xs:attribute name="lineWeight" use="required" type="xs:short">
				<xs:annotation>
					<xs:documentation>вес линий по умолчанию</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="color" use="required" type="xs:short">
				<xs:annotation>
					<xs:documentation>цвет по умолчанию для примитивов, составляющих параметрический объект</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="Elements">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Element" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>

	<xs:element name="Parameters">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Parameter" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="Parameter">
		<xs:complexType>
			<xs:attribute name="value" use="required" type="xs:string"/>
			<xs:attribute name="name" use="required" type="xs:string"/>
			<xs:attribute name="comment" use="required" type="xs:string"/>
			<xs:attribute name="caption" use="required" type="xs:string"/>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="Element">
		<xs:annotation>
			<xs:documentation>данные, представленные в виде параметров и подчиненных элементов</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				
				<xs:element ref="Parameters" minOccurs="0"/>
				<xs:element ref="Elements" minOccurs="0"/>
				<xs:element ref="Tags" minOccurs="0"/>
			</xs:sequence>
			<xs:attribute name="name" use="required" type="xs:string">
				<xs:annotation>
					<xs:documentation>имя объекта</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="id" use="required" type="xs:int">
				<xs:annotation>
					<xs:documentation>уникальный числовой идентификатор элемента</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="uid" use="required" type="xs:int">
				<xs:annotation>
					<xs:documentation>пользовательский идентификатор</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
</xs:schema>
