Not a California state website. An independent project built from public data.
Afterward · CA

California training programs, and what happened to the people who took them

Español (inicio)

Back to search

The CTDL export, and what it does and does not carry

This project publishes California's training programs as CTDL, the vocabulary Credential Engine maintains for describing credentials and learning opportunities. This page is the export's own account of itself: which classes and properties it fills in, what the source record says that it drops, and what a separate validator found when it was pointed at the result.

A mapping is only worth anything if somebody can check it. So the counts here are produced by the export at the moment it runs, the omissions are counted the same way as the coverage, and the validator's findings are published whichever way they came out.

What this is not

Note: this export describes the 2026-08-07 snapshot, and the rest of this site is currently serving 2026-09-18. The figures below describe the export, not the pages around it.

On this page

What the export contains

One entity per training program, one per distinct provider name as filed, and one statistics profile for each program that reports at least one outcome. A program that reported nothing gets no statistics profile at all: an empty one would read as "measured, and empty".

CTDL classEntities
ceterms:LearningProgram3,266
ceterms:CredentialOrganization584
qdata:DataSetProfile2,057

Counted from the export of the 2026-08-07 dataset snapshot, at the moment that export ran.

Which properties are filled in

Every property below is emitted only where the source asserted something. A blank is a blank: no placeholder, no zero, and nothing inferred from a neighboring field. The order is the export's own, not best-first.

PropertyPrograms carrying itShare
ceterms:name3,266100%
ceterms:description3,266100%
ceterms:subjectWebpage1,65451%
ceterms:offeredBy3,266100%
ceterms:occupationType3,266100%
ceterms:estimatedCost3,265100%
qdata:relevantDataSet2,05763%

Counted from the export of the 2026-08-07 dataset snapshot, at the moment that export ran.

Which outcome measures are projected

Each reported measure becomes one metric and one observation inside the program's statistics profile. The share is against the programs that have a statistics profile at all, not against every program: a measure missing because a program reported nothing is a different fact from a measure missing from a program that reported something else.

MeasureObservationsOf programs with any outcome
Median earnings in the second quarter after leaving1,38467%
Credentials earned1,80088%
Employed two quarters after leaving (count)1,76686%
Completion rate2,047100%
Employment rate two quarters after leaving1,76086%

Counted from the export of the 2026-08-07 dataset snapshot, at the moment that export ran.

What the export does not carry

The source record says more than this export projects. Counting only what was emitted would describe a projection as though it were the whole record, so the dropped fields are counted too, with the CTDL term that would have carried each one where such a term exists.

Where a CTDL term is named, the vocabulary has somewhere to put this and the export does not use it. That is a gap in the export, not a limit of CTDL, and it is stated that way rather than left for a reader to work out from an absence.

What the source saysPrograms reporting itCTDL term that would carry it
The CIP code for the field of study3,266ceterms:instructionalProgramType
Online, in person, or both3,266ceterms:learningDeliveryType
How long the program takes3,266ceterms:estimatedDuration
Where the program is offered3,266ceterms:availableAt
What kind of provider it is3,266ceterms:agentSectorType
What it costs a student funded under WIOA3,266ceterms:CostProfile with ceterms:directCostType
The state's ten-year outlook for the occupation3,250None used
Four of the nine reported outcome measures2,099qdata:Metric / qdata:Observation

Counted from the export of the 2026-08-07 dataset snapshot, at the moment that export ran.

Separately, 1 program(s) report a cost total that a suppressed component makes a floor rather than a price. CTDL's price property has no way to say "at least", so no cost is published for those rather than publishing a floor as though it were the fee.

What a separate validator found

The export checks itself, but every one of those checks was written by the same hand as the export, against the same reading of the same schema — which is the reading a mistake would survive. So it is also run through ctdl-validate 0.1.0, a separate tool with its own copies of Credential Engine's schema and a citation for every rule it applies. It has the same author as this site, so it is a second reading of the schema and not an outside review. It makes no network request and submits nothing anywhere.

5,907 entities were checked.

SeverityFindings
Error (blocking)0
Warning5,907
Information0
Unverifiable0

Counted from the export of the 2026-08-07 dataset snapshot, at the moment that export ran.

No errors, and one warning, on every entity in the graph. The warning is the tension this export already had on the record: the published grammar says an identifier is a random UUID, and an export that has to produce the same identifiers every time cannot use a random one. Nothing else came back — no property used on a class that does not declare it, no reference pointing at nothing, no relationship stated in one direction and contradicted in the other, no invented term.

FindingSeverityTimesEntitiesState
CTID_NOT_UUIDV4Warning5,9075,907Accepted, with a reason

Counted from the export of the 2026-08-07 dataset snapshot, at the moment that export ran.

An accepted finding is a decision on the record, not a filter: it stays counted here and in the machine-readable statement. Any finding whose code has not been reasoned about fails the export instead of appearing quietly among the others.

What the validator could and could not judge

A clean result is only as wide as the vocabulary the checker holds. This one drives its structural checks from the core schema documents it carries, so it was in a position to judge 4 of the 7 classes and 17 of the 24 properties this export emits.

The rest are the outcome-statistics layer, which publishes its own schema document that the validator does not carry, plus one currency property. A term a checker has never heard of is one it declines to judge, not one it approves.

Classes not judged
qdata:DataSetProfile, qdata:Metric, qdata:Observation
Properties not judged
qdata:hasMetric, qdata:hasObservation, qdata:isObservationOf, qdata:median, qdata:metricType, qdata:relevantDataSetFor, schema:currency

Those terms were checked by the export itself against the statistics schema, fetched and recorded in this project's provenance. That is a weaker guarantee than an outside opinion, and it is named as one.

What each mapping rests on

Every class and property here was chosen against a published definition rather than from memory, and the export refuses at build time to emit a term the vocabulary does not define. These are the primary definitions, not summaries of them.

Credential Engine publishes these in English only, so they are marked as English on this page.

Read the export, including the reason recorded beside every mapping

Getting the export, and rebuilding it

The graph is about 17 MB of JSON-LD, which is too large to commit and too specific to one snapshot to serve as though it were current. It is built on demand and packaged with a checksum, and the two statements this page renders from are published beside it.

The statements this page is built from, as published:

To rebuild the graph from source: clone the repository, run the pipeline to fetch the public federal and state data, then run the export and the validation. Both are single commands and both are deterministic — the same dataset always produces byte-identical output, so a rebuild can be compared against a published one directly.

Packaged exports are published as releases: https://github.com/ChelseaKR/afterward/releases

Read the provenance file

Corrections

If a mapping here is wrong, or a property is being used in a way the schema does not intend, that is worth an issue. This is a demonstration and the point of it is to be checkable; a correction from somebody who works on this vocabulary is the most useful thing this page could produce.

Open an issue about a figure on this site

How complete California's training outcomes data is