<xs:schema xmlns=“schemas.microsoft.com/3dmanufacturing/core/2015/02” xmlns:xs=“www.w3.org/2001/XMLSchema

         xmlns:xml="http://www.w3.org/XML/1998/namespace"
         targetNamespace="http://schemas.microsoft.com/3dmanufacturing/core/2015/02" elementFormDefault="unqualified"
         attributeFormDefault="unqualified" blockDefault="#all">
<xs:import namespace="http://www.w3.org/XML/1998/namespace"
           schemaLocation= "<%= SchemaFiles::SchemaLocation %>" />
<xs:annotation>
  <xs:documentation><![CDATA[
 Schema notes:

Items within this schema follow a simple naming convention of appending a prefix indicating the type of element for references:

     Unprefixed: Element names
     CT_: Complex types
     ST_: Simple types
 ]]></xs:documentation>
</xs:annotation>
<!-- Complex Types -->
<xs:complexType name="CT_Model">
  <xs:sequence>
    <xs:element ref="metadata" minOccurs="0" maxOccurs="unbounded"/>
    <xs:element ref="resources"/>
    <xs:element ref="build"/>
    <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute name="unit" type="ST_Unit" default="millimeter"/>
  <xs:attribute ref="xml:lang"/>
  <xs:attribute name="requiredextensions" type="xs:string"/>
  <xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:complexType name="CT_Resources">
  <xs:sequence>
    <xs:element ref="basematerials" minOccurs="0" maxOccurs="unbounded"/>
    <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
    <xs:element ref="object" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:complexType name="CT_Build">
  <xs:sequence>
    <xs:element ref="item" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:complexType name="CT_BaseMaterials">
  <xs:sequence>
    <xs:element ref="base" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute name="id" type="ST_ResourceID" use="required"/>
</xs:complexType>
<xs:complexType name="CT_Base">
  <xs:attribute name="name" type="xs:string" use="required"/>
  <xs:attribute name="displaycolor" type="ST_ColorValue" use="required"/>
  <xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:complexType name="CT_Object">
  <xs:choice>
    <xs:element ref="mesh"/>
    <xs:element ref="components"/>
  </xs:choice>
  <xs:attribute name="id" type="ST_ResourceID" use="required"/>
  <xs:attribute name="type" type="ST_ObjectType" default="model"/>
  <xs:attribute name="matid" type="ST_ResourceID"/>
  <xs:attribute name="matindex" type="ST_ResourceIndex"/>
  <xs:attribute name="partnumber" type="xs:string"/>
  <xs:attribute name="name" type="xs:string"/>
  <xs:attribute name="pid" type="ST_ResourceID"/>
  <xs:attribute name="pindex" type="ST_ResourceIndex"/>
  <xs:attribute name="thumbnail" type="ST_UriReference" />
  <xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:complexType name="CT_Mesh">
  <xs:sequence>
    <xs:element ref="vertices"/>
    <xs:element ref="triangles"/>
    <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
</xs:complexType>
<xs:complexType name="CT_Vertices">
  <xs:sequence>
    <xs:element ref="vertex" minOccurs="3" maxOccurs="unbounded"/>
  </xs:sequence>
</xs:complexType>
<xs:complexType name="CT_Vertex">
  <xs:attribute name="x" type="ST_Number" use="required"/>
  <xs:attribute name="y" type="ST_Number" use="required"/>
  <xs:attribute name="z" type="ST_Number" use="required"/>
  <xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:complexType name="CT_Triangles">
  <xs:sequence>
    <xs:element ref="triangle" minOccurs="1" maxOccurs="unbounded"/>
  </xs:sequence>
</xs:complexType>
<xs:complexType name="CT_Triangle">
  <xs:attribute name="v1" type="ST_ResourceIndex" use="required"/>
  <xs:attribute name="v2" type="ST_ResourceIndex" use="required"/>
  <xs:attribute name="v3" type="ST_ResourceIndex" use="required"/>
  <xs:attribute name="p1" type="ST_ResourceIndex"/>
  <xs:attribute name="p2" type="ST_ResourceIndex"/>
  <xs:attribute name="p3" type="ST_ResourceIndex"/>
  <xs:attribute name="pid" type="ST_ResourceID"/>
  <xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:complexType name="CT_Components">
  <xs:sequence>
    <xs:element ref="component" maxOccurs="unbounded"/>
  </xs:sequence>
</xs:complexType>
<xs:complexType name="CT_Component">
  <xs:attribute name="objectid" type="ST_ResourceID" use="required"/>
  <xs:attribute name="transform" type="ST_Matrix3D"/>
  <xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:complexType name="CT_Metadata" mixed="true">
  <xs:attribute name="name" type="xs:QName" use="required"/>
</xs:complexType>
<xs:complexType name="CT_Item">
  <xs:attribute name="objectid" type="ST_ResourceID" use="required"/>
  <xs:attribute name="transform" type="ST_Matrix3D"/>
  <xs:attribute name="itemref" type="xs:ID"/>
  <xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<!-- Simple Types -->
<xs:simpleType name="ST_Unit">
  <xs:restriction base="xs:string">
    <xs:enumeration value="micron"/>
    <xs:enumeration value="millimeter"/>
    <xs:enumeration value="centimeter"/>
    <xs:enumeration value="inch"/>
    <xs:enumeration value="foot"/>
    <xs:enumeration value="meter"/>
  </xs:restriction>
</xs:simpleType>
<xs:simpleType name="ST_ColorValue">
  <xs:restriction base="xs:string">
    <xs:pattern value="#[0-9|A-F|a-f][0-9|A-F|a-f][0-9|A-F|a-f][0-9|A-F|a-f][0-9|A-F|a-f][0-9|A-F|a-f]([0-9|A-F|a-f][0-9|A-F|a-f])?"/>
  </xs:restriction>
</xs:simpleType>
<xs:simpleType name="ST_UriReference">
  <xs:restriction base="xs:anyURI">
    <xs:pattern value="/.*"/>
  </xs:restriction>
</xs:simpleType>
<xs:simpleType name="ST_Matrix3D">
  <xs:restriction base="xs:string">
    <xs:pattern value="((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)"/>
  </xs:restriction>
</xs:simpleType>
<xs:simpleType name="ST_Number">
  <xs:restriction base="xs:double">
    <xs:whiteSpace value="collapse"/>
    <xs:pattern value="((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)"/>
  </xs:restriction>
</xs:simpleType>
<xs:simpleType name="ST_ResourceID">
  <xs:restriction base="xs:positiveInteger">
    <xs:maxExclusive value="2147483648"/>
  </xs:restriction>
</xs:simpleType>
<xs:simpleType name="ST_ResourceIndex">
  <xs:restriction base="xs:nonNegativeInteger">
    <xs:maxExclusive value="2147483648"/>
  </xs:restriction>
</xs:simpleType>
<xs:simpleType name="ST_ObjectType">
<xs:restriction base="xs:string">
  <xs:enumeration value="model"/>
  <xs:enumeration value="solidsupport"/>
  <xs:enumeration value="support"/>
  <xs:enumeration value="other"/>
</xs:restriction>

</xs:simpleType>

<!-- Elements -->

<xs:element name=“model” type=“CT_Model”/> <xs:element name=“resources” type=“CT_Resources”/> <xs:element name=“build” type=“CT_Build”/> <xs:element name=“basematerials” type=“CT_BaseMaterials”/> <xs:element name=“base” type=“CT_Base”/> <xs:element name=“object” type=“CT_Object”/> <xs:element name=“mesh” type=“CT_Mesh”/> <xs:element name=“vertices” type=“CT_Vertices”/> <xs:element name=“vertex” type=“CT_Vertex”/> <xs:element name=“triangles” type=“CT_Triangles”/> <xs:element name=“triangle” type=“CT_Triangle”/> <xs:element name=“components” type=“CT_Components”/> <xs:element name=“component” type=“CT_Component”/> <xs:element name=“metadata” type=“CT_Metadata”/> <xs:element name=“item” type=“CT_Item”/>

</xs:schema>