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>