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>