The schema is specified here in the compact syntax form of the RELAX NG schema language.[4] A schema in the W3C XML schema language is also provided for reference, although it should be noted that this schema has been derived from the RELAX NG format schema.
namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
namespace xlink = "http://www.w3.org/1999/xlink"
start = sdmDataHeader
sdmDataHeader =
  element sdmDataHeader {
    [ a:documentation [ xml:id = "doc.byteOrder"
      "Binary data endianness." ] ]
    attribute byteOrder { "little endian" | "big endian" },
    [ a:documentation [ xml:id = "doc.axisOrder"
      "Axes are given an integer id as follows: 1. polarization " ~
      "product, 2. spectral channel, 3. apc, 4. bin, 5. spectral window, " ~
      "6. baseband, 7. baseline. Data in tables are ordered by a " ~
      "*column-major* traversal of the axes in this order. Note that " ~
      "the attribute value is fixed to be '1234567'." ] ]
    attribute axisOrder { "1234567" },
    [ a:documentation [ xml:id = "doc.schemaVersion"
      "Schema version number." ] ]
    attribute schemaVersion { xsd:decimal },
    [ a:documentation [ xml:id = "doc.time"
      "Scheduled time for the centroid of the integration. Units are " ~
      "MJD plus fractional day." ] ]
    element time { xsd:double, xsd:double },
    dataOID,
    execBlock,
    numAntenna,
    baselineFlags,
    actualTimes,
    actualDurations,
    zeroLags,
    numAPC,
    baseband+,
    crossData,
    autoData
  }
[ a:documentation [ xml:id = "doc.axes"
  'Attribute to declare axes used in supplemental data binary tables. ' ~
  'Although the order of the axes cannot be changed, some ' ~
  'axes may be omitted. The axis names correspond to the axis integer ' ~
  'identifiers as given in the "axisOrder" attribute of the ' ~
  '"sdmDataHeader" element. Note that it is the set of *non-omitted* ' ~
  '(i.e, present) axes that must be given.' ] ]
axes =
   attribute axes {
      list { "a1"?, "a2"?, "a3"?, "a4"?, "a5"?, "a6"?, "a7"? }
   }
[ a:documentation [ xml:id = "doc.baseband"
  'Container for "spectralWindows" in a baseband.' ] ]
baseband = element baseband { spectralWindow+ }
[ a:documentation [ xml:id = "doc.spectralWindow"
  "Metadata of a spectral window related to structure of the " ~
  "binary tables." ] ]
spectralWindow =
  element spectralWindow {
    [ a:documentation [ xml:id = "doc.numSpectralPoint"
      "Number of spectral channels." ] ]
    attribute numSpectralPoint { xsd:positiveInteger },
    [ a:documentation [ xml:id = "doc.numBin"
      "Number of phase bins." ] ]
    attribute numBin { xsd:positiveInteger },
    [ a:documentation [ xml:id = "doc.numPolProduct"
      "Number of polarization products." ] ]
    attribute numPolProduct {
      xsd:integer "1" | xsd:integer "2" | xsd:integer "4"
    },
    [ a:documentation [ xml:id = "doc.scaleFactor"
      "Scaling factor for spectral data." ] ]
    attribute scaleFactor { xsd:float }?
  }
[ a:documentation [ xml:id = "doc.crossData"
  "Table structure metadata of the cross-correlation spectral data " ~
   "binary table." ] ]
crossData =
  element crossData {
    [ a:documentation [ xml:id = "doc.crossData.size"
      "Size of binary table. (bytes)" ] ]
    attribute size { xsd:positiveInteger },
    [ a:documentation [ xml:id = "doc.crossData.type"
      "Data type of spectral data. 'float': IEEE 754 single precision " ~
      "floating point; 'short': 16-bit twos-complement integer; " ~
      "'long': 32-bit twos-complement integer." ] ]
    attribute type { "float" | "short" | "long" },
    [ a:documentation [ xml:id = "doc.crossData.ref"
      "MIME message reference to MIME Content-id of binary table, " ~
      "may be in URI format (RFC 2111)."] ]
    attribute ref { xsd:NMTOKEN }
  }
[ a:documentation [ xml:id = "doc.autoData"
  "Table structure metadata of the auto-correlation spectral data " ~
   "binary table." ] ]
autoData =
  element autoData {
    [ a:documentation [ xml:id = "doc.autoData.size"
      "Size of binary table. (bytes)" ] ]
    attribute size { xsd:positiveInteger },
    [ a:documentation [ xml:id = "doc.autoData.ref"
      "MIME message reference to MIME Content-id of binary table, " ~
      "may be in URI format (RFC 2111)."] ]
    attribute ref { xsd:NMTOKEN }
  }
[ a:documentation [ xml:id = "doc.baselineFlags"
  "baselineFlags table metadata." ] ]
baselineFlags =
  element baselineFlags {
    [ a:documentation [ xml:id = "doc.baselineFlags.size"
      "Size of binary table. (bytes)" ] ]
    attribute size { xsd:positiveInteger },
    [ a:documentation [ xml:id = "doc.baselineFlags.ref"
      "MIME message reference to MIME Content-id of binary table, " ~
      "may be in URI format (RFC 2111)." ] ]
    attribute ref { xsd:NMTOKEN },
    axes
  }
[ a:documentation [ xml:id = "doc.actualTimes"
  "actualTimes table metadata." ] ]
actualTimes =
  element actualTimes {
    [ a:documentation [ xml:id = "doc.actualTimes.size"
      "Size of binary table. (bytes)" ] ]
    attribute size { xsd:positiveInteger },
    [ a:documentation [ xml:id = "doc.actualTimes.ref"
      "MIME message reference to MIME Content-id of binary table, " ~
      "may be in URI format (RFC 2111)." ] ]
    attribute ref { xsd:NMTOKEN },
    axes
  }
[ a:documentation [ xml:id = "doc.lut"
  "Lookup table definition. Index values are implicit in the ordering " ~
  "of the floating point values given by the child elements of the 'lut' " ~
  "element, from index 0 up to, at most, index 2^{nbits} - 1." ] ]
lut =
  element lut {
    [ a:documentation [ xml:id = "doc.lut.nbits"
      "Lookup index bitfield length." ] ]
    attribute nbits { xsd:positiveInteger },
    xsd:double+
  }
[ a:documentation [ xml:id = "doc.actualDurations"
  "actualDurations table metadata." ] ]
actualDurations =
  element actualDurations {
    [ a:documentation [ xml:id = "doc.actualDurations.size"
      "Size of binary table. (bytes)" ] ]
    attribute size { xsd:positiveInteger },
    [ a:documentation [ xml:id = "doc.actualDurations.ref"
      "MIME message reference to MIME Content-id of binary table, " ~
      "may be in URI format (RFC 2111)." ] ]
    attribute ref { xsd:NMTOKEN },
    axes,
    lut?
  }
[ a:documentation [ xml:id = "doc.zeroLags"
  "zeroLags table metadata." ] ]
zeroLags =
  element zeroLags {
    [ a:documentation [ xml:id = "doc.zeroLags.size"
      "Size of binary table. (bytes)" ] ]
    attribute size { xsd:positiveInteger },
    [ a:documentation [ xml:id = "doc.zeroLags.ref"
      "MIME message reference to MIME Content-id of binary table, " ~
      "may be in URI format (RFC 2111)." ] ]
    attribute ref { xsd:NMTOKEN },
    axes
  }
[ a:documentation [ xml:id= "doc.numAntenna"
  "Number of antennas in subarray." ] ]
numAntenna = element numAntenna { xsd:positiveInteger }
[ a:documentation [ xml:id = "doc.scanNum"
  "Scan number." ] ]
scanNum = element scanNum { xsd:positiveInteger }
[ a:documentation [ xml:id = "doc.subscanNum"
  "Sub-scan number." ] ]
subscanNum = element subscanNum { xsd:positiveInteger }
[ a:documentation [ xml:id = "doc.integrationNum"
  "Integration number." ] ]
integrationNum = element integrationNum { xsd:positiveInteger }
[ a:documentation [ xml:id = "doc.numAPC"
  "Number of data sets for atmospheric phase correction." ] ]
numAPC = element numAPC { xsd:positiveInteger }
[ a:documentation [ xml:id = "doc.execBlock"
  "Execution block identifier; uniquely identifies an instance of " ~
  "each execution of a scheduling block." ] ]
execBlock =
  element execBlock {
    [ a:documentation [ xml:id = "doc.execBlock.href"
      "Reference to containing(?) execBlock." ] ]
    attribute xlink:href { text },
    scanNum,
    subscanNum,
    integrationNum
  }
[ a:documentation [ xml:id = "doc.dataOID"
  "Unique identifier for the integration. This is actually a reference " ~
  "to the data for this integration itself, in essence a " ~
  "self-reference. It will be used by the SDM as a reference to this " ~
  "data." ] ]
dataOID =
  element dataOID {
    [ a:documentation [ xml:id = "doc.dataOID.href"
      "Reference to the identifier for this integration." ] ]
    attribute xlink:href { text },
    [ a:documentation [ xml:id = "doc.dataOID.title"
      "Description of the data." ] ]
    attribute xlink:title { "Correlator spectral data" }?
  }
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" xmlns:xlink="http://www.w3.org/1999/xlink">
  <xs:import namespace="http://www.w3.org/1999/xlink" schemaLocation="xlink.xsd"/>
  <xs:element name="sdmDataHeader">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="time"/>
        <xs:element ref="dataOID"/>
        <xs:element ref="execBlock"/>
        <xs:element ref="numAntenna"/>
        <xs:element ref="baselineFlags"/>
        <xs:element ref="actualTimes"/>
        <xs:element ref="actualDurations"/>
        <xs:element ref="zeroLags"/>
        <xs:element ref="numAPC"/>
        <xs:element maxOccurs="unbounded" ref="baseband"/>
        <xs:element ref="crossData"/>
        <xs:element ref="autoData"/>
      </xs:sequence>
      <xs:attribute name="byteOrder" use="required">
        <xs:annotation>
          <xs:documentation>Binary data endianness.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="little endian"/>
            <xs:enumeration value="big endian"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="axisOrder" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="1234567"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="schemaVersion" use="required" type="xs:decimal">
        <xs:annotation>
          <xs:documentation>Schema version number.</xs:documentation>
        </xs:annotation>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:element name="time">
    <xs:simpleType>
      <xs:union memberTypes="xs:double xs:double"/>
    </xs:simpleType>
  </xs:element>
  <xs:attributeGroup name="axes">
    <xs:attribute name="axes" use="required">
      <xs:simpleType>
        <xs:restriction>
          <xs:simpleType>
            <xs:list>
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="a1"/>
                  <xs:enumeration value="a2"/>
                  <xs:enumeration value="a3"/>
                  <xs:enumeration value="a4"/>
                  <xs:enumeration value="a5"/>
                  <xs:enumeration value="a6"/>
                  <xs:enumeration value="a7"/>
                </xs:restriction>
              </xs:simpleType>
            </xs:list>
          </xs:simpleType>
          <xs:maxLength value="7"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:attributeGroup>
  <xs:element name="baseband">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="spectralWindow"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="spectralWindow">
    <xs:complexType>
      <xs:attribute name="numSpectralPoint" use="required" type="xs:positiveInteger">
        <xs:annotation>
          <xs:documentation>Number of spectral channels.</xs:documentation>
        </xs:annotation>
      </xs:attribute>
      <xs:attribute name="numBin" use="required" type="xs:positiveInteger">
        <xs:annotation>
          <xs:documentation>Number of phase bins.</xs:documentation>
        </xs:annotation>
      </xs:attribute>
      <xs:attribute name="numPolProduct" use="required">
        <xs:annotation>
          <xs:documentation>Number of polarization products.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:integer">
            <xs:enumeration value="1"/>
            <xs:enumeration value="2"/>
            <xs:enumeration value="4"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="scaleFactor" type="xs:float">
        <xs:annotation>
          <xs:documentation>Scaling factor for spectral data.</xs:documentation>
        </xs:annotation>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:element name="crossData">
    <xs:complexType>
      <xs:attribute name="size" use="required" type="xs:positiveInteger">
        <xs:annotation>
          <xs:documentation>Size of binary table. (bytes)</xs:documentation>
        </xs:annotation>
      </xs:attribute>
      <xs:attribute name="type" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="float"/>
            <xs:enumeration value="short"/>
            <xs:enumeration value="long"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="ref" use="required" type="xs:NMTOKEN"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="autoData">
    <xs:complexType>
      <xs:attribute name="size" use="required" type="xs:positiveInteger">
        <xs:annotation>
          <xs:documentation>Size of binary table. (bytes)</xs:documentation>
        </xs:annotation>
      </xs:attribute>
      <xs:attribute name="ref" use="required" type="xs:NMTOKEN"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="baselineFlags">
    <xs:complexType>
      <xs:attribute name="size" use="required" type="xs:positiveInteger">
        <xs:annotation>
          <xs:documentation>Size of binary table. (bytes)</xs:documentation>
        </xs:annotation>
      </xs:attribute>
      <xs:attribute name="ref" use="required" type="xs:NMTOKEN"/>
      <xs:attributeGroup ref="axes"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="actualTimes">
    <xs:complexType>
      <xs:attribute name="size" use="required" type="xs:positiveInteger">
        <xs:annotation>
          <xs:documentation>Size of binary table. (bytes)</xs:documentation>
        </xs:annotation>
      </xs:attribute>
      <xs:attribute name="ref" use="required" type="xs:NMTOKEN"/>
      <xs:attributeGroup ref="axes"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="lut">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:double">
          <xs:attribute name="nbits" use="required" type="xs:positiveInteger">
            <xs:annotation>
              <xs:documentation>Lookup index bitfield length.</xs:documentation>
            </xs:annotation>
          </xs:attribute>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="actualDurations">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="lut"/>
      </xs:sequence>
      <xs:attribute name="size" use="required" type="xs:positiveInteger">
        <xs:annotation>
          <xs:documentation>Size of binary table. (bytes)</xs:documentation>
        </xs:annotation>
      </xs:attribute>
      <xs:attribute name="ref" use="required" type="xs:NMTOKEN"/>
      <xs:attributeGroup ref="axes"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="zeroLags">
    <xs:complexType>
      <xs:attribute name="size" use="required" type="xs:positiveInteger">
        <xs:annotation>
          <xs:documentation>Size of binary table. (bytes)</xs:documentation>
        </xs:annotation>
      </xs:attribute>
      <xs:attribute name="ref" use="required" type="xs:NMTOKEN"/>
      <xs:attributeGroup ref="axes"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="numAntenna" type="xs:positiveInteger"/>
  <xs:element name="scanNum" type="xs:positiveInteger"/>
  <xs:element name="subscanNum" type="xs:positiveInteger"/>
  <xs:element name="integrationNum" type="xs:positiveInteger"/>
  <xs:element name="numAPC" type="xs:positiveInteger"/>
  <xs:element name="execBlock">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="scanNum"/>
        <xs:element ref="subscanNum"/>
        <xs:element ref="integrationNum"/>
      </xs:sequence>
      <xs:attributeGroup ref="xlink:href"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="dataOID">
    <xs:complexType>
      <xs:attributeGroup ref="xlink:href1"/>
      <xs:attribute ref="xlink:title"/>
    </xs:complexType>
  </xs:element>
</xs:schema>