oxigdal-metadata 0.1.2

Metadata standards support for OxiGDAL - ISO 19115, FGDC, INSPIRE, DataCite, DCAT
Documentation

oxigdal-metadata

Comprehensive metadata standards support for OxiGDAL.

Overview

This crate provides Pure Rust implementations of multiple geospatial and data catalog metadata standards:

  • ISO 19115 - Geographic Information - Metadata (ISO 19115:2014)
  • FGDC - Federal Geographic Data Committee (FGDC-STD-001-1998)
  • INSPIRE - EU INSPIRE Directive metadata requirements
  • DataCite - DOI metadata for research data (Schema 4.4)
  • DCAT - W3C Data Catalog Vocabulary (v3)

Features

  • Metadata Extraction - Extract metadata from GeoTIFF, NetCDF, HDF5, and STAC
  • Validation - Comprehensive validation with quality scoring
  • Transformation - Convert between different metadata standards
  • Serialization - XML and JSON support
  • Pure Rust - No external dependencies on C/Fortran libraries

Usage

ISO 19115 Metadata

use oxigdal_metadata::iso19115::*;
use oxigdal_metadata::common::BoundingBox;

let metadata = Iso19115Metadata::builder()
    .title("Sentinel-2 Level-2A")
    .abstract_text("Atmospherically corrected satellite imagery")
    .keywords(vec!["satellite", "sentinel-2", "optical"])
    .bbox(BoundingBox::new(-10.0, 5.0, 35.0, 45.0))
    .build()?;

// Export to XML
let xml = metadata.to_xml()?;

// Validate
let validation = validate::validate_iso19115(&metadata)?;
println!("Quality score: {}", validation.quality_score);

FGDC Metadata

use oxigdal_metadata::fgdc::*;

let metadata = FgdcMetadata::builder()
    .title("Digital Elevation Model")
    .abstract_text("30-meter resolution DEM")
    .purpose("Terrain analysis and visualization")
    .keywords("Elevation", vec!["DEM", "elevation", "terrain"])
    .build()?;

DataCite Metadata

use oxigdal_metadata::datacite::*;

let metadata = DataCiteMetadata::builder()
    .identifier("10.5281/zenodo.123456", IdentifierType::Doi)
    .creator(Creator::new("Smith, John"))
    .title("Research Dataset")
    .publisher("Zenodo")
    .publication_year(2024)
    .resource_type(ResourceTypeGeneral::Dataset)
    .build()?;

Metadata Transformation

use oxigdal_metadata::transform;

// Transform ISO 19115 to FGDC
let fgdc = transform::iso19115_to_fgdc(&iso_metadata)?;

// Transform DataCite to ISO 19115
let iso = transform::datacite_to_iso19115(&datacite_metadata)?;

Metadata Extraction

use oxigdal_metadata::extract;

// Extract from file
let metadata = extract::extract_metadata("data.tif")?;

// Convert to ISO 19115
let iso = extract::to_iso19115(&metadata)?;

// Custom extractor
let extractor = extract::MetadataExtractor::new()
    .with_spatial(true)
    .with_temporal(true)
    .with_max_keywords(10);

let metadata = extractor.extract("data.nc")?;

Standards Compliance

ISO 19115:2014

Implements core metadata elements including:

  • Citation and responsible party information
  • Data identification and classification
  • Spatial and temporal extent
  • Distribution and quality information
  • Reference system information

FGDC CSDGM

Implements FGDC-STD-001-1998 including:

  • Identification information
  • Data quality information
  • Spatial data organization
  • Spatial reference information
  • Entity and attribute information
  • Distribution information

INSPIRE

Implements EU INSPIRE Directive requirements:

  • Resource locators
  • Unique resource identifiers
  • Conformity declarations
  • Service metadata
  • All 34 INSPIRE themes (Annex I, II, III)

DataCite

Implements DataCite Metadata Schema 4.4:

  • DOI registration metadata
  • Creator and contributor information
  • Resource type and classification
  • Related identifiers
  • Geo-location support

DCAT

Implements W3C DCAT v3:

  • Dataset and catalog descriptions
  • Distribution information
  • Data services
  • RDF/JSON-LD serialization

Validation

All metadata standards include comprehensive validation:

use oxigdal_metadata::validate;

let report = validate::validate_iso19115(&metadata)?;

if !report.is_valid {
    println!("Errors: {:?}", report.errors);
}

println!("Missing fields: {:?}", report.missing_fields());
println!("Quality score: {}/100", report.quality_score);
println!("Completeness: {}%", report.completeness);

License

Apache-2.0

Copyright

Copyright (c) 2024 COOLJAPAN OU (Team Kitasan)