Skip to content

OpenDXA/opendxa-schema

Repository files navigation

OpenDXA Schema

Vendor-agnostic, normalized schema for DXA bone density and body composition exams.

Overview

OpenDXA Schema provides a standardized JSON Schema for representing DXA (Dual-energy X-ray Absorptiometry) scan data across different vendors (Hologic, GE Lunar, Norland). It enables interoperability between systems that process bone density and body composition measurements.

Files

File Description
opendxa-core-v0.1.schema.json Core JSON Schema defining the structure for DXA exam data
opendxa-site-registry-v0.1.json Registry of bone density measurement sites (ROIs)
opendxa-region-registry-v0.1.json Registry of body composition regions
opendxa-site-registry.schema.json Meta-schema for validating site registry files
opendxa-region-registry.schema.json Meta-schema for validating region registry files

Schema Structure

The core schema defines:

  • patient - Patient demographics (ID, sex, date of birth, age)
  • exam - Exam metadata (ID, date, indication, facility, operator)
  • device - Scanner information (manufacturer, model, software version)
  • bone_density - BMD measurements including:
    • Sites (lumbar spine, hip, femoral neck, forearm, whole body)
    • T-scores and Z-scores
    • WHO classification (normal, osteopenia, osteoporosis)
    • FRAX fracture risk assessment
  • body_composition - Body composition data including:
    • Total body metrics (fat mass, lean mass, BMC, percent body fat)
    • Regional measurements (appendicular, trunk, android, gynoid, visceral)
    • Derived metrics (android/gynoid ratio, appendicular lean mass index)
  • quality_control - Scan quality indicators
  • source - Data provenance (ingestion method, parser version)

Site Registry

The site registry defines canonical bone density measurement locations:

Lumbar Spine

  • Individual vertebrae: L1, L2, L3, L4
  • Composites: L1-L4 (primary diagnostic), L2-L4

Hip

  • Femoral neck (left, right, worse)
  • Total hip (left, right, worse)
  • Trochanter (left, right)
  • Ward's area (deprecated)

Forearm

  • 1/3 radius (non-dominant preferred)
  • Total forearm

Whole Body

  • Whole body
  • Total body less head (TBLH) - preferred for pediatric

Region Registry

The region registry defines body composition measurement areas:

Appendicular

  • Arms (left, right, total)
  • Legs (left, right, total)
  • Appendicular total (for sarcopenia assessment)

Trunk

  • Trunk, trunk less head
  • Pelvis, ribs

Central Adiposity

  • Android region
  • Gynoid region
  • Visceral fat

Total Body

  • Total body
  • Total body less head (TBLH)

Usage

Validate DXA data against the schema:

import json
import jsonschema

with open("opendxa-core-v0.1.schema.json") as f:
    schema = json.load(f)

with open("my-dxa-exam.json") as f:
    data = json.load(f)

jsonschema.validate(data, schema)

Validate registry files against their meta-schemas:

import json
import jsonschema

# Validate site registry
with open("opendxa-site-registry.schema.json") as f:
    site_schema = json.load(f)
with open("opendxa-site-registry-v0.1.json") as f:
    site_registry = json.load(f)
jsonschema.validate(site_registry, site_schema)

# Validate region registry
with open("opendxa-region-registry.schema.json") as f:
    region_schema = json.load(f)
with open("opendxa-region-registry-v0.1.json") as f:
    region_registry = json.load(f)
jsonschema.validate(region_registry, region_schema)

Versioning

Schema versions follow v{major}.{minor} format:

  • Major: Breaking changes to required fields or structure
  • Minor: Additions, deprecations, or non-breaking refinements

Current version: v0.1

References

License

MIT License