NI Metadata Store
The NI Metadata Store supports the digital thread weaving together measurement results with metadata that describes who, what, where, and how tests are performed. This creates a complete context around your test data, enabling traceability and analysis across your entire test ecosystem.
Based on: ``metadata_store.proto` <https://github.com/ni/ni-apis/blob/main/ni/measurements/metadata/v1/metadata_store.proto>`_
Operator
An Operator represents a person who performs tests or operates test equipment. This captures the human element in your test process.
Fields:
id(string) - The id of the operatorname(string) - The name of the operatorrole(string) - The role of the operator (e.g., “Test Engineer”, “Lab Technician”)link(string) - URI to resource describing the operatorextensions(dict) - Custom key-value pairs for additional metadataschema_id(string) - ID of the schema for extension validation
Real-world examples:
“Sarah Johnson” - Test Engineer who runs daily production tests
“Mike Chen” - Senior Technician who performs calibrations
“Alex Smith” - Lab Assistant who conducts R&D validation tests
Each operator has a role (e.g., “Test Engineer”, “Lab Technician”, “Quality Inspector”) that helps categorize their responsibilities and skill level.
Test Station
A Test Station represents a physical location or setup where testing is performed. This could be a bench, rack, or dedicated test system.
Fields:
id(string) - The id of the test stationtest_station_name(string) - The name of the test stationasset_identifier(string) - For tracking and inventory purposeslink(string) - URI to resource describing the test stationextensions(dict) - Custom key-value pairs for additional metadataschema_id(string) - ID of the schema for extension validation
Real-world examples:
“Station_A1” - Production line station #1 for power supply testing
“Bench_RF_Lab” - RF laboratory bench with spectrum analyzers
“Burn_In_Rack_3” - Environmental stress testing chamber
“Cal_Lab_Station” - Precision calibration workstation with reference standards
Test stations help track where tests were performed, enabling analysis of station-specific issues or performance variations.
UUT (Unit Under Test)
A UUT represents a product definition or model being tested. This is the “what” - the type of device or product under test.
Fields:
id(string) - The id of the UUTmodel_name(string) - The name of the UUT modelfamily(string) - The UUT family or categorymanufacturers(list of strings) - List of manufacturers of the UUTpart_number(string) - The part number of the UUTlink(string) - URI to resource describing the UUTextensions(dict) - Custom key-value pairs for additional metadataschema_id(string) - ID of the schema for extension validation
Real-world examples:
Model: “PowerSupply v2.1”, Family: “Power” - A specific power supply product
Model: “Audio Amplifier v1.3”, Family: “Audio” - An audio amplifier design
Model: “RF Transceiver Gen3”, Family: “Communications” - A radio frequency module
Model: “Motor Controller v4.0”, Family: “Industrial” - An industrial motor controller
UUTs represent the product designs, while UUT instances represent individual physical devices.
UUT Instance
A UUT Instance represents an individual physical device with a unique serial number. This is a specific unit of the UUT model being tested.
Fields:
id(string) - The id of the UUT instanceuut_id(string) - The ID of the UUT associated with this instance (GUID or alias)serial_number(string) - The serial number of the UUT instancemanufacture_date(string) - When the instance was manufacturedfirmware_version(string) - Version of the firmware on the UUT instancehardware_version(string) - Hardware version of the UUT instancelink(string) - URI to resource describing the UUT instanceextensions(dict) - Custom key-value pairs for additional metadataschema_id(string) - ID of the schema for extension validation
Real-world examples:
UUT: “PowerSupply v2.1”, Serial: “PS-2024-001”, FW: “1.2.3”, HW: “Rev C” - First power supply unit built in 2024
UUT: “Audio Amplifier v1.3”, Serial: “AMP-2024-456”, FW: “2.0.1”, HW: “Rev B” - Specific amplifier with serial number
UUT: “RF Transceiver Gen3”, Serial: “RF-X7G9-2024-789”, FW: “3.1.0”, HW: “Rev A” - Individual transceiver unit
Each UUT instance tracks the test history for that specific physical device throughout its lifecycle.
Hardware Item
A Hardware Item represents test equipment, instruments, or tools used during testing. This captures what physical equipment was involved in generating the measurements.
Fields:
id(string) - The id of the hardware itemmanufacturer(string) - The vendor of the hardware itemmodel(string) - The name/model number of the hardware itemserial_number(string) - Unique serial number for trackingpart_number(string) - Manufacturer’s part numberasset_identifier(string) - For tracking and inventory purposescalibration_due_date(string) - When calibration expireslink(string) - URI to resource describing the hardware itemextensions(dict) - Custom key-value pairs for additional metadataschema_id(string) - ID of the schema for extension validation
Real-world examples:
Manufacturer: “NI”, Model: “PXIe-4081”, Serial: “DMM001” - Digital multimeter
Manufacturer: “Keysight”, Model: “E5071C”, Serial: “VNA789” - Vector network analyzer
Manufacturer: “Tektronix”, Model: “MSO64”, Serial: “SCOPE456” - Mixed-signal oscilloscope
Manufacturer: “Fluke”, Model: “8588A”, Serial: “REF123” - Reference multimeter
Hardware items include calibration information and help ensure measurement traceability.
Software Item
A Software Item represents software tools, environments, or versions used during testing. This captures the software context that could affect test results.
Fields:
id(string) - The id of the software itemproduct(string) - The software product name (letters, numbers, spaces, hyphens, underscores, parentheses, periods; must begin and end with letter or number)version(string) - The version of the software itemlink(string) - URI to resource describing the software itemextensions(dict) - Custom key-value pairs for additional metadataschema_id(string) - ID of the schema for extension validation
Real-world examples:
Product: “Python”, Version: “3.11.5” - Programming language version
Product: “NI-DAQmx”, Version: “23.3.0” - Data acquisition driver
Product: “TestStand”, Version: “2023 Q3” - Test executive software
Product: “LabVIEW”, Version: “2023 Q3” - Measurement software environment
Product: “Custom Test App”, Version: “v2.1.4” - Company-specific test application
Software items help identify if software changes affected test results or reproducibility.
Test Description
A Test Description represents a defined test procedure or specification for testing a particular UUT. This defines what tests should be performed.
Fields:
id(string) - The id of the test descriptionuut_id(string) - The ID of the UUT this test is designed fortest_description_name(string) - Name of the test descriptionlink(string) - URI to resource describing the test descriptionextensions(dict) - Custom key-value pairs for additional metadataschema_id(string) - ID of the schema for extension validation
Real-world examples:
“Power Supply Validation Suite” - Complete test suite for power supply products
“RF Compliance Test Set” - FCC/CE compliance tests for RF devices
“Functional Verification Protocol” - Basic functionality tests for motor controllers
“Performance Characterization Tests” - Detailed performance measurements for amplifiers
Test
A Test represents an individual test procedure or method. This is more granular than a test description and describes specific test steps.
Fields:
id(string) - The id of the testtest_name(string) - Name of the testdescription(string) - Explanation of what the test doeslink(string) - URI to resource describing the testextensions(dict) - Custom key-value pairs for additional metadataschema_id(string) - ID of the schema for extension validation
Real-world examples:
“DC Voltage Accuracy Check” - Measures voltage accuracy across specified range
“Frequency Response Sweep” - Tests frequency response from 20Hz to 20kHz
“Power-On Self Test” - Automated built-in test executed at startup
“Load Regulation Test” - Verifies output stability under varying loads
Test Adapter
A Test Adapter represents a test fixture, mechanical setup, or interface used to hold, connect, or interface the UUT with the test system.
Fields:
id(string) - The id of the test adaptername(string) - Name or label for the adaptermanufacturer(string) - Vendor of the adaptermodel(string) - Model number or nameserial_number(string) - Unique serial numberpart_number(string) - Manufacturer’s part numberasset_identifier(string) - For tracking and inventory purposescalibration_due_date(string) - When calibration expireslink(string) - URI to resource describing the test adapterextensions(dict) - Custom key-value pairs for additional metadataschema_id(string) - ID of the schema for extension validation
Real-world examples:
“PCB Test Fixture v2.1” - Custom fixture for holding circuit boards during test
“RF Connector Adapter Kit” - Set of adapters for different RF connector types
“Thermal Test Chamber Fixture” - Mechanical setup for environmental testing
“High Current Test Jig” - Specialized fixture for high-power testing
Extension Schema
An Extension Schema defines the structure and validation rules for custom extension fields that can be added to any metadata entity.
Fields:
id(string) - Unique identifier for the schemaschema(string) - The schema definition itself (JSON Schema format)
Real-world examples:
Custom fields for tracking calibration certificates
Additional properties for regulatory compliance data
Company-specific asset management fields
Industry-specific metadata requirements
Alias
An Alias provides a human-readable name that points to any metadata entity. This creates a layer of abstraction that makes test code more maintainable and readable.
Fields:
name(string) - The registered alias name for the metadata instancetarget_type(enum) - The type of the aliased metadata instance (seeAliasTargetTypeenum)target_id(string) - The unique identifier for the aliased metadata instance
Supported Target Types:
UUT_INSTANCE- Points to a UUT InstanceUUT- Points to a UUTHARDWARE_ITEM- Points to a Hardware ItemSOFTWARE_ITEM- Points to a Software ItemOPERATOR- Points to an OperatorTEST_DESCRIPTION- Points to a Test DescriptionTEST- Points to a TestTEST_STATION- Points to a Test StationTEST_ADAPTER- Points to a Test Adapter
Real-world examples:
“Primary_DMM” → points to Hardware Item “NI PXIe-4081 S/N DMM001”
“Lead_Test_Engineer” → points to Operator “Sarah Johnson”
“Production_Station_1” → points to Test Station “TestStation_A1”
“Current_PowerSupply_Design” → points to UUT “PowerSupply v2.1”
Aliases allow you to change which specific equipment or person is referenced without changing test code.
The Metadata Store Hierarchy
Complete Test Execution Context:
├── WHO: Operator "Alex Smith" (Test Engineer)
├── WHERE: Test Station "Station_A1" (Production Line)
├── WHAT: UUT Instance "PS-2024-001" (PowerSupply v2.1)
│ └── Based on UUT "PowerSupply v2.1" (Family: Power)
├── HOW: Test Setup
│ ├── Test Description "Power Supply Validation Suite"
│ ├── Individual Tests
│ │ ├── "DC Voltage Accuracy Check"
│ │ └── "Load Regulation Test"
│ ├── Hardware Items
│ │ ├── "NI PXIe-4081" (Digital Multimeter)
│ │ └── "NI PXIe-5171" (Oscilloscope)
│ └── Test Adapters
│ └── "PCB Test Fixture v2.1"
└── ENVIRONMENT: Software Items
├── "Python 3.11.5"
├── "NI-DAQmx 23.3.0"
└── "Custom Test Suite v1.2"
Aliases for Easy Reference:
├── "Primary_Operator" → Alex Smith
├── "Main_Station" → Station_A1
├── "Test_DMM" → NI PXIe-4081
├── "Current_UUT_Design" → PowerSupply v2.1
└── "Standard_Test_Suite" → Power Supply Validation Suite
Extension Schemas:
├── "Calibration_Certificate_Schema" → Custom calibration tracking
└── "Asset_Management_Schema" → Company inventory fields
Custom Schemas and Extensions
Every metadata entity in the NI Metadata Store supports extensions - custom key-value pairs that allow you to add organization-specific, industry-specific, or regulatory-specific metadata beyond the standard fields.
How Extensions Work
Extensions are a dictionary of custom fields that can be attached to any metadata entity:
# Example: Hardware Item with custom extensions
hardware_item = HardwareItem(
manufacturer="NI",
model="PXIe-5171",
serial_number="SCOPE001",
extensions={
"bandwidth": "1 GHz",
"manufacture_date": "2024-03-15",
"calibration_certificate": "CAL-2024-001234",
"asset_tag": "ASSET-SCOPE-789"
}
)
Schema Validation
To ensure consistency and enforce requirements for extension fields, you can register a schema that defines:
Which extension fields are required vs optional
Data types and validation rules
Field descriptions and constraints
Schema Registration Process:
Define the schema in JSON format (like the example below)
Register the schema with the metadata store
Get a schema_id returned from registration
Reference the schema_id when creating metadata entities
Schema Example
Here’s an example schema for oscilloscope hardware items:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://example.com/scope.schema.json",
"title": "Oscilloscope Hardware Item Schema",
"description": "Schema for oscilloscope hardware item extensions",
"type": "object",
"properties": {
"hardware_item": {
"type": "object",
"properties": {
"bandwidth": {
"type": "string",
"description": "Oscilloscope bandwidth specification"
},
"manufacture_date": {
"type": "string",
"format": "date",
"description": "Date the hardware was manufactured"
},
"calibration_cert": {
"type": "string",
"pattern": "^CAL-\\d{4}-\\d{6}$",
"description": "Calibration certificate number"
},
"asset_tag": {
"type": "string",
"description": "Company asset tag identifier"
}
},
"required": ["bandwidth", "manufacture_date"]
}
}
}
Schema Structure:
Required fields are listed in the
requiredarray - must be provided when creating the entityOptional fields are defined in
propertiesbut not listed inrequired- can be omittedDescriptions provide documentation for each field
Using Schemas in Practice
# 1. Register the schema
schema_content = metadata_store_client.register_schema_from_file("scope_schema.json") # JSON format
schema_id = metadata_store_client.register_schema(schema_content)
# 2. Create hardware item with schema validation
hardware_item = HardwareItem(
manufacturer="NI",
model="PXIe-5171",
serial_number="SCOPE001",
schema_id=schema_id, # Links to registered schema
extensions={
"bandwidth": "1 GHz", # Required by schema
"manufacture_date": "2024-03-15", # Required by schema
"asset_tag": "SCOPE-789" # Optional field
# Missing calibration_cert is OK (not in required array)
}
)
# 3. The schema validates extensions during creation
metadata_store_client.create_hardware_item(hardware_item)
Benefits of Schema Validation
Consistency - Ensures all entities of the same type have required fields
Data Quality - Prevents missing critical information
Documentation - Schema serves as documentation of expected fields
Evolution - Schemas can be versioned and updated over time
Integration - External systems know what fields to expect
Schema Inheritance
When creating metadata entities within a test result context, schema inheritance applies:
If the test result has a
schema_id, child entities inherit that schemaChild entities can override with their own
schema_idif neededThis allows consistent validation across entire test sessions
Example:
# Test result with schema
test_result = TestResult(
schema_id="company-standard-v1.2", # All child entities inherit this
uut_instance_id=uut_instance_id,
# ...
)
# Hardware item inherits test result's schema automatically
hardware_item = HardwareItem(
manufacturer="NI",
model="PXIe-4081",
# schema_id automatically inherited from test_result
extensions={
# Fields validated against inherited schema
}
)
Benefits of the Digital Thread
Traceability: Track which operator, equipment, and software were used for any measurement
Root Cause Analysis: Identify patterns related to specific operators, stations, or equipment
Compliance: Meet regulatory requirements for test documentation and traceability
Quality Control: Monitor operator performance and equipment calibration status
Reproducibility: Recreate test conditions by knowing the complete test context
Equipment Management: Track usage and performance of test equipment over time
This comprehensive metadata foundation enables powerful queries such as:
“Show me all failed tests from Station A1 last month”
“Find measurements taken with equipment due for calibration”
“Compare results between different operators testing the same UUT model”
“Identify which test adapter was used for all successful RF tests”
“Track performance trends for specific UUT instances over time”
“Find all tests using outdated software versions”
“Correlate test failures with specific test descriptions or procedures”
Extensibility
All metadata entities support custom extensions through:
Extension fields - Custom key-value pairs for entity-specific data
Extension schemas - Formal validation rules for custom fields
Schema inheritance - Extension schemas can be shared across test results
This allows organizations to add company-specific, industry-specific, or regulatory-specific metadata while maintaining compatibility with the core Metadata Store schemas.