<?xml version="1.0" encoding="UTF-8"?>
<schema version="2.0.2" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:gml="http://www.opengis.net/gml" xmlns:cgu="urn:cgi:xmlns:CGI:Utilities:1.0" xmlns:gsml="urn:cgi:xmlns:CGI:GeoSciML:2.0" targetNamespace="urn:cgi:xmlns:CGI:GeoSciML:2.0" elementFormDefault="qualified" attributeFormDefault="unqualified"><!-- Schema auto-generated by FullMoon, applying rule suite xmi11ea -->
    <annotation>
        <documentation>The GeoSciML "CGI_Value" model provides a generic way of encoding "literal" values, both textual and numeric, which have uncertainty and may be a range. These structures are designed to be able to capture value descriptions as conventionally recorded by geologists.  

The Value structures are for when you need 
1. a qualifier, 
2. to be able to use either single values or ranges, or 
3. to express uncertainty on numeric values 
4. use numbers or words as alternatives for a single value or in a mixed range

e.g. "usually X", "greater than Y" where X and Y are either a Measure (number with a scale) or Term (word from a vocabulary) or a range constructed from measures and terms

"CGI_GeometricDescriptions" allow describing the planar or linear orientation of a geologic feature. Allows specifying direction by DirectionVector (eg Dip/Dip Direction), compass point (NE), description ("toward fold hinge", "below')

These values are usually obtained as the result of an observation. The description of the associated observation event will provide more detail about the observation method, result quality, etc. </documentation>
    </annotation>
    <import namespace="http://www.opengis.net/gml" schemaLocation="http://schemas.opengis.net/gml/3.1.1/base/gml.xsd"/>
    <import namespace="urn:cgi:xmlns:CGI:Utilities:1.0" schemaLocation="http://www.geosciml.org/cgiutilities/1.0/xsd/cgiUtilities.xsd"/>
    <include schemaLocation="geosciml.xsd"/>
    <element name="CGI_NumericRange" substitutionGroup="gsml:CGI_Value" type="gsml:CGI_NumericRangeType">
        <annotation>
            <documentation>Allows specifying a range of numeric values (eg 443.7+-1.5 to 359+-2.5) by specifying an upper and lower  CGI_NumericValue</documentation>
        </annotation>
    </element>
    <complexType name="CGI_NumericRangeType">
        <complexContent>
            <extension base="gsml:CGI_ValueType">
                <sequence>
                    <element name="lower" type="gsml:CGI_NumericValuePropertyType"/>
                    <element name="upper" type="gsml:CGI_NumericValuePropertyType"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>
    <complexType name="CGI_NumericRangePropertyType">
        <sequence>
            <element ref="gsml:CGI_NumericRange"/>
        </sequence>
    </complexType>
    <element name="CGI_NumericValue" substitutionGroup="gsml:CGI_PrimitiveValue" type="gsml:CGI_NumericValueType">
        <annotation>
            <documentation>Numerical data type</documentation>
        </annotation>
    </element>
    <complexType name="CGI_NumericValueType">
        <complexContent>
            <extension base="gsml:CGI_PrimitiveValueType">
                <sequence>
                    <element maxOccurs="1" minOccurs="0" name="minusDelta" type="gml:MeasureType">
                        <annotation>
                            <documentation>Minus error value (measure data type uses a numeric value plus unit of measure)</documentation>
                        </annotation>
                    </element>
                    <element maxOccurs="1" minOccurs="0" name="plusDelta" type="gml:MeasureType">
                        <annotation>
                            <documentation>Plus error value (measure data type uses a numeric value plus unit of measure)</documentation>
                        </annotation>
                    </element>
                    <element name="principalValue" type="gml:MeasureType">
                        <annotation>
                            <documentation>Numeric value (measure data type uses a numeric value plus unit of measure)</documentation>
                        </annotation>
                    </element>
                </sequence>
            </extension>
        </complexContent>
    </complexType>
    <complexType name="CGI_NumericValuePropertyType">
        <sequence>
            <element ref="gsml:CGI_NumericValue"/>
        </sequence>
    </complexType>
    <element name="CGI_PlanarOrientation" substitutionGroup="gsml:CGI_GeometricDescriptionValue" type="gsml:CGI_PlanarOrientationType">
        <annotation>
            <documentation>Description of the geometry of a plane.</documentation>
        </annotation>
    </element>
    <complexType name="CGI_PlanarOrientationType">
        <complexContent>
            <extension base="gsml:CGI_GeometricDescriptionValueType">
                <sequence>
                    <element name="convention" type="gsml:ConventionCodeType">
                        <annotation>
                            <documentation>The convention used for the measurement</documentation>
                        </annotation>
                    </element>
                    <element maxOccurs="1" minOccurs="0" name="azimuth" type="gsml:CGI_ValuePropertyType">
                        <annotation>
                            <documentation>The azimuth (compass point, bearing etc) value of the orientation.</documentation>
                        </annotation>
                    </element>
                    <element maxOccurs="1" minOccurs="0" name="dip" type="gsml:CGI_ValuePropertyType">
                        <annotation>
                            <documentation>Dip is the angle that the structural surface (eg bedding, fault plane) makes with the horizontal measured perpindicular to the strike of the structure and in the vertical plane as a numeric or term</documentation>
                        </annotation>
                    </element>
                    <element name="polarity" type="gsml:PlanarPolarityCodeType">
                        <annotation>
                            <documentation>Indicates whether the planar orientation is associated with a directed feature that is overturned, upright, vertical etc.</documentation>
                        </annotation>
                    </element>
                </sequence>
            </extension>
        </complexContent>
    </complexType>
    <complexType name="CGI_PlanarOrientationPropertyType">
        <sequence>
            <element ref="gsml:CGI_PlanarOrientation"/>
        </sequence>
    </complexType>
    <element name="CGI_TermRange" substitutionGroup="gsml:CGI_Value" type="gsml:CGI_TermRangeType">
        <annotation>
            <documentation>Allows specifying a range of terms (eg Silurian - Devonian) by specifying an upper (Devonian) and lower (Silurian) CGI_TermValue</documentation>
        </annotation>
    </element>
    <complexType name="CGI_TermRangeType">
        <complexContent>
            <extension base="gsml:CGI_ValueType">
                <sequence>
                    <element name="lower" type="gsml:CGI_TermValuePropertyType"/>
                    <element name="upper" type="gsml:CGI_TermValuePropertyType"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>
    <complexType name="CGI_TermRangePropertyType">
        <sequence>
            <element ref="gsml:CGI_TermRange"/>
        </sequence>
    </complexType>
    <element name="CGI_TermValue" substitutionGroup="gsml:CGI_PrimitiveValue" type="gsml:CGI_TermValueType">
        <annotation>
            <documentation>Where the value is from a ControlledVocabulary, the string shall be the value of the preferredName on the ControlledConcept; the codeSpace shall indicate the ControlledVocabulary; where the value is from an informal vocabulary, the codeSpace shall indicate the identity of that vocabulary and the string shall be a term from the vocabulary ... somehow</documentation>
        </annotation>
    </element>
    <complexType name="CGI_TermValueType">
        <complexContent>
            <extension base="gsml:CGI_PrimitiveValueType">
                <sequence>
                    <element name="value" type="cgu:CodeWithAuthorityType"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>
    <complexType name="CGI_TermValuePropertyType">
        <sequence>
            <element ref="gsml:CGI_TermValue"/>
        </sequence>
    </complexType>
    <element name="CGI_Vector" substitutionGroup="gsml:CGI_LinearOrientation" type="gsml:CGI_VectorType">
        <annotation>
            <documentation>data type for linear orientation with magnitude. Cardinality on magnitude is 1, if magnitude is unknown use CGI_LinearOrientation</documentation>
        </annotation>
    </element>
    <complexType name="CGI_VectorType">
        <complexContent>
            <extension base="gsml:CGI_LinearOrientationType">
                <sequence>
                    <element name="magnitude" type="gsml:CGI_NumericValuePropertyType">
                        <annotation>
                            <documentation>The numerical length of a linear vector </documentation>
                        </annotation>
                    </element>
                </sequence>
            </extension>
        </complexContent>
    </complexType>
    <complexType name="CGI_VectorPropertyType">
        <sequence>
            <element ref="gsml:CGI_Vector"/>
        </sequence>
    </complexType>
    <element name="CGI_LinearOrientation" substitutionGroup="gsml:CGI_GeometricDescriptionValue" type="gsml:CGI_LinearOrientationType">
        <annotation>
            <documentation>Description of the geometry of a line.</documentation>
        </annotation>
    </element>
    <complexType name="CGI_LinearOrientationType">
        <complexContent>
            <extension base="gsml:CGI_GeometricDescriptionValueType">
                <sequence>
                    <element maxOccurs="1" minOccurs="0" name="directed" type="gsml:LinearDirectedCodeType">
                        <annotation>
                            <documentation>To indicate if orientation represents linear feature that is directed, e.g. clast imbrication, mylonitic lineation with sense of shear, slickenlines with displacement direction, rather than undirected.  A code list to indicate which is the directed end of the linear orientation</documentation>
                        </annotation>
                    </element>
                    <element maxOccurs="1" minOccurs="0" name="plunge" type="gsml:CGI_ValuePropertyType">
                        <annotation>
                            <documentation>Magnitudeof the plunge.  May be a term (eg steeply) or numeric (eg 75 degrees) or range.</documentation>
                        </annotation>
                    </element>
                    <element maxOccurs="1" minOccurs="0" name="trend" type="gsml:CGI_ValuePropertyType">
                        <annotation>
                            <documentation>The azimuth (compass point, bearing etc) value of the linear orientation.  </documentation>
                        </annotation>
                    </element>
                </sequence>
            </extension>
        </complexContent>
    </complexType>
    <complexType name="CGI_LinearOrientationPropertyType">
        <sequence>
            <element ref="gsml:CGI_LinearOrientation"/>
        </sequence>
    </complexType>
    <element name="CGI_Range" substitutionGroup="gsml:CGI_Value" type="gsml:CGI_RangeType">
        <annotation>
            <documentation>Allows specifying a range consisting of both terms and numeric values (eg Silurian to 359.2+-2.5Ma) by specifying an upper and lower CGI_TermValue or CGI_NumericValue</documentation>
        </annotation>
    </element>
    <complexType name="CGI_RangeType">
        <complexContent>
            <extension base="gsml:CGI_ValueType">
                <sequence>
                    <element name="lower" type="gsml:CGI_PrimitiveValuePropertyType"/>
                    <element name="upper" type="gsml:CGI_PrimitiveValuePropertyType"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>
    <complexType name="CGI_RangePropertyType">
        <sequence>
            <element ref="gsml:CGI_Range"/>
        </sequence>
    </complexType>
    <element abstract="true" name="CGI_PrimitiveValue" substitutionGroup="gsml:CGI_Value" type="gsml:CGI_PrimitiveValueType">
        <annotation>
            <documentation>Abstract class to capture CGI data types</documentation>
        </annotation>
    </element>
    <complexType abstract="true" name="CGI_PrimitiveValueType">
        <complexContent>
            <extension base="gsml:CGI_ValueType"/>
        </complexContent>
    </complexType>
    <complexType name="CGI_PrimitiveValuePropertyType">
        <sequence>
            <element ref="gsml:CGI_PrimitiveValue"/>
        </sequence>
    </complexType>
    <element name="CGI_PhysicalDescription" type="gsml:CGI_PhysicalDescriptionType">
        <annotation>
            <documentation>Numbers and word values with a pointer to the semantics</documentation>
        </annotation>
    </element>
    <complexType name="CGI_PhysicalDescriptionType">
        <sequence>
            <element name="property" type="cgu:CodeWithAuthorityType">
                <annotation>
                    <documentation>Specifies the property that the value is applied to</documentation>
                </annotation>
            </element>
            <element name="value" type="gsml:CGI_ValuePropertyType">
                <annotation>
                    <documentation>The value of the specified property</documentation>
                </annotation>
            </element>
        </sequence>
    </complexType>
    <complexType name="CGI_PhysicalDescriptionPropertyType">
        <sequence>
            <element ref="gsml:CGI_PhysicalDescription"/>
        </sequence>
    </complexType>
    <element abstract="true" name="CGI_GeometricDescriptionValue" type="gsml:CGI_GeometricDescriptionValueType">
        <annotation>
            <documentation>Description of the planar or linear orientation of a geologic feature.   
Allows specifying direction by DirectionVector (eg Dip/Dip Direction), compass point (NE),  description ("toward fold hinge", "below')</documentation>
        </annotation>
    </element>
    <complexType abstract="true" name="CGI_GeometricDescriptionValueType">
        <sequence>
            <element maxOccurs="1" minOccurs="0" name="determinationMethod" type="gsml:CGI_TermValuePropertyType">
                <annotation>
                    <documentation>Describes the way the dip value was determined eg measured, inferred from dip slope etc </documentation>
                </annotation>
            </element>
            <element maxOccurs="1" minOccurs="0" name="descriptiveOrientation" type="gsml:CGI_TermPropertyType">
                <annotation>
                    <documentation>terminologic specification of orientation, referencing to some local geography</documentation>
                </annotation>
            </element>
        </sequence>
    </complexType>
    <complexType name="CGI_GeometricDescriptionValuePropertyType">
        <sequence>
            <element ref="gsml:CGI_GeometricDescriptionValue"/>
        </sequence>
    </complexType>
    <element abstract="true" name="CGI_Value" type="gsml:CGI_ValueType">
        <annotation>
            <documentation>The Value structures are for when you need 
1. a qualifier, 
2. to be able to use either single values or ranges, or 
3. to express uncertainty on numeric values
4. use numbers or words as alternatives for a single value or in a mixed range

e.g. "usually X", "greater than Y" where X and Y are either a Measure (number with a scale) or Term (word from a vocabulary) or a range constructed from measures and terms</documentation>
        </annotation>
    </element>
    <complexType abstract="true" name="CGI_ValueType">
        <sequence>
            <element maxOccurs="1" minOccurs="0" name="qualifier" type="gsml:ValueQualifierCodeType">
                <annotation>
                    <documentation>term that qualifies the specified value. Examples include (greaterThan (&gt;), lessThan, equalTo, approximate) commonly used with numeric values, and (never sometimes, common, always) used with term values.
Arithmetic terms (arithmetic mean, geometric mean, mode, median) added for GeoSciML2.</documentation>
                </annotation>
            </element>
        </sequence>
    </complexType>
    <complexType name="CGI_ValuePropertyType">
        <sequence>
            <element ref="gsml:CGI_Value"/>
        </sequence>
    </complexType>
    <group name="CGI_Term">
        <annotation>
            <documentation>A union class that allows the value to either be a CGI_TermValue or a CGI_TermRange</documentation>
        </annotation>
        <choice>
            <element ref="gsml:CGI_TermRange">
                <annotation>
                    <documentation>The attribute that allows the CGI_TermRange data type</documentation>
                </annotation>
            </element>
            <element ref="gsml:CGI_TermValue">
                <annotation>
                    <documentation>The attribute that allows the CGI_TermValue data type</documentation>
                </annotation>
            </element>
        </choice>
    </group>
    <complexType name="CGI_TermPropertyType">
        <sequence minOccurs="0">
            <group ref="gsml:CGI_Term"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
        <attribute name="unionSemantics" type="gsml:CGI_TermUnionSemantics"/>
    </complexType>
    <simpleType name="CGI_TermUnionSemantics">
        <restriction base="string">
            <enumeration value="range"/>
            <enumeration value="value"/>
        </restriction>
    </simpleType>
    <group name="CGI_Numeric">
        <annotation>
            <documentation>A union class that allows the value to either be a CGI_NumericValue or a CGI_NumericRange</documentation>
        </annotation>
        <choice>
            <element ref="gsml:CGI_NumericRange">
                <annotation>
                    <documentation>The attribute that allows the CGI_NumericRange data type</documentation>
                </annotation>
            </element>
            <element ref="gsml:CGI_NumericValue">
                <annotation>
                    <documentation>The attribute that allows the CGI_NumericValue data type</documentation>
                </annotation>
            </element>
        </choice>
    </group>
    <complexType name="CGI_NumericPropertyType">
        <sequence minOccurs="0">
            <group ref="gsml:CGI_Numeric"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
        <attribute name="unionSemantics" type="gsml:CGI_NumericUnionSemantics"/>
    </complexType>
    <simpleType name="CGI_NumericUnionSemantics">
        <restriction base="string">
            <enumeration value="range"/>
            <enumeration value="value"/>
        </restriction>
    </simpleType>
    <simpleType name="ConventionCodeType">
        <restriction base="string">
            <enumeration value="dip dip direction">
                <annotation>
                    <documentation>The orientation measurement consists of a dip and a dip direction.
Dip is the angle that the structural surface (eg bedding, fault plane) makes with the horizontal measured perpindicular to the strike of the structure and in the vertical plane
Dip direction is the azimuth perpindicular to the strike of the structure</documentation>
                </annotation>
            </enumeration>
            <enumeration value="strike dip right hand rule">
                <annotation>
                    <documentation>The strike and dip of planar data is listed according to the ?right-hand rule? or, as one looks along the strike direction, the surface dips to the right. 

Dip is the angle that the structural surface (eg bedding, fault plane) makes with the horizontal measured perpindicular to the strike of the structure and in the vertical plane </documentation>
                </annotation>
            </enumeration>
        </restriction>
    </simpleType>
    <simpleType name="ValueQualifierCodeType">
        <restriction base="string">
            <enumeration value="always"/>
            <enumeration value="approximate"/>
            <enumeration value="common"/>
            <enumeration value="equalTo"/>
            <enumeration value="greaterThan"/>
            <enumeration value="lessThan"/>
            <enumeration value="never"/>
            <enumeration value="nil:inapplicable"/>
            <enumeration value="quadratic mean">
                <annotation>
                    <documentation>Root means square - see http://en.wikipedia.org/wiki/Quadratic_mean</documentation>
                </annotation>
            </enumeration>
            <enumeration value="harmonic mean">
                <annotation>
                    <documentation>http://en.wikipedia.org/wiki/Harmonic_mean</documentation>
                </annotation>
            </enumeration>
            <enumeration value="geometric mean">
                <annotation>
                    <documentation>The geometric mean of a collection of positive data is defined as the nth root of the product of all the members of the data set, where n is the number of members.</documentation>
                </annotation>
            </enumeration>
            <enumeration value="arithmetic mean">
                <annotation>
                    <documentation>The average of a set of numbers. Found by adding all the numbers in a set and dividing the sum by the number of entries.</documentation>
                </annotation>
            </enumeration>
            <enumeration value="mode">
                <annotation>
                    <documentation>he data item that occurs most often in a set of data. (There may be more than one mode.)</documentation>
                </annotation>
            </enumeration>
            <enumeration value="median">
                <annotation>
                    <documentation>The middle number in a group of numbers when the group is arranged in order.</documentation>
                </annotation>
            </enumeration>
            <enumeration value="sometimes"/>
            <enumeration value="rare"/>
            <enumeration value="nil:withheld"/>
            <enumeration value="nil:missing"/>
            <enumeration value="nil:unknown"/>
        </restriction>
    </simpleType>
    <simpleType name="LinearDirectedCodeType">
        <restriction base="string">
            <enumeration value="directed up">
                <annotation>
                    <documentation>Indicates that the linear orientation is directed above the horizon</documentation>
                </annotation>
            </enumeration>
            <enumeration value="directed">
                <annotation>
                    <documentation>Indicates that the linear orientation is directed</documentation>
                </annotation>
            </enumeration>
            <enumeration value="directed down">
                <annotation>
                    <documentation>Indicates that the linear orientation is directed below the horizon</documentation>
                </annotation>
            </enumeration>
        </restriction>
    </simpleType>
    <simpleType name="PlanarPolarityCodeType">
        <restriction base="string">
            <enumeration value="unknown">
                <annotation>
                    <documentation>A planar orientation is applicable but it is unknown.</documentation>
                </annotation>
            </enumeration>
            <enumeration value="not applicable">
                <annotation>
                    <documentation>A planar orientation is not applicable (eg foliations)</documentation>
                </annotation>
            </enumeration>
            <enumeration value="vertical">
                <annotation>
                    <documentation>The plane is vertical (neither upright nor overturned)</documentation>
                </annotation>
            </enumeration>
            <enumeration value="upright">
                <annotation>
                    <documentation>The plane is upright (eg bedding is upright facing)</documentation>
                </annotation>
            </enumeration>
            <enumeration value="overturned">
                <annotation>
                    <documentation>The plane is overturned (eg the bedding is overturned)</documentation>
                </annotation>
            </enumeration>
        </restriction>
    </simpleType>
</schema>