Install any skill in seconds. Free to start, no credit card required.
Get Started Free →datopian/portaljs-define-schema
Define a dataset's metadata profile — infer a Frictionless Table Schema from its data, add Data Package metadata (license, sources, keywords), and write it into datasets.json so the showcase renders a typed field table. Extend or customize via the L0-L3 profile ladder.
Passed 17 of 23 test cases with the skill, and 4 of 23 without it.
and 13 more in the full report
13 fixed4 passed either way6 still failing0 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 13 test cases the skill fixed. Same model, same prompt, with and without the skill.
When defining a standard tabular schema for `population-stats` under Level L0 without custom validation rules, which profile identifier should be set in `datasets.json`?
| Checked | Without skill | With skill |
|---|---|---|
| Sets the profile field in datasets.json to frictionless-tabular. | Missed | Passed |
The instructions your model reads when the skill loads.
Define a dataset's metadata profile — the authoring skill for the metadata-profile
contract (lib/metadata). Where portaljs-add-dataset registers that a dataset exists,
this skill describes what its data means: infer a Frictionless Table Schema (fields,
types, constraints) from sampled data, add the Data Package fields a catalog surfaces
(title, licenses, sources, keywords), and write them onto the dataset's entry in
datasets.json. The showcase at /@<namespace>/<slug> then renders a typed field table
instead of a bare preview. The model is Frictionless-native; DCAT is a serialization layer
built on top later, not authored here.
The skill runs on a profile ladder — reach for higher levels only when needed:
| Level | What it is | When |
|---|---|---|
| L0 | Default frictionless-tabular profile; declare schema + metadata. | Default. Standard tabular CSV/TSV. |
| L1 | L0 plus extra descriptive package fields. | Extra metadata, standard validation is fine. |
| L2 | Fully custom profile (own schema template + validate()). | A dataset type needing custom validation rules. |
| L3 | Multiple registered profiles, resolved per dataset. | A portal mixing dataset types. |
The skill is interactive and never dead-ends: if input is thin it interviews in short rounds, infers defaults from the data, echoes the schema for confirmation, and accepts "use defaults" to proceed with the inferred schema as-is.
lib/metadata/types.ts,
pages/[owner]/[slug].tsx); see portaljs-new-portal.datasets.json (see portaljs-add-dataset).PORTAL_DIR/public/data/. JSON/GeoJSON datasets get package metadata only — no fields.tsx optional, used for the schema-validation check.The canonical, full step-by-step workflow is
.claude/commands/portaljs-define-schema.md —
the single source of truth. Read and follow it when executing. Summary:
test cases passed, vs 4 / 23 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.