<?xml version="1.0" encoding="UTF-8"?>
<!--Generated by gradle vo-dml tools 2025-08-06T12:10:38.75922+01:00-->
<xsd:schema xmlns:caom2="http://www.opencadc.org/caom2/xml/v2.5"
            xmlns:ivoa="http://ivoa.net/vodml/ivoa"
            xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            vc:minVersion="1.1"
            targetNamespace="http://www.opencadc.org/caom2/xml/v2.5"
            elementFormDefault="qualified"
            attributeFormDefault="qualified">
   <xsd:import namespace="http://ivoa.net/vodml/ivoa"
               schemaLocation="IVOA-v1.0.vo-dml.xsd"/>
   <xsd:element name="caom2Model">
      <xsd:complexType>
         <xsd:sequence>
            <xsd:element name="refs" minOccurs="0">
               <xsd:complexType>
                  <xsd:sequence/>
               </xsd:complexType>
            </xsd:element>
            <xsd:choice minOccurs="0" maxOccurs="unbounded">
               <xsd:element name="deletedArtifactDescriptionEvent"
                            type="caom2:DeletedArtifactDescriptionEvent"/>
               <xsd:element name="deletedObservationEvent" type="caom2:DeletedObservationEvent"/>
               <xsd:element name="simpleObservation" type="caom2:SimpleObservation"/>
               <xsd:element name="derivedObservation" type="caom2:DerivedObservation"/>
               <xsd:element name="artifactDescription" type="caom2:ArtifactDescription"/>
            </xsd:choice>
         </xsd:sequence>
      </xsd:complexType>
   </xsd:element>
   <xsd:complexType name="Entity" abstract="true">
      <xsd:annotation>
         <xsd:documentation>This is a base class to persistence. The entity attributes are generally set
                           or updated by persistence implementations.</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:Entity</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element name="lastModified"
                      type="xsd:dateTime"
                      minOccurs="0"
                      maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>The timestamp of last modification of this entity tracks changes in metadata and
                                 supports incremental operations. The timestamp is intended to be set and/or updated
                                 when the entity is stored (e.g. in a database).</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Entity.lastModified</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="metaChecksum"
                      type="xsd:anyURI"
                      minOccurs="0"
                      maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>This checksum of the metadata in this entity signals a change in the metadata of an
                                 instance and supports validation (e.g. to compare metadata before and after serialisation or
                                 persistence). A change in the metaChecksum can also be used to optimise operations like
                                 updating a row in the database only when the metaChecksum changed. A change in metaChecksum
                                 normally triggers a change in the lastModified timestamp.
                 
                                 The URI must conform to the pattern {algorithm}:{hex value}, for example:
                                 \begin{verbatim}md5:4be91751541fd804e7207663a0822f56.\end{verbatim}
                 
                                 The checksum of an entity is computed by accumulating byte representation of individual metadata values in
                                 the following order: (1) Entity.id for entities, (2) Entity.metaProducer, (3) state fields in alphabetic order
                                 (foo.a comes before foo.b) and using depth-first recursion (foo.abc.x comes before foo.def). The lastModified
                                 timestamp is not included in the metaChecksum calculation. Null values are ignored so that the addition of
                                 new fields in future versions will not change/invalidate existing checksums. Non-null values are converted to
                                 bytes as follows:
                                 \begin{itemize}
                                 \item string: UTF-8 encoded bytes
                                 \item URI: UTF-8 encoded bytes of the string representation
                                 \item VocabularyTerm: UTF-8 encoded bytes of the term (do not include the namespace)
                                 \item enumeration: the literal value converted to bytes
                                 \item float: IEEE754 single (4 bytes)
                                 \item double: IEEE754 double (8 bytes)
                                 \item boolean: convert to single byte, false=0, true=1 (1 byte)
                                 \item byte: as-is (1 byte)
                                 \item short: (2 bytes, network byte order == big endian))
                                 \item integer: (4 bytes, network byte order == big endian)
                                 \item long: (8 bytes, network byte order == big endian)
                                 \item date: treat as a long (milliseconds since 1970-01-01 00:00:00 UTC)
                                 \end{itemize}
                 
                                 TODO: truncatedDates=false, digestFieldNames=true, digestFieldnamesLowerCase=true
                 
                                 TODO: external data model components: recursion or specify conversion above (interval, point,
                                 shape, multishape)
                                 </xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Entity.metaChecksum</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="metaProducer"
                      type="xsd:anyURI"
                      minOccurs="0"
                      maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>This identifier is used to identify the tools used to produce the metadata. It also
                                 implicitly applies to child entities with null metaProducer. The form of the URI is not specified;
                                 implementations are free to use this to track metadata curation. For example, a pattern like
                                 {organisation}:{software name}-{version} is useful to support a variety of operational uses:
                                 query for metadata created by a version with a known bug or query for metadata created by an older version
                                 of the software and perform updates.
                             </xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Entity.metaProducer</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
      </xsd:sequence>
      <xsd:attribute name="id" type="xsd:string" use="required">
         <xsd:annotation>
            <xsd:documentation>The id is a globally unique identifier (primary key) for an instance.</xsd:documentation>
            <xsd:appinfo>
               <vodml-ref>caom2:Entity.id</vodml-ref>
            </xsd:appinfo>
         </xsd:annotation>
      </xsd:attribute>
   </xsd:complexType>
   <xsd:complexType name="CaomEntity" abstract="true">
      <xsd:annotation>
         <xsd:documentation>This is an extension of the base Entity class to support accumulated metadata checksums
                           and accumulated lastModified timestamps for entities with child entities.</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:CaomEntity</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:complexContent>
         <xsd:extension base="caom2:Entity">
            <xsd:sequence>
               <xsd:element name="maxLastModified"
                            type="xsd:dateTime"
                            minOccurs="0"
                            maxOccurs="1">
                  <xsd:annotation>
                     <xsd:documentation>The maximum last modification timestamp of this entity and all child entities is used
                                 to support incremental synchronization (of Observation instances). As with the instance lastModified
                                 timestamp above, this timestamp is intended to be set and/or updated when the entity is stored
                                 (e.g. in a database).</xsd:documentation>
                     <xsd:appinfo>
                        <vodml-ref>caom2:CaomEntity.maxLastModified</vodml-ref>
                     </xsd:appinfo>
                  </xsd:annotation>
               </xsd:element>
               <xsd:element name="accMetaChecksum"
                            type="xsd:anyURI"
                            minOccurs="0"
                            maxOccurs="1">
                  <xsd:annotation>
                     <xsd:documentation>accumulated checksum of the metadata of this entity and all child entities;
                 
                                 The URI must conform to the pattern {algorithm}:{hex value}, for example:
                                 \begin{verbatim}md5:4be91751541fd804e7207663a0822f56.\end{verbatim}
                 
                                 The accumulated checksum of an entity is computed by accumulating the byte representation of entity checksums
                                 in the following order: (1) the metaChecksum of the current entity, (2) the accMetaChecksum of all child entities
                                 accumulated in order of the child's Entity.id. For an entity with no children, the accMetaChecksum is derived
                                 only from the metaChecksum but it is not equal to it because it is a checksum of that checksum and not a checksum
                                 of the same metadata directly.
                                 </xsd:documentation>
                     <xsd:appinfo>
                        <vodml-ref>caom2:CaomEntity.accMetaChecksum</vodml-ref>
                     </xsd:appinfo>
                  </xsd:annotation>
               </xsd:element>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>
   <xsd:complexType name="DeletedArtifactDescriptionEvent">
      <xsd:annotation>
         <xsd:documentation>an event signifiying that a previously persisted ArtifactDescription was deleted;
                           this event can be synchronized to propagate deletions; the Entity.id of the event
                           is equal to the Entity.id of the deleted observation and this identifier is used
                           when performing deletions</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:DeletedArtifactDescriptionEvent</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:complexContent>
         <xsd:extension base="caom2:Entity">
            <xsd:sequence>
               <xsd:element name="uri" type="xsd:anyURI" minOccurs="1" maxOccurs="1">
                  <xsd:annotation>
                     <xsd:documentation>The logical identifier of the ArtifactDescription: the ArtifactDescription.uri
                                 value; this is for informational purposes only</xsd:documentation>
                     <xsd:appinfo>
                        <vodml-ref>caom2:DeletedArtifactDescriptionEvent.uri</vodml-ref>
                     </xsd:appinfo>
                  </xsd:annotation>
               </xsd:element>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>
   <xsd:complexType name="DeletedObservationEvent">
      <xsd:annotation>
         <xsd:documentation>an event signifiying that a previously persisted Observation was deleted;
                           this event can be synchronized to propagate deletions; the Entity.id of the event
                           is equal to the Entity.id of the deleted observation and this identifier is used
                           when performing deletions</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:DeletedObservationEvent</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:complexContent>
         <xsd:extension base="caom2:Entity">
            <xsd:sequence>
               <xsd:element name="uri" type="xsd:anyURI" minOccurs="1" maxOccurs="1">
                  <xsd:annotation>
                     <xsd:documentation>The logical identifier of the Observation: the Observation.uri value; this
                                 is for informational purposes only</xsd:documentation>
                     <xsd:appinfo>
                        <vodml-ref>caom2:DeletedObservationEvent.uri</vodml-ref>
                     </xsd:appinfo>
                  </xsd:annotation>
               </xsd:element>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>
   <xsd:complexType name="Observation" abstract="true">
      <xsd:annotation>
         <xsd:documentation>The observation is the top-level metadata structure that describes astronomical
                           data in a data collection.</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:Observation</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:complexContent>
         <xsd:extension base="caom2:CaomEntity">
            <xsd:sequence>
               <xsd:element name="collection" type="xsd:string" minOccurs="1" maxOccurs="1">
                  <xsd:annotation>
                     <xsd:documentation>The name of the data collection to which this observation belongs.</xsd:documentation>
                     <xsd:appinfo>
                        <vodml-ref>caom2:Observation.collection</vodml-ref>
                     </xsd:appinfo>
                  </xsd:annotation>
               </xsd:element>
               <xsd:element name="uri" type="xsd:anyURI" minOccurs="1" maxOccurs="1">
                  <xsd:annotation>
                     <xsd:documentation>A unique logical identifier for this observation. (NEW in CAOM-2.5)
                                 TODO: limit this to one of two forms that support use cases?</xsd:documentation>
                     <xsd:appinfo>
                        <vodml-ref>caom2:Observation.uri</vodml-ref>
                     </xsd:appinfo>
                  </xsd:annotation>
               </xsd:element>
               <xsd:element name="uriBucket" type="xsd:string" minOccurs="1" maxOccurs="1">
                  <xsd:annotation>
                     <xsd:documentation>This is a short string of hexadecimal digits generated from the uri to support
                                 operational use cases (mainly: dividing workload to perform validation in parallel). The
                                 value is the first three characters of the hexadecimal representation of SHA-1 of the UTF-8
                                 encoded bytes of the Observation.uri value. (NEW in CAOM-2.5)</xsd:documentation>
                     <xsd:appinfo>
                        <vodml-ref>caom2:Observation.uriBucket</vodml-ref>
                     </xsd:appinfo>
                  </xsd:annotation>
               </xsd:element>
               <xsd:element name="metaRelease"
                            type="xsd:dateTime"
                            minOccurs="0"
                            maxOccurs="1">
                  <xsd:annotation>
                     <xsd:documentation>This timestamp specifies the point where the metadata for the observation instance is public
                                 (can be viewed by anonymous users). A null value means the metadata is nont public.</xsd:documentation>
                     <xsd:appinfo>
                        <vodml-ref>caom2:Observation.metaRelease</vodml-ref>
                     </xsd:appinfo>
                  </xsd:annotation>
               </xsd:element>
               <xsd:element name="sequenceNumber"
                            type="xsd:int"
                            minOccurs="0"
                            maxOccurs="1">
                  <xsd:annotation>
                     <xsd:documentation>a collection-specific sequence number for observations; re-use or reset is collection specific</xsd:documentation>
                     <xsd:appinfo>
                        <vodml-ref>caom2:Observation.sequenceNumber</vodml-ref>
                     </xsd:appinfo>
                  </xsd:annotation>
               </xsd:element>
               <xsd:element name="type" type="xsd:string" minOccurs="0" maxOccurs="1">
                  <xsd:annotation>
                     <xsd:documentation>This describes the general purpose of observation (e.g. FITS OBSTYPE keyword). Existing usage is
                                 usually OBJECT for intent = science and other values for intent = calibration.</xsd:documentation>
                     <xsd:appinfo>
                        <vodml-ref>caom2:Observation.type</vodml-ref>
                     </xsd:appinfo>
                  </xsd:annotation>
               </xsd:element>
               <xsd:element name="intent"
                            type="caom2:ObservationIntentType"
                            minOccurs="1"
                            maxOccurs="1">
                  <xsd:annotation>
                     <xsd:documentation>This is an enumeration that describes the intent of the original creator of the observation.</xsd:documentation>
                     <xsd:appinfo>
                        <vodml-ref>caom2:Observation.intent</vodml-ref>
                     </xsd:appinfo>
                  </xsd:annotation>
               </xsd:element>
               <xsd:element minOccurs="0" name="metaReadGroups">
                  <xsd:complexType>
                     <xsd:sequence>
                        <xsd:element name="metaReadGroup"
                                     type="xsd:anyURI"
                                     minOccurs="0"
                                     maxOccurs="unbounded">
                           <xsd:annotation>
                              <xsd:documentation>This is a set of groups with read permission on observation metadata for cases when the metadata
                                 is non-public (see metaRelease above).</xsd:documentation>
                              <xsd:appinfo>
                                 <vodml-ref>caom2:Observation.metaReadGroups</vodml-ref>
                              </xsd:appinfo>
                           </xsd:annotation>
                        </xsd:element>
                     </xsd:sequence>
                  </xsd:complexType>
               </xsd:element>
               <xsd:element name="algorithm"
                            type="caom2:Algorithm"
                            minOccurs="1"
                            maxOccurs="1"/>
               <xsd:element name="telescope"
                            type="caom2:Telescope"
                            minOccurs="0"
                            maxOccurs="1"/>
               <xsd:element name="instrument"
                            type="caom2:Instrument"
                            minOccurs="0"
                            maxOccurs="1"/>
               <xsd:element name="environment"
                            type="caom2:Environment"
                            minOccurs="0"
                            maxOccurs="1"/>
               <xsd:element name="proposal"
                            type="caom2:Proposal"
                            minOccurs="0"
                            maxOccurs="1"/>
               <xsd:element name="target" type="caom2:Target" minOccurs="0" maxOccurs="1"/>
               <xsd:element name="targetPosition"
                            type="caom2:TargetPosition"
                            minOccurs="0"
                            maxOccurs="1"/>
               <xsd:element name="requirements"
                            type="caom2:Requirements"
                            minOccurs="0"
                            maxOccurs="1"/>
               <xsd:element name="planes">
                  <xsd:complexType>
                     <xsd:sequence>
                        <xsd:element name="plane"
                                     type="caom2:Plane"
                                     minOccurs="0"
                                     maxOccurs="unbounded"/>
                     </xsd:sequence>
                  </xsd:complexType>
               </xsd:element>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>
   <xsd:complexType name="SimpleObservation">
      <xsd:annotation>
         <xsd:documentation>A simple observation is created directly by operating a telescope and instrument (for
                           empirical data) or by a process (for simulation data). Existing usage: the Algorithm.name values
                           'exposure' and 'simulation' are reserved for these cases respectively.</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:SimpleObservation</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:complexContent>
         <xsd:extension base="caom2:Observation"/>
      </xsd:complexContent>
   </xsd:complexType>
   <xsd:complexType name="DerivedObservation">
      <xsd:annotation>
         <xsd:documentation>A derived observation is an observation created from one or more other observations.
                           Examples of multiple members include: stacks of images combined to increase signal:noise ratio,
                           mosaics combined to increase field-of-view, etc. Examples of single members: subset of comensurally
                           observed data that is attributed/assigned to one proposal or project (with associated permissions).</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:DerivedObservation</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:complexContent>
         <xsd:extension base="caom2:Observation">
            <xsd:sequence>
               <xsd:element minOccurs="0" name="members">
                  <xsd:complexType>
                     <xsd:sequence>
                        <xsd:element name="member"
                                     type="xsd:anyURI"
                                     minOccurs="0"
                                     maxOccurs="unbounded">
                           <xsd:annotation>
                              <xsd:documentation>The members are the observations grouped together by the algorithm that defines the derivation.
                                 these are the intended components of the composite product, but actual inputs are described by the provenance.
                                 Members may be simple or derived observations (arbitrary heirarchy); derived observations with
                                 one or more members may be defined such that they only include a subset of each member (they are extracted from
                                 the progenitor). Observation.uri values are used here to refer to the member observations.
                             </xsd:documentation>
                              <xsd:appinfo>
                                 <vodml-ref>caom2:DerivedObservation.members</vodml-ref>
                              </xsd:appinfo>
                           </xsd:annotation>
                        </xsd:element>
                     </xsd:sequence>
                  </xsd:complexType>
               </xsd:element>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>
   <xsd:complexType name="Plane">
      <xsd:annotation>
         <xsd:documentation>A plane is a component of an observation that describes one product of the observation.</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:Plane</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:complexContent>
         <xsd:extension base="caom2:CaomEntity">
            <xsd:sequence>
               <xsd:element name="uri" type="xsd:anyURI" minOccurs="0" maxOccurs="1">
                  <xsd:annotation>
                     <xsd:documentation>A unique logical identifier for this plane. Values of this identifier are used in
                                 Plane.provenance.inputs to form a reference from a product to it's progenitors.
                                 TODO: limit this to one of two forms that support use cases? (NEW in CAOM-2.5)</xsd:documentation>
                     <xsd:appinfo>
                        <vodml-ref>caom2:Plane.uri</vodml-ref>
                     </xsd:appinfo>
                  </xsd:annotation>
               </xsd:element>
               <xsd:element name="metaRelease"
                            type="xsd:dateTime"
                            minOccurs="0"
                            maxOccurs="1">
                  <xsd:annotation>
                     <xsd:documentation>This timestamp specifies the point where the metadata for the plane instance is public
                                 (can be viewed by anonymous users). A null value means the metadata is not public. The metaRelease
                                 timestamp applies to the plane metadata itself and to all artifacts with releaseType=meta.</xsd:documentation>
                     <xsd:appinfo>
                        <vodml-ref>caom2:Plane.metaRelease</vodml-ref>
                     </xsd:appinfo>
                  </xsd:annotation>
               </xsd:element>
               <xsd:element minOccurs="0" name="metaReadGroups">
                  <xsd:complexType>
                     <xsd:sequence>
                        <xsd:element name="metaReadGroup"
                                     type="xsd:anyURI"
                                     minOccurs="0"
                                     maxOccurs="unbounded">
                           <xsd:annotation>
                              <xsd:documentation>This is a set of groups with read permission on plane metadata for cases when the metadata
                                 is non-public (see metaRelease above).</xsd:documentation>
                              <xsd:appinfo>
                                 <vodml-ref>caom2:Plane.metaReadGroups</vodml-ref>
                              </xsd:appinfo>
                           </xsd:annotation>
                        </xsd:element>
                     </xsd:sequence>
                  </xsd:complexType>
               </xsd:element>
               <xsd:element name="dataRelease"
                            type="xsd:dateTime"
                            minOccurs="0"
                            maxOccurs="1">
                  <xsd:annotation>
                     <xsd:documentation>This timestamp specifies the point where the metadata for the plane instance is public
                                 (can be viewed by anonymous users). A null value means the metadata is not public. The dataRelease
                                 timestamp applies to all artifacts with releaseType=data.</xsd:documentation>
                     <xsd:appinfo>
                        <vodml-ref>caom2:Plane.dataRelease</vodml-ref>
                     </xsd:appinfo>
                  </xsd:annotation>
               </xsd:element>
               <xsd:element minOccurs="0" name="dataReadGroups">
                  <xsd:complexType>
                     <xsd:sequence>
                        <xsd:element name="dataReadGroup"
                                     type="xsd:anyURI"
                                     minOccurs="0"
                                     maxOccurs="unbounded">
                           <xsd:annotation>
                              <xsd:documentation>This is a set of groups with read permission on plane data for cases when the data
                                 is non-public (see dataRelease above).</xsd:documentation>
                              <xsd:appinfo>
                                 <vodml-ref>caom2:Plane.dataReadGroups</vodml-ref>
                              </xsd:appinfo>
                           </xsd:annotation>
                        </xsd:element>
                     </xsd:sequence>
                  </xsd:complexType>
               </xsd:element>
               <xsd:element name="calibrationLevel"
                            type="caom2:CalibrationLevel"
                            minOccurs="0"
                            maxOccurs="1">
                  <xsd:annotation>
                     <xsd:documentation>This describes the degree to which the data is calibrated; it is equivalent to the
                                 ObsCore calibration level field.</xsd:documentation>
                     <xsd:appinfo>
                        <vodml-ref>caom2:Plane.calibrationLevel</vodml-ref>
                     </xsd:appinfo>
                  </xsd:annotation>
               </xsd:element>
               <xsd:element name="dataProductType"
                            type="xsd:string"
                            minOccurs="0"
                            maxOccurs="1">
                  <xsd:annotation>
                     <xsd:documentation>standard classification of the type of data product; describes the logical data type
                                         for the main artifacts</xsd:documentation>
                     <xsd:appinfo>
                        <vodml-ref>caom2:Plane.dataProductType</vodml-ref>
                     </xsd:appinfo>
                  </xsd:annotation>
               </xsd:element>
               <xsd:element name="observable"
                            type="caom2:Observable"
                            minOccurs="0"
                            maxOccurs="1"/>
               <xsd:element name="quality"
                            type="caom2:DataQuality"
                            minOccurs="0"
                            maxOccurs="1"/>
               <xsd:element name="metrics" type="caom2:Metrics" minOccurs="0" maxOccurs="1"/>
               <xsd:element name="position"
                            type="caom2:Position"
                            minOccurs="0"
                            maxOccurs="1"/>
               <xsd:element name="energy" type="caom2:Energy" minOccurs="0" maxOccurs="1"/>
               <xsd:element name="time" type="caom2:Time" minOccurs="0" maxOccurs="1"/>
               <xsd:element name="polarization"
                            type="caom2:Polarization"
                            minOccurs="0"
                            maxOccurs="1"/>
               <xsd:element name="custom"
                            type="caom2:CustomAxis"
                            minOccurs="0"
                            maxOccurs="1"/>
               <xsd:element name="uv" type="caom2:Visibility" minOccurs="0" maxOccurs="1"/>
               <xsd:element name="provenance"
                            type="caom2:Provenance"
                            minOccurs="0"
                            maxOccurs="1"/>
               <xsd:element name="artifacts">
                  <xsd:complexType>
                     <xsd:sequence>
                        <xsd:element name="artifact"
                                     type="caom2:Artifact"
                                     minOccurs="0"
                                     maxOccurs="unbounded"/>
                     </xsd:sequence>
                  </xsd:complexType>
               </xsd:element>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>
   <xsd:complexType name="Artifact">
      <xsd:annotation>
         <xsd:documentation>a physical product (typically a file)</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:Artifact</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:complexContent>
         <xsd:extension base="caom2:CaomEntity">
            <xsd:sequence>
               <xsd:element name="uri" type="xsd:anyURI" minOccurs="1" maxOccurs="1">
                  <xsd:annotation>
                     <xsd:documentation>This identifier can be used to interact with an associated data management system.
                                 Existing usage: this is an internal identifier that an IVOA DataLink service can
                                 convert into a usable link to the data. TODO: There is an informal style used to make sure
                                 that these identifiers are globally unique and avoid collisions...</xsd:documentation>
                     <xsd:appinfo>
                        <vodml-ref>caom2:Artifact.uri</vodml-ref>
                     </xsd:appinfo>
                  </xsd:annotation>
               </xsd:element>
               <xsd:element name="uriBucket" type="xsd:string" minOccurs="1" maxOccurs="1">
                  <xsd:annotation>
                     <xsd:documentation>This is a short string of hexadecimal digits generated from the uri to support
                                 operational use cases (mainly: dividing workload to perform validation in parallel). The
                                 value is the first three characters of the hexadecimal representation of SHA-1 of the UTF-8
                                 encoded bytes of the Observation.uri value. (NEW in CAOM-2.5)</xsd:documentation>
                     <xsd:appinfo>
                        <vodml-ref>caom2:Artifact.uriBucket</vodml-ref>
                     </xsd:appinfo>
                  </xsd:annotation>
               </xsd:element>
               <xsd:element name="productType"
                            type="xsd:string"
                            minOccurs="1"
                            maxOccurs="1">
                  <xsd:annotation>
                     <xsd:documentation>the relationship of this Artifact to the parent Plane (DataLink semantics)</xsd:documentation>
                     <xsd:appinfo>
                        <vodml-ref>caom2:Artifact.productType</vodml-ref>
                     </xsd:appinfo>
                  </xsd:annotation>
               </xsd:element>
               <xsd:element name="releaseType"
                            type="caom2:ReleaseType"
                            minOccurs="1"
                            maxOccurs="1">
                  <xsd:annotation>
                     <xsd:documentation>This field indicates whether this artifact is treated as data or metadata when determining
                                 access permission. Existing usage: some collections have small previews (productType=thumbnail)
                                 that are considered metadata and are thus viewable by all users.</xsd:documentation>
                     <xsd:appinfo>
                        <vodml-ref>caom2:Artifact.releaseType</vodml-ref>
                     </xsd:appinfo>
                  </xsd:annotation>
               </xsd:element>
               <xsd:element name="contentType"
                            type="xsd:string"
                            minOccurs="0"
                            maxOccurs="1">
                  <xsd:annotation>
                     <xsd:documentation>This field specifies the format of the resolved artifact: should be a MIME-type.</xsd:documentation>
                     <xsd:appinfo>
                        <vodml-ref>caom2:Artifact.contentType</vodml-ref>
                     </xsd:appinfo>
                  </xsd:annotation>
               </xsd:element>
               <xsd:element name="contentLength" type="xsd:int" minOccurs="0" maxOccurs="1">
                  <xsd:annotation>
                     <xsd:documentation>This specifies the size of the stored artifact; for files, this is the file size.</xsd:documentation>
                     <xsd:appinfo>
                        <vodml-ref>caom2:Artifact.contentLength</vodml-ref>
                     </xsd:appinfo>
                  </xsd:annotation>
               </xsd:element>
               <xsd:element name="contentChecksum"
                            type="xsd:anyURI"
                            minOccurs="0"
                            maxOccurs="1">
                  <xsd:annotation>
                     <xsd:documentation>this is the checksum of the artifact data;
                                 the URI must conform to the pattern {algorithm}:{hex value}, for example:
                                 \begin{verbatim}
                                 md5:4be91751541fd804e7207663a0822f56
                                 \end{verbatim}</xsd:documentation>
                     <xsd:appinfo>
                        <vodml-ref>caom2:Artifact.contentChecksum</vodml-ref>
                     </xsd:appinfo>
                  </xsd:annotation>
               </xsd:element>
               <xsd:element name="contentRelease"
                            type="xsd:dateTime"
                            minOccurs="0"
                            maxOccurs="1">
                  <xsd:annotation>
                     <xsd:documentation>This timestamp after which content for the artifact is public. If set, this value
                                 overrides the permission implied by the releaseType and Plane release dates.
                                 Existing usage: MAST?.</xsd:documentation>
                     <xsd:appinfo>
                        <vodml-ref>caom2:Artifact.contentRelease</vodml-ref>
                     </xsd:appinfo>
                  </xsd:annotation>
               </xsd:element>
               <xsd:element minOccurs="0" name="contentReadGroups">
                  <xsd:complexType>
                     <xsd:sequence>
                        <xsd:element name="contentReadGroup"
                                     type="xsd:anyURI"
                                     minOccurs="0"
                                     maxOccurs="unbounded">
                           <xsd:annotation>
                              <xsd:documentation>Thsi is a set of groups that are allowed to access the content of this artifact. If set,
                                 thisd overrides the permission implied by the releaseType and PLane release groups.
                                 Existing usage: unknown.</xsd:documentation>
                              <xsd:appinfo>
                                 <vodml-ref>caom2:Artifact.contentReadGroups</vodml-ref>
                              </xsd:appinfo>
                           </xsd:annotation>
                        </xsd:element>
                     </xsd:sequence>
                  </xsd:complexType>
               </xsd:element>
               <xsd:element name="descriptionID"
                            type="xsd:anyURI"
                            minOccurs="0"
                            maxOccurs="1">
                  <xsd:annotation>
                     <xsd:documentation>This is an identifier to refer to an ArtifactDescription entity. (new in CAOM-2.5)
                                 Use case: provide standard descriptions for links in a DataLink response.</xsd:documentation>
                     <xsd:appinfo>
                        <vodml-ref>caom2:Artifact.descriptionID</vodml-ref>
                     </xsd:appinfo>
                  </xsd:annotation>
               </xsd:element>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>
   <xsd:complexType name="ArtifactDescription">
      <xsd:annotation>
         <xsd:documentation>The provides a referenceable description of artitfacts for use in DataLink responses. (NEW in CAOM-2.5)</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:ArtifactDescription</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:complexContent>
         <xsd:extension base="caom2:Entity">
            <xsd:sequence>
               <xsd:element name="uri" type="xsd:anyURI" minOccurs="1" maxOccurs="1">
                  <xsd:annotation>
                     <xsd:documentation>This is the logical identifier for this description used to refer to it from an artifact.
                                 Anticipated usage: this is an internal identifier that an IVOA DataLink service can
                                 use to lookup a description. TODO: There is an informal style used for Atifact.uri to make sure
                                 that these identifiers are globally unique and avoid collisions...</xsd:documentation>
                     <xsd:appinfo>
                        <vodml-ref>caom2:ArtifactDescription.uri</vodml-ref>
                     </xsd:appinfo>
                  </xsd:annotation>
               </xsd:element>
               <xsd:element name="description"
                            type="xsd:string"
                            minOccurs="1"
                            maxOccurs="1">
                  <xsd:annotation>
                     <xsd:documentation>A human-readable description of an artifact.</xsd:documentation>
                     <xsd:appinfo>
                        <vodml-ref>caom2:ArtifactDescription.description</vodml-ref>
                     </xsd:appinfo>
                  </xsd:annotation>
               </xsd:element>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>
   <xsd:complexType name="Algorithm">
      <xsd:annotation>
         <xsd:documentation>the algorithm that was responsible for creating the observation; for a DerivedObservation this is the 
                           algorithm that defines the intended set of members to include
                       </xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:Algorithm</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element name="name" type="xsd:string" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>common name of the algorithm; the value 'exposure' is reserved for use in SimpleObservation; 
                                 TBD: publish a list of acceptable values as a machine-readable vocabulary?</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Algorithm.name</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="Telescope">
      <xsd:annotation>
         <xsd:documentation>the telescope used to acquire the data for an observation</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:Telescope</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element name="name" type="xsd:string" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>common name of the telescope; 
                                 TBD: reference to a standard list of names?</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Telescope.name</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="geoLocationX"
                      type="xsd:float"
                      minOccurs="0"
                      maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>x-coordinate of the geocentric location of the telescope at the time of observation
                                 (see FITS WCS Paper III)</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Telescope.geoLocationX</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="geoLocationY"
                      type="xsd:float"
                      minOccurs="0"
                      maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>y-coordinate of the geocentric location of the telescope at the time of observation
                                 (see FITS WCS Paper III)</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Telescope.geoLocationY</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="geoLocationZ"
                      type="xsd:float"
                      minOccurs="0"
                      maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>z-coordinate of the geocentric location of the telescope at the time of observation
                                 (see FITS WCS Paper III)</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Telescope.geoLocationZ</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element minOccurs="0" name="keywords">
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:element name="keyword"
                               type="xsd:string"
                               minOccurs="0"
                               maxOccurs="unbounded">
                     <xsd:annotation>
                        <xsd:documentation>additional keywords that describe the telescope or telscope configuration 
                                 at the time of observation; 
                                 keywords cannot contain the pipe (|) character - it is reserved for use in persistence
                                 systems (e.g. to store all keywords in a single column in a table)
                             </xsd:documentation>
                        <xsd:appinfo>
                           <vodml-ref>caom2:Telescope.keywords</vodml-ref>
                        </xsd:appinfo>
                     </xsd:annotation>
                  </xsd:element>
               </xsd:sequence>
            </xsd:complexType>
         </xsd:element>
         <xsd:element name="trackingMode"
                      type="xsd:string"
                      minOccurs="0"
                      maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>term from the (currently non-existent) IVOA Tracking vocabulary used to
                                 indicate how the telescope moves during data acquisition</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Telescope.trackingMode</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="Instrument">
      <xsd:annotation>
         <xsd:documentation>the instrument used to acquire or create the observation; this could be used for both physical
                       instruments that acquire data or software that generates it (e.g. simulated data)</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:Instrument</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element name="name" type="xsd:string" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>common name for the instrument</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Instrument.name</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element minOccurs="0" name="keywords">
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:element name="keyword"
                               type="xsd:string"
                               minOccurs="0"
                               maxOccurs="unbounded">
                     <xsd:annotation>
                        <xsd:documentation>additional keywords that describe the instrument or instrument configuration
                                 at the time of observation; 
                                 keywords cannot contain the pipe (|) character - it is reserved for use in persistence
                                 systems (e.g. to store all keywords in a single column in a table)</xsd:documentation>
                        <xsd:appinfo>
                           <vodml-ref>caom2:Instrument.keywords</vodml-ref>
                        </xsd:appinfo>
                     </xsd:annotation>
                  </xsd:element>
               </xsd:sequence>
            </xsd:complexType>
         </xsd:element>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="Environment">
      <xsd:annotation>
         <xsd:documentation>collection of measured quantities that characterise the environment 
                           at the time of observation</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:Environment</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element name="name" type="xsd:float" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>typical atmospheric distortion (full-width-half-max of a point source)</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Environment.name</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="humidity" type="xsd:float" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>fractional relative humidity [0,1]</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Environment.humidity</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="elevation" type="xsd:float" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>angular elevation above horizon [0,90]</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Environment.elevation</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="tau" type="xsd:float" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>the opacity of the atmosphere [0,1]</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Environment.tau</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="wavelengthTau"
                      type="xsd:float"
                      minOccurs="0"
                      maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>wavelength at which opacity was measured</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Environment.wavelengthTau</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="ambientTemp" type="xsd:float" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>ambient temperature at the telescope</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Environment.ambientTemp</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="photometric"
                      type="xsd:boolean"
                      minOccurs="0"
                      maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>indicator that flux and/or color calibration is stable</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Environment.photometric</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="Proposal">
      <xsd:annotation>
         <xsd:documentation>description of the science proposal or programme that initiated the observation</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:Proposal</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element name="id" type="xsd:string" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>collection-specific identifier for the proposal</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Proposal.id</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="pi" type="xsd:string" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>proper name of the principal investigator</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Proposal.pi</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="project" type="xsd:string" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>common name of the project this proposal belongs to; typically used for larger or
                                 long-running projects that include mutliple proposals</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Proposal.project</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="title" type="xsd:string" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>title of the proposal</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Proposal.title</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element minOccurs="0" name="keywords">
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:element name="keyword"
                               type="xsd:string"
                               minOccurs="0"
                               maxOccurs="unbounded">
                     <xsd:annotation>
                        <xsd:documentation>additional keywords that describe the science goals of the proposal; 
                                 keywords cannot contain the pipe (|) character - it is reserved for use in persistence
                                 systems (e.g. to store all keywords in a single column in a table)</xsd:documentation>
                        <xsd:appinfo>
                           <vodml-ref>caom2:Proposal.keywords</vodml-ref>
                        </xsd:appinfo>
                     </xsd:annotation>
                  </xsd:element>
               </xsd:sequence>
            </xsd:complexType>
         </xsd:element>
         <xsd:element name="reference" type="xsd:anyURI" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>identifier for external resource with proposal details</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Proposal.reference</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="Target">
      <xsd:annotation>
         <xsd:documentation>the target of an observation</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:Target</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element name="name" type="xsd:string" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>proper name of the target</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Target.name</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="targetID" type="xsd:anyURI" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>resolvable target identifier;
                                 the targetID URI should be of the form {scheme}:{id} so it can be resolved 
                                 (for example: naif:170100) </xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Target.targetID</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="type" type="caom2:TargetType" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>type of target; typically used to figure out what the target name means
                                 and where to look for additional information about it</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Target.type</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="redshift" type="xsd:float" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>cosmological redshift of the target</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Target.redshift</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="standard" type="xsd:boolean" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>indicates that the target is typically used as a standard (astrometric, photometric, etc)</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Target.standard</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="moving" type="xsd:boolean" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>indicates that the target is a moving object; used for solar system objects 
                                 but not high proper motion stars</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Target.moving</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element minOccurs="0" name="keywords">
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:element name="keyword"
                               type="xsd:string"
                               minOccurs="0"
                               maxOccurs="unbounded">
                     <xsd:annotation>
                        <xsd:documentation>additional keywords that describe the target; 
                                 keywords cannot contain the pipe (|) character - it is reserved for use in persistence
                                 systems (e.g. to store all keywords in a single column in a table)</xsd:documentation>
                        <xsd:appinfo>
                           <vodml-ref>caom2:Target.keywords</vodml-ref>
                        </xsd:appinfo>
                     </xsd:annotation>
                  </xsd:element>
               </xsd:sequence>
            </xsd:complexType>
         </xsd:element>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="TargetPosition">
      <xsd:annotation>
         <xsd:documentation>the intended position of the observation 
                           (not the position of the intended or actual target)</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:TargetPosition</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element name="coordsys" type="xsd:string" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>the coordinate system of the coordinates</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:TargetPosition.coordsys</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="equinox" type="xsd:float" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>the equinox of the coordinates</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:TargetPosition.equinox</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="coordinates"
                      type="caom2:Point"
                      minOccurs="1"
                      maxOccurs="1"/>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="Requirements">
      <xsd:annotation>
         <xsd:documentation>the observational requirements specified by the proposal</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:Requirements</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element name="flag" type="caom2:Status" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>flag indicating degree to which requirements were satisfied by the observation</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Requirements.flag</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="Provenance">
      <xsd:annotation>
         <xsd:documentation>description of how this data was produced</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:Provenance</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element name="name" type="xsd:string" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>collection-specific common name of the process</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Provenance.name</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="reference" type="xsd:anyURI" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>identifier for external resource with proposal details</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Provenance.reference</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="version" type="xsd:string" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>version of the software or process that produced the data</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Provenance.version</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="project" type="xsd:string" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>name of the project that produced the data; data produced in a uniform way are
                                 typically labelled with the same project name</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Provenance.project</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="producer" type="xsd:string" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>common name of the entity (person, institute, etc) responsible for producing the data</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Provenance.producer</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="runID" type="xsd:string" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>collection-specific identifier for the processing instance that produced the data;
                                 this identifier can typcially be traced in log files or logging systems</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Provenance.runID</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="lastExecuted"
                      type="xsd:string"
                      minOccurs="0"
                      maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>timestamp describing when this process last ran and produced data</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Provenance.lastExecuted</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element minOccurs="0" name="keywords">
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:element name="keyword"
                               type="xsd:string"
                               minOccurs="0"
                               maxOccurs="unbounded">
                     <xsd:annotation>
                        <xsd:documentation>additional keywords that describe the processing; this may include both general
                                 descriptive words and those specific to this particular execution of the processing; 
                                 keywords cannot contain the pipe (|) character - it is reserved for use in persistence
                                 systems (e.g. to store all keywords in a single column in a table)</xsd:documentation>
                        <xsd:appinfo>
                           <vodml-ref>caom2:Provenance.keywords</vodml-ref>
                        </xsd:appinfo>
                     </xsd:annotation>
                  </xsd:element>
               </xsd:sequence>
            </xsd:complexType>
         </xsd:element>
         <xsd:element minOccurs="0" name="inputs">
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:element name="input"
                               type="xsd:anyURI"
                               minOccurs="0"
                               maxOccurs="unbounded">
                     <xsd:annotation>
                        <xsd:documentation>local identifier for input planes; these are the actual inputs that went into the product</xsd:documentation>
                        <xsd:appinfo>
                           <vodml-ref>caom2:Provenance.inputs</vodml-ref>
                        </xsd:appinfo>
                     </xsd:annotation>
                  </xsd:element>
               </xsd:sequence>
            </xsd:complexType>
         </xsd:element>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="Observable">
      <xsd:annotation>
         <xsd:documentation>description of the sample (pixel) values</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:Observable</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element name="ucd" type="caom2:UCDTerm" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>Unified Content Descriptor (UCD) that says what kind of quantity is stored</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Observable.ucd</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="calibration"
                      type="caom2:CalibrationStatus"
                      minOccurs="0"
                      maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>term describing the calibration of the observable values</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Observable.calibration</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="DataQuality">
      <xsd:annotation>
         <xsd:documentation>description of the data quality</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:DataQuality</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element name="flag" type="caom2:Quality" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>flag indicating the data quality</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:DataQuality.flag</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="Metrics">
      <xsd:annotation>
         <xsd:documentation>collection of measured quantities that describe the content of the data</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:Metrics</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element name="sourceNumberDensity"
                      type="xsd:float"
                      minOccurs="0"
                      maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>number of sources detected per unit area</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Metrics.sourceNumberDensity</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="background" type="xsd:float" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>background level</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Metrics.background</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="backgroundStddev"
                      type="xsd:float"
                      minOccurs="0"
                      maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>standard deviation in the background level</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Metrics.backgroundStddev</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="fluxDensityLimit"
                      type="xsd:float"
                      minOccurs="0"
                      maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>flux density with a signal:noise ratio of 10</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Metrics.fluxDensityLimit</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="magLimit" type="xsd:float" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>magnitude with a signal:noise ratio of 10</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Metrics.magLimit</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="sampleSNR" type="xsd:float" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>signal:noise ratio for a representative subset of samples</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Metrics.sampleSNR</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="Position">
      <xsd:annotation>
         <xsd:documentation>description of the position coverage and sampling of the data</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:Position</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element name="bounds" type="caom2:Shape" minOccurs="1" maxOccurs="1"/>
         <xsd:element name="samples"
                      type="caom2:MultiShape"
                      minOccurs="1"
                      maxOccurs="1"/>
         <xsd:element name="minBounds" type="caom2:Shape" minOccurs="0" maxOccurs="1"/>
         <xsd:element name="dimension"
                      type="caom2:Dimension2D"
                      minOccurs="0"
                      maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>number of separate measurements (pixels) along each axis</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Position.dimension</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="maxRecoverableScale"
                      type="caom2:Interval"
                      minOccurs="0"
                      maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>maximum size of spatial structure (signal) that can be recovered or seen in the data (new in CAOM-2.5)</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Position.maxRecoverableScale</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="resolution" type="xsd:float" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>mean spatial resolution (full-width-half-max) per pixel</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Position.resolution</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="resolutionBounds"
                      type="caom2:Interval"
                      minOccurs="0"
                      maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>range of resolution within the bounds</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Position.resolutionBounds</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="sampleSize" type="xsd:float" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>median pixel size</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Position.sampleSize</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="calibration"
                      type="caom2:CalibrationStatus"
                      minOccurs="0"
                      maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>term describing the calibration of the position axis values (NEW in CAOM-2.5)</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Position.calibration</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="Energy">
      <xsd:annotation>
         <xsd:documentation>description of the energy coverage and sampling of the data</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:Energy</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element name="bounds" type="caom2:Interval" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>simple outer bounds of energy coverage of the data (CHANGED cardinality in CAOM-2.5)</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Energy.bounds</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="samples">
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:element name="intervalM"
                               type="caom2:IntervalM"
                               minOccurs="1"
                               maxOccurs="unbounded"/>
               </xsd:sequence>
            </xsd:complexType>
         </xsd:element>
         <xsd:element minOccurs="0" name="energyBands">
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:element name="energyBand"
                               type="caom2:EnergyBand"
                               minOccurs="0"
                               maxOccurs="unbounded">
                     <xsd:annotation>
                        <xsd:documentation>standard name of the energy regime(s) included in the data</xsd:documentation>
                        <xsd:appinfo>
                           <vodml-ref>caom2:Energy.energyBands</vodml-ref>
                        </xsd:appinfo>
                     </xsd:annotation>
                  </xsd:element>
               </xsd:sequence>
            </xsd:complexType>
         </xsd:element>
         <xsd:element name="dimension" type="xsd:int" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>number of measurements (pixels) on the energy axis</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Energy.dimension</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="resolvingPower"
                      type="xsd:float"
                      minOccurs="0"
                      maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>mean spectral resolving power per pixel (relative resolution)</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Energy.resolvingPower</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="resolvingPowerBounds"
                      type="caom2:Interval"
                      minOccurs="0"
                      maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>range of resolving power within the bounds (relative resolution)</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Energy.resolvingPowerBounds</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="resolution" type="xsd:float" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>mean absolute spectral resolution per pixel (new in CAOM-2.5)</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Energy.resolution</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="resolutionBounds"
                      type="caom2:Interval"
                      minOccurs="0"
                      maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>range of absolute spectral resolution within the bounds (new in CAOM-2.5)</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Energy.resolutionBounds</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="sampleSize" type="xsd:float" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>mean pixel size</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Energy.sampleSize</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element minOccurs="0" name="bandpassNames">
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:element name="bandpassName"
                               type="xsd:string"
                               minOccurs="0"
                               maxOccurs="unbounded">
                     <xsd:annotation>
                        <xsd:documentation>telescope- and instrument-specific name for the energy band(s) included; multiple bands may be
                                 included if energies from all specified bands are included in the data (in the sense of union)</xsd:documentation>
                        <xsd:appinfo>
                           <vodml-ref>caom2:Energy.bandpassName</vodml-ref>
                        </xsd:appinfo>
                     </xsd:annotation>
                  </xsd:element>
               </xsd:sequence>
            </xsd:complexType>
         </xsd:element>
         <xsd:element name="restwav" type="xsd:float" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>rest energy of the target energy transition (name changed in CAOM-2.5)</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Energy.restwav</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="calibration"
                      type="caom2:CalibrationStatus"
                      minOccurs="0"
                      maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>term describing the calibration of the energy axis values (new in CAOM-2.5)</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Energy.calibration</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="transition"
                      type="caom2:EnergyTransition"
                      minOccurs="0"
                      maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>target energy transition for this data</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Energy.transition</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="Time">
      <xsd:annotation>
         <xsd:documentation>description of the time coverage and sampling of the data</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:Time</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element name="bounds" type="caom2:Interval" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>time bounds that include the data (cardinality changed in CAOM-2.5)</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Time.bounds</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="samples">
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:element name="intervalM"
                               type="caom2:IntervalM"
                               minOccurs="1"
                               maxOccurs="unbounded"/>
               </xsd:sequence>
            </xsd:complexType>
         </xsd:element>
         <xsd:element name="calibration"
                      type="caom2:CalibrationStatus"
                      minOccurs="0"
                      maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>term describing the calibration of the time axis values</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Time.calibration</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="dimension" type="xsd:int" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>number of discrete samples (pixels) on the time axis</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Time.dimension</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="resolution" type="xsd:float" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>median temporal resolution per pixel</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Time.resolution</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="resolutionBounds"
                      type="caom2:Interval"
                      minOccurs="0"
                      maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>range of resolution within the bounds</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Time.resolutionBounds</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="sampleSize" type="xsd:float" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>median pixel size</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Time.sampleSize</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="exposure" type="xsd:float" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>mean exposure time per pixel</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Time.exposure</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="exposureBounds"
                      type="caom2:Interval"
                      minOccurs="0"
                      maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>range of exposure within the bounds</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Time.exposureBounds</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="Polarization">
      <xsd:annotation>
         <xsd:documentation>description of polarization measurements included in the data</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:Polarization</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element minOccurs="1" name="states">
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:element name="state"
                               type="caom2:PolarizationState"
                               minOccurs="1"
                               maxOccurs="unbounded">
                     <xsd:annotation>
                        <xsd:documentation>standard polarization states included (CHANGED cardinality in CAOM-2.5)</xsd:documentation>
                        <xsd:appinfo>
                           <vodml-ref>caom2:Polarization.states</vodml-ref>
                        </xsd:appinfo>
                     </xsd:annotation>
                  </xsd:element>
               </xsd:sequence>
            </xsd:complexType>
         </xsd:element>
         <xsd:element name="dimension" type="xsd:int" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>number of polarization states included</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Polarization.dimension</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="CustomAxis">
      <xsd:annotation>
         <xsd:documentation>description of a custom coordinate axis (new in CAOM-2.4)</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:CustomAxis</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element name="ctype" type="xsd:string" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>coordinate type code</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:CustomAxis.ctype</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="bounds" type="caom2:Interval" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>custom coordinate coverage (cardinality changed in CAOM-2.5)</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:CustomAxis.bounds</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="samples">
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:element name="intervalM"
                               type="caom2:IntervalM"
                               minOccurs="1"
                               maxOccurs="unbounded"/>
               </xsd:sequence>
            </xsd:complexType>
         </xsd:element>
         <xsd:element name="dimension" type="xsd:int" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>number of discrete samples (pixels) along custom axis</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:CustomAxis.dimension</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="Visibility">
      <xsd:annotation>
         <xsd:documentation>description of a UV-plane for interferometry data (new in CAOM-2.5)</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:Visibility</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element name="distance"
                      type="caom2:Interval"
                      minOccurs="1"
                      maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>range of distances in the UV plane</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Visibility.distance</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="distributionEccentricity"
                      type="xsd:float"
                      minOccurs="1"
                      maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>eccentricity of the distribtuion of ??? in [0,1]</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Visibility.distributionEccentricity</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="distributionFill"
                      type="xsd:float"
                      minOccurs="1"
                      maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>fill-factor of the distribtuion of ??? in [0,1]</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:Visibility.distributionFill</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="VocabularyTerm" abstract="true">
      <xsd:annotation>
         <xsd:documentation>This is a base class that defines a useful structure to handle terms from an external
                          vocabulary. A specific subclass with a fixed namespace is used for values of fields within
                          the model. 	odo{This could be extracted and reused in other contexts}</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:VocabularyTerm</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element name="namespace" type="xsd:anyURI" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>This is the globally unique namespace for the vocabulary where
                              definitions can be found.</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:VocabularyTerm.namespace</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="term" type="xsd:string" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>the word from the vocabulary</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:VocabularyTerm.term</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="CalibrationStatus">
      <xsd:annotation>
         <xsd:documentation>This is a proposal for the creation of a IVOA calibration-status vocabulary.
                          This vocabulary can be created using optional terms in the ObsCore standard to describe
                          the calibration of each axis in the data separately. (NEW in CAOM-2.5)</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:CalibrationStatus</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:complexContent>
         <xsd:extension base="caom2:VocabularyTerm"/>
      </xsd:complexContent>
   </xsd:complexType>
   <xsd:complexType name="Quality">
      <xsd:annotation>
         <xsd:documentation>vocabulary term used in CAOM; this class defines constants for the CAOM
                          Quality vocabulary (CHANGED from enumeration in CAOM-2.4)</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:Quality</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:complexContent>
         <xsd:extension base="caom2:VocabularyTerm"/>
      </xsd:complexContent>
   </xsd:complexType>
   <xsd:complexType name="Status">
      <xsd:annotation>
         <xsd:documentation>vocabulary term used in CAOM; this class defines constants for the CAOM
                          Status vocabulary (CHANGED from enumeration in CAOM-2.4)</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:Status</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:complexContent>
         <xsd:extension base="caom2:VocabularyTerm"/>
      </xsd:complexContent>
   </xsd:complexType>
   <xsd:complexType name="TargetType">
      <xsd:annotation>
         <xsd:documentation>vocabulary term used in CAOM; this class defines constants for the CAOM
                          TargetType vocabulary (CHANGED from enumeration in CAOM-2.4)</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:TargetType</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:complexContent>
         <xsd:extension base="caom2:VocabularyTerm"/>
      </xsd:complexContent>
   </xsd:complexType>
   <xsd:complexType name="Tracking">
      <xsd:annotation>
         <xsd:documentation>This is a proposed vocabulary to specify the tracking mode of the telescope
                          during the acquisition of data. (NEW in CAOM-2.5)</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:Tracking</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:complexContent>
         <xsd:extension base="caom2:VocabularyTerm"/>
      </xsd:complexContent>
   </xsd:complexType>
   <xsd:complexType name="UCDTerm">
      <xsd:annotation>
         <xsd:documentation>term from the UCD1+ vocabulary (NEW from enumeration in CAOM-2.5)</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:UCDTerm</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:complexContent>
         <xsd:extension base="caom2:VocabularyTerm"/>
      </xsd:complexContent>
   </xsd:complexType>
   <xsd:complexType name="EnergyTransition">
      <xsd:annotation>
         <xsd:documentation/>
         <xsd:appinfo>
            <vodml-ref>caom2:EnergyTransition</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element name="species" type="xsd:string" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation/>
               <xsd:appinfo>
                  <vodml-ref>caom2:EnergyTransition.species</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="transition" type="xsd:string" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation/>
               <xsd:appinfo>
                  <vodml-ref>caom2:EnergyTransition.transition</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:simpleType name="ObservationIntentType">
      <xsd:annotation>
         <xsd:documentation>This enumeration describes the intent of the original creator (usually observer)
                           in acquiring this observation.</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:ObservationIntentType</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:restriction base="xsd:string">
         <xsd:enumeration value="science">
            <xsd:annotation>
               <xsd:documentation>The intent of this observation was to create science data.</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:ObservationIntentType.science</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="calibration">
            <xsd:annotation>
               <xsd:documentation>The intent of this observation was to create calibration data.</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:ObservationIntentType.calibration</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="outreach">
            <xsd:annotation>
               <xsd:documentation>The intent of this observation was to create public outreach content.</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:ObservationIntentType.outreach</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
      </xsd:restriction>
   </xsd:simpleType>
   <xsd:simpleType name="CalibrationLevel">
      <xsd:annotation>
         <xsd:documentation>This enumeration describes the degree to which data has been calibrated to remove
                           instrumental effects. 	odo{This is intended to be consistent with ObsCore but there is no way to
                           convey the integer value associated with each symbol}</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:CalibrationLevel</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:restriction base="xsd:string">
         <xsd:enumeration value="PLANNED">
            <xsd:annotation>
               <xsd:documentation>(-1) A planned data product that does not yet exist.</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:CalibrationLevel.PLANNED</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="RAW_INSTRUMENTAL">
            <xsd:annotation>
               <xsd:documentation>(0) Raw data in some opaque instrument-specific format.</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:CalibrationLevel.RAW_INSTRUMENTAL</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="RAW_STANDARD">
            <xsd:annotation>
               <xsd:documentation>(1) Raw data in a standard format.</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:CalibrationLevel.RAW_STANDARD</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="CALIBRATED">
            <xsd:annotation>
               <xsd:documentation>(2) Standard calibration steps have been applied.</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:CalibrationLevel.CALIBRATED</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="PRODUCT">
            <xsd:annotation>
               <xsd:documentation>(3) Additional non-standard calibration steps have been applied.</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:CalibrationLevel.PRODUCT</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="ANALYSIS_PRODUCT">
            <xsd:annotation>
               <xsd:documentation>(4) A data product output from scientific analysis.</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:CalibrationLevel.ANALYSIS_PRODUCT</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
      </xsd:restriction>
   </xsd:simpleType>
   <xsd:simpleType name="EnergyBand">
      <xsd:annotation>
         <xsd:documentation>Energyband provides a general set of energy regions that span the electromagnetic spectrum.
                           The set of values and boundaries are taken from the VOResource metadata.
                           	odo{The name(s) are used to capture the literal values from VOResource, but that
                           is not valid for X-ray and Gamma-ray}</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:EnergyBand</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:restriction base="xsd:string">
         <xsd:enumeration value="Radio">
            <xsd:annotation>
               <xsd:documentation>wavelength greater than ~10mm</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:EnergyBand.Radio</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="Millimeter">
            <xsd:annotation>
               <xsd:documentation>wavelength from 0.1 to 10mm</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:EnergyBand.Millimeter</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="Infrared">
            <xsd:annotation>
               <xsd:documentation>wavelength from 1um to 0.1mm</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:EnergyBand.Infrared</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="Optical">
            <xsd:annotation>
               <xsd:documentation>wavelength from 300nm to 1um</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:EnergyBand.Optical</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="UV">
            <xsd:annotation>
               <xsd:documentation>wavelength from 100 to 300nm</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:EnergyBand.UV</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="EUV">
            <xsd:annotation>
               <xsd:documentation>wavelength from 10 to 100nm</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:EnergyBand.EUV</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="Xray">
            <xsd:annotation>
               <xsd:documentation>energy from 0.12 to 120keV</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:EnergyBand.Xray</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="Gammaray">
            <xsd:annotation>
               <xsd:documentation>energy greater than ~120keV</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:EnergyBand.Gammaray</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
      </xsd:restriction>
   </xsd:simpleType>
   <xsd:simpleType name="ReleaseType">
      <xsd:annotation>
         <xsd:documentation>The rekease type is a flag indicating how an artifact is classified to determine
                           access permissions. The name(s) of the literals are intended to capture the serialised value(s).
                       </xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:ReleaseType</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:restriction base="xsd:string">
         <xsd:enumeration value="data">
            <xsd:annotation>
               <xsd:documentation>access permission checks treat the protected item as data</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:ReleaseType.data</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="meta">
            <xsd:annotation>
               <xsd:documentation>access permission checks treat the protected item as metadata</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:ReleaseType.meta</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
      </xsd:restriction>
   </xsd:simpleType>
   <xsd:simpleType name="PolarizationState">
      <xsd:annotation>
         <xsd:documentation>a classification of polarization (Stokes states plus other related quantities);
                               work-around: using the name of the literal to convey the serialised value</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:PolarizationState</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:restriction base="xsd:string">
         <xsd:enumeration value="I">
            <xsd:annotation>
               <xsd:documentation>unpolarized</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:PolarizationState.I</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="Q">
            <xsd:annotation>
               <xsd:documentation>Stokes linear Q</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:PolarizationState.Q</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="U">
            <xsd:annotation>
               <xsd:documentation>Stokes linear U</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:PolarizationState.U</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="V">
            <xsd:annotation>
               <xsd:documentation>Stokes circular V</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:PolarizationState.V</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="RR">
            <xsd:annotation>
               <xsd:documentation>right-right circular</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:PolarizationState.RR</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="LL">
            <xsd:annotation>
               <xsd:documentation>left-left circular</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:PolarizationState.LL</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="RL">
            <xsd:annotation>
               <xsd:documentation>right-left cross-circular</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:PolarizationState.RL</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="LR">
            <xsd:annotation>
               <xsd:documentation>left-right cross-circular</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:PolarizationState.LR</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="XX">
            <xsd:annotation>
               <xsd:documentation>X parallel linear</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:PolarizationState.XX</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="YY">
            <xsd:annotation>
               <xsd:documentation>Y parallel linear</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:PolarizationState.YY</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="XY">
            <xsd:annotation>
               <xsd:documentation>XY cross-linear</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:PolarizationState.XY</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="YX">
            <xsd:annotation>
               <xsd:documentation>YX cross-linear</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:PolarizationState.YX</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="POLI">
            <xsd:annotation>
               <xsd:documentation>linear polarized intensity: sqrt(Q^2 + U^2)</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:PolarizationState.POLI</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="FPOLI">
            <xsd:annotation>
               <xsd:documentation>fractional linear polarization: POLI/I</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:PolarizationState.FPOLI</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="POLA">
            <xsd:annotation>
               <xsd:documentation>linear polarization angle: 1/2 arctan(U,Q)</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:PolarizationState.POLA</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="EPOLI">
            <xsd:annotation>
               <xsd:documentation>elliptical polarization intensity: sqrt(Q^2 + U^2 + V^2)</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:PolarizationState.EPOLI</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="CPOLI">
            <xsd:annotation>
               <xsd:documentation>circular polarization intensity: |V|</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:PolarizationState.CPOLI</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value="NPOLI">
            <xsd:annotation>
               <xsd:documentation>unpolarized intensity: I - EPOLI</xsd:documentation>
               <xsd:appinfo>
                  <vodml-ref>caom2:PolarizationState.NPOLI</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:enumeration>
      </xsd:restriction>
   </xsd:simpleType>
   <xsd:complexType name="Point">
      <xsd:annotation>
         <xsd:documentation>location on the sky</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:types.Point</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element name="cval1" type="xsd:float" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation/>
               <xsd:appinfo>
                  <vodml-ref>caom2:types.Point.cval1</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="cval2" type="xsd:float" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation/>
               <xsd:appinfo>
                  <vodml-ref>caom2:types.Point.cval2</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="Shape" abstract="true">
      <xsd:annotation>
         <xsd:documentation/>
         <xsd:appinfo>
            <vodml-ref>caom2:types.Shape</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
   </xsd:complexType>
   <xsd:complexType name="Circle">
      <xsd:annotation>
         <xsd:documentation>a circular region on the sky</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:types.Circle</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:complexContent>
         <xsd:extension base="caom2:Shape">
            <xsd:sequence>
               <xsd:element name="center" type="caom2:Point" minOccurs="1" maxOccurs="1"/>
               <xsd:element name="radius" type="xsd:float" minOccurs="1" maxOccurs="1">
                  <xsd:annotation>
                     <xsd:documentation/>
                     <xsd:appinfo>
                        <vodml-ref>caom2:types.Circle.radius</vodml-ref>
                     </xsd:appinfo>
                  </xsd:annotation>
               </xsd:element>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>
   <xsd:complexType name="MultiShape">
      <xsd:annotation>
         <xsd:documentation>multiple simple shapess describing disconnected regions as a single value</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:types.MultiShape</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element name="shapes">
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:element name="shape"
                               type="caom2:Shape"
                               minOccurs="1"
                               maxOccurs="unbounded"/>
               </xsd:sequence>
            </xsd:complexType>
         </xsd:element>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="Polygon">
      <xsd:annotation>
         <xsd:documentation>a simple polygon region on the sky defined a sequence of points connected by great-circle segments</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:types.Polygon</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:complexContent>
         <xsd:extension base="caom2:Shape">
            <xsd:sequence>
               <xsd:element name="points">
                  <xsd:complexType>
                     <xsd:sequence>
                        <xsd:element name="point"
                                     type="caom2:Point"
                                     minOccurs="1"
                                     maxOccurs="unbounded"/>
                     </xsd:sequence>
                  </xsd:complexType>
               </xsd:element>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>
   <xsd:complexType name="IntervalM">
      <xsd:annotation>
         <xsd:documentation>an interval that can appear in a composition</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:types.IntervalM</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element name="lower" type="xsd:float" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation/>
               <xsd:appinfo>
                  <vodml-ref>caom2:types.IntervalM.lower</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="upper" type="xsd:float" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation/>
               <xsd:appinfo>
                  <vodml-ref>caom2:types.IntervalM.upper</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="Dimension2D">
      <xsd:annotation>
         <xsd:documentation>dimension (number of pixels) for a two-dimensional axis</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:types.Dimension2D</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element name="naxis1" type="xsd:int" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation/>
               <xsd:appinfo>
                  <vodml-ref>caom2:types.Dimension2D.naxis1</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="naxis2" type="xsd:int" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation/>
               <xsd:appinfo>
                  <vodml-ref>caom2:types.Dimension2D.naxis2</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="Interval">
      <xsd:annotation>
         <xsd:documentation>a set of numeric values defined by a lower and upper bound (bounds included: [a,b])</xsd:documentation>
         <xsd:appinfo>
            <vodml-ref>caom2:types.Interval</vodml-ref>
         </xsd:appinfo>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element name="lower" type="xsd:float" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation/>
               <xsd:appinfo>
                  <vodml-ref>caom2:types.Interval.lower</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="upper" type="xsd:float" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation/>
               <xsd:appinfo>
                  <vodml-ref>caom2:types.Interval.upper</vodml-ref>
               </xsd:appinfo>
            </xsd:annotation>
         </xsd:element>
      </xsd:sequence>
   </xsd:complexType>
</xsd:schema>
