Astro~/0.3
** Conformance / XTCE * PAGE 23 / 23
** Astro * Conformance
** /conformance/xtce

XTCE

Element coverage matrix: what pkg/xtce does with each schema element, and why XTCE has no PICS.

Element coverage for pkg/xtce, XTCE 1.2 (OMG), CCSDS 660.1-G-2


Why a matrix and not a PICS

Every other package in this repository carries a PICS proforma, because CCSDS Blue Books publish one to fill in. XTCE has none to fill in: it is an OMG schema, and CCSDS 660.1-G-2 is a Green Book, a guide, not a Recommended Standard. So this file substitutes a coverage matrix, listing the schema's elements against what the package does with each. It lives beside the protocol page so the documentation triad stays uniform.

What the statuses mean

StatusMeaning
SupportedModeled as Go types, decoded, and reachable through the API.
OpaqueParsed as far as the XML allows and kept as raw bytes, so a caller can handle it and a later version can model it without changing what Load accepts.
IgnoredDecoded past without error. The element does not appear in the model. A file using it still loads.
UnsupportedSame as ignored on the wire, but named here because something depends on it: a parameter whose type is an unsupported kind will fail Validate with an unresolved reference.

The loader rejects malformed XML, a non-SpaceSystem root, documents past the size or depth limits, and a document whose values cannot be read as their schema types, such as a FixedValue that is not a number (ErrInvalidValue). Element coverage never fails Load: every status in the tables below loads. Values inside a covered element still have to parse.


Table A-1: Document structure

ElementStatusNotes
SpaceSystemSupportedRoot and recursive. Parent links are built during Load so references can resolve upwards.
SpaceSystem/@nameSupportedRequired by the schema. Load rejects a root without one.
SpaceSystem/@shortDescriptionSupported
SpaceSystem/@operationalStatusSupportedCarried, not interpreted.
LongDescriptionSupported
HeaderSupportedVersion, date, classification, validation status.
Header/AuthorSet, NoteSet, HistorySetIgnored
AliasSetIgnoredAlternate names for a thing. Nothing in this package resolves by alias.
AncillaryDataSetIgnoredMission-defined key-value data.
TelemetryMetaDataSupportedParameterTypeSet, ParameterSet, ContainerSet.
CommandMetaDataSupportedParameterTypeSet, ParameterSet, MetaCommandSet.
ServiceSetIgnored
Namespace http://www.omg.org/spec/XTCE/20180204SupportedBoth as a default namespace and with a prefix; tested both ways. Child elements are matched by namespace too, so a TelemetryMetaData from another vocabulary is ignored rather than decoded as XTCE's.

Table A-2: Parameters

ElementStatusNotes
ParameterSetSupportedTelemetry and command sides share one name space, matching the schema's parameterNameKey.
ParameterSupportedName, parameterTypeRef, initial value, descriptions.
ParameterRefIgnoredThe schema allows a reference in place of a definition.
ParameterPropertiesIgnoredData source, persistence, read-only.

Table A-3: Parameter types

ElementStatusNotes
IntegerParameterTypeSupportedSize, signedness, encoding, calibrator.
FloatParameterTypeSupportedSize, encoding, calibrator.
EnumeratedParameterTypeSupportedFull enumeration list including maxValue ranges.
StringParameterTypeSupportedEncoding and restriction pattern.
BinaryParameterTypeSupported
BooleanParameterTypeSupportedIncluding the one and zero string values.
AbsoluteTimeParameterTypeSupportedEncoding, units, scale, offset, reference epoch. Its encoding nests one level deeper than the others'.
RelativeTimeParameterTypeOpaqueThe name is decoded so references resolve; the contents stay raw. TypeKind() reports "relative time (not modeled)", and Layout refuses a parameter of this type.
ArrayParameterTypeOpaqueSame treatment; the name and arrayTypeRef are decoded, the dimension list stays raw.
AggregateParameterTypeOpaqueSame treatment; the member list stays raw.
UnitSet, UnitSupportedCarried, not converted. power defaults to 1 through PowerOrDefault().
ValidRangeIgnored
ToStringIgnored
@baseTypeOpaqueThe attribute is decoded; type inheritance is not followed.

Table A-4: Data encodings

ElementStatusNotes
IntegerDataEncodingSupportedEncoding, size, bit and byte order, default calibrator.
FloatDataEncodingSupportedSame.
StringDataEncodingSupportedFixed size in Layout. TerminationChar resolves through ResolveLayout, with the terminator counted toward the field because it occupies packet space; a delimited string starting off an octet boundary is refused, since searching over octets would be meaningless. LeadingSize is refused by name: the width of the size field is an attribute of an element kept raw, so there is no way to know how far to skip. Variable is opaque.
BinaryDataEncodingSupportedFixed size in Layout; a DynamicValue size resolves through ResolveLayout. A negative resolved width is refused rather than read as zero.
@changeThresholdSupportedCarried on both numeric encodings, as a pointer so absent, meaning any change is significant, stays distinguishable from zero.
@bitOrder, @byteOrderSupportedDefaults applied through accessors. Validate checks that encoding, bitOrder and byteOrder are legal enumeration members (ErrInvalidEncoding).
ErrorDetectCorrectIgnoredChecksums and CRCs described in the database. This repository's own CRCs are in pkg/crc.
FromBinaryTransformAlgorithmIgnoredAn algorithm, and algorithms are out of scope.
ToBinaryTransformAlgorithmIgnoredSame.

Table A-5: Calibrators

ElementStatusNotes
DefaultCalibratorSupportedOn integer and float encodings.
PolynomialCalibratorSupportedAll terms, with coefficient and exponent.
SplineCalibratorSupportedAll points, plus order and the extrapolate flag.
MathOperationCalibratorSupportedThe postfix expression is modeled in document order and evaluated. 47 of the 49 operators in MathOperatorsType are implemented; ~ and div are refused because the schema's definitions of them contradict themselves. ParameterInstanceRefOperand needs a value source, supplied through ApplyWith.
ContextCalibratorListOpaqueCalibration that depends on another parameter's value, kept as raw XML. DataEncoding.HasContextCalibrators() marks its presence, so a consumer knows the default curve alone may be wrong for a given packet.

Table A-6: Containers

ElementStatusNotes
ContainerSetSupported
SequenceContainerSupportedName, abstract flag, idle pattern.
EntryListSupportedOrdered. Decoded by a hand-written unmarshaller because entry order is packet order and encoding/xml cannot preserve it across separate fields.
ParameterRefEntrySupported
ContainerRefEntrySupported
ParameterSegmentRefEntryOpaqueKept in the ordered list as EntryOther, so it still occupies its position. Its reference is not validated.
ContainerSegmentRefEntryOpaqueSame.
StreamSegmentEntryOpaqueSame.
IndirectParameterRefEntryOpaqueSame.
ArrayParameterRefEntryOpaqueSame.
LocationInContainerInBitsSupportedFixed values in every FixedIntegerValueType spelling: decimal, 0x, 0o, 0b. The reference location is carried, defaulting through ReferenceLocationOrDefault(). DynamicValue resolves through ResolveLayout; DiscreteLookupList is opaque. containerEnd resolves against the packet length for the container being read, and is refused for a spliced inner container whose end is not yet known. nextEntry is refused: it positions the following entry, and treating it as previousEntry would silently misplace the field.
RepeatEntrySupportedFixed counts in every FixedIntegerValueType spelling, and DynamicValue counts through ResolveLayout. Offset is refused: the gap between repetitions is not modeled, and packing them without it would place them wrongly.
IncludeConditionOpaqueRaw XML. Layout places the entry regardless; a caller that needs the condition can parse it.
TimeAssociationIgnored
BaseContainerSupportedThe reference is resolved and checked for cycles.
BaseContainer/RestrictionCriteriaYesComparison, ComparisonList and BooleanExpression are modeled and evaluated by Match, which resolves a candidate container against the packet when its shape depends on the contents.
RestrictionCriteria/BooleanExpressionSupportedCondition, ANDedConditions and ORedConditions, nested to any depth, evaluated by Match.
ConditionSupportedBoth forms of right-hand side: a Value literal, or a second ParameterInstanceRef so two fields can be compared against each other.
Condition/@useCalibratedValueYesDefaults to true, per ParameterInstanceRefType.
Condition/@instanceParsedA value from another packet; Match reports a non-zero instance on either side rather than guessing.
RestrictionCriteria/CustomAlgorithmOpaqueRaw XML. By definition outside the file.
RestrictionCriteria/NextContainerParsedDeciding it needs the stream rather than one packet, so Match does not evaluate it.
Comparison/@useCalibratedValueYesDefaults to true, so a comparison is against the engineering value.
Comparison/@instanceParsedA value from another packet; Match reports a non-zero instance rather than guessing.
DynamicValueSupportedParameterInstanceRef plus an optional LinearAdjustment. Resolved by ResolveLayout, which decodes each field as it places it so a later one can be sized or positioned by an earlier one's value. A forward reference is refused rather than guessed. A non-zero instance reads another packet and is refused.
LinearAdjustmentSupportedSlope and intercept. An absent slope is one, not zero: the schema states no default, and zero would discard the parameter.
DefaultRateInStream, RateInStreamSetIgnored
BinaryEncoding on a containerIgnored

Table A-7: Commands

ElementStatusNotes
MetaCommandSetSupportedAll three member kinds are kept: MetaCommand, MetaCommandRef, BlockMetaCommand.
MetaCommandSupportedSkeleton only: name, abstract flag, descriptions.
MetaCommandRefSupportedA command included by reference. The reference is kept but not resolved.
BlockMetaCommandOpaqueThe name and descriptions are decoded; the MetaCommandStepList stays raw.
BaseMetaCommandSupportedThe reference and the ArgumentAssignmentList, the name/value pairs that narrow the base command, are decoded. The reference is not resolved or cycle-checked.
ArgumentList, ArgumentSupportedNames and argumentTypeRef.
ArgumentTypeSet and its typesUnsupportedThe argument-side mirror of the parameter types.
CommandContainerUnsupportedThe uplink bit layout.
TransmissionConstraintListUnsupportedWhen a command may be sent.
VerifierSetUnsupportedHow to tell a command worked.
DefaultSignificance, ContextSignificanceListUnsupportedHow dangerous a command is.
InterlockUnsupported
ParameterToSetList, ParametersToSuspendAlarmsOnSetUnsupported

A warning about the command side. Everything that makes a command safe to send (verifiers, constraints, significance) is in the unsupported list. This package can tell you a command exists and what arguments it takes. It cannot tell you whether sending it is allowed or what it will do. Do not build an uplink path on this model.

Table A-8: Alarms

ElementStatusNotes
DefaultAlarmIgnoredOn numeric, enumerated and other types.
ContextAlarmListIgnored
StaticAlarmRanges, ChangePerSecondAlarmRangesIgnored
AlarmConditionsIgnored

Alarms are ignored rather than kept opaque. Half-modeled alarm limits are worse than none: a caller who found some of them present might reasonably assume all of them were.

Table A-9: Streams, messages, algorithms, services

ElementStatusNotes
StreamSet and every stream typeIgnoredFixed and variable frame streams. This repository implements frames directly, in pkg/tmdl, pkg/tcdl, pkg/aos and pkg/usdl.
MessageSet, MessageIgnored
AlgorithmSet and every algorithm typeIgnoredOut of scope by decision, not by effort.
ServiceSetIgnored

Table A-10: References and names

FeatureStatusNotes
Absolute references (/A/B/C)Supported
Relative references (../B/C, ./C)Supported
Bare namesSupportedSearched in the referencing system, then each ancestor to the root.
NameReferenceType patternSupportedMalformed references are rejected with ErrInvalidReference.
Alias-based resolutionUnsupportedAliasSet is ignored, so nothing resolves by alias.

Table A-11: Validation

CheckStatusNotes
XSD schema conformanceUnsupportedNo validator in the standard library and no dependencies taken. Use xmllint for this.
parameterTypeRef resolvesSupportedSpanning both metadata sides.
parameterRef in entries resolvesSupported
containerRef in entries resolvesSupported
BaseContainer resolvesSupported
Container inheritance is acyclicSupportedLinear graph colouring. Identity is by pointer, so two systems may each have a Common.
Duplicate names within a SpaceSystemSupportedParameters, types, containers, commands, and sibling systems.
Encoding enumerations are legalSupportedencoding, bitOrder and byteOrder on every parameter type's data encoding are checked against the schema's members, including the arbitrary byte-list order.
argumentTypeRef resolvesUnsupportedArgument types are not modeled.
metaCommandRef resolvesUnsupported

Limits

LimitValueWhy
MaxDocumentSize64 MiBXTCE sets no ceiling. Real databases run to a few megabytes.
MaxDepth100 levelsSpaceSystem is recursive, so deep nesting would recurse during decoding. The check is a token scan that runs before decoding.

Growing the coverage

This matrix is the contract for scope. Anything moving out of Unsupported or Opaque lands with its model structs, a fixture exercising it, and a change to its row here, in the same commit. A status that drifts from the code is worse than a gap that is written down.