<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns="http://www.collada.org/2005/11/COLLADASchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" targetNamespace="http://www.collada.org/2005/11/COLLADASchema" elementFormDefault="qualified" version="1.4.1" xml:lang="EN" xsi:schemaLocation="http://www.w3.org/2001/XMLSchema http://www.w3.org/2001/XMLSchema.xsd">
	<!-- BEGIN COLLADA Format Schema -->
	<xs:annotation>
		<xs:documentation>
	 		 COLLADA Schema
	 		 Version 1.4.1 (June 23, 2006)

	 		 Copyright (C) 2005, 2006 The Khronos Group Inc., Sony Computer Entertainment Inc.
			 All Rights Reserved.

			 Khronos is a trademark of The Khronos Group Inc.
			 COLLADA is a trademark of Sony Computer Entertainment Inc. used by permission by Khronos.

			 Note that this software document is distributed on an "AS IS" basis, with ALL EXPRESS AND 
			 IMPLIED WARRANTIES AND CONDITIONS DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED
			 WARRANTIES AND CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A PARTICULAR 
			 PURPOSE, AND NON-INFRINGEMENT.
		</xs:documentation>
	</xs:annotation>
	<!-- import needed for xml:base attribute-->
	<xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/03/xml.xsd"/>
	<!-- Root Element -->
	<xs:element name="COLLADA">
		<xs:annotation>
			<xs:appinfo>enable-xmlns</xs:appinfo>
			<xs:documentation>
			The COLLADA element declares the root of the document that comprises some of the content 
			in the COLLADA schema.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="asset">
					<xs:annotation>
						<xs:documentation>
						The COLLADA element must contain an asset element.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:choice minOccurs="0" maxOccurs="unbounded">
					<xs:element ref="library_animations">
						<xs:annotation>
							<xs:documentation>
							The COLLADA element may contain any number of library_animations elements.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="library_animation_clips">
						<xs:annotation>
							<xs:documentation>
							The COLLADA element may contain any number of library_animation_clips elements.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="library_cameras">
						<xs:annotation>
							<xs:documentation>
							The COLLADA element may contain any number of library_cameras elements.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="library_controllers">
						<xs:annotation>
							<xs:documentation>
							The COLLADA element may contain any number of library_controllerss elements.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="library_geometries">
						<xs:annotation>
							<xs:documentation>
							The COLLADA element may contain any number of library_geometriess elements.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="library_effects">
						<xs:annotation>
							<xs:documentation>
							The COLLADA element may contain any number of library_effects elements.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="library_force_fields">
						<xs:annotation>
							<xs:documentation>
							The COLLADA element may contain any number of library_force_fields elements.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="library_images">
						<xs:annotation>
							<xs:documentation>
							The COLLADA element may contain any number of library_images elements.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="library_lights">
						<xs:annotation>
							<xs:documentation>
							The COLLADA element may contain any number of library_lights elements.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="library_materials">
						<xs:annotation>
							<xs:documentation>
							The COLLADA element may contain any number of library_materials elements.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="library_nodes">
						<xs:annotation>
							<xs:documentation>
							The COLLADA element may contain any number of library_nodes elements.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="library_physics_materials">
						<xs:annotation>
							<xs:documentation>
							The COLLADA element may contain any number of library_materials elements.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="library_physics_models">
						<xs:annotation>
							<xs:documentation>
							The COLLADA element may contain any number of library_physics_models elements.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="library_physics_scenes">
						<xs:annotation>
							<xs:documentation>
							The COLLADA element may contain any number of library_physics_scenes elements.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="library_visual_scenes">
						<xs:annotation>
							<xs:documentation>
							The COLLADA element may contain any number of library_visual_scenes elements.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:choice>
				<xs:element name="scene" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
						The scene embodies the entire set of information that can be visualized from the 
						contents of a COLLADA resource. The scene element declares the base of the scene 
						hierarchy or scene graph. The scene contains elements that comprise much of the 
						visual and transformational information content as created by the authoring tools.
						</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:sequence>
							<xs:element name="instance_physics_scene" type="InstanceWithExtra" minOccurs="0" maxOccurs="unbounded">
								<xs:annotation>
									<xs:documentation>
									The instance_physics_scene element declares the instantiation of a COLLADA physics_scene resource.
									The instance_physics_scene element may appear any number of times.
									</xs:documentation>
								</xs:annotation>
							</xs:element>
							<xs:element name="instance_visual_scene" type="InstanceWithExtra" minOccurs="0">
								<xs:annotation>
									<xs:documentation>
									The instance_visual_scene element declares the instantiation of a COLLADA visual_scene resource.
									The instance_visual_scene element may only appear once.
									</xs:documentation>
								</xs:annotation>
							</xs:element>
							<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
								<xs:annotation>
									<xs:documentation>
									The extra element may appear any number of times.
									</xs:documentation>
								</xs:annotation>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The extra element may appear any number of times.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="version" type="VersionType" use="required">
				<xs:annotation>
					<xs:documentation>
						The version attribute is the COLLADA schema revision with which the instance document 
						conforms. Required Attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute ref="xml:base">
				<xs:annotation>
					<xs:documentation>
					The xml:base attribute allows you to define the base URI for this COLLADA document. See
					http://www.w3.org/TR/xmlbase/ for more information.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<!-- Simple Types -->
	<!-- Primitive Types -->
	<xs:simpleType name="bool">
		<xs:restriction base="xs:boolean"/>
	</xs:simpleType>
	<xs:simpleType name="dateTime">
		<xs:restriction base="xs:dateTime"/>
	</xs:simpleType>
	<xs:simpleType name="float">
		<xs:restriction base="xs:double"/>
	</xs:simpleType>
	<xs:simpleType name="int">
		<xs:restriction base="xs:long"/>
	</xs:simpleType>
	<xs:simpleType name="Name">
		<xs:restriction base="xs:Name"/>
	</xs:simpleType>
	<xs:simpleType name="string">
		<xs:restriction base="xs:string"/>
	</xs:simpleType>
	<xs:simpleType name="token">
		<xs:restriction base="xs:token"/>
	</xs:simpleType>
	<xs:simpleType name="uint">
		<xs:restriction base="xs:unsignedLong"/>
	</xs:simpleType>
	<!-- Container Types -->
	<xs:simpleType name="ListOfBools">
		<xs:list itemType="bool"/>
	</xs:simpleType>
	<xs:simpleType name="ListOfFloats">
		<xs:list itemType="float"/>
	</xs:simpleType>
	<xs:simpleType name="ListOfHexBinary">
		<xs:list itemType="xs:hexBinary"/>
	</xs:simpleType>
	<xs:simpleType name="ListOfInts">
		<xs:list itemType="int"/>
	</xs:simpleType>
	<xs:simpleType name="ListOfNames">
		<xs:list itemType="Name"/>
	</xs:simpleType>
	<xs:simpleType name="ListOfTokens">
		<xs:list itemType="token"/>
	</xs:simpleType>
	<xs:simpleType name="ListOfUInts">
		<xs:list itemType="uint"/>
	</xs:simpleType>
	<!-- Aggregate Types -->
	<xs:simpleType name="bool2">
		<xs:restriction base="ListOfBools">
			<xs:minLength value="2"/>
			<xs:maxLength value="2"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="bool3">
		<xs:restriction base="ListOfBools">
			<xs:minLength value="3"/>
			<xs:maxLength value="3"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="bool4">
		<xs:restriction base="ListOfBools">
			<xs:minLength value="4"/>
			<xs:maxLength value="4"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="float2">
		<xs:restriction base="ListOfFloats">
			<xs:minLength value="2"/>
			<xs:maxLength value="2"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="float3">
		<xs:restriction base="ListOfFloats">
			<xs:minLength value="3"/>
			<xs:maxLength value="3"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="float4">
		<xs:restriction base="ListOfFloats">
			<xs:minLength value="4"/>
			<xs:maxLength value="4"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="float7">
		<xs:restriction base="ListOfFloats">
			<xs:minLength value="7"/>
			<xs:maxLength value="7"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="float2x2">
		<xs:restriction base="ListOfFloats">
			<xs:minLength value="4"/>
			<xs:maxLength value="4"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="float3x3">
		<xs:restriction base="ListOfFloats">
			<xs:minLength value="9"/>
			<xs:maxLength value="9"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="float4x4">
		<xs:restriction base="ListOfFloats">
			<xs:minLength value="16"/>
			<xs:maxLength value="16"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="float2x3">
		<xs:restriction base="ListOfFloats">
			<xs:minLength value="6"/>
			<xs:maxLength value="6"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="float2x4">
		<xs:restriction base="ListOfFloats">
			<xs:minLength value="8"/>
			<xs:maxLength value="8"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="float3x2">
		<xs:restriction base="ListOfFloats">
			<xs:minLength value="6"/>
			<xs:maxLength value="6"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="float3x4">
		<xs:restriction base="ListOfFloats">
			<xs:minLength value="12"/>
			<xs:maxLength value="12"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="float4x2">
		<xs:restriction base="ListOfFloats">
			<xs:minLength value="8"/>
			<xs:maxLength value="8"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="float4x3">
		<xs:restriction base="ListOfFloats">
			<xs:minLength value="12"/>
			<xs:maxLength value="12"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="int2">
		<xs:restriction base="ListOfInts">
			<xs:minLength value="2"/>
			<xs:maxLength value="2"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="int3">
		<xs:restriction base="ListOfInts">
			<xs:minLength value="3"/>
			<xs:maxLength value="3"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="int4">
		<xs:restriction base="ListOfInts">
			<xs:minLength value="4"/>
			<xs:maxLength value="4"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="int2x2">
		<xs:restriction base="ListOfInts">
			<xs:minLength value="4"/>
			<xs:maxLength value="4"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="int3x3">
		<xs:restriction base="ListOfInts">
			<xs:minLength value="9"/>
			<xs:maxLength value="9"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="int4x4">
		<xs:restriction base="ListOfInts">
			<xs:minLength value="16"/>
			<xs:maxLength value="16"/>
		</xs:restriction>
	</xs:simpleType>
	<!-- Basic Enumerations -->
	<xs:simpleType name="MorphMethodType">
		<xs:annotation>
			<xs:documentation>
			An enumuerated type specifying the acceptable morph methods.
			</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:string">
			<xs:enumeration value="NORMALIZED"/>
			<xs:enumeration value="RELATIVE"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="NodeType">
		<xs:annotation>
			<xs:documentation>
			An enumerated type specifying the acceptable node types.
			</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:string">
			<xs:enumeration value="JOINT"/>
			<xs:enumeration value="NODE"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="URIFragmentType">
		<xs:annotation>
			<xs:documentation>
			This type is used for URI reference which can only reference a resource declared within it's same document.
			</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:string">
			<xs:pattern value="(#(.*))"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="UpAxisType">
		<xs:annotation>
			<xs:documentation>
			An enumerated type specifying the acceptable up-axis values.
			</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:string">
			<xs:enumeration value="X_UP"/>
			<xs:enumeration value="Y_UP"/>
			<xs:enumeration value="Z_UP"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="VersionType">
		<xs:annotation>
			<xs:documentation>
			An enumerated type specifying the acceptable document versions.
			</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:string">
			<xs:enumeration value="1.4.0"/>
			<xs:enumeration value="1.4.1"/>
		</xs:restriction>
	</xs:simpleType>
	<!-- Complex Types -->
	<xs:complexType name="InputGlobal">
		<xs:annotation>
			<xs:documentation>
			The InputGlobal type is used to represent inputs that can reference external resources.
			</xs:documentation>
		</xs:annotation>
		<xs:attribute name="semantic" type="xs:NMTOKEN" use="required">
			<xs:annotation>
				<xs:documentation>
				The semantic attribute is the user-defined meaning of the input connection. Required attribute.
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="source" type="xs:anyURI" use="required">
			<xs:annotation>
				<xs:documentation>
				The source attribute indicates the location of the data source. Required attribute.
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="InputLocal">
		<xs:annotation>
			<xs:documentation>
			The InputLocal type is used to represent inputs that can only reference resources declared in the same document.
			</xs:documentation>
		</xs:annotation>
		<xs:attribute name="semantic" type="xs:NMTOKEN" use="required">
			<xs:annotation>
				<xs:documentation>
				The semantic attribute is the user-defined meaning of the input connection. Required attribute.
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="source" type="URIFragmentType" use="required">
			<xs:annotation>
				<xs:documentation>
				The source attribute indicates the location of the data source. Required attribute.
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="InputLocalOffset">
		<xs:annotation>
			<xs:documentation>
			The InputLocalOffset type is used to represent indexed inputs that can only reference resources declared in the same document.
			</xs:documentation>
		</xs:annotation>
		<xs:attribute name="offset" type="uint" use="required">
			<xs:annotation>
				<xs:documentation>
				The offset attribute represents the offset into the list of indices.  If two input elements share 
				the same offset, they will be indexed the same.  This works as a simple form of compression for the 
				list of indices as well as defining the order the inputs should be used in.  Required attribute.
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="semantic" type="xs:NMTOKEN" use="required">
			<xs:annotation>
				<xs:documentation>
				The semantic attribute is the user-defined meaning of the input connection. Required attribute.
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="source" type="URIFragmentType" use="required">
			<xs:annotation>
				<xs:documentation>
				The source attribute indicates the location of the data source. Required attribute.
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="set" type="uint">
			<xs:annotation>
				<xs:documentation>
				The set attribute indicates which inputs should be grouped together as a single set. This is helpful 
				when multiple inputs share the same semantics. 
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="InstanceWithExtra">
		<xs:annotation>
			<xs:documentation>
			The InstanceWithExtra type is used for all generic instance elements. A generic instance element 
			is one which does not have any specific child elements declared.
			</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>
					The extra element may occur any number of times.
					</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="url" type="xs:anyURI" use="required">
			<xs:annotation>
				<xs:documentation>
				The url attribute refers to resource to instantiate. This may refer to a local resource using a 
				relative URL fragment identifier that begins with the “#” character. The url attribute may refer 
				to an external resource using an absolute or relative URL.
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="sid" type="xs:NCName">
			<xs:annotation>
				<xs:documentation>
				The sid attribute is a text string value containing the sub-identifier of this element. This 
				value must be unique within the scope of the parent element. Optional attribute.
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="name" type="xs:NCName">
			<xs:annotation>
				<xs:documentation>
				The name attribute is the text string name of this element. Optional attribute.
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="TargetableFloat">
		<xs:annotation>
			<xs:documentation>
			The TargetableFloat type is used to represent elements which contain a single float value which can 
			be targeted for animation.
			</xs:documentation>
		</xs:annotation>
		<xs:simpleContent>
			<xs:extension base="float">
				<xs:attribute name="sid" type="xs:NCName">
					<xs:annotation>
						<xs:documentation>
						The sid attribute is a text string value containing the sub-identifier of this element. This 
						value must be unique within the scope of the parent element. Optional attribute.
						</xs:documentation>
					</xs:annotation>
				</xs:attribute>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<xs:complexType name="TargetableFloat3">
		<xs:annotation>
			<xs:documentation>
			The TargetableFloat3 type is used to represent elements which contain a float3 value which can 
			be targeted for animation.
			</xs:documentation>
		</xs:annotation>
		<xs:simpleContent>
			<xs:extension base="float3">
				<xs:attribute name="sid" type="xs:NCName">
					<xs:annotation>
						<xs:documentation>
						The sid attribute is a text string value containing the sub-identifier of this element. 
						This value must be unique within the scope of the parent element. Optional attribute.
						</xs:documentation>
					</xs:annotation>
				</xs:attribute>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<!--Typed Array Elements-->
	<xs:element name="IDREF_array">
		<xs:annotation>
			<xs:documentation>
			The IDREF_array element declares the storage for a homogenous array of ID reference values.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:IDREFS">
					<xs:attribute name="id" type="xs:ID">
						<xs:annotation>
							<xs:documentation>
							The id attribute is a text string containing the unique identifier of this element. This value 
							must be unique within the instance document. Optional attribute.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="name" type="xs:NCName">
						<xs:annotation>
							<xs:documentation>
							The name attribute is the text string name of this element. Optional attribute.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="count" type="uint" use="required">
						<xs:annotation>
							<xs:documentation>
							The count attribute indicates the number of values in the array. Required attribute.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="Name_array">
		<xs:annotation>
			<xs:documentation>
			The Name_array element declares the storage for a homogenous array of Name string values.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="ListOfNames">
					<xs:attribute name="id" type="xs:ID">
						<xs:annotation>
							<xs:documentation>
							The id attribute is a text string containing the unique identifier of this element. 
							This value must be unique within the instance document. Optional attribute.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="name" type="xs:NCName">
						<xs:annotation>
							<xs:documentation>
							The name attribute is the text string name of this element. Optional attribute.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="count" type="uint" use="required">
						<xs:annotation>
							<xs:documentation>
							The count attribute indicates the number of values in the array. Required attribute.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="bool_array">
		<xs:annotation>
			<xs:documentation>
			The bool_array element declares the storage for a homogenous array of boolean values.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="ListOfBools">
					<xs:attribute name="id" type="xs:ID">
						<xs:annotation>
							<xs:documentation>
							The id attribute is a text string containing the unique identifier of this element. 
							This value must be unique within the instance document. Optional attribute.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="name" type="xs:NCName">
						<xs:annotation>
							<xs:documentation>
							The name attribute is the text string name of this element. Optional attribute.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="count" type="uint" use="required">
						<xs:annotation>
							<xs:documentation>
							The count attribute indicates the number of values in the array. Required attribute.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="float_array">
		<xs:annotation>
			<xs:documentation>
			The float_array element declares the storage for a homogenous array of floating point values.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="ListOfFloats">
					<xs:attribute name="id" type="xs:ID">
						<xs:annotation>
							<xs:documentation>
							The id attribute is a text string containing the unique identifier of this element. This value 
							must be unique within the instance document. Optional attribute.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="name" type="xs:NCName">
						<xs:annotation>
							<xs:documentation>
							The name attribute is the text string name of this element. Optional attribute.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="count" type="uint" use="required">
						<xs:annotation>
							<xs:documentation>
							The count attribute indicates the number of values in the array. Required attribute.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="digits" type="xs:short" default="6">
						<xs:annotation>
							<xs:documentation>
							The digits attribute indicates the number of significant decimal digits of the float values that 
							can be contained in the array. The default value is 6. Optional attribute.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="magnitude" type="xs:short" default="38">
						<xs:annotation>
							<xs:documentation>
							The magnitude attribute indicates the largest exponent of the float values that can be contained 
							in the array. The default value is 38. Optional attribute.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="int_array">
		<xs:annotation>
			<xs:documentation>
			The int_array element declares the storage for a homogenous array of integer values.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="ListOfInts">
					<xs:attribute name="id" type="xs:ID">
						<xs:annotation>
							<xs:documentation>
							The id attribute is a text string containing the unique identifier of this element. 
							This value must be unique within the instance document. Optional attribute.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="name" type="xs:NCName">
						<xs:annotation>
							<xs:documentation>
							The name attribute is the text string name of this element. Optional attribute.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="count" type="uint" use="required">
						<xs:annotation>
							<xs:documentation>
							The count attribute indicates the number of values in the array. Required attribute.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="minInclusive" type="xs:integer" default="-2147483648">
						<xs:annotation>
							<xs:documentation>
							The minInclusive attribute indicates the smallest integer value that can be contained in 
							the array. The default value is –2147483648. Optional attribute.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="maxInclusive" type="xs:integer" default="2147483647">
						<xs:annotation>
							<xs:documentation>
							The maxInclusive attribute indicates the largest integer value that can be contained in 
							the array. The default value is 2147483647. Optional attribute.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>
	<!-- Dataflow Elements -->
	<xs:element name="accessor">
		<xs:annotation>
			<xs:documentation>
			The accessor element declares an access pattern to one of the array elements: float_array, 
			int_array, Name_array, bool_array, and IDREF_array. The accessor element describes access 
			to arrays that are organized in either an interleaved or non-interleaved manner, depending 
			on the offset and stride attributes.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="param" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The accessor element may have any number of param elements.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="count" type="uint" use="required">
				<xs:annotation>
					<xs:documentation>
					The count attribute indicates the number of times the array is accessed. Required attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="offset" type="uint" default="0">
				<xs:annotation>
					<xs:documentation>
					The offset attribute indicates the index of the first value to be read from the array. 
					The default value is 0. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="source" type="xs:anyURI">
				<xs:annotation>
					<xs:documentation>
					The source attribute indicates the location of the array to access using a URL expression. Required attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="stride" type="uint" default="1">
				<xs:annotation>
					<xs:documentation>
					The stride attribute indicates number of values to be considered a unit during each access to 
					the array. The default value is 1, indicating that a single value is accessed. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="param">
		<xs:annotation>
			<xs:documentation>
			The param element declares parametric information regarding its parent element.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:string">
					<xs:attribute name="name" type="xs:NCName">
						<xs:annotation>
							<xs:documentation>
							The name attribute is the text string name of this element. Optional attribute.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="sid" type="xs:NCName">
						<xs:annotation>
							<xs:documentation>
							The sid attribute is a text string value containing the sub-identifier of this element. 
							This value must be unique within the scope of the parent element. Optional attribute.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="semantic" type="xs:NMTOKEN">
						<xs:annotation>
							<xs:documentation>
							The semantic attribute is the user-defined meaning of the parameter. Optional attribute.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="type" type="xs:NMTOKEN" use="required">
						<xs:annotation>
							<xs:documentation>
							The type attribute indicates the type of the value data. This text string must be understood 
							by the application. Required attribute.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="source">
		<xs:annotation>
			<xs:documentation>
			The source element declares a data repository that provides values according to the semantics of an 
			input element that refers to it.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="asset" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
						The source element may contain an asset element.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:choice minOccurs="0">
					<xs:element ref="IDREF_array">
						<xs:annotation>
							<xs:documentation>
							The source element may contain an IDREF_array.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="Name_array">
						<xs:annotation>
							<xs:documentation>
							The source element may contain a Name_array.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="bool_array">
						<xs:annotation>
							<xs:documentation>
							The source element may contain a bool_array.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="float_array">
						<xs:annotation>
							<xs:documentation>
							The source element may contain a float_array.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="int_array">
						<xs:annotation>
							<xs:documentation>
							The source element may contain an int_array.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:choice>
				<xs:element name="technique_common" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
						The technique common specifies the common method for accessing this source element's data.
						</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:sequence>
							<xs:element ref="accessor">
								<xs:annotation>
									<xs:documentation>
									The source's technique_common must have one and only one accessor.
									</xs:documentation>
								</xs:annotation>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element ref="technique" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						This element may contain any number of non-common profile techniques.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="id" type="xs:ID" use="required">
				<xs:annotation>
					<xs:documentation>
					The id attribute is a text string containing the unique identifier of this element. 
					This value must be unique within the instance document. Required attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="name" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The name attribute is the text string name of this element. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<!-- Geometry Elements -->
	<xs:element name="geometry">
		<xs:annotation>
			<xs:documentation>
			Geometry describes the visual shape and appearance of an object in the scene.
			The geometry element categorizes the declaration of geometric information. Geometry is a 
			branch of mathematics that deals with the measurement, properties, and relationships of 
			points, lines, angles, surfaces, and solids.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="asset" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
						The geometry element may contain an asset element.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:choice>
					<xs:element ref="convex_mesh">
						<xs:annotation>
							<xs:documentation>
							The geometry element may contain only one mesh or convex_mesh.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="mesh">
						<xs:annotation>
							<xs:documentation>
							The geometry element may contain only one mesh or convex_mesh.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="spline"/>
				</xs:choice>
				<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The extra element may appear any number of times.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="id" type="xs:ID">
				<xs:annotation>
					<xs:documentation>
					The id attribute is a text string containing the unique identifier of this element. 
					This value must be unique within the instance document. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="name" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The name attribute is the text string name of this element. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="mesh">
		<xs:annotation>
			<xs:documentation>
			The mesh element contains vertex and primitive information sufficient to describe basic geometric meshes.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="source" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The mesh element must contain one or more source elements.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="vertices">
					<xs:annotation>
						<xs:documentation>
						The mesh element must contain one vertices element.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:choice minOccurs="0" maxOccurs="unbounded">
					<xs:element ref="lines">
						<xs:annotation>
							<xs:documentation>
							The mesh element may contain any number of lines elements.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="linestrips">
						<xs:annotation>
							<xs:documentation>
							The mesh element may contain any number of linestrips elements.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="polygons">
						<xs:annotation>
							<xs:documentation>
							The mesh element may contain any number of polygons elements.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="polylist">
						<xs:annotation>
							<xs:documentation>
							The mesh element may contain any number of polylist elements.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="triangles">
						<xs:annotation>
							<xs:documentation>
							The mesh element may contain any number of triangles elements.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="trifans">
						<xs:annotation>
							<xs:documentation>
							The mesh element may contain any number of trifans elements.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="tristrips">
						<xs:annotation>
							<xs:documentation>
							The mesh element may contain any number of tristrips elements.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:choice>
				<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The extra element may appear any number of times.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="spline">
		<xs:annotation>
			<xs:documentation>
			The spline element contains control vertex information sufficient to describe basic splines.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="source" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The mesh element must contain one or more source elements.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="control_vertices">
					<xs:annotation>
						<xs:documentation>The control vertices element  must occur  exactly one time. It is used to describe the CVs of the spline.</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:sequence>
							<xs:element name="input" type="InputLocal" maxOccurs="unbounded">
								<xs:annotation>
									<xs:documentation>
						The input element must occur at least one time. These inputs are local inputs.
						</xs:documentation>
								</xs:annotation>
							</xs:element>
							<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
								<xs:annotation>
									<xs:documentation>
						The extra element may appear any number of times.
						</xs:documentation>
								</xs:annotation>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The extra element may appear any number of times.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="closed" type="bool" default="false"/>
		</xs:complexType>
	</xs:element>
	<!-- Collation Elements -->
	<xs:element name="p" type="ListOfUInts">
		<xs:annotation>
			<xs:documentation>
			The p element represents primitive data for the primitive types (lines, linestrips, polygons, 
			polylist, triangles, trifans, tristrips). The p element contains indices that reference into 
			the parent's source elements referenced by the input elements.
			</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="lines">
		<xs:annotation>
			<xs:documentation>
			The lines element provides the information needed to bind vertex attributes together and then 
			organize those vertices into individual lines. Each line described by the mesh has two vertices. 
			The first line is formed from first and second vertices. The second line is formed from the 
			third and fourth vertices and so on.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="input" type="InputLocalOffset" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The input element may occur any number of times. This input is a local input with the offset 
						and set attributes.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="p" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
						The p element may occur once.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The extra element may appear any number of times.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="name" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The name attribute is the text string name of this element. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="count" type="uint" use="required">
				<xs:annotation>
					<xs:documentation>
					The count attribute indicates the number of line primitives. Required attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="material" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The material attribute declares a symbol for a material. This symbol is bound to a material at 
					the time of instantiation. If the material attribute is not specified then the lighting and 
					shading results are application defined. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="linestrips">
		<xs:annotation>
			<xs:documentation>
			The linestrips element provides the information needed to bind vertex attributes together and 
			then organize those vertices into connected line-strips. Each line-strip described by the mesh 
			has an arbitrary number of vertices. Each line segment within the line-strip is formed from the 
			current vertex and the preceding vertex.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="input" type="InputLocalOffset" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The input element may occur any number of times. This input is a local input with the offset 
						and set attributes.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="p" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The linestrips element may have any number of p elements.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The extra element may appear any number of times.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="name" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The name attribute is the text string name of this element. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="count" type="uint" use="required">
				<xs:annotation>
					<xs:documentation>
					The count attribute indicates the number of linestrip primitives. Required attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="material" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The material attribute declares a symbol for a material. This symbol is bound to a material 
					at the time of instantiation. If the material attribute is not specified then the lighting 
					and shading results are application defined. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="polygons">
		<xs:annotation>
			<xs:documentation>
			The polygons element provides the information needed to bind vertex attributes together and 
			then organize those vertices into individual polygons. The polygons described can contain 
			arbitrary numbers of vertices. These polygons may be self intersecting and may also contain holes.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="input" type="InputLocalOffset" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The input element may occur any number of times. This input is a local input with the 
						offset and set attributes.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:choice minOccurs="0" maxOccurs="unbounded">
					<xs:element ref="p">
						<xs:annotation>
							<xs:documentation>
							The p element may occur any number of times.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element name="ph">
						<xs:annotation>
							<xs:documentation>
							The ph element descripes a polygon with holes.
							</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:sequence>
								<xs:element ref="p">
									<xs:annotation>
										<xs:documentation>
										Theere may only be one p element.
										</xs:documentation>
									</xs:annotation>
								</xs:element>
								<xs:element name="h" type="ListOfUInts" maxOccurs="unbounded">
									<xs:annotation>
										<xs:documentation>
										The h element represents a hole in the polygon specified. There must be at least one h element.
										</xs:documentation>
									</xs:annotation>
								</xs:element>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
				</xs:choice>
				<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The extra element may appear any number of times.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="name" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The name attribute is the text string name of this element. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="count" type="uint" use="required">
				<xs:annotation>
					<xs:documentation>
					The count attribute indicates the number of polygon primitives. Required attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="material" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The material attribute declares a symbol for a material. This symbol is bound to a material 
					at the time of instantiation. If the material attribute is not specified then the lighting 
					and shading results are application defined. Optional attribute. 
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="polylist">
		<xs:annotation>
			<xs:documentation>
			The polylist element provides the information needed to bind vertex attributes together and 
			then organize those vertices into individual polygons. The polygons described in polylist can 
			contain arbitrary numbers of vertices. Unlike the polygons element, the polylist element cannot 
			contain polygons with holes.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="input" type="InputLocalOffset" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The input element may occur any number of times. This input is a local input with the 
						offset and set attributes.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="vcount" type="ListOfUInts" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
						The vcount element contains a list of integers describing the number of sides for each polygon 
						described by the polylist element. The vcount element may occur once.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="p" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
						The p element may occur once.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The extra element may appear any number of times.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="name" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The name attribute is the text string name of this element. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="count" type="uint" use="required">
				<xs:annotation>
					<xs:documentation>
					The count attribute indicates the number of polygon primitives. Required attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="material" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The material attribute declares a symbol for a material. This symbol is bound to a material at 
					the time of instantiation. If the material attribute is not specified then the lighting and 
					shading results are application defined. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="triangles">
		<xs:annotation>
			<xs:documentation>
			The triangles element provides the information needed to bind vertex attributes together and 
			then organize those vertices into individual triangles.	Each triangle described by the mesh has 
			three vertices. The first triangle is formed from the first, second, and third vertices. The 
			second triangle is formed from the fourth, fifth, and sixth vertices, and so on.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="input" type="InputLocalOffset" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The input element may occur any number of times. This input is a local input with the 
						offset and set attributes.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="p" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
						The triangles element may have any number of p elements.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The extra element may appear any number of times.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="name" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The name attribute is the text string name of this element. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="count" type="uint" use="required">
				<xs:annotation>
					<xs:documentation>
					The count attribute indicates the number of triangle primitives. Required attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="material" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The material attribute declares a symbol for a material. This symbol is bound to a material at 
					the time of instantiation. Optional attribute. If the material attribute is not specified then 
					the lighting and shading results are application defined.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="trifans">
		<xs:annotation>
			<xs:documentation>
			The trifans element provides the information needed to bind vertex attributes together and then 
			organize those vertices into connected triangles. Each triangle described by the mesh has three 
			vertices. The first triangle is formed from first, second, and third vertices. Each subsequent 
			triangle is formed from the current vertex, reusing the first and the previous vertices.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="input" type="InputLocalOffset" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The input element may occur any number of times. This input is a local input with the 
						offset and set attributes.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="p" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The trifans element may have any number of p elements.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The extra element may appear any number of times.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="name" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The name attribute is the text string name of this element. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="count" type="uint" use="required">
				<xs:annotation>
					<xs:documentation>
					The count attribute indicates the number of triangle fan primitives. Required attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="material" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The material attribute declares a symbol for a material. This symbol is bound to a material 
					at the time of instantiation. If the material attribute is not specified then the lighting 
					and shading results are application defined. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="tristrips">
		<xs:annotation>
			<xs:documentation>
			The tristrips element provides the information needed to bind vertex attributes together and then 
			organize those vertices into connected triangles. Each triangle described by the mesh has three 
			vertices. The first triangle is formed from first, second, and third vertices. Each subsequent 
			triangle is formed from the current vertex, reusing the previous two vertices.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="input" type="InputLocalOffset" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The input element may occur any number of times. This input is a local input with the offset 
						and set attributes.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="p" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The tristrips element may have any number of p elements.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The extra element may appear any number of times.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="name" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The name attribute is the text string name of this element. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="count" type="uint" use="required">
				<xs:annotation>
					<xs:documentation>
					The count attribute indicates the number of triangle strip primitives. Required attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="material" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The material attribute declares a symbol for a material. This symbol is bound to a material 
					at the time of instantiation. If the material attribute is not specified then the lighting 
					and shading results are application defined. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="vertices">
		<xs:annotation>
			<xs:documentation>
			The vertices element declares the attributes and identity of mesh-vertices. The vertices element
			describes mesh-vertices in a mesh geometry. The mesh-vertices represent the position (identity) 
			of the vertices comprising the mesh and other vertex attributes that are invariant to tessellation.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="input" type="InputLocal" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The input element must occur at least one time. These inputs are local inputs.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The extra element may appear any number of times.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="id" type="xs:ID" use="required">
				<xs:annotation>
					<xs:documentation>
					The id attribute is a text string containing the unique identifier of this element. This 
					value must be unique within the instance document. Required attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="name" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The name attribute is the text string name of this element. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<!-- Transformational Elements -->
	<xs:element name="lookat">
		<xs:annotation>
			<xs:documentation>
			The lookat element contains a position and orientation transformation suitable for aiming a camera.
			The lookat element contains three mathematical vectors within it that describe: 
			1.	The position of the object;
			2.	The position of the interest point;
			3.	The direction that points up.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="float3x3">
					<xs:attribute name="sid" type="xs:NCName">
						<xs:annotation>
							<xs:documentation>
							The sid attribute is a text string value containing the sub-identifier of this element. 
							This value must be unique within the scope of the parent element. Optional attribute.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="matrix">
		<xs:annotation>
			<xs:documentation>
			Matrix transformations embody mathematical changes to points within a coordinate systems or the 
			coordinate system itself. The matrix element contains a 4-by-4 matrix of floating-point values.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="float4x4">
					<xs:attribute name="sid" type="xs:NCName">
						<xs:annotation>
							<xs:documentation>
							The sid attribute is a text string value containing the sub-identifier of this element. 
							This value must be unique within the scope of the parent element. Optional attribute.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="rotate">
		<xs:annotation>
			<xs:documentation>
			The rotate element contains an angle and a mathematical vector that represents the axis of rotation.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="float4">
					<xs:attribute name="sid" type="xs:NCName">
						<xs:annotation>
							<xs:documentation>
							The sid attribute is a text string value containing the sub-identifier of this element. 
							This value must be unique within the scope of the parent element. Optional attribute.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="scale" type="TargetableFloat3">
		<xs:annotation>
			<xs:documentation>
			The scale element contains a mathematical vector that represents the relative proportions of the 
			X, Y and Z axes of a coordinated system.
			</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="skew">
		<xs:annotation>
			<xs:documentation>
			The skew element contains an angle and two mathematical vectors that represent the axis of 
			rotation and the axis of translation.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="float7">
					<xs:attribute name="sid" type="xs:NCName">
						<xs:annotation>
							<xs:documentation>
							The sid attribute is a text string value containing the sub-identifier of this element. 
							This value must be unique within the scope of the parent element. Optional attribute.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="translate" type="TargetableFloat3">
		<xs:annotation>
			<xs:documentation>
			The translate element contains a mathematical vector that represents the distance along the 
			X, Y and Z-axes.
			</xs:documentation>
		</xs:annotation>
	</xs:element>
	<!-- Lighting and Shading Elements -->
	<xs:element name="image">
		<xs:annotation>
			<xs:documentation>
			The image element declares the storage for the graphical representation of an object. 
			The image element best describes raster image data, but can conceivably handle other 
			forms of imagery. The image elements allows for specifying an external image file with 
			the init_from element or embed image data with the data element.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="asset" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
						The image element may contain an asset element.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:choice>
					<xs:element name="data" type="ListOfHexBinary">
						<xs:annotation>
							<xs:documentation>
							The data child element contains a sequence of hexadecimal encoded  binary octets representing 
							the embedded image data.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element name="init_from" type="xs:anyURI">
						<xs:annotation>
							<xs:documentation>
							The init_from element allows you to specify an external image file to use for the image element.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:choice>
				<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The extra element may appear any number of times.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="id" type="xs:ID">
				<xs:annotation>
					<xs:documentation>
					The id attribute is a text string containing the unique identifier of this element. This value 
					must be unique within the instance document. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="name" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The name attribute is the text string name of this element. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="format" type="xs:token">
				<xs:annotation>
					<xs:documentation>
					The format attribute is a text string value that indicates the image format. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="height" type="uint">
				<xs:annotation>
					<xs:documentation>
					The height attribute is an integer value that indicates the height of the image in pixel 
					units. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="width" type="uint">
				<xs:annotation>
					<xs:documentation>
					The width attribute is an integer value that indicates the width of the image in pixel units. 
					Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="depth" type="uint" default="1">
				<xs:annotation>
					<xs:documentation>
					The depth attribute is an integer value that indicates the depth of the image in pixel units. 
					A 2-D image has a depth of 1, which is also the default value. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="light">
		<xs:annotation>
			<xs:documentation>
			The light element declares a light source that illuminates the scene.
			Light sources have many different properties and radiate light in many different patterns and 
			frequencies.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="asset" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
						The light element may contain an asset element.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="technique_common">
					<xs:annotation>
						<xs:documentation>
						The technique_common element specifies the light information for the common profile which all 
						COLLADA implementations need to support.
						</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:choice>
							<xs:element name="ambient">
								<xs:annotation>
									<xs:documentation>
									The ambient element declares the parameters required to describe an ambient light source.  
									An ambient light is one that lights everything evenly, regardless of location or orientation.
									</xs:documentation>
								</xs:annotation>
								<xs:complexType>
									<xs:sequence>
										<xs:element name="color" type="TargetableFloat3">
											<xs:annotation>
												<xs:documentation>
												The color element contains three floating point numbers specifying the color of the light.
												The color element must occur exactly once.  
												</xs:documentation>
											</xs:annotation>
										</xs:element>
									</xs:sequence>
								</xs:complexType>
							</xs:element>
							<xs:element name="directional">
								<xs:annotation>
									<xs:documentation>
									The directional element declares the parameters required to describe a directional light source.  
									A directional light is one that lights everything from the same direction, regardless of location.  
									The light’s default direction vector in local coordinates is [0,0,-1], pointing down the -Z axis. 
									The actual direction of the light is defined by the transform of the node where the light is 
									instantiated.
									</xs:documentation>
								</xs:annotation>
								<xs:complexType>
									<xs:sequence>
										<xs:element name="color" type="TargetableFloat3">
											<xs:annotation>
												<xs:documentation>
												The color element contains three floating point numbers specifying the color of the light.
												The color element must occur exactly once.  
												</xs:documentation>
											</xs:annotation>
										</xs:element>
									</xs:sequence>
								</xs:complexType>
							</xs:element>
							<xs:element name="point">
								<xs:annotation>
									<xs:documentation>
									The point element declares the parameters required to describe a point light source.  A point light 
									source radiates light in all directions from a known location in space. The intensity of a point 
									light source is attenuated as the distance to the light source increases. The position of the light 
									is defined by the transform of the node in which it is instantiated.
									</xs:documentation>
								</xs:annotation>
								<xs:complexType>
									<xs:sequence>
										<xs:element name="color" type="TargetableFloat3">
											<xs:annotation>
												<xs:documentation>
												The color element contains three floating point numbers specifying the color of the light.
												The color element must occur exactly once.  
												</xs:documentation>
											</xs:annotation>
										</xs:element>
										<xs:element name="constant_attenuation" type="TargetableFloat" default="1.0" minOccurs="0">
											<xs:annotation>
												<xs:documentation>
												The constant_attenuation is used to calculate the total attenuation of this light given a distance. 
												The equation used is A = constant_attenuation + Dist*linear_attenuation + Dist^2*quadratic_attenuation. 
												</xs:documentation>
											</xs:annotation>
										</xs:element>
										<xs:element name="linear_attenuation" type="TargetableFloat" default="0.0" minOccurs="0">
											<xs:annotation>
												<xs:documentation>
												The linear_attenuation is used to calculate the total attenuation of this light given a distance. 
												The equation used is A = constant_attenuation + Dist*linear_attenuation + Dist^2*quadratic_attenuation. 
												</xs:documentation>
											</xs:annotation>
										</xs:element>
										<xs:element name="quadratic_attenuation" type="TargetableFloat" default="0.0" minOccurs="0">
											<xs:annotation>
												<xs:documentation>
												The quadratic_attenuation is used to calculate the total attenuation of this light given a distance. 
												The equation used is A = constant_attenuation + Dist*linear_attenuation + Dist^2*quadratic_attenuation. 
												</xs:documentation>
											</xs:annotation>
										</xs:element>
									</xs:sequence>
								</xs:complexType>
							</xs:element>
							<xs:element name="spot">
								<xs:annotation>
									<xs:documentation>
									The spot element declares the parameters required to describe a spot light source.  A spot light 
									source radiates light in one direction from a known location in space. The light radiates from 
									the spot light source in a cone shape. The intensity of the light is attenuated as the radiation 
									angle increases away from the direction of the light source. The intensity of a spot light source 
									is also attenuated as the distance to the light source increases. The position of the light is 
									defined by the transform of the node in which it is instantiated. The light’s default direction 
									vector in local coordinates is [0,0,-1], pointing down the -Z axis. The actual direction of the 
									light is defined by the transform of the node where the light is instantiated.
									</xs:documentation>
								</xs:annotation>
								<xs:complexType>
									<xs:sequence>
										<xs:element name="color" type="TargetableFloat3">
											<xs:annotation>
												<xs:documentation>
												The color element contains three floating point numbers specifying the color of the light.
												The color element must occur exactly once.  
												</xs:documentation>
											</xs:annotation>
										</xs:element>
										<xs:element name="constant_attenuation" type="TargetableFloat" default="1.0" minOccurs="0">
											<xs:annotation>
												<xs:documentation>
												The constant_attenuation is used to calculate the total attenuation of this light given a distance. 
												The equation used is A = constant_attenuation + Dist*linear_attenuation + Dist^2*quadratic_attenuation. 
												</xs:documentation>
											</xs:annotation>
										</xs:element>
										<xs:element name="linear_attenuation" type="TargetableFloat" default="0.0" minOccurs="0">
											<xs:annotation>
												<xs:documentation>
												The linear_attenuation is used to calculate the total attenuation of this light given a distance. 
												The equation used is A = constant_attenuation + Dist*linear_attenuation + Dist^2*quadratic_attenuation. 
												</xs:documentation>
											</xs:annotation>
										</xs:element>
										<xs:element name="quadratic_attenuation" type="TargetableFloat" default="0.0" minOccurs="0">
											<xs:annotation>
												<xs:documentation>
												The quadratic_attenuation is used to calculate the total attenuation of this light given a distance. 
												The equation used is A = constant_attenuation + Dist*linear_attenuation + Dist^2*quadratic_attenuation. 
												</xs:documentation>
											</xs:annotation>
										</xs:element>
										<xs:element name="falloff_angle" type="TargetableFloat" default="180.0" minOccurs="0">
											<xs:annotation>
												<xs:documentation>
												The falloff_angle is used to specify the amount of attenuation based on the direction of the light.
												</xs:documentation>
											</xs:annotation>
										</xs:element>
										<xs:element name="falloff_exponent" type="TargetableFloat" default="0.0" minOccurs="0">
											<xs:annotation>
												<xs:documentation>
												The falloff_exponent is used to specify the amount of attenuation based on the direction of the light.
												</xs:documentation>
											</xs:annotation>
										</xs:element>
									</xs:sequence>
								</xs:complexType>
							</xs:element>
						</xs:choice>
					</xs:complexType>
				</xs:element>
				<xs:element ref="technique" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						This element may contain any number of non-common profile techniques.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The extra element may appear any number of times.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="id" type="xs:ID">
				<xs:annotation>
					<xs:documentation>
					The id attribute is a text string containing the unique identifier of this element. 
					This value must be unique within the instance document. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="name" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The name attribute is the text string name of this element. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="material">
		<xs:annotation>
			<xs:documentation>
			Materials describe the visual appearance of a geometric object.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="asset" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
						The material element may contain an asset element.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="instance_effect">
					<xs:annotation>
						<xs:documentation>
						The material must instance an effect.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The extra element may appear any number of times.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="id" type="xs:ID">
				<xs:annotation>
					<xs:documentation>
					The id attribute is a text string containing the unique identifier of this element. This value 
					must be unique within the instance document. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="name" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The name attribute is the text string name of this element. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<!-- Object Elements -->
	<xs:element name="camera">
		<xs:annotation>
			<xs:documentation>
			The camera element declares a view into the scene hierarchy or scene graph. The camera contains 
			elements that describe the camera’s optics and imager.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="asset" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
						The camera element may contain an asset element.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="optics">
					<xs:annotation>
						<xs:documentation>
						Optics represents the apparatus on a camera that projects the image onto the image sensor.
						</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:sequence>
							<xs:element name="technique_common">
								<xs:annotation>
									<xs:documentation>
									The technique_common element specifies the optics information for the common profile 
									which all COLLADA implementations need to support.
									</xs:documentation>
								</xs:annotation>
								<xs:complexType>
									<xs:choice>
										<xs:element name="orthographic">
											<xs:annotation>
												<xs:documentation>
												The orthographic element describes the field of view of an orthographic camera.
												</xs:documentation>
											</xs:annotation>
											<xs:complexType>
												<xs:sequence>
													<xs:choice>
														<xs:sequence>
															<xs:element name="xmag" type="TargetableFloat">
																<xs:annotation>
																	<xs:documentation>
																	The xmag element contains a floating point number describing the horizontal 
																	magnification of the view.
																	</xs:documentation>
																</xs:annotation>
															</xs:element>
															<xs:choice minOccurs="0">
																<xs:element name="ymag" type="TargetableFloat">
																	<xs:annotation>
																		<xs:documentation>
																		The ymag element contains a floating point number describing the vertical 
																		magnification of the view.  It can also have a sid.
																		</xs:documentation>
																	</xs:annotation>
																</xs:element>
																<xs:element name="aspect_ratio" type="TargetableFloat">
																	<xs:annotation>
																		<xs:documentation>
																		The aspect_ratio element contains a floating point number describing the aspect ratio of 
																		the field of view. If the aspect_ratio element is not present the aspect ratio is to be 
																		calculated from the xmag or ymag elements and the current viewport.
																		</xs:documentation>
																	</xs:annotation>
																</xs:element>
															</xs:choice>
														</xs:sequence>
														<xs:sequence>
															<xs:element name="ymag" type="TargetableFloat"/>
															<xs:element name="aspect_ratio" type="TargetableFloat" minOccurs="0"/>
														</xs:sequence>
													</xs:choice>
													<xs:element name="znear" type="TargetableFloat">
														<xs:annotation>
															<xs:documentation>
															The znear element contains a floating point number that describes the distance to the near 
															clipping plane. The znear element must occur exactly once.
															</xs:documentation>
														</xs:annotation>
													</xs:element>
													<xs:element name="zfar" type="TargetableFloat">
														<xs:annotation>
															<xs:documentation>
															The zfar element contains a floating point number that describes the distance to the far 
															clipping plane. The zfar element must occur exactly once.
															</xs:documentation>
														</xs:annotation>
													</xs:element>
												</xs:sequence>
											</xs:complexType>
										</xs:element>
										<xs:element name="perspective">
											<xs:annotation>
												<xs:documentation>
												The perspective element describes the optics of a perspective camera.
												</xs:documentation>
											</xs:annotation>
											<xs:complexType>
												<xs:sequence>
													<xs:choice>
														<xs:sequence>
															<xs:element name="xfov" type="TargetableFloat">
																<xs:annotation>
																	<xs:documentation>
																	The xfov element contains a floating point number describing the horizontal field of view in degrees.
																	</xs:documentation>
																</xs:annotation>
															</xs:element>
															<xs:choice minOccurs="0">
																<xs:element name="yfov" type="TargetableFloat">
																	<xs:annotation>
																		<xs:documentation>
																		The yfov element contains a floating point number describing the verticle field of view in degrees.
																		</xs:documentation>
																	</xs:annotation>
																</xs:element>
																<xs:element name="aspect_ratio" type="TargetableFloat">
																	<xs:annotation>
																		<xs:documentation>
																		The aspect_ratio element contains a floating point number describing the aspect ratio of the field 
																		of view. If the aspect_ratio element is not present the aspect ratio is to be calculated from the 
																		xfov or yfov elements and the current viewport.
																		</xs:documentation>
																	</xs:annotation>
																</xs:element>
															</xs:choice>
														</xs:sequence>
														<xs:sequence>
															<xs:element name="yfov" type="TargetableFloat"/>
															<xs:element name="aspect_ratio" type="TargetableFloat" minOccurs="0"/>
														</xs:sequence>
													</xs:choice>
													<xs:element name="znear" type="TargetableFloat">
														<xs:annotation>
															<xs:documentation>
															The znear element contains a floating point number that describes the distance to the near 
															clipping plane. The znear element must occur exactly once.
															</xs:documentation>
														</xs:annotation>
													</xs:element>
													<xs:element name="zfar" type="TargetableFloat">
														<xs:annotation>
															<xs:documentation>
															The zfar element contains a floating point number that describes the distance to the far 
															clipping plane. The zfar element must occur exactly once.
															</xs:documentation>
														</xs:annotation>
													</xs:element>
												</xs:sequence>
											</xs:complexType>
										</xs:element>
									</xs:choice>
								</xs:complexType>
							</xs:element>
							<xs:element ref="technique" minOccurs="0" maxOccurs="unbounded">
								<xs:annotation>
									<xs:documentation>
									This element may contain any number of non-common profile techniques.
									</xs:documentation>
								</xs:annotation>
							</xs:element>
							<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
								<xs:annotation>
									<xs:documentation>
									The extra element may appear any number of times.
									</xs:documentation>
								</xs:annotation>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="imager" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
						Imagers represent the image sensor of a camera (for example film or CCD).
						</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:sequence>
							<xs:element ref="technique" maxOccurs="unbounded">
								<xs:annotation>
									<xs:documentation>
									This element may contain any number of non-common profile techniques.
									There is no common technique for imager.
									</xs:documentation>
								</xs:annotation>
							</xs:element>
							<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
								<xs:annotation>
									<xs:documentation>
									The extra element may appear any number of times.
									</xs:documentation>
								</xs:annotation>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The extra element may appear any number of times.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="id" type="xs:ID">
				<xs:annotation>
					<xs:documentation>
					The id attribute is a text string containing the unique identifier of this element. This value 
					must be unique within the instance document. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="name" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The name attribute is the text string name of this element. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<!-- Animation Elements -->
	<xs:element name="animation">
		<xs:annotation>
			<xs:documentation>
			The animation element categorizes the declaration of animation information. The animation 
			hierarchy contains elements that describe the animation’s key-frame data and sampler functions, 
			ordered in such a way to group together animations that should be executed together.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="asset" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
						The animation element may contain an asset element.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:choice>
					<xs:sequence>
						<xs:element ref="source" maxOccurs="unbounded">
							<xs:annotation>
								<xs:documentation>
								The animation element may contain any number of source elements.
								</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:choice>
							<xs:sequence>
								<xs:element ref="sampler" maxOccurs="unbounded">
									<xs:annotation>
										<xs:documentation>
										The animation element may contain any number of sampler elements.
										</xs:documentation>
									</xs:annotation>
								</xs:element>
								<xs:element ref="channel" maxOccurs="unbounded">
									<xs:annotation>
										<xs:documentation>
										The animation element may contain any number of channel elements.
										</xs:documentation>
									</xs:annotation>
								</xs:element>
								<xs:element ref="animation" minOccurs="0" maxOccurs="unbounded">
									<xs:annotation>
										<xs:documentation>
										The animation may be hierarchical and may contain any number of other animation elements.
										</xs:documentation>
									</xs:annotation>
								</xs:element>
							</xs:sequence>
							<xs:element ref="animation" maxOccurs="unbounded"/>
						</xs:choice>
					</xs:sequence>
					<xs:sequence>
						<xs:element ref="sampler" maxOccurs="unbounded"/>
						<xs:element ref="channel" maxOccurs="unbounded"/>
						<xs:element ref="animation" minOccurs="0" maxOccurs="unbounded"/>
					</xs:sequence>
					<xs:element ref="animation" maxOccurs="unbounded"/>
				</xs:choice>
				<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The extra element may appear any number of times.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="id" type="xs:ID">
				<xs:annotation>
					<xs:documentation>
					The id attribute is a text string containing the unique identifier of this element. This value 
					must be unique within the instance document. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="name" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The name attribute is the text string name of this element. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="animation_clip">
		<xs:annotation>
			<xs:documentation>
			The animation_clip element defines a section of the animation curves to be used together as 
			an animation clip.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="asset" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
						The animation_clip element may contain an asset element.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="instance_animation" type="InstanceWithExtra" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The animation_clip must instance at least one animation element.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The extra element may appear any number of times.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="id" type="xs:ID">
				<xs:annotation>
					<xs:documentation>
					The id attribute is a text string containing the unique identifier of this element. 
					This value must be unique within the instance document. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="name" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The name attribute is the text string name of this element. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="start" type="xs:double" default="0.0">
				<xs:annotation>
					<xs:documentation>
					The start attribute is the time in seconds of the beginning of the clip.  This time is 
					the same as that used in the key-frame data and is used to determine which set of 
					key-frames will be included in the clip.  The start time does not specify when the clip 
					will be played.  If the time falls between two keyframes of a referenced animation, an 
					interpolated value should be used.  The default value is 0.0.  Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="end" type="xs:double">
				<xs:annotation>
					<xs:documentation>
					The end attribute is the time in seconds of the end of the clip.  This is used in the 
					same way as the start time.  If end is not specified, the value is taken to be the end 
					time of the longest animation.  Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="channel">
		<xs:annotation>
			<xs:documentation>
			The channel element declares an output channel of an animation.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="source" type="URIFragmentType" use="required">
				<xs:annotation>
					<xs:documentation>
					The source attribute indicates the location of the sampler using a URL expression. 
					The sampler must be declared within the same document. Required attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="target" type="xs:token" use="required">
				<xs:annotation>
					<xs:documentation>
					The target attribute indicates the location of the element bound to the output of the sampler. 
					This text string is a path-name following a simple syntax described in Address Syntax. 
					Required attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="sampler">
		<xs:annotation>
			<xs:documentation>
			The sampler element declares an N-dimensional function used for animation. Animation function curves 
			are represented by 1-D sampler elements in COLLADA. The sampler defines sampling points and how to 
			interpolate between them.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="input" type="InputLocal" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The input element must occur at least one time. These inputs are local inputs.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="id" type="xs:ID">
				<xs:annotation>
					<xs:documentation>
					The id attribute is a text string containing the unique identifier of this element. This value 
					must be unique within the instance document. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<!-- Controller Elements -->
	<xs:element name="controller">
		<xs:annotation>
			<xs:documentation>
			The controller element categorizes the declaration of generic control information.
			A controller is a device or mechanism that manages and directs the operations of another object.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="asset" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
						The controller element may contain an asset element.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:choice>
					<xs:element ref="skin">
						<xs:annotation>
							<xs:documentation>
							The controller element may contain either a skin element or a morph element.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="morph">
						<xs:annotation>
							<xs:documentation>
							The controller element may contain either a skin element or a morph element.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:choice>
				<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The extra element may appear any number of times.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="id" type="xs:ID">
				<xs:annotation>
					<xs:documentation>
					The id attribute is a text string containing the unique identifier of this element. This value 
					must be unique within the instance document. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="name" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The name attribute is the text string name of this element. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="skin">
		<xs:annotation>
			<xs:documentation>
			The skin element contains vertex and primitive information sufficient to describe blend-weight skinning.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="bind_shape_matrix" type="float4x4" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
						This provides extra information about the position and orientation of the base mesh before binding. 
						If bind_shape_matrix is not specified then an identity matrix may be used as the bind_shape_matrix.
						The bind_shape_matrix element may occur zero or one times.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="source" minOccurs="3" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The skin element must contain at least three source elements.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="joints">
					<xs:annotation>
						<xs:documentation>
						The joints element associates joint, or skeleton, nodes with attribute data.  
						In COLLADA, this is specified by the inverse bind matrix of each joint (influence) in the skeleton.
						</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:sequence>
							<xs:element name="input" type="InputLocal" minOccurs="2" maxOccurs="unbounded">
								<xs:annotation>
									<xs:documentation>
									The input element must occur at least twice. These inputs are local inputs.
									</xs:documentation>
								</xs:annotation>
							</xs:element>
							<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
								<xs:annotation>
									<xs:documentation>
									The extra element may appear any number of times.
									</xs:documentation>
								</xs:annotation>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="vertex_weights">
					<xs:annotation>
						<xs:documentation>
						The vertex_weights element associates a set of joint-weight pairs with each vertex in the base mesh.
						</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:sequence>
							<xs:element name="input" type="InputLocalOffset" minOccurs="2" maxOccurs="unbounded">
								<xs:annotation>
									<xs:documentation>
									The input element must occur at least twice.
									</xs:documentation>
								</xs:annotation>
							</xs:element>
							<xs:element name="vcount" type="ListOfUInts" minOccurs="0">
								<xs:annotation>
									<xs:documentation>
									The vcount element contains a list of integers describing the number of influences for each vertex.
									The vcount element may occur once.
									</xs:documentation>
								</xs:annotation>
							</xs:element>
							<xs:element name="v" type="ListOfInts" minOccurs="0">
								<xs:annotation>
									<xs:documentation>
									The v element describes which bones and attributes are associated with each vertex.  An index 
									of –1 into the array of joints refers to the bind shape.  Weights should be normalized before use.
									The v element must occur zero or one times.
									</xs:documentation>
								</xs:annotation>
							</xs:element>
							<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
								<xs:annotation>
									<xs:documentation>
									The extra element may appear any number of times.
									</xs:documentation>
								</xs:annotation>
							</xs:element>
						</xs:sequence>
						<xs:attribute name="count" type="uint" use="required">
							<xs:annotation>
								<xs:documentation>
								The count attribute describes the number of vertices in the base mesh. Required element. 
								</xs:documentation>
							</xs:annotation>
						</xs:attribute>
					</xs:complexType>
				</xs:element>
				<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The extra element may appear any number of times.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="source" type="xs:anyURI" use="required">
				<xs:annotation>
					<xs:documentation>
					The source attribute contains a URI reference to the base mesh, (a static mesh or a morphed mesh).
					This also provides the bind-shape of the skinned mesh.  Required attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="morph">
		<xs:annotation>
			<xs:documentation>
			The morph element describes the data required to blend between sets of static meshes. Each 
			possible mesh that can be blended (a morph target) must be specified.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="source" minOccurs="2" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The morph element must contain at least two source elements.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="targets">
					<xs:annotation>
						<xs:documentation>
						The targets element declares the morph targets, their weights and any user defined attributes 
						associated with them.
						</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:sequence>
							<xs:element name="input" type="InputLocal" minOccurs="2" maxOccurs="unbounded">
								<xs:annotation>
									<xs:documentation>
									The input element must occur at least twice. These inputs are local inputs.
									</xs:documentation>
								</xs:annotation>
							</xs:element>
							<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
								<xs:annotation>
									<xs:documentation>
									The extra element may appear any number of times.
									</xs:documentation>
								</xs:annotation>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The extra element may appear any number of times.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="method" type="MorphMethodType" default="NORMALIZED">
				<xs:annotation>
					<xs:documentation>
					The method attribute specifies the which blending technique to use. The accepted values are 
					NORMALIZED, and RELATIVE. The default value if not specified is NORMALIZED.  Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="source" type="xs:anyURI" use="required">
				<xs:annotation>
					<xs:documentation>
					The source attribute indicates the base mesh. Required attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<!-- Meta Elements -->
	<xs:element name="asset">
		<xs:annotation>
			<xs:documentation>
			The asset element defines asset management information regarding its parent element.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="contributor" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The contributor element defines authoring information for asset management
						</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:sequence>
							<xs:element name="author" type="xs:string" minOccurs="0">
								<xs:annotation>
									<xs:documentation>
									The author element contains a string with the author's name.
									There may be only one author element.
									</xs:documentation>
								</xs:annotation>
							</xs:element>
							<xs:element name="authoring_tool" type="xs:string" minOccurs="0">
								<xs:annotation>
									<xs:documentation>
									The authoring_tool element contains a string with the authoring tool's name.
									There may be only one authoring_tool element.
									</xs:documentation>
								</xs:annotation>
							</xs:element>
							<xs:element name="comments" type="xs:string" minOccurs="0">
								<xs:annotation>
									<xs:documentation>
									The comments element contains a string with comments from this contributor.
									There may be only one comments element.
									</xs:documentation>
								</xs:annotation>
							</xs:element>
							<xs:element name="copyright" type="xs:string" minOccurs="0">
								<xs:annotation>
									<xs:documentation>
									The copyright element contains a string with copyright information.
									There may be only one copyright element.
									</xs:documentation>
								</xs:annotation>
							</xs:element>
							<xs:element name="source_data" type="xs:anyURI" minOccurs="0">
								<xs:annotation>
									<xs:documentation>
									The source_data element contains a URI reference to the source data used for this asset.
									There may be only one source_data element.
									</xs:documentation>
								</xs:annotation>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="created" type="xs:dateTime">
					<xs:annotation>
						<xs:documentation>
						The created element contains the date and time that the parent element was created and is 
						represented in an ISO 8601 format.  The created element may appear zero or one time.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="keywords" type="xs:string" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
						The keywords element contains a list of words used as search criteria for the parent element. 
						The keywords element may appear zero or more times.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="modified" type="xs:dateTime">
					<xs:annotation>
						<xs:documentation>
						The modified element contains the date and time that the parent element was last modified and 
						represented in an ISO 8601 format. The modified element may appear zero or one time.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="revision" type="xs:string" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
						The revision element contains the revision information for the parent element. The revision 
						element may appear zero or one time.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="subject" type="xs:string" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
						The subject element contains a description of the topical subject of the parent element. The 
						subject element may appear zero or one time.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="title" type="xs:string" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
						The title element contains the title information for the parent element. The title element may 
						appear zero or one time.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="unit" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
						The unit element contains descriptive information about unit of measure. It has attributes for 
						the name of the unit and the measurement with respect to the meter. The unit element may appear 
						zero or one time.
						</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:attribute name="meter" type="float" default="1.0">
							<xs:annotation>
								<xs:documentation>
								The meter attribute specifies the measurement with respect to the meter. The default 
								value for the meter attribute is “1.0”.
								</xs:documentation>
							</xs:annotation>
						</xs:attribute>
						<xs:attribute name="name" type="xs:NMTOKEN" default="meter">
							<xs:annotation>
								<xs:documentation>
								The name attribute specifies the name of the unit. The default value for the name 
								attribute is “meter”.
								</xs:documentation>
							</xs:annotation>
						</xs:attribute>
					</xs:complexType>
				</xs:element>
				<xs:element name="up_axis" type="UpAxisType" default="Y_UP" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
						The up_axis element contains descriptive information about coordinate system of the geometric 
						data. All coordinates are right-handed by definition. This element specifies which axis is 
						considered up. The default is the Y-axis. The up_axis element may appear zero or one time.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="extra">
		<xs:annotation>
			<xs:documentation>
			The extra element declares additional information regarding its parent element.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="asset" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
						The extra element may contain an asset element.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="technique" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						This element must contain at least one non-common profile technique.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="id" type="xs:ID">
				<xs:annotation>
					<xs:documentation>
					The id attribute is a text string containing the unique identifier of this element. This value 
					must be unique within the instance document. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="name" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The name attribute is the text string name of this element. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="type" type="xs:NMTOKEN">
				<xs:annotation>
					<xs:documentation>
					The type attribute indicates the type of the value data. This text string must be understood by 
					the application. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="technique">
		<xs:annotation>
			<xs:appinfo>enable-xmlns</xs:appinfo>
			<xs:documentation>
			The technique element declares the information used to process some portion of the content. Each 
			technique conforms to an associated profile. Techniques generally act as a “switch”. If more than 
			one is present for a particular portion of content, on import, one or the other is picked, but 
			usually not both. Selection should be based on which profile the importing application can support.
			Techniques contain application data and programs, making them assets that can be managed as a unit.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attribute name="profile" type="xs:NMTOKEN" use="required">
				<xs:annotation>
					<xs:documentation>
					The profile attribute indicates the type of profile. This is a vendor defined character 
					string that indicates the platform or capability target for the technique. Required attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<!-- Hierarchical Elements -->
	<xs:element name="node">
		<xs:annotation>
			<xs:documentation>
			Nodes embody the hierarchical relationship of elements in the scene.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="asset" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
						The node element may contain an asset element.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:choice minOccurs="0" maxOccurs="unbounded">
					<xs:element ref="lookat">
						<xs:annotation>
							<xs:documentation>
							The node element may contain any number of lookat elements.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="matrix">
						<xs:annotation>
							<xs:documentation>
							The node element may contain any number of matrix elements.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="rotate">
						<xs:annotation>
							<xs:documentation>
							The node element may contain any number of rotate elements.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="scale">
						<xs:annotation>
							<xs:documentation>
							The node element may contain any number of scale elements.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="skew">
						<xs:annotation>
							<xs:documentation>
							The node element may contain any number of skew elements.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element ref="translate">
						<xs:annotation>
							<xs:documentation>
							The node element may contain any number of translate elements.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:choice>
				<xs:element ref="instance_camera" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The node element may instance any number of camera objects.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="instance_controller" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The node element may instance any number of controller objects.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="instance_geometry" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The node element may instance any number of geometry objects.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="instance_light" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The node element may instance any number of light objects.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="instance_node" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The node element may instance any number of node elements or hierarchies objects.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="node" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The node element may be hierarchical and be the parent of any number of other node elements.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The extra element may appear any number of times.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="id" type="xs:ID">
				<xs:annotation>
					<xs:documentation>
					The id attribute is a text string containing the unique identifier of this element. 
					This value must be unique within the instance document. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="name" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The name attribute is the text string name of this element. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="sid" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The sid attribute is a text string value containing the sub-identifier of this element. 
					This value must be unique within the scope of the parent element. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="type" type="NodeType" default="NODE">
				<xs:annotation>
					<xs:documentation>
					The type attribute indicates the type of the node element. The default value is “NODE”. 
					Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="layer" type="ListOfNames">
				<xs:annotation>
					<xs:documentation>
					The layer attribute indicates the names of the layers to which this node belongs.  For example, 
					a value of “foreground glowing” indicates that this node belongs to both the ‘foreground’ layer 
					and the ‘glowing’ layer.  The default value is empty, indicating that the node doesn’t belong to 
					any layer.  Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="visual_scene">
		<xs:annotation>
			<xs:documentation>
			The visual_scene element declares the base of the visual_scene hierarchy or scene graph. The 
			scene contains elements that comprise much of the visual and transformational information 
			content as created by the authoring tools.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="asset" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
						The visual_scene element may contain an asset element.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="node" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The visual_scene element must have at least one node element.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="evaluate_scene" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The evaluate_scene element declares information specifying a specific way to evaluate this 
						visual_scene. There may be any number of evaluate_scene elements.
						</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:sequence>
							<xs:element name="render" maxOccurs="unbounded">
								<xs:annotation>
									<xs:documentation>
									The render element describes one effect pass to evaluate the scene.
									There must be at least one render element.
									</xs:documentation>
								</xs:annotation>
								<xs:complexType>
									<xs:sequence>
										<xs:element name="layer" type="xs:NCName" minOccurs="0" maxOccurs="unbounded">
											<xs:annotation>
												<xs:documentation>
												The layer element specifies which layer to render in this compositing step 
												while evaluating the scene. You may specify any number of layers.
												</xs:documentation>
											</xs:annotation>
										</xs:element>
										<xs:element ref="instance_effect" minOccurs="0">
											<xs:annotation>
												<xs:documentation>
												The instance_effect element specifies which effect to render in this compositing step 
												while evaluating the scene.
												</xs:documentation>
											</xs:annotation>
										</xs:element>
									</xs:sequence>
									<xs:attribute name="camera_node" type="xs:anyURI" use="required">
										<xs:annotation>
											<xs:documentation>
											The camera_node attribute refers to a node that contains a camera describing the viewpoint to 
											render this compositing step from.
											</xs:documentation>
										</xs:annotation>
									</xs:attribute>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
						<xs:attribute name="name" type="xs:NCName">
							<xs:annotation>
								<xs:documentation>
								The name attribute is the text string name of this element. Optional attribute.
								</xs:documentation>
							</xs:annotation>
						</xs:attribute>
					</xs:complexType>
				</xs:element>
				<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The extra element may appear any number of times.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="id" type="xs:ID" use="optional">
				<xs:annotation>
					<xs:documentation>
					The id attribute is a text string containing the unique identifier of this element. This 
					value must be unique within the instance document. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="name" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The name attribute is the text string name of this element. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<!-- Instance Elements -->
	<xs:element name="bind_material">
		<xs:annotation>
			<xs:documentation>
			Bind a specific material to a piece of geometry, binding varying and uniform parameters at the 
			same time.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="param" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The bind_material element may contain any number of param elements.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="technique_common">
					<xs:annotation>
						<xs:documentation>
						The technique_common element specifies the bind_material information for the common 
						profile which all COLLADA implementations need to support.
						</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:sequence>
							<xs:element ref="instance_material" maxOccurs="unbounded">
								<xs:annotation>
									<xs:documentation>
									The instance_material element specifies the information needed to bind a geometry
									to a material. This element must appear at least once.
									</xs:documentation>
								</xs:annotation>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element ref="technique" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						This element may contain any number of non-common profile techniques.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The extra element may appear any number of times.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="instance_camera" type="InstanceWithExtra">
		<xs:annotation>
			<xs:documentation>
			The instance_camera element declares the instantiation of a COLLADA camera resource.
			</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="instance_controller">
		<xs:annotation>
			<xs:documentation>
			The instance_controller element declares the instantiation of a COLLADA controller resource.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="skeleton" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The skeleton element is used to indicate where a skin controller is to start to search for 
						the joint nodes it needs.  This element is meaningless for morph controllers.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="bind_material" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
						Bind a specific material to a piece of geometry, binding varying and uniform parameters at the 
						same time.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The extra element may appear any number of times.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="url" type="xs:anyURI" use="required">
				<xs:annotation>
					<xs:documentation>
					The url attribute refers to resource. This may refer to a local resource using a relative 
					URL fragment identifier that begins with the “#” character. The url attribute may refer to an 
					external resource using an absolute or relative URL.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="sid" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The sid attribute is a text string value containing the sub-identifier of this element. This 
					value must be unique within the scope of the parent element. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="name" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The name attribute is the text string name of this element. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="instance_effect">
		<xs:annotation>
			<xs:documentation>
			The instance_effect element declares the instantiation of a COLLADA effect resource.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="technique_hint" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						Add a hint for a platform of which technique to use in this effect.
						</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:attribute name="platform" type="xs:NCName" use="optional">
							<xs:annotation>
								<xs:documentation>
								A platform defines a string that specifies which platform this is hint is aimed for.
								</xs:documentation>
							</xs:annotation>
						</xs:attribute>
						<xs:attribute name="profile" type="xs:NCName" use="optional">
							<xs:annotation>
								<xs:documentation>
								A profile defines a string that specifies which API profile this is hint is aimed for.
								</xs:documentation>
							</xs:annotation>
						</xs:attribute>
						<xs:attribute name="ref" type="xs:NCName" use="required">
							<xs:annotation>
								<xs:documentation>
								A reference to the technique to use for the specified platform.
								</xs:documentation>
							</xs:annotation>
						</xs:attribute>
					</xs:complexType>
				</xs:element>
				<xs:element name="setparam" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						Assigns a new value to a previously defined parameter
						</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:sequence>
							<xs:group ref="fx_basic_type_common"/>
						</xs:sequence>
						<xs:attribute name="ref" type="xs:token" use="required"/>
					</xs:complexType>
				</xs:element>
				<xs:element ref="extra" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
						The extra element may appear any number of times.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="url" type="xs:anyURI" use="required">
				<xs:annotation>
					<xs:documentation>
					The url attribute refers to resource.  This may refer to a local resource using a relative URL 
					fragment identifier that begins with the “#” character. The url attribute may refer to an external 
					resource using an absolute or relative URL.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="sid" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The sid attribute is a text string value containing the sub-identifier of this element. This 
					value must be unique within the scope of the parent element. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="name" type="xs:NCName">
				<xs:annotation>
					<xs:documentation>
					The name attribute is the text string name of this element. Optional attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="instance_force_field" type="InstanceWithExtra">
		<xs:annotation>
			<xs:documentation>
			The instance_force_field element declares the instantiation of a COLLADA force_field resource.
			</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="instance_geometry">
		<xs:annotation>
			<xs:documentation>
			The instance_geometry element declares the instantiation of a COLLADA geometry resource.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="bind_material" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
						Bind a specific material to a piece of geometry, binding varying and uniform parameters at the 
						same time.
						</xs:documentation>
					</xs:annotation>
				</xs:e