While mapping California ETPL training program data to CTDL, I found that ceterms:aggregateData cannot attach to a ceterms:LearningProgram under the explicit domain declarations, though it can attach to the parent class.
ceterms:LearningOpportunityProfile's property list carries 104 properties and ceterms:LearningProgram's carries 103. The one property present on the parent and absent from the subclass is aggregateData. Sampling the shared properties (estimatedDuration, deliveryType, targetLearningResource) shows the convention is explicit enumeration, with each naming both classes, so aggregateData appears to be the single property where LearningProgram was not enumerated.
Observed in the term JSON at https://credreg.net/ctdl/terms/aggregateData/json and https://credreg.net/ctdl/terms/LearningProgram/json, retrieved 2026-08-06.
The practical stake: AggregateDataProfile is where earnings and completion counts live, and state ETPL-derived data is outcome-bearing learning programs. A validator or publisher coding against the per-class list will reject outcome data on a LearningProgram that the parent class permits.
Should LearningProgram (and possibly Course) be added to aggregateData's domainIncludes, as #850 did for degreeConcentrations? If the intended pattern for program outcomes is instead qdata:DataSetProfile referencing the program, a note in the aggregateData usage guidance would save implementers the wrong turn.
Happy to open a PR against the schema files if that is welcome! Thanks y'all.
While mapping California ETPL training program data to CTDL, I found that
ceterms:aggregateDatacannot attach to aceterms:LearningProgramunder the explicit domain declarations, though it can attach to the parent class.ceterms:LearningOpportunityProfile's property list carries 104 properties andceterms:LearningProgram's carries 103. The one property present on the parent and absent from the subclass isaggregateData. Sampling the shared properties (estimatedDuration,deliveryType,targetLearningResource) shows the convention is explicit enumeration, with each naming both classes, soaggregateDataappears to be the single property where LearningProgram was not enumerated.Observed in the term JSON at https://credreg.net/ctdl/terms/aggregateData/json and https://credreg.net/ctdl/terms/LearningProgram/json, retrieved 2026-08-06.
The practical stake:
AggregateDataProfileis where earnings and completion counts live, and state ETPL-derived data is outcome-bearing learning programs. A validator or publisher coding against the per-class list will reject outcome data on a LearningProgram that the parent class permits.Should LearningProgram (and possibly Course) be added to
aggregateData'sdomainIncludes, as #850 did fordegreeConcentrations? If the intended pattern for program outcomes is insteadqdata:DataSetProfilereferencing the program, a note in theaggregateDatausage guidance would save implementers the wrong turn.Happy to open a PR against the schema files if that is welcome! Thanks y'all.