<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
	<xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"/>
	<xs:annotation>
		<xs:documentation>Chameleon schema that provides various fundamental type definitions for inclusion in other Zelestra Standards schemas.</xs:documentation>
	</xs:annotation>
	
	<xs:simpleType name="AttractorType">
		<xs:annotation>
			<xs:documentation>Two or three dimensional attractor value. The Z axis may be considered as zero or ignored as needed.</xs:documentation>
		</xs:annotation>
		<xs:union>
			<xs:simpleType>
				<xs:restriction base="Vector2FloatType"/>
			</xs:simpleType>
			<xs:simpleType>
				<xs:restriction base="Vector3FloatType"/>
			</xs:simpleType>
		</xs:union>
	</xs:simpleType>

	<xs:complexType name="DataSourceType" abstract="true">
		<xs:attribute name="name" use="required">
			<xs:simpleType>
				<xs:restriction base="xs:NCName">
					<xs:maxLength value="31"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
	
 	<xs:simpleType name="EmailAddressType">
		<xs:restriction base="xs:token">
		    <xs:maxLength value="127" /> 
			<xs:pattern value="([\.a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(([a-zA-Z0-9_-])*\.([a-zA-Z0-9_-])+)+"/>
		</xs:restriction>
	</xs:simpleType>

	<xs:complexType name="LocalizedTokenType">
		<xs:simpleContent>
			<xs:extension base="xs:token">
				<xs:attribute ref="xml:lang" default="en-US"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
		
	<xs:complexType name="LocalizedURIType">
		<xs:simpleContent>
			<xs:extension base="xs:anyURI">
				<xs:attribute ref="xml:lang" default="en-US"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
		
	<xs:simpleType name="NonNegativeDoubleType">
		<xs:restriction base="xs:double">
			<xs:minInclusive value="0"/>
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="NonNegativeFloatType">
		<xs:restriction base="xs:float">
			<xs:minInclusive value="0"/>
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="NonNegativeIntegerType">
		<xs:restriction base="xs:integer">
			<xs:minInclusive value="0"/>
		</xs:restriction>
	</xs:simpleType>

    <xs:complexType name="TextMarkupType" mixed="true">
        <xs:annotation>
            <xs:documentation>Must use only XHTML-Strict markup tags (a, em, li, p, strong, and ul).</xs:documentation>
        </xs:annotation>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:any/>
        </xs:choice>
        <xs:attribute ref="xml:lang" default="en-US"/>
    </xs:complexType>
    
    <xs:simpleType name="PermittedUseType">
        <xs:restriction base="xs:token">
            <xs:enumeration value="view"/>
            <xs:enumeration value="download"/>
            <xs:enumeration value="share"/>
            <xs:enumeration value="remix"/>
            <xs:enumeration value="public"/>
        </xs:restriction>
    </xs:simpleType>
    
	<xs:simpleType name="VariedPrecisionDateType">
		<xs:union>
			<xs:simpleType>
				<xs:restriction base="xs:date"/>
			</xs:simpleType>
			<xs:simpleType>
				<xs:restriction base="xs:gYearMonth"/>
			</xs:simpleType>
			<xs:simpleType>
				<xs:restriction base="xs:gYear"/>
			</xs:simpleType>
		</xs:union>
	</xs:simpleType>

	<xs:simpleType name="Vector2DoubleType">
		<xs:annotation>
			<xs:documentation>List of two double values.</xs:documentation>
		</xs:annotation>
		<xs:restriction>
			<xs:simpleType>
				<xs:list itemType="xs:double"/>
			</xs:simpleType>
			<xs:length value="2"/>
		</xs:restriction>
	</xs:simpleType>
	
	<xs:simpleType name="Vector2FloatType">
		<xs:annotation>
			<xs:documentation>List of two float values.</xs:documentation>
		</xs:annotation>
		<xs:restriction>
			<xs:simpleType>
				<xs:list itemType="xs:float"/>
			</xs:simpleType>
			<xs:length value="2"/>
		</xs:restriction>
	</xs:simpleType>
	
	<xs:simpleType name="Vector3DoubleType">
		<xs:annotation>
			<xs:documentation>List of three double values.</xs:documentation>
		</xs:annotation>
		<xs:restriction>
			<xs:simpleType>
				<xs:list itemType="xs:double"/>
			</xs:simpleType>
			<xs:length value="3"/>
		</xs:restriction>
	</xs:simpleType>
	
	<xs:simpleType name="Vector3FloatType">
		<xs:annotation>
			<xs:documentation>List of three float values.</xs:documentation>
		</xs:annotation>
		<xs:restriction>
			<xs:simpleType>
				<xs:list itemType="xs:float"/>
			</xs:simpleType>
			<xs:length value="3"/>
		</xs:restriction>
	</xs:simpleType>
	
	<xs:simpleType name="Vector4DoubleType">
		<xs:annotation>
			<xs:documentation>List of four double values.</xs:documentation>
		</xs:annotation>
		<xs:restriction>
			<xs:simpleType>
				<xs:list itemType="xs:double"/>
			</xs:simpleType>
			<xs:length value="4"/>
		</xs:restriction>
	</xs:simpleType>
	
	<xs:simpleType name="Vector4FloatType">
		<xs:annotation>
			<xs:documentation>List of four float values.</xs:documentation>
		</xs:annotation>
		<xs:restriction>
			<xs:simpleType>
				<xs:list itemType="xs:float"/>
			</xs:simpleType>
			<xs:length value="4"/>
		</xs:restriction>
	</xs:simpleType>
	
</xs:schema>

