Expand description
Semantic validation of SigMF metadata and collections.
Validation complements parsing: a document that deserializes successfully
may still violate SigMF rules or use features this crate cannot vouch for.
The entry points are Metadata::validate, Collection::validate, their
validate_with_registry variants, and
Archive::validate_collection_references.
Each returns a ValidationReport listing every ValidationIssue found
and an overall ValidationStatus.
§What is checked
For .sigmf-meta documents (Metadata):
core:versionis the certified version (1.2.6);core:sample_rateis finite, positive, and at most 1012;- indices and counts (
core:num_channels,core:offset,core:sample_start,core:sample_count, …) fit in 263 − 1, andcore:num_channelsis non-zero; core:sha512is 128 hexadecimal characters;- frequencies are finite, annotation frequency edges are paired and ordered, and annotation sample ranges do not overflow;
core:datetimeuses the UTCYYYY-MM-DDTHH:MM:SS[.fraction]Zform;core:geolocationis a GeoJSONPointwith two or three finite coordinates;- captures and annotations are sorted by
core:sample_start, and sample indices are not beforecore:offset; - unrecognized
core:fields, and extension fields whose namespace is not declared incore:extensions; - declared extensions are checked against an optional
ExtensionRegistryfor support, scope, and field names.
For .sigmf-collection documents (Collection): version, recording
names (relative, no .., no backslashes, no empty segments), duplicate
references, metadata digests, unknown core: fields, and extensions.
§Policies
A ValidationPolicy controls how strictly portability concerns are
treated. Under ValidationPolicy::Interoperability an unsupported version,
unknown core: fields, and unregistered required extensions are warnings;
under ValidationPolicy::StrictSupportedVersion they are errors.
§Example
use sigmf::datatype::Datatype;
use sigmf::global::Global;
use sigmf::meta::Metadata;
use sigmf::validation::{ValidationPolicy, ValidationStatus};
use std::str::FromStr;
let mut metadata = Metadata::new(
Global::new("1.2.6", Datatype::from_str("cf32_le")?),
Vec::new(),
Vec::new(),
);
metadata.set_sample_rate(1e6);
let report = metadata.validate(ValidationPolicy::StrictSupportedVersion);
assert_eq!(report.status, ValidationStatus::Passed);
metadata.set_sample_rate(-1.0);
let report = metadata.validate(ValidationPolicy::StrictSupportedVersion);
assert_eq!(report.status, ValidationStatus::Failed);
assert!(report
.issues
.iter()
.any(|issue| issue.code == "sample-rate-out-of-range"));Structs§
- Validation
Issue - A single problem found during validation.
- Validation
Report - The result of validating a SigMF document.
Enums§
- Severity
- Severity of a
ValidationIssue. - Validation
Policy - How strictly validation treats content this implementation cannot fully verify.
- Validation
Status - Overall outcome of a validation run.