Validation Errors
Common DDEX validation errors and how to resolve them.
Common Validation Errors
Missing Required Fields
Error: Required field 'title' is missing
Solution: Ensure all required fields are present
const releaseData = {
id: "R123",
title: "Album Title", // Required
artist: "Artist Name", // Required
release_date: "2023-01-01" // Required for most partners
};
Invalid ISRC Format
Error: Invalid ISRC format: ABC123456789
Solution: Use proper ISRC format (2 country letters + 3 registrant code + 7 digits)
# Correct ISRC format
track_data = {
"isrc": "USRC17607839" # US-RC1-76-07839
}
Territory Code Issues
Error: Invalid territory code: USA
Solution: Use ISO 3166-1 alpha-2 codes
const territoryMapping = {
"USA": "US",
"United Kingdom": "GB",
"Germany": "DE"
};
Date Format Errors
Error: Invalid date format: 01/01/2023
Solution: Use ISO 8601 date format
# Correct date formats
release_data = {
"release_date": "2023-01-01", # Date only
"created_at": "2023-01-01T10:30:00Z" # Full datetime
}
Validation Error Categories
Schema Errors
- Missing required elements
- Invalid element structure
- Namespace issues
- Version incompatibilities
Data Type Errors
- String instead of number
- Invalid date formats
- Boolean format issues
- Array vs single value
Business Rule Violations
- Invalid duration ranges
- Missing ISRCs for commercial releases
- Territory restrictions
- Content rating inconsistencies
Error Resolution Strategies
1. Use Validation Before Building
const builder = new DDEXBuilder();
// Validate first
const validation = await builder.validate(data);
if (!validation.isValid) {
console.log("Validation errors:", validation.errors);
// Fix errors before building
}
const xml = await builder.build(data);
2. Implement Data Sanitization
def sanitize_release_data(data):
"""Clean and validate release data"""
# Ensure required fields
if not data.get('title'):
raise ValueError("Release title is required")
# Clean ISRC format
if 'tracks' in data:
for track in data['tracks']:
if 'isrc' in track and track['isrc']:
track['isrc'] = clean_isrc(track['isrc'])
# Normalize territory codes
if 'territory_codes' in data:
data['territory_codes'] = [
normalize_territory_code(code)
for code in data['territory_codes']
]
return data
3. Validation Patterns
// Common validation patterns
const validators = {
isrc: /^[A-Z]{2}[A-Z0-9]{3}[0-9]{7}$/,
upc: /^[0-9]{12}$/,
territory: /^[A-Z]{2}$/,
duration: (ms: number) => ms >= 1000 && ms <= 3600000
};
Partner-Specific Validation
Spotify Requirements
def validate_for_spotify(release_data):
"""Validate data for Spotify submission"""
errors = []
# Spotify requires UPC for releases
if not release_data.get('upc'):
errors.append("Spotify requires UPC for all releases")
# Track duration requirements
for track in release_data.get('tracks', []):
duration_ms = track.get('duration_ms', 0)
if duration_ms < 30000: # 30 seconds minimum
errors.append(f"Track '{track['title']}' too short for Spotify")
if not track.get('isrc'):
errors.append(f"Track '{track['title']}' missing ISRC")
return errors
Best Practices
- Validate Early: Check data before processing
- Use Partner Presets: Leverage built-in partner validation
- Sanitize Input: Clean data before validation
- Provide Context: Include meaningful error messages
- Log Validation Issues: Track common validation problems
- Document Requirements: Maintain validation requirement docs