Skip to main content

DDEX Builder API Reference

Complete API documentation for the DDEX Builder across all supported languages with deterministic XML generation.

Overview

The DDEX Builder provides deterministic XML generation with DB-C14N/1.0 canonicalization, ensuring identical output for identical input data. It supports industry presets, streaming for large catalogs, and comprehensive validation.

Key Features

  • Deterministic Output: Guaranteed identical XML for identical input data
  • DB-C14N/1.0 Canonicalization: Industry-standard XML canonicalization
  • Industry Presets: Pre-configured settings for major platforms (Spotify, Apple Music, YouTube Music)
  • Streaming Support: Memory-efficient generation of large catalogs
  • Validation: Comprehensive validation with detailed error reporting
  • Multi-Version Support: ERN 3.8.2, 4.2, and 4.3 output formats

Language Bindings

Quick Navigation

ComponentDescription
DdexBuilderMain builder class for creating DDEX XML
StreamingDdexBuilderStreaming builder for large catalogs
BuildRequestInput data structure for building
ValidationResultValidation results and errors
PresetsPlatform-specific configuration presets

Performance Characteristics

Catalog SizeBuild TimeMemory UsageOutput Size
100 releases<50ms<10MB~500KB
1K releases<200ms<50MB~5MB
10K releases<2s<200MB~50MB
100K releases*<20s<500MB~500MB

*Using streaming builder for large catalogs

Common Usage Patterns

import { DdexBuilder } from 'ddex-builder';

// Basic building
const builder = new DdexBuilder();
builder.applyPreset('spotify');
builder.addRelease(releaseData);
const xml = await builder.build();

// Streaming large catalogs
const streamBuilder = new StreamingDdexBuilder();
streamBuilder.startMessage(header, '4.3');
// Add releases...
const stats = streamBuilder.finishMessage();
const xml = streamBuilder.getXml();
from ddex_builder import DdexBuilder

# Basic building
builder = DdexBuilder()
builder.apply_preset('spotify')
builder.add_release(release_data)
xml = await builder.build()

# Validation
result = await builder.validate()
if not result.is_valid:
print("Validation errors:", result.errors)
use ddex_builder::{DDEXBuilder, BuildRequest};
use ddex_core::models::*;

// Deterministic building with presets
let mut builder = DDEXBuilder::new();
builder.apply_preset("spotify_audio_43")?;

let request = BuildRequest {
message_header: MessageHeader { /* ... */ },
releases: vec![Release { /* ... */ }],
..Default::default()
};

// Generate deterministic XML
let result = builder.build_detailed(&request)?;
println!("Generated XML: {} bytes", result.xml.len());
println!("Canonical hash: {:?}", result.canonical_hash);

Deterministic Guarantees

The DDEX Builder ensures:

  1. Byte-Perfect Reproducibility: Identical input → identical output
  2. Stable Ordering: Consistent element and attribute ordering
  3. Content-Based IDs: Deterministic ID generation based on content
  4. Canonical XML: DB-C14N/1.0 compliant output format

Industry Presets

PlatformPreset NameDescription
SpotifyspotifyOptimized for Spotify ingestion
Apple Musicapple_musiciTunes/Apple Music requirements
YouTube Musicyoutube_musicYouTube Content ID compliance
Amazon Musicamazon_musicAmazon DSP specifications
UniversaluniversalGeneric streaming platform preset

Validation Levels

  • Structure Validation: XML schema compliance
  • Business Rules: Platform-specific requirements
  • Reference Integrity: Valid ID references and relationships
  • Format Compliance: Date formats, identifiers, and codes