Table of Contents

Class DatasetDiscoveryMetadata

Namespace
EncDotNet.S100.ExchangeSets
Assembly
EncDotNet.S100.ExchangeSets.dll

Discovery metadata for one dataset in an exchange set — an S100_DatasetDiscoveryMetadata record (or a product-specific equivalent such as S102_DatasetDiscoveryMetadata) from the exchange catalogue.

public sealed class DatasetDiscoveryMetadata
Inheritance
DatasetDiscoveryMetadata
Inherited Members

Remarks

S-100 Part 17. Instances are listed in DatasetDiscoveryMetadata. Use RelativePath (or FetchDatasetAsync(DatasetDiscoveryMetadata, CancellationToken)) to locate the file. Element names below are children of the record. Dates are kept verbatim as the XML text and are not parsed.

Properties

BoundingBox

The dataset's geographic extent (boundingBox), or null when absent.

public BoundingBox? BoundingBox { get; init; }

Property Value

BoundingBox

Classification

The security classification (classification): the codeListValue attribute of its code-list child when present (e.g. unclassified), otherwise the element text; null when absent.

public string? Classification { get; init; }

Property Value

string

CompressionFlag

true when compressionFlag is true, i.e. the stored file is ZIP-compressed (S-100 Part 15 §15-5.2); false when absent or any other value.

public bool CompressionFlag { get; init; }

Property Value

bool

true when copyright is true; false when absent or any other value.

public bool Copyright { get; init; }

Property Value

bool

DataCoverages

The dataset's dataCoverage entries, in catalogue order; empty when there are none.

public IReadOnlyList<DataCoverage> DataCoverages { get; init; }

Property Value

IReadOnlyList<DataCoverage>

DataProtection

true when dataProtection is true, i.e. the stored file is encrypted under the Part 15 protection scheme and needs a permit key to read (see DecryptingAssetSource); false when absent or any other value.

public bool DataProtection { get; init; }

Property Value

bool

DefaultLocaleCharacterEncoding

The codeListValue of the lan:MD_CharacterSetCode under the record's defaultLocale, or null when absent.

public string? DefaultLocaleCharacterEncoding { get; init; }

Property Value

string

DefaultLocaleLanguage

The codeListValue of the lan:LanguageCode under the record's defaultLocale, or null when absent.

public string? DefaultLocaleLanguage { get; init; }

Property Value

string

Description

The free-text dataset description (description), or null when absent.

public string? Description { get; init; }

Property Value

string

DigitalSignatureAlgorithm

The parsed digital signature algorithm, derived from DigitalSignatureReference.

public DigitalSignatureAlgorithm DigitalSignatureAlgorithm { get; init; }

Property Value

DigitalSignatureAlgorithm

DigitalSignatureReference

The raw digitalSignatureReference value naming the signature algorithm (e.g. ECDSA, ECDSA-384-SHA2), or null when absent. The parsed form is DigitalSignatureAlgorithm.

public string? DigitalSignatureReference { get; init; }

Property Value

string

DigitalSignatureValue

The digital signature value for this dataset file, if present.

public DigitalSignatureValue? DigitalSignatureValue { get; init; }

Property Value

DigitalSignatureValue

Remarks

S-100 Edition 5.2.1 Part 15 §15-4.2.

DigitalSignatures

All digital signatures declared for this dataset, in catalogue order.

public IReadOnlyList<DigitalSignatureValue> DigitalSignatures { get; init; }

Property Value

IReadOnlyList<DigitalSignatureValue>

Remarks

S-100 Edition 5.2.1 Part 15 §15-8.8.

EditionNumber

The dataset edition number (editionNumber), or null when absent or not an integer.

public int? EditionNumber { get; init; }

Property Value

int?

EncodingFormat

The dataset encoding format (encodingFormat, e.g. ISO/IEC 8211 or HDF5), kept verbatim; null when absent.

public string? EncodingFormat { get; init; }

Property Value

string

ExpectedHash

The declared cryptographic hash for this dataset file, if the catalogue carries one. Used to integrity-check the file independently of any digital signature.

public CryptographicHash? ExpectedHash { get; init; }

Property Value

CryptographicHash

Remarks

S-100 Edition 5.2.1 Part 15 §15-8.10, Table 15-12.

FileName

The dataset file name as declared by fileName. Kept verbatim: it may be a bare name, a full path, or a file:/ URI; see RelativePath and NormalizeFileName(string).

public required string FileName { get; init; }

Property Value

string

FilePath

The directory of the dataset file relative to the exchange set root, as declared by the catalogue's filePath element. May be null when the file lives at the root or the path is folded into FileName.

public string? FilePath { get; init; }

Property Value

string

Remarks

S-100 Edition 5.2.1 Part 17.

IsCancellation

true when Purpose is cancellation (compared ignoring case and surrounding white space).

public bool IsCancellation { get; }

Property Value

bool

IsWithdrawal

true when the record withdraws a dataset instead of delivering one: a cancellation whose file is not an ISO 8211 sequential file (.000, .001, …).

public bool IsWithdrawal { get; }

Property Value

bool

Remarks

Producers of GML and HDF5 products list a withdrawn dataset as a cancellation record and usually ship no file for it (e.g. AMSA's S-124 navigational warnings). An S-101 cancellation is an update file (edition 0) that is applied to its base cell, so it is not a withdrawal.

IssueDate

The dataset issue date (issueDate), kept verbatim (typically YYYY-MM-DD); null when absent.

public string? IssueDate { get; init; }

Property Value

string

MetadataDateStamp

The date the discovery metadata was produced (metadataDateStamp), kept verbatim; null when absent.

public string? MetadataDateStamp { get; init; }

Property Value

string

NavigationPurpose

The navigation purpose (navigationPurpose, e.g. port, transit or overview), kept verbatim; null when absent.

public string? NavigationPurpose { get; init; }

Property Value

string

NotForNavigation

true when notForNavigation is true; false when absent or any other value.

public bool NotForNavigation { get; init; }

Property Value

bool

ProducingAgency

The producing agency name, read from producingAgency/cit:CI_Responsibility/cit:party/cit:CI_Organisation/cit:name; null when absent.

public string? ProducingAgency { get; init; }

Property Value

string

ProductSpecification

The product specification the dataset conforms to (productSpecification), or null when absent.

public ProductSpecification? ProductSpecification { get; init; }

Property Value

ProductSpecification

Purpose

The dataset purpose (purpose, e.g. newDataset, newEdition, update), kept verbatim; null when absent. Spelling varies between producers (e.g. new, new edition), so compare tolerantly.

public string? Purpose { get; init; }

Property Value

string

RelativePath

The source-relative path of the dataset file, combining FilePath and FileName and normalizing separators. This is the path to pass to an IAssetSource. Computed by ResolveRelativePath(string?, string).

public string RelativePath { get; }

Property Value

string

SpecificUsage

The intended usage text from specificUsage/mri:MD_Usage/mri:specificUsage, or null when absent.

public string? SpecificUsage { get; init; }

Property Value

string

UpdateApplicationDate

The update application date (updateApplicationDate), kept verbatim; null when absent.

public string? UpdateApplicationDate { get; init; }

Property Value

string

UpdateNumber

The dataset update number (updateNumber), or null when absent or not an integer.

public int? UpdateNumber { get; init; }

Property Value

int?

Methods

ResolveBoundingBox()

The dataset's geographic extent: its own BoundingBox, or else the union of its DataCoverages' bounding boxes; null when the catalogue gives neither.

public BoundingBox? ResolveBoundingBox()

Returns

BoundingBox

Remarks

Some catalogues declare the box only inside dataCoverage. The union assumes the coverages do not cross the antimeridian.

ResolveMaximumDisplayScale()

The most-permissive finest display-scale denominator across all DataCoverages — the smallest MaximumDisplayScale present — or null when no coverage declares one.

public int? ResolveMaximumDisplayScale()

Returns

int?

Remarks

This is the most zoomed-in edge of the cell's intended scale band (S-100 Part 17; S-101 FC §3.1.1 DataCoverage.maximumDisplayScale). Carried for completeness; the zoom-in cutoff it would drive is deferred to the coverage-clipping work (issue #438 Phase 2) because a naive whole-cell cutoff would leave holes outside finer cells' footprints. An inverted per-coverage pair is normalised first (see FromDeclared(int?, int?)).

ResolveMinimumDisplayScale()

The most-permissive coarsest display-scale denominator across all DataCoverages — the largest MinimumDisplayScale present — or null when no coverage declares one.

public int? ResolveMinimumDisplayScale()

Returns

int?

Remarks

This is the most zoomed-out edge of the cell's intended scale band (S-100 Part 17; S-101 FC §3.1.1 DataCoverage.minimumDisplayScale). The maximum is taken so detail remains visible wherever any coverage region still permits it, matching the S-101 in-file out-of-scale-band resolution. Drives the hole-safe per-cell zoom-out visibility window (issue #438). An inverted per-coverage pair is normalised first (see FromDeclared(int?, int?)).