<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://xsim.codes/xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" xmlns:xenc11="http://www.w3.org/2009/xmlenc11#" version="3.4" targetNamespace="http://xsim.codes/xsd" elementFormDefault="qualified" id="xsim">
    <xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd"/>
    <xs:import namespace="http://www.w3.org/2001/04/xmlenc#" schemaLocation="xenc-schema.xsd"/>
    <xs:import namespace="http://www.w3.org/2009/xmlenc11#" schemaLocation="xenc-schema-11.xsd"/>

    <xs:element name="SimFile">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="BaseFile" type="SimFileCore" minOccurs="0"/>
                <xs:element name="SupplementalFile" type="SimFileDelta" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element ref="ds:Signature" minOccurs="0" maxOccurs="unbounded">
                    <xs:annotation>
                        <xs:documentation>This signature shall apply to either the baseFile or supplementalFile. X509 certificates in the signature block will be available as intermediate certificates for that signature and may be utilized for future signatures.</xs:documentation>
                    </xs:annotation>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:complexType name="SimFileCore">
        <xs:sequence>
            <xs:element name="FileFormatVersion" type="xs:positiveInteger">
                <xs:annotation>
                    <xs:documentation>The version of this xsd utilized for the simulation file</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="FileMinVersion" type="xs:positiveInteger">
                <xs:annotation>
                    <xs:documentation>The minimum version of this xsd that can be used to process this simulation file without error, although some functionality may be missing. Adding xml elements to the end of an existing sequence shall not cause parsing errors.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="Title" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:annotation>
                            <xs:documentation>The title of the event this simulation file covers. Multiple languages can be specified. If no language match is found the selected language element is undefined.</xs:documentation>
                        </xs:annotation>
                        <xs:extension base="xs:string">
                            <xs:attribute name="id" type="xs:ID" use="required"/>
                            <xs:attribute name="ietfTag" type="xs:string" default="en-us"/>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
            <xs:element name="Description" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:annotation>
                            <xs:documentation>A short description of the event viewable to all</xs:documentation>
                        </xs:annotation>
                        <xs:extension base="xs:string">
                            <xs:attribute name="id" type="xs:ID" use="required"/>
                            <xs:attribute name="ietfTag" type="xs:string" default="en-us"/>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
            <xs:element name="Author">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:annotation>
                            <xs:documentation>The name of the primary author of the simulation event</xs:documentation>
                        </xs:annotation>
                        <xs:extension base="xs:string">
                            <xs:attribute name="id" type="xs:ID" use="required"/>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
            <xs:element name="SimVersion" type="xs:positiveInteger">
                <xs:annotation>
                    <xs:documentation>The version number of the files contents. Should monotonically increase with every save of a modified file of the same name.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="SimFileUUID">
                <xs:annotation>
                    <xs:documentation>A serial number for this scenario. Remains constant throughout version changes. New events should reset this number. Letters must be upper case.</xs:documentation>
                </xs:annotation>
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:pattern value="[A-F0-9]{8}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{12}"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="ReplaceOnlyWithTrusted">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:annotation>
                            <xs:documentation>Only replace this document with one with the same simFileUUID, a greater SimVersion value, and the simFile object is trusted by either the reading application or trustOnly element's certificate.</xs:documentation>
                        </xs:annotation>
                        <xs:extension base="xs:boolean">
                            <xs:attribute name="id" type="xs:ID" use="required"/>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
            <xs:element name="RequireCertificateRevocationChecks">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:annotation>
                            <xs:documentation>If set to true a certificate is not considered valid until its revocation status is checked.</xs:documentation>
                        </xs:annotation>
                        <xs:extension base="xs:boolean">
                            <xs:attribute name="id" type="xs:ID" use="required"/>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
            <xs:element name="StartTime" type="MarkedTime">
                <xs:annotation>
                    <xs:documentation>The starting date and time of the simulated events. No information shall be displayed to a user before this time.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="StopTime" type="MarkedTime">
                <xs:annotation>
                    <xs:documentation>The end date and time of the simulated events. No information shall be displayed to a user after this time.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="TrustOnlyRoot" type="MarkedCert" minOccurs="0" maxOccurs="unbounded">
                <xs:annotation>
                    <xs:documentation>If replaceOnlyWithTrusted is specified the trusted values are implementation specific unless trustOnlyRoot is specified. Then only signatures generated by certificates that can be chained back to one of the trustOnlyRoot certificate authorities are considered valid. These certificates are NOT required to be certificate authorities.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="IntermediateCerts" type="MarkedCert" minOccurs="0" maxOccurs="unbounded">
                <xs:annotation>
                    <xs:documentation>Intermediate certificates utilized in establishing certificate chains.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="SplashScreen" minOccurs="0" maxOccurs="unbounded">
                <xs:annotation>
                    <xs:documentation>A reference to an embedded image or multimedia file to present when a user loads this scenario. If multiple elements have the same ietfTag they should be presented simultaneously.</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:extension base="xs:IDREF">
                            <xs:attribute name="id" type="xs:ID" use="required"/>
                            <xs:attribute name="ietfTag" type="xs:string" default="en-us"/>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
            <xs:element name="OnlineUpdates" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>A location where the current version of the file is located and if updates should automatically be installed. The location should specify the location of a current full version. The library will first attempt to download a file at the location/existingVersion which should be a supplemental file between the existingVersion and the current version.</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="Location" type="xs:anyURI"/>
                        <xs:element name="AutoUpdate" type="xs:boolean"/>
                        <xs:element name="Frequency" type="xs:positiveInteger">
                            <xs:annotation>
                                <xs:documentation>The number of minutes between attempts to check for an updated file.</xs:documentation>
                            </xs:annotation>
                        </xs:element>
                    </xs:sequence>
                    <xs:attribute name="id" type="xs:ID" use="required"/>
                </xs:complexType>
            </xs:element>
            <xs:element name="FileEncryption" type="xs:boolean" default="false" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>If encryption is present indicates the file contents are encrypted. If this is the case then the noAuth authentication method is disallowed. Encryption shall be AES 128.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="DisableTemporalInterpolation" type="xs:boolean" default="false" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>Tells the field library to disable interpolation between time steps of source activity</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="Authorization" maxOccurs="unbounded">
                <xs:annotation>
                    <xs:documentation>Listing of users with access to the file contents and keys to decrypt the data accessible to them.</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="UserName" type="xs:string"/>
                        <xs:element name="Auth" type="Authentication"/>
                        <xs:element name="Access" type="AuthLevel"/>
                    </xs:sequence>
                    <xs:attribute name="id" type="xs:ID" use="required"/>
                </xs:complexType>
            </xs:element>
            <xs:element name="FieldData" type="FieldDataType"/>
            <xs:element name="ObserverData" type="ObserverDataType" minOccurs="0"/>
            <xs:element name="AuthorData" type="xs:base64Binary" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>This element contains the private key corresponding to the first trustOnlyRoot certificate and the keys for password based authorizations.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="AttachedFiles" type="EmbeddedFile" minOccurs="0" maxOccurs="unbounded"/>
            <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax" namespace="##other"/>
        </xs:sequence>
        <xs:attribute name="id" type="xs:ID" use="required"/>
    </xs:complexType>

    <xs:complexType name="SimFileDelta">
        <xs:annotation>
            <xs:documentation>This object represents a delta modification to an earlier sim file. New unencrypted data can only replace or be added to originally unencrypted data. Encrypted field content can only replace or be added to originally encrypted field content. Encrypted author data can only replace or be added to originally encrypted author content.</xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="PriorFileUUID">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:pattern value="[A-F0-9]{8}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{12}"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="PriorVersion" type="xs:positiveInteger"/>
            <xs:element name="NewVersion" type="xs:positiveInteger"/>
            <xs:element name="NodeToDelete" type="xs:IDREF" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="UnencryptedContent" type="NewContent" minOccurs="0"/>
            <xs:element name="EncryptedFieldContent" type="xs:base64Binary" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>This element is zlib compressed and encrypted to the pre-existing field key. The decrypted text shall be an unencrypted FieldDataContents node.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="EncryptedAuthorContent" type="xs:base64Binary" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>This element is zlib compressed and encrypted to the pre-existing author key. The decrypted text shall be an unencrypted AuthorDataType node.</xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
        <xs:attribute name="id" type="xs:ID" use="required"/>
    </xs:complexType>

    <xs:complexType name="NewContent">
        <xs:annotation>
            <xs:documentation>If encryption is enabled this data block requires the namespaces to be respecified. The namespace can't be assumed to be inherited from the parent xml file.</xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="NodeToReplace" type="xs:anyType" minOccurs="0" maxOccurs="unbounded">
                <xs:annotation>
                    <xs:documentation>The replaced node must have the same id value as the one it is replacing</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="NodesToInsert" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="ParentNode" type="xs:IDREF"/>
                        <xs:any processContents="strict" maxOccurs="unbounded">
                            <xs:annotation>
                                <xs:documentation>A series of nodes to add under the designated parentNode.</xs:documentation>
                            </xs:annotation>
                        </xs:any>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="FieldDataContents">
        <xs:annotation>
            <xs:documentation>If encryption is enabled this data block requires the namespaces to be respecified. The namespace can't be assumed to be inherited from the parent xml file.</xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="MapLayer" type="MapType" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="SpecificInstrument" type="InstrumentLink" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="InstrumentType" type="InstrumentType" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="RadiationSource" type="RadSrcType" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="Spectra" type="ModelSpectra" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="FieldTeam" type="FieldTeamType" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="Inject" type="InjectType" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="Weather" type="WeatherEvents" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="FieldFile" type="EmbeddedFile" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="People" type="SimPerson" minOccurs="0" maxOccurs="unbounded"/>
            <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax" namespace="##other"/>
        </xs:sequence>
        <xs:attribute name="id" type="xs:ID" use="required"/>
    </xs:complexType>

    <xs:complexType name="FieldDataType">
        <xs:annotation>
            <xs:documentation>If CipherText is chosen a fieldDataContents object is compressed with zlib and encrypted with AES128 CBC where the first 16 bytes here represent the IV.</xs:documentation>
        </xs:annotation>
        <xs:choice>
            <xs:element name="PlainText" type="FieldDataContents"/>
            <xs:element name="CipherText" type="xs:base64Binary"/>
        </xs:choice>
    </xs:complexType>

    <xs:complexType name="ObserverDataType">
        <xs:annotation>
            <xs:documentation>If CipherText is chosen an ObserverDataContents object is compressed with zlib and encrypted with AES128 CBC where the first 16 bytes here represent the IV.</xs:documentation>
        </xs:annotation>
        <xs:choice>
            <xs:element name="PlainText" type="ObserverDataContents"/>
            <xs:element name="CipherText" type="xs:base64Binary"/>
        </xs:choice>
    </xs:complexType>

    <xs:complexType name="ObserverDataContents">
        <xs:sequence>
            <xs:element name="AuthorNotes" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:annotation>
                            <xs:documentation>Notes on the creation of the scenario that are not disclosed to participants in the event but as a reference on the methodologies utilized in the scenario design.</xs:documentation>
                        </xs:annotation>
                        <xs:extension base="xs:string">
                            <xs:attribute name="id" type="xs:ID" use="required"/>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
            <xs:element name="MapLayer" type="MapType" minOccurs="0" maxOccurs="unbounded">
                <xs:annotation>
                    <xs:documentation>Maps to assist in the scenario creation but not disclosed to participants.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="Instrument" type="InstrumentMetaType" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="Source" type="RadSrcMetaType" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="FieldTeam" type="FieldTeamMetaType" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="AuthorFiles" type="EmbeddedFile" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="VersionNotes" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="VersionNumber" type="xs:positiveInteger"/>
                        <xs:element name="ChangeNotes" type="xs:string"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="RadMixes" type="TimeDependentMix" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="Injects" type="InjectMetaType" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="ObserverInjects" type="InjectType" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="ControllerInstruments" type="InstrumentType" minOccurs="0" maxOccurs="unbounded"/>
            <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax" namespace="##other"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="Authentication" abstract="true">
        <xs:attribute name="id" type="xs:ID" use="required"/>
    </xs:complexType>

    <xs:complexType name="PasswordHash">
        <xs:complexContent>
            <xs:extension base="Authentication">
                <xs:annotation>
                    <xs:documentation>The salt is concatenated with the user supplied password and hashed with the algorithm. No file encryption is supported.</xs:documentation>
                </xs:annotation>
                <xs:sequence>
                    <xs:element name="PasswordSalt" type="xs:string"/>
                    <xs:element name="Hash" type="xs:base64Binary"/>
                    <xs:element name="Algorithm" type="xs:anyURI" default="http://www.w3.org/2001/04/xmlenc#sha256" minOccurs="0"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="NoAuth">
        <xs:complexContent>
            <xs:extension base="Authentication">
                <xs:annotation>
                    <xs:documentation>This method does not require any information from the user in order to access the contents of the file.</xs:documentation>
                </xs:annotation>
                <xs:sequence>
                    <xs:element name="FieldKey" type="xs:base64Binary"/>
                    <xs:element name="ObserverKey" type="xs:base64Binary" minOccurs="0"/>
                    <xs:element name="AuthorKey" type="xs:base64Binary" minOccurs="0"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="IndividualCert">
        <xs:complexContent>
            <xs:extension base="Authentication">
                <xs:annotation>
                    <xs:documentation>As of this version only RSA v1.5 is supported as the EncryptionMethod.</xs:documentation>
                </xs:annotation>
                <xs:sequence>
                    <xs:element name="CertName" type="ds:X509IssuerSerialType"/>
                    <xs:element name="FieldKey" type="xenc:EncryptedKeyType"/>
                    <xs:element name="ObserverKey" type="xenc:EncryptedKeyType" minOccurs="0"/>
                    <xs:element name="AuthorKey" type="xenc:EncryptedKeyType" minOccurs="0"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="PasswordAuth">
        <xs:complexContent>
            <xs:extension base="Authentication">
                <xs:sequence>
                    <xs:element name="PasswordKey" type="xenc11:DerivedKeyType">
                        <xs:annotation>
                            <xs:documentation>This is the key generated by a user supplied password. The Algorithm SHALL be pkcs-5#pbkdf2 in this version.</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="FieldKey" type="xenc:EncryptedKeyType">
                        <xs:annotation>
                            <xs:documentation>This is a key encrypted by the passwordKey. When decrypted it can be used to decrypt the field contents. The Algorithm SHALL be kw-aes128 in this version.</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="ObserverKey" type="xenc:EncryptedKeyType" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>This is a key encrypted by the passwordKey. When decrypted it can be used to decrypt the authorship values. The algorithm SHALL be kw-aes128 in this version.</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="AuthorKey" type="xenc:EncryptedKeyType" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>This is a key encrypted by the passwordKey. When decrypted it can be used to decrypt the certificate to digitally sign modifications and access passwords. The algorithm SHALL be kw-aes128 in this version.</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="MarkedTime">
        <xs:simpleContent>
            <xs:extension base="FormattedDateTime">
                <xs:attribute name="id" type="xs:ID" use="required"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>

    <xs:complexType name="MarkedCert">
        <xs:annotation>
            <xs:documentation>Base 64 encoded data of a DER formatted X509 Certificate.</xs:documentation>
        </xs:annotation>
        <xs:simpleContent>
            <xs:extension base="xs:base64Binary">
                <xs:attribute name="id" type="xs:ID" use="required"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>

    <xs:complexType name="AuthLevel">
        <xs:simpleContent>
            <xs:extension base="UntaggedAuthLevel">
                <xs:attribute name="id" type="xs:ID" use="required"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>

    <xs:simpleType name="UntaggedAuthLevel">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Field">
                <xs:annotation>
                    <xs:documentation>This authorization level will only report data based on hardware generated location and times.</xs:documentation>
                </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="Oracle">
                <xs:annotation>
                    <xs:documentation>This authorization level will only report data for a selected location and time.</xs:documentation>
                </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="Observer">
                <xs:annotation>
                    <xs:documentation>This authorization level will provide full access to all data in the scenario in a read only format.</xs:documentation>
                </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="Author">
                <xs:annotation>
                    <xs:documentation>This authorization level will provide full access to all data and the capability to modify the values.</xs:documentation>
                </xs:annotation>
            </xs:enumeration>
        </xs:restriction>
    </xs:simpleType>

    <xs:complexType name="MapType" abstract="true">
        <xs:sequence>
            <xs:element name="LayerOrder" type="xs:positiveInteger">
                <xs:annotation>
                    <xs:documentation>Indicates the layer order of the maps. One is the base layer and higher numbers are layered above it</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="VisibleName" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:extension base="xs:string">
                            <xs:attribute name="ietfTag" type="xs:string" default="en-us"/>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
        <xs:attribute name="id" type="xs:ID" use="required"/>
    </xs:complexType>

    <xs:complexType name="ESRIShapeLayer">
        <xs:complexContent>
            <xs:extension base="MapType">
                <xs:sequence>
                    <xs:element name="SHPFile" type="xs:IDREF"/>
                    <xs:element name="SHXFile" type="xs:IDREF" minOccurs="0"/>
                    <xs:element name="DBFFile" type="xs:IDREF" minOccurs="0"/>
                    <xs:element name="PRJFile" type="xs:IDREF" minOccurs="0"/>
                    <xs:element name="LinearMu" type="PolynomialEquation" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>Indicates the attenuation coefficient for photons. Units are inverse meters.</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="DefaultColor" type="Color" default="#FF000000" minOccurs="0"/>
                    <xs:element name="Width" type="xs:positiveInteger" default="3" minOccurs="0"/>
                    <xs:choice minOccurs="0">
                        <xs:element name="IconHref" type="xs:anyURI" default="http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png" minOccurs="0"/>
                        <xs:element name="IconLocalFile" type="xs:IDREF"/>
                    </xs:choice>
                    <xs:element name="Ramp" type="ColorStop" minOccurs="0" maxOccurs="unbounded"/>
                    <xs:element name="ValueField" type="xs:string" minOccurs="0"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="WMSLayer">
        <xs:complexContent>
            <xs:extension base="MapType">
                <xs:sequence>
                    <xs:element name="WebAddress" type="xs:anyURI"/>
                    <xs:element name="LayerName" type="xs:string" maxOccurs="unbounded"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="KMZLayer">
        <xs:complexContent>
            <xs:extension base="MapType">
                <xs:sequence>
                    <xs:element name="LocalFile" type="xs:IDREF"/>
                    <xs:element name="LinearMu" type="PolynomialEquation" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>Indicates the attenuation coefficient for photons. Units are inverse meters.</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="InstrumentLink">
        <xs:sequence>
            <xs:element name="InstrumentRef" type="xs:IDREF"/>
            <xs:element name="SerialNumber" type="xs:string"/>
            <xs:element name="GUIDLink">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:pattern value="[A-F0-9]{8}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{12}"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="PerformanceEff" type="TimeDependentFloat" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute name="id" type="xs:ID" use="required"/>
    </xs:complexType>

    <xs:complexType name="InstrumentType" abstract="true">
        <xs:sequence>
            <xs:element name="Manufacturer" type="xs:string"/>
            <xs:element name="Model" type="xs:string"/>
            <xs:element name="VisibleName" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:extension base="xs:string">
                            <xs:attribute name="ietfTag" type="xs:string" default="en-us"/>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
            <xs:element name="PercentError" type="xs:float" minOccurs="0" maxOccurs="1" default="0.0"/>
            <xs:element name="PercentBias" type="xs:float" minOccurs="0" maxOccurs="1" default="0.0"/>
            <xs:element name="GaussianErrorSigma" type="PolynomialEquation" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>The polynomial to calculate sigma is based on the measured value before any noise terms are added.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="DeadTime" type="PolynomialEquation" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>The calculated value in the parameter and the function provides the dead time from 0 to 1.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="GUIDisplay" type="xs:IDREF" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>An instrument display will be a zip archive of a html5 application driven by javascript. The host application will set the environment's javascript variables: value (the scalar measurement value), latitude (the current latitude), longitude (the current longitude), measTime (the GMT time of measurement), and spectra (an array of channels).</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="SampleType" type="SampleTypes" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>If present this Instrument actually represents a sample collection of the specified type. Air samples are integrated over the time varying air contamination level. Ground samples are instantaneous samples.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="PrimaryRadType">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="Alpha"/>
                        <xs:enumeration value="Beta"/>
                        <xs:enumeration value="Gamma"/>
                        <xs:enumeration value="Beta/Gamma"/>
                        <xs:enumeration value="Neutron"/>
                        <xs:enumeration value="Other/Unknown"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="ThreeDimGUIDisplay" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:extension base="xs:IDREF">
                            <xs:attribute name="id" type="xs:ID" use="required"/>
                            <xs:attribute name="ietfTag" type="xs:string" default="en-us"/>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
        <xs:attribute name="id" type="xs:ID" use="required"/>
    </xs:complexType>

    <xs:complexType name="InstrumentMetaType">
        <xs:sequence>
            <xs:annotation>
                <xs:documentation>Efficiency curves are the probability of an interaction for a given incident energy in keV.</xs:documentation>
            </xs:annotation>
            <xs:element name="FieldInstrument" type="xs:IDREF"/>
            <xs:element name="ExposureMeter" type="xs:boolean"/>
            <xs:element name="AlphaEff" type="PolynomialEquation"/>
            <xs:element name="AlphaMinEnergy" type="xs:double"/>
            <xs:element name="AlphaMaxEnergy" type="xs:double"/>
            <xs:element name="ElectronEff" type="PolynomialEquation"/>
            <xs:element name="ElectronMinEnergy" type="xs:double"/>
            <xs:element name="ElectronMaxEnergy" type="xs:double"/>
            <xs:element name="GammaEff" type="PolynomialEquation"/>
            <xs:element name="GammaMinEnergy" type="xs:double"/>
            <xs:element name="GammaMaxEnergy" type="xs:double"/>
            <xs:element name="VirtualSensitivity" minOccurs="0" maxOccurs="unbounded">
                <xs:annotation>
                    <xs:documentation>For instruments that directly read the radiation source value defined by a TimeDependentMix containing a virtual isotope referenced here.</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="SourceConversionFactor" type="TimeEfficiency" maxOccurs="unbounded">
                            <xs:annotation>
                                <xs:documentation>The value to convert the defined source value by to add to this instrument's output</xs:documentation>
                            </xs:annotation>
                        </xs:element>
                        <xs:element name="VirtualIndex" type="xs:nonNegativeInteger">
                            <xs:annotation>
                                <xs:documentation>Current index values are: 0, exposure rate in R/h; 1, alpha deposition in dpm/100cm2; 2, beta deposition in dpm/100cm2; 3, beta generated exposure rate in R/h</xs:documentation>
                            </xs:annotation>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="Notes" type="xs:string" minOccurs="0"/>
            <xs:element name="SampleDetails" type="SampleParameters" minOccurs="0"/>
        </xs:sequence>
        <xs:attribute name="id" type="xs:ID" use="required"/>
    </xs:complexType>

    <xs:complexType name="SampleParameters" abstract="true">
        <xs:sequence>
            <xs:annotation>
                <xs:documentation>Parameters common to all samples.</xs:documentation>
            </xs:annotation>
            <xs:element name="BaseUnits" type="xs:string"/>
            <xs:element name="AutoRange" type="xs:boolean"/>
            <xs:element name="FieldLogDescription" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="AirSampleParam">
        <xs:complexContent>
            <xs:extension base="SampleParameters">
                <xs:annotation>
                    <xs:documentation>Parameters to generate an air sample isotopic measurement</xs:documentation>
                </xs:annotation>
                <xs:sequence>
                    <xs:element name="NobleRF" type="xs:double">
                        <xs:annotation>
                            <xs:documentation>Fraction (0.0 - 1.0) of noble gasses passing through the filter that are captured for measurement.</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="IodineRF" type="xs:double">
                        <xs:annotation>
                            <xs:documentation>Fraction (0.0 - 1.0) of iodines passing through the filter that are captured for measurement.</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="ParticulateRF" type="xs:double">
                        <xs:annotation>
                            <xs:documentation>Fraction (0.0 - 1.0) of airborne particulates passing through the filter that are deposited for measurement.</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="FlowRate" type="xs:double"/>
                    <xs:element name="SampleTime" type="xs:positiveInteger">
                        <xs:annotation>
                            <xs:documentation>Sample time in seconds</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="SoilSampleParam">
        <xs:complexContent>
            <xs:extension base="SampleParameters">
                <xs:sequence>
                    <xs:element name="SurfaceArea" type="xs:double" default="100.0" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>The number of square centimeters of surface soil collected per FRMAC standard sampling procedures</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="Depth" type="xs:double" default="1.0" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>Depth of the soil sample in centimeters</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="Density" type="xs:double" default="1600.0" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>Density of the soil in kilograms per cubic meter</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="MilkSampleParam">
        <xs:complexContent>
            <xs:extension base="SampleParameters">
                <xs:sequence>
                    <xs:element name="ForageYield" type="xs:double" default="0.7" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>The yield of wet forage in kilograms per meter squared</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="AnimalFeedIntake" type="xs:double" default="50" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>The number of kilograms per day of wet feed taken in by the animal while grazing</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="AnimalSoilIntake" type="xs:double" default="0.5" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>The number of kilograms per day of soil taken in by the animal while grazing</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="SoilDensity" type="xs:double" default="1600.0" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>The density of the soil in kilograms per cubic meter</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="MixingDepth" type="xs:double" default="0.001" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>The mixing depth in the soil of the contamination as per FRMAC Assessment procedures</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="DecayTime" type="xs:double" default="2.0" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>The number of days from animal grazing to milk sampling</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="CropIodineRF" type="xs:double" default="1.0" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>The crop retention factor for iodines</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="CropParticulateRF" type="xs:double" default="0.5" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>The crop retention factor for particulates</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="WaterSampleParam">
        <xs:complexContent>
            <xs:extension base="SampleParameters">
                <xs:sequence>
                    <xs:element name="WaterDepth" type="xs:double" default="1.0" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>The depth of water sampled. Reporting values are Bequerels per meter cubed.</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="FeedVegSampleParam">
        <xs:complexContent>
            <xs:extension base="SampleParameters">
                <xs:sequence>
                    <xs:element name="CRF" type="xs:double" default="1.0" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>The Crop Retention Factor as defined in the FRMAC Assessment Manual</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="CropYield" type="xs:double" default="1.0" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>The Crop Yield as defined in the FRMAC Assessment Manual</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="Weathering" type="xs:double" default="1.0" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>The Weathering Factor as defined in the FRMAC Assessment Manual</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="CarnivoreSample">
        <xs:complexContent>
            <xs:extension base="SampleParameters">
                <xs:sequence>
                    <xs:element name="ForageYield" type="xs:double" default="1.0" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>As defined in the FRMAC Assessment Manual</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="AnimalIntake" type="xs:double" default="1.0" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>As defined in the FRMAC Assessment Manual</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="DecayTime" type="xs:double" default="1.0" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>As defined in the FRMAC Assessment Manual</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="CRF" type="xs:double" default="1.0" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>As defined in the FRMAC Assessment Manual</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="TF" type="xs:double" default="1.0" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>As defined in the FRMAC Assessment Manual</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="ContaminatedPercentage" type="xs:double" default="1.0" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>As defined in the FRMAC Assessment Manual</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="SwipeSampleParam">
        <xs:complexContent>
            <xs:extension base="SampleParameters">
                <xs:sequence>
                    <xs:element name="SurfaceArea" type="xs:double" default="100.0" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>The number of square centimeters of surface swiped</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="Removable" type="xs:double" default="0.10" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>Fraction of contamination that is removable</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:simpleType name="SampleTypes">
        <xs:annotation>
            <xs:documentation>Specifying a sample type will generate Isotopic values for sample points for Observers or Authors</xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string">
            <xs:enumeration value="Air"/>
            <xs:enumeration value="Ground"/>
            <xs:enumeration value="Milk"/>
            <xs:enumeration value="Water"/>
            <xs:enumeration value="Feed/Vegetation"/>
            <xs:enumeration value="Meat/Fish/Poultry"/>
            <xs:enumeration value="Swipe"/>
            <xs:enumeration value="Other"/>
            <xs:enumeration value="Truth"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:complexType name="SpectralInstrumentMetaType">
        <xs:complexContent>
            <xs:extension base="InstrumentMetaType">
                <xs:sequence>
                    <xs:element name="PeakLETail" type="PolynomialEquation"/>
                    <xs:element name="PeakFWHM" type="PolynomialEquation"/>
                    <xs:element name="GenerateCompton" type="xs:boolean"/>
                    <xs:element name="GeneratePeakTails" type="xs:boolean"/>
                    <xs:element name="Peak2ComptonRatio" type="xs:double"/>
                    <xs:element name="Cs137RatioType" type="xs:boolean"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="InstrumentEfficiency">
        <xs:sequence>
            <xs:element name="InstrumentRef" type="xs:IDREF"/>
            <xs:element name="EffCurves" type="TimeEfficiency" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="TimeEfficiency">
        <xs:sequence>
            <xs:element name="AsOf" type="FormattedDateTime"/>
            <xs:choice maxOccurs="unbounded">
                <xs:annotation>
                    <xs:documentation>In general multiple elements here are indicative of spectra channels. If the ZeroOffset attribute of the elements is set then that element replaces a previous one with a lower ZeroOffset and is effective for heights greater than the ZeroOffset until and if it is replaced by a higher value element. There is no interpolation between different zeroOffset calculations. The height value passed to elements with non-zero zeroOffset is the absolute height.</xs:documentation>
                </xs:annotation>
                <xs:element name="AnalyticalDistance" type="AnalyticalDistanceEfficiency"/>
                <xs:element name="ExponentialDistance" type="AnalyticalDistanceEfficiency"/>
                <xs:element name="LogarithmicDistance" type="AnalyticalDistanceEfficiency">
                    <xs:annotation>
                        <xs:documentation>Polynomial equation with the natural log of the distance in meters as the x value.</xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="InterpolatedDistance" type="InterpolatedDistanceEfficiency"/>
                <xs:element name="TwoDimensionalPolynomialType" type="PolynomialEquation2D"/>
                <xs:element name="TwoDimensionalExponentialType" type="ExponentialEquation2D"/>
                <xs:element name="InterpolatedType">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="TimeValues">
                                <xs:annotation>
                                    <xs:documentation>Number of seconds from AsOf of parent</xs:documentation>
                                </xs:annotation>
                                <xs:simpleType>
                                    <xs:list itemType="xs:double"/>
                                </xs:simpleType>
                            </xs:element>
                            <xs:element name="HeightValues">
                                <xs:annotation>
                                    <xs:documentation>Number of meters from ground.</xs:documentation>
                                </xs:annotation>
                                <xs:simpleType>
                                    <xs:list itemType="xs:double"/>
                                </xs:simpleType>
                            </xs:element>
                            <xs:element name="Values" maxOccurs="unbounded">
                                <xs:annotation>
                                    <xs:documentation>There should be one values list element for every height value. The values list in each element will correspond to the time value.</xs:documentation>
                                </xs:annotation>
                                <xs:simpleType>
                                    <xs:list itemType="xs:double"/>
                                </xs:simpleType>
                            </xs:element>
                        </xs:sequence>
                        <xs:attribute name="ZeroOffset" type="xs:double" default="0.0">
                            <xs:annotation>
                                <xs:documentation>When multiple effs are specified this distance is subtracted from the actual distance before calculated in the formula. The elements must be sorted by their zeroOffset.</xs:documentation>
                            </xs:annotation>
                        </xs:attribute>
                    </xs:complexType>
                </xs:element>
            </xs:choice>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="AnalyticalDistanceEfficiency">
        <xs:sequence>
            <xs:element name="EffCurve" type="PolynomialEquation" maxOccurs="unbounded">
                <xs:annotation>
                    <xs:documentation>Efficiency for the given energy as distance in meters from the source. The number of curves shall match the number of channels in the spectra. Scalar instruments shall have one curve</xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
        <xs:attribute name="ZeroOffset" type="xs:double" default="0.0">
            <xs:annotation>
                <xs:documentation>When multiple AnalyticalDistanceEfficiency are specified this distance is subtracted from the actual distance before calculated in the formula. The elements must be sorted by their zeroOffset.</xs:documentation>
            </xs:annotation>
        </xs:attribute>
    </xs:complexType>

    <xs:complexType name="InterpolatedDistanceEfficiency">
        <xs:sequence>
            <xs:annotation>
                <xs:documentation>The number of items in the distance and efficiencies/Spectra/SpectraRef lists shall match. Scalar instruments shall be specified by an efficiency list. Spectral instruments by a list of Spectra.</xs:documentation>
            </xs:annotation>
            <xs:element name="Distances">
                <xs:simpleType>
                    <xs:list itemType="xs:double"/>
                </xs:simpleType>
            </xs:element>
            <xs:element name="Order" type="xs:int" default="1" minOccurs="0"/>
            <xs:choice>
                <xs:element name="Efficiencies">
                    <xs:simpleType>
                        <xs:list itemType="xs:double"/>
                    </xs:simpleType>
                </xs:element>
                <xs:element name="Spectra" type="ModelSpectra" maxOccurs="unbounded"/>
                <xs:element name="SpectraRef" type="xs:IDREF" maxOccurs="unbounded"/>
            </xs:choice>
        </xs:sequence>
        <xs:attribute name="ZeroOffset" type="xs:double" default="0.0">
            <xs:annotation>
                <xs:documentation>When multiple AnalyticalDistanceEfficiency are specified this distance is subtracted from the actual distance before calculated in the formula. The elements must be sorted by their zeroOffset.</xs:documentation>
            </xs:annotation>
        </xs:attribute>
    </xs:complexType>

    <xs:complexType name="Resuspension" abstract="true">
        <xs:attribute name="id" type="xs:ID" use="required"/>
    </xs:complexType>

    <xs:complexType name="ConstantResuspension">
        <xs:complexContent>
            <xs:extension base="Resuspension">
                <xs:sequence>
                    <xs:element name="Dry" type="xs:float"/>
                    <xs:element name="Wet" type="xs:float"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="AnspaughResuspension">
        <xs:complexContent>
            <xs:extension base="Resuspension">
                <xs:sequence>
                    <xs:element name="StartTime" type="FormattedDateTime"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="ModifiedAnspaughResuspension">
        <xs:complexContent>
            <xs:extension base="Resuspension">
                <xs:sequence>
                    <xs:element name="StartTime" type="FormattedDateTime"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="MaxwellAnspaughResuspension">
        <xs:complexContent>
            <xs:extension base="Resuspension">
                <xs:sequence>
                    <xs:element name="StartTime" type="FormattedDateTime"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="NcrpResuspension">
        <xs:complexContent>
            <xs:extension base="Resuspension">
                <xs:sequence>
                    <xs:element name="StartTime" type="FormattedDateTime"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="RadSrcType">
        <xs:sequence>
            <xs:element name="Airborne" type="xs:boolean"/>
            <xs:element name="AreaOfEffect" type="GeoRegion"/>
            <xs:element name="SpatialDistribution" type="SourceDistribution"/>
            <xs:element name="Resuspension" type="Resuspension"/>
            <xs:element name="Decay" minOccurs="0" maxOccurs="unbounded" type="TimeDependentFloat"/>
        </xs:sequence>
        <xs:attribute name="id" type="xs:ID" use="required"/>
        <xs:attribute name="isBackground" type="xs:boolean" default="false" />
        <xs:attribute name="sourceType" type="xs:string" default="unknown" />
    </xs:complexType>

    <xs:complexType name="SourceDistribution" abstract="true">
        <xs:sequence>
            <xs:element name="InstrumentResponse" type="InstrumentEfficiency" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="DisableGeographicInterpolation" type="xs:boolean" default="false" minOccurs="0"/>
        </xs:sequence>
        <xs:attribute name="id" type="xs:ID" use="required"/>
    </xs:complexType>

    <xs:complexType name="RadSrcMetaType">
        <xs:sequence>
            <xs:element name="VisibleName" type="xs:string"/>
            <xs:element name="Notes" type="xs:string"/>
            <xs:element name="FieldSource" type="xs:IDREF"/>
            <xs:element name="Mix" type="xs:IDREF">
                <xs:annotation>
                    <xs:documentation>Refers to an instance of the TimeDependentMix object.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="BremsstrahlungAverageZ" minOccurs="0" default="0">
                <xs:annotation>
                    <xs:documentation>When specified as a non-zero value and has an electron source an attempt shall be made to calculate a Bremsstrahlung photon spectrum</xs:documentation>
                </xs:annotation>
                <xs:simpleType>
                    <xs:restriction base="xs:float">
                        <xs:minInclusive value="0"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="MapBoundaryColor" type="Color" minOccurs="0"/>
            <xs:element name="MapBoundaryThickness" type="xs:double" minOccurs="0" default="1.0"/>
            <xs:element name="MapColorIndex" type="ColorStop" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute name="id" type="xs:ID" use="required"/>
    </xs:complexType>

    <xs:complexType name="TimeDependentMix">
        <xs:sequence>
            <xs:element name="MixName" type="xs:string"/>
            <xs:element name="Notes" type="xs:string"/>
            <xs:element name="Mix" type="RadionuclideMix" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute name="id" type="xs:ID" use="required"/>
    </xs:complexType>

    <xs:complexType name="RadionuclideMix">
        <xs:sequence>
            <xs:element name="TimePoint" type="FormattedDateTime"/>
            <xs:element name="Isotope" type="IsotopeType" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="IsotopeType">
        <xs:sequence>
            <xs:element name="A" type="xs:nonNegativeInteger"/>
            <xs:element name="Z" type="xs:nonNegativeInteger"/>
            <xs:element name="m" type="xs:boolean"/>
            <xs:element name="Abundance" type="xs:float"/>
        </xs:sequence>
        <xs:attribute name="id" type="xs:ID" use="required"/>
    </xs:complexType>

    <xs:complexType name="PointSource">
        <xs:complexContent>
            <xs:extension base="SourceDistribution">
                <xs:sequence>
                    <xs:element name="Location" type="Location" minOccurs="1" maxOccurs="unbounded">
                        <xs:annotation>
                            <xs:documentation>If only one location is given it is assumed to be constant throughout the event.</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="Activity" type="TimeDependentFloat" maxOccurs="unbounded">
                        <xs:annotation>
                            <xs:documentation>Units shall be in Bq. If only one value is given it is assumed to be constant throughout the event.</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="WGS84Altitude" type="xs:boolean" default="true" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>Point source is located based on absolute location if true. If false the vertical distance is AGL and compared to the instrument's distance AGL.</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="Location" abstract="true">
        <xs:sequence>
            <xs:element name="TimePoint" type="FormattedDateTime"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="FixedLocation">
        <xs:complexContent>
            <xs:extension base="Location">
                <xs:sequence>
                    <xs:element name="LocationPoint" type="LocationTriplet"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="HardwareRef">
        <xs:complexContent>
            <xs:extension base="Location">
                <xs:sequence>
                    <xs:element name="Reference" type="xs:string">
                        <xs:annotation>
                            <xs:documentation>A reference specifying a URL in order to access the current location of a source. The contents of the response shall consist of comma delimited text of: latitude, longitude, elevation. The latitude and longitude shall be in decimal degrees and the elevation shall be in meters. The reference frames shall be WGS84.</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="TimeDependentAnalyticalLocation">
        <xs:complexContent>
            <xs:extension base="Location">
                <xs:annotation>
                    <xs:documentation>The range of the polynomial equations correspond to the name of the element. The domain is seconds from this object's current time point.</xs:documentation>
                </xs:annotation>
                <xs:sequence>
                    <xs:element name="Latitude" type="PolynomialEquation"/>
                    <xs:element name="Longitude" type="PolynomialEquation"/>
                    <xs:element name="Altitude" type="PolynomialEquation"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="GISProjectionMeta" abstract="true">
        <xs:sequence>
            <xs:element name="EquatorialRadius" type="xs:double" default="6378137" minOccurs="0"/>
            <xs:element name="EccentricitySquared" type="xs:double" default="0.00669438" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="UTMMeta">
        <xs:complexContent>
            <xs:extension base="GISProjectionMeta">
                <xs:annotation>
                    <xs:documentation>If X and Y Coordinates are in UTM then use this field to specify the zone in which the grid is located.</xs:documentation>
                </xs:annotation>
                <xs:sequence>
                    <xs:element name="UTMZone" type="xs:nonNegativeInteger" default="0" minOccurs="0"/>
                    <xs:element name="NorthHemisphere" type="xs:boolean" default="true" minOccurs="0"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="LCCMeta">
        <xs:complexContent>
            <xs:extension base="GISProjectionMeta">
                <xs:annotation>
                    <xs:documentation>If X and Y Coordinates are in the Lambert Conformal Conic Projection specify the required meta data here to convert to WGS-84</xs:documentation>
                </xs:annotation>
                <xs:sequence>
                    <xs:element name="ReferenceLatitude" type="xs:double"/>
                    <xs:element name="ReferenceLongitude" type="xs:double"/>
                    <xs:element name="FirstParallel" type="xs:double"/>
                    <xs:element name="SecondParallel" type="xs:double"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="MercatorMeta">
        <xs:complexContent>
            <xs:extension base="GISProjectionMeta">
                <xs:sequence>
                    <xs:element name="OriginLongitude" type="xs:double"/>
                    <xs:element name="ParallelOfTrueScale" type="xs:double"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="PolarGridMeta">
        <xs:complexContent>
            <xs:extension base="GISProjectionMeta">
                <xs:annotation>
                    <xs:documentation>The X coordinates are the distance from the origin specified here. The Y coordinates the polar angle of the point CCW from east in decimal degrees.</xs:documentation>
                </xs:annotation>
                <xs:sequence>
                    <xs:element name="Origin" type="LocationPair"/>
                    <xs:element name="NumberDefinedPolarAngles" type="xs:positiveInteger" default="36" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>When defining a polar grid the number of defined sectors is specified here.</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="PolarStereoMeta">
        <xs:complexContent>
            <xs:extension base="GISProjectionMeta">
                <xs:annotation>
                    <xs:documentation>For Polar Stereographic projections. Northern hemisphere assumed for positive ref latitudes, southern otherwise.</xs:documentation>
                </xs:annotation>
                <xs:sequence>
                    <xs:element name="LatitudeOfTrueScale" type="xs:double"/>
                    <xs:element name="CentralLongitude" type="xs:double"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="XYGridMeta">
        <xs:complexContent>
            <xs:extension base="GISProjectionMeta">
                <xs:annotation>
                    <xs:documentation>The X coordinates are the east, west distance in meters from the origin specified here. The Y coordinates the north, south distance in meters from the origin specified here.</xs:documentation>
                </xs:annotation>
                <xs:sequence>
                    <xs:element name="Origin" type="LocationPair"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="GridSource">
        <xs:complexContent>
            <xs:extension base="SourceDistribution">
                <xs:sequence>
                    <xs:element name="Bounds" type="GeoRegion"/>
                    <xs:element name="TranslocationAndRotation" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>Allows a grid to be relocated. GPS coordinates will have this transformation applied before being queried in the grid. The queried location will be shifted by the offsets. It will then be converted to the projection grid coordinates. The point will be rotated CW around the CCWRotationalAngle using the specified rotational origins. If an origin is not specified the lower left coordinate will be used as the origin. The specified origin is in the original reference frame.</xs:documentation>
                        </xs:annotation>
                        <xs:complexType>
                            <xs:sequence>
                                <xs:element name="LatitudeOffset" type="xs:double"/>
                                <xs:element name="LongitudeOffset" type="xs:double"/>
                                <xs:element name="OriginalLatitudeOrigin" type="xs:double"/>
                                <xs:element name="OriginalLongitudeOrigin" type="xs:double"/>
                                <xs:element name="CCWRotationalAngle" type="xs:double" default="0" minOccurs="0"/>
                            </xs:sequence>
                        </xs:complexType>
                    </xs:element>
                    <xs:choice minOccurs="0">
                        <xs:element name="UTM" type="UTMMeta"/>
                        <xs:element name="LambertConformalConic" type="LCCMeta"/>
                        <xs:element name="Mercator" type="MercatorMeta"/>
                        <xs:element name="TransverseMercator" type="MercatorMeta"/>
                        <xs:element name="PolarCoordinates" type="PolarGridMeta"/>
                        <xs:element name="PolarStereographic" type="PolarStereoMeta"/>
                        <xs:element name="XYGrid" type="XYGridMeta"/>
                    </xs:choice>
                    <xs:element name="XCoordinates">
                        <xs:annotation>
                            <xs:documentation>Coordinate values should be WGS-84 longitude values in decimal degrees. Values shall start at the lowest value and continuously increase in value. The grid coordinates shall be inclusive of the entire region specified by the bounds.</xs:documentation>
                        </xs:annotation>
                        <xs:simpleType>
                            <xs:list itemType="xs:double"/>
                        </xs:simpleType>
                    </xs:element>
                    <xs:element name="YCoordinates">
                        <xs:annotation>
                            <xs:documentation>Coordinate values should be WGS-84 longitude values in decimal degrees. Values shall start at the lowest value and continuously increase in value. The grid coordinates shall be inclusive of the entire region specified by the bounds.</xs:documentation>
                        </xs:annotation>
                        <xs:simpleType>
                            <xs:list itemType="xs:double"/>
                        </xs:simpleType>
                    </xs:element>
                    <xs:element name="InterpolationOrder" type="xs:positiveInteger" default="1" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>A polynomial will be fit between data points for an interpolated value in both directions. The order must be less than the least number of coordinates in either direction.</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="ZeroStartTime" type="FormattedDateTime">
                        <xs:annotation>
                            <xs:documentation>Initial time at which the values are all zero. Values are interpolated between 0 at this time and the first GridValues object</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="OriginLatitude" type="xs:double" default="0.0" minOccurs="0"/>
                    <xs:element name="OriginLongitude" type="xs:double" default="0.0" minOccurs="0"/>
                    <xs:element name="OriginBearing" type="xs:float" default="0.0" minOccurs="0"/>
                    <xs:element name="MixingDistance" type="xs:float" default="0.0" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>A distance from the edge of this sub-grid to mix values with the underlying grid.</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="Distribution" type="GridValues" maxOccurs="unbounded">
                        <xs:annotation>
                            <xs:documentation>If only one time value is given it is presumed to be constant throughout the event. Otherwise values are linearly interpolated over time.</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="GridValues">
        <xs:sequence>
            <xs:element name="Values" maxOccurs="unbounded">
                <xs:annotation>
                    <xs:documentation>There should be one values list element for every yCoordinate. The values list in each element will correspond to the xCoordinates. Units should be in Bq/m2.</xs:documentation>
                </xs:annotation>
                <xs:simpleType>
                    <xs:list itemType="xs:float"/>
                </xs:simpleType>
            </xs:element>
            <xs:element name="TimePoint" type="FormattedDateTime" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>If there is more than one set of GridValues a time point must be specified. If no time is set the source uses this object for all values throughout the scenario. If there is a time set the values between the zero time and this time will be interpolated and source values will be constant afterward.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="SubGrid" type="GridSource" maxOccurs="unbounded" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="BackgroundSource">
        <xs:complexContent>
            <xs:extension base="SourceDistribution">
                <xs:sequence>
                    <xs:element name="Type">
                        <xs:simpleType>
                            <xs:restriction base="xs:string">
                                <xs:enumeration value="Constant"/>
                                <xs:enumeration value="RandomizedLinear"/>
                                <xs:enumeration value="RandomizedGaussian"/>
                            </xs:restriction>
                        </xs:simpleType>
                    </xs:element>
                    <xs:element name="ArealActivity" type="TimeDependentFloat" maxOccurs="unbounded"/>
                    <xs:element name="RandomizationMagnitude" type="xs:float" default="10.0" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>Values will be distributed plus or minus this percentage. If the type is RandomizedLinear the values will have a linear distribution. If the type is RandomizedGaussian the percentage of the value will form the standard deviation of the distribution.</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="GeoRegion" abstract="true">
        <xs:attribute name="id" type="xs:ID" use="required"/>
    </xs:complexType>

    <xs:complexType name="CuboidRegion">
        <xs:complexContent>
            <xs:extension base="GeoRegion">
                <xs:sequence>
                    <xs:element name="BottomSouthWestCorner" type="LocationTriplet"/>
                    <xs:element name="TopNorthEastCorner" type="LocationTriplet"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="PolyRegion">
        <xs:complexContent>
            <xs:extension base="GeoRegion">
                <xs:sequence>
                    <xs:element name="AltitudeMinimum" type="xs:double"/>
                    <xs:element name="AltitudeMaximum" type="xs:double"/>
                    <xs:element name="Point" type="LocationPair" minOccurs="3" maxOccurs="unbounded">
                        <xs:annotation>
                            <xs:documentation>All points shall be specified in a counter clockwise orientation</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="SphereRegion">
        <xs:complexContent>
            <xs:extension base="GeoRegion">
                <xs:sequence>
                    <xs:element name="Center" type="LocationTriplet"/>
                    <xs:element name="Radius" type="xs:double"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="ConicRegion">
        <xs:complexContent>
            <xs:extension base="GeoRegion">
                <xs:sequence>
                    <xs:element name="Axis" type="LocationPair"/>
                    <xs:element name="ApexAngleSin" type="xs:double">
                        <xs:annotation>
                            <xs:documentation>The sine of the full angle at the center of the earth. Note this will form an ellipse on the surface that is very nearly circular.</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="AltitudeMinimum" type="xs:double"/>
                    <xs:element name="AltitudeMaximum" type="xs:double"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="CylindricalRegion">
        <xs:complexContent>
            <xs:extension base="GeoRegion">
                <xs:sequence>
                    <xs:element name="Axis" type="LocationPair"/>
                    <xs:element name="RadiusAtSurface" type="xs:double"/>
                    <xs:element name="EquatorialRadius" type="xs:double" default="6378137" minOccurs="0"/>
                    <xs:element name="EccentricitySquared" type="xs:double" default="0.00669438" minOccurs="0"/>
                    <xs:element name="AltitudeMinimum" type="xs:double" default="-5000" minOccurs="0"/>
                    <xs:element name="AltitudeMaximum" type="xs:double" default="50000" minOccurs="0"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="CartesianBoxRegion">
        <xs:complexContent>
            <xs:extension base="GeoRegion">
                <xs:sequence>
                    <xs:element name="Origin" type="LocationPair"/>
                    <xs:element name="XDist" type="xs:double">
                        <xs:annotation>
                            <xs:documentation>The distance in meters from the origin to the edges of the box in the East and West directions</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="YDist" type="xs:double">
                        <xs:annotation>
                            <xs:documentation>The distance in meters from the origin to the edges of the box in the North and South directions</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="EquatorialRadius" type="xs:double" default="6378137" minOccurs="0"/>
                    <xs:element name="EccentricitySquared" type="xs:double" default="0.00669438" minOccurs="0"/>
                    <xs:element name="AltitudeMinimum" type="xs:double" default="-5000" minOccurs="0"/>
                    <xs:element name="AltitudeMaximum" type="xs:double" default="50000" minOccurs="0"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="InjectType">
        <xs:sequence>
            <xs:element name="Title" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:annotation>
                            <xs:documentation>The title of this inject. Multiple languages can be specified. If no language match is found the selected language element is undefined.</xs:documentation>
                        </xs:annotation>
                        <xs:extension base="xs:string">
                            <xs:attribute name="id" type="xs:ID" use="required"/>
                            <xs:attribute name="ietfTag" type="xs:string" default="en-us"/>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
            <xs:element name="InjectTime" type="FormattedDateTime"/>
            <xs:element name="LateInjection" type="xs:boolean">
                <xs:annotation>
                    <xs:documentation>If true and a new inject is delivered as a delta update covering the location the inject shall be presented immediately.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="AuthorizationLevel" type="UntaggedAuthLevel" default="Field" minOccurs="0"/>
            <xs:element name="OverrideLevel" type="xs:positiveInteger" default="1" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>If multiple injects occur at the same time and location only the ones with the highest override level are displayed.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="AutoplayMultimedia" type="xs:boolean"/>
            <xs:element name="File" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:extension base="xs:IDREF">
                            <xs:attribute name="id" type="xs:ID" use="required"/>
                            <xs:attribute name="ietfTag" type="xs:string" default="en-us"/>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
            <xs:element name="SourcePerson" type="xs:IDREF" minOccurs="0"/>
            <xs:element name="Location" type="GeoRegion"/>
        </xs:sequence>
        <xs:attribute name="id" type="xs:ID"/>
    </xs:complexType>

    <xs:complexType name="InjectMetaType">
        <xs:sequence>
            <xs:element name="Inject" type="xs:IDREF"/>
            <xs:element name="Notes" type="xs:string"/>
        </xs:sequence>
        <xs:attribute name="id" type="xs:ID" use="required"/>
    </xs:complexType>

    <xs:complexType name="ModelSpectra">
        <xs:sequence>
            <xs:element name="Channels">
                <xs:simpleType>
                    <xs:list itemType="xs:double"/>
                </xs:simpleType>
            </xs:element>
        </xs:sequence>
        <xs:attribute name="id" type="xs:ID" use="required"/>
    </xs:complexType>

    <xs:complexType name="TimeDependentFloatArray" abstract="true">
        <xs:sequence>
            <xs:element name="TimePoint" type="FormattedDateTime" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="TemporalInterpolatedFloatArray">
        <xs:complexContent>
            <xs:extension base="TimeDependentFloatArray">
                <xs:sequence>
                    <xs:element name="FloatArray">
                        <xs:simpleType>
                            <xs:list itemType="xs:double"/>
                        </xs:simpleType>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="TemporalAnalyticalFloatArray">
        <xs:complexContent>
            <xs:extension base="TimeDependentFloatArray">
                <xs:sequence>
                    <xs:element name="ChannelEq" type="PolynomialEquation" maxOccurs="unbounded"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="TimeDependentFloat" abstract="true">
        <xs:sequence>
            <xs:element name="TimePoint" type="FormattedDateTime"/>
        </xs:sequence>
        <xs:attribute name="id" type="xs:ID" use="required"/>
    </xs:complexType>

    <xs:complexType name="TemporalInterpolatedFloat">
        <xs:complexContent>
            <xs:extension base="TimeDependentFloat">
                <xs:sequence>
                    <xs:element name="Value" type="xs:double"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="TemporalAnalyticalFloat">
        <xs:complexContent>
            <xs:extension base="TimeDependentFloat">
                <xs:choice>
                    <xs:element name="PolyValue" type="PolynomialEquation"/>
                    <xs:element name="ExpValue" type="ExponentialEquation"/>
                </xs:choice>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:simpleType name="FormattedDateTime">
        <xs:restriction base="xs:dateTime">
            <xs:pattern value="[0-9]{4}-[01][0-9]-[0-3][0-9]T[0-2][0-9]:[0-5][0-9]:[0-5][0-9]Z"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:complexType name="ScalarInst">
        <xs:complexContent>
            <xs:extension base="InstrumentType">
                <xs:sequence>
                    <xs:element name="MaxValue" type="xs:float"/>
                    <xs:element name="MinValue" type="xs:float"/>
                    <xs:element name="Units" maxOccurs="unbounded">
                        <xs:complexType>
                            <xs:simpleContent>
                                <xs:extension base="xs:string">
                                    <xs:attribute name="ietfTag" type="xs:string" default="en-us"/>
                                </xs:extension>
                            </xs:simpleContent>
                        </xs:complexType>
                    </xs:element>
                    <xs:element name="AutoScale" type="xs:boolean"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="SpectralInst">
        <xs:complexContent>
            <xs:extension base="InstrumentType">
                <xs:sequence>
                    <xs:element name="MinMeasurementTime" type="xs:positiveInteger" default="1" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>The time required to collect a measurement in seconds.</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="MaxMeasurementTime" type="xs:positiveInteger" default="600" minOccurs="0"/>
                    <xs:element name="EnergyCalibration" type="PolynomialEquation">
                        <xs:annotation>
                            <xs:documentation>The domain is the channel number the range is the energy in keV</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="Rollover" type="xs:boolean">
                        <xs:annotation>
                            <xs:documentation>Indicates if channels should roll over if maxCounts is exceeded</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="MaxCounts" type="xs:positiveInteger"/>
                    <xs:element name="NumberChannels" type="xs:positiveInteger"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:simpleType name="IntegerList">
        <xs:list itemType="xs:positiveInteger"/>
    </xs:simpleType>

    <xs:complexType name="PolynomialEquation">
        <xs:sequence>
            <xs:element name="Term" type="PolynomialPair" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="PolynomialEquation2D">
        <xs:sequence>
            <xs:element name="Term" type="PolynomialTrio" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute name="ZeroOffset" type="xs:double" default="0.0">
            <xs:annotation>
                <xs:documentation>When multiple effs are specified this distance is subtracted from the actual distance before calculated in the formula. The elements must be sorted by their zeroOffset.</xs:documentation>
            </xs:annotation>
        </xs:attribute>
    </xs:complexType>

    <xs:complexType name="ExponentialEquation">
        <xs:sequence>
            <xs:element name="Term" type="PolynomialPair" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="ExponentialEquation2D">
        <xs:sequence>
            <xs:element name="Term" type="PolynomialTrio" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute name="ZeroOffset" type="xs:double" default="0.0" >
            <xs:annotation>
                <xs:documentation>When multiple effs are specified this distance is subtracted from the actual distance before calculated in the formula. The elements must be sorted by their zeroOffset.</xs:documentation>
            </xs:annotation>
        </xs:attribute>
    </xs:complexType>

    <xs:complexType name="PolynomialPair">
        <xs:sequence>
            <xs:element name="Coefficient" type="xs:double"/>
            <xs:element name="Exponent" type="xs:double" default="0" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="PolynomialTrio">
        <xs:sequence>
            <xs:element name="Coefficient" type="xs:double"/>
            <xs:element name="FirstExponent" type="xs:double" default="0" minOccurs="0"/>
            <xs:element name="SecondExponent" type="xs:double" default="0" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="LocationPair">
        <xs:sequence>
            <xs:element name="Latitude" type="xs:double"/>
            <xs:element name="Longitude" type="xs:double"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="LocationTriplet">
        <xs:sequence>
            <xs:element name="Latitude" type="xs:double"/>
            <xs:element name="Longitude" type="xs:double"/>
            <xs:element name="Altitude" type="xs:double" default="0" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="EmbeddedFile">
        <xs:sequence>
            <xs:element name="FileName" type="xs:string"/>
            <xs:element name="MimeType">
                <xs:annotation>
                    <xs:documentation>
                        Media type per RFC 6838 section 4.2 (type-name "/" subtype-name).
                        Bare type/subtype only; parameters such as "; charset=utf-8" are
                        not permitted. Names are limited to 127 characters each.
                    </xs:documentation>
                </xs:annotation>
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:pattern value="[a-zA-Z0-9][a-zA-Z0-9!#$&amp;^_.+\-]{0,126}/[a-zA-Z0-9][a-zA-Z0-9!#$&amp;^_.+\-]{0,126}"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="Data" type="xs:base64Binary"/>
        </xs:sequence>
        <xs:attribute name="id" type="xs:ID" use="required"/>
    </xs:complexType>

    <xs:complexType name="SimPerson">
        <xs:sequence>
            <xs:element name="FirstName" type="xs:string"/>
            <xs:element name="LastName" type="xs:string"/>
            <xs:element name="PhoneNumber" type="xs:string" minOccurs="0"/>
            <xs:element name="EMailAddress" type="xs:string" minOccurs="0"/>
            <xs:element name="UserPhoto" type="xs:IDREF" minOccurs="0"/>
            <xs:element name="AccessAuthorization" type="xs:IDREF" minOccurs="0"/>
        </xs:sequence>
        <xs:attribute name="id" type="xs:ID" use="required"/>
    </xs:complexType>

    <xs:complexType name="FieldTeamType">
        <xs:sequence>
            <xs:element name="Name" type="xs:string"/>
            <xs:element name="TeamLeader" type="xs:IDREF"/>
            <xs:element name="TeamMember" type="xs:IDREF" maxOccurs="unbounded" minOccurs="0"/>
            <xs:element name="Instrument" type="xs:IDREF" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute name="id" type="xs:ID" use="required"/>
    </xs:complexType>

    <xs:complexType name="FieldTeamMetaType">
        <xs:sequence>
            <xs:element name="Notes" type="xs:string"/>
            <xs:element name="FieldTeam" type="xs:IDREF"/>
        </xs:sequence>
        <xs:attribute name="id" type="xs:ID" use="required"/>
    </xs:complexType>

    <xs:complexType name="WeatherEvents">
        <xs:sequence>
            <xs:element name="Type" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:extension base="xs:string">
                            <xs:attribute name="id" type="xs:ID" use="required"/>
                            <xs:attribute name="ietfTag" type="xs:string" default="en-us"/>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
            <xs:element name="Region" type="GeoRegion"/>
            <xs:element name="OverrideLevel" type="xs:positiveInteger" default="1" minOccurs="0"/>
            <xs:element name="Start" type="MarkedTime"/>
            <xs:element name="End" type="MarkedTime"/>
            <xs:element name="PrecipitationRate" type="xs:float">
                <xs:annotation>
                    <xs:documentation>In units of cm/hr.</xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
        <xs:attribute name="id" type="xs:ID" use="required"/>
    </xs:complexType>

    <xs:complexType name="AuthorDataType">
        <xs:sequence>
            <xs:element name="AuthorCertKey" type="xs:base64Binary">
                <xs:annotation>
                    <xs:documentation>The private key for one of the trusted root certificates.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="AuthorCert" type="xs:IDREF">
                <xs:annotation>
                    <xs:documentation>The reference to the marked certificate the provided key corresponds.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="UserPasswordKeys" type="PasswordKey" maxOccurs="unbounded" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="PasswordKey">
        <xs:sequence>
            <xs:element name="PasswordAuthRef" type="xs:IDREF"/>
            <xs:element name="UserKey" type="xs:base64Binary"/>
        </xs:sequence>
    </xs:complexType>

    <xs:simpleType name="Color">
        <xs:annotation>
            <xs:documentation>The color entity indicates the color of an element. Color may be represented as hexadecimal RGB triples, as in HTML, or as hexadecimal ARGB tuples, with the A indicating alpha of transparency. An alpha value of 00 is totally transparent; FF is totally opaque. If RGB is used, the A value is assumed to be FF. For instance, the RGB value "#800080" represents purple. An ARGB value of "#40800080" would be a transparent purple. As in SVG 1.1, colors are defined in terms of the sRGB color space (IEC 61966).</xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:token">
            <xs:pattern value="#[\dA-F]{6}([\dA-F][\dA-F])?"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:complexType name="ColorStop">
        <xs:attribute name="Color" type="Color"/>
        <xs:attribute name="Value" type="xs:float"/>
        <xs:attribute name="id" type="xs:ID" use="required"/>
    </xs:complexType>
</xs:schema>
