本文へ移動
cccskills
無料GitHub で公開

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. Use when a registered dataset needs field types, constraints, or catalog metadata before publishing.

インストール方法を見る

含まれるファイル(2)

  • SKILL.md6.6 KB
  • references/reference.md3.6 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

PortalJS — Define Schema

Overview

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:

LevelWhat it isWhen
L0Default frictionless-tabular profile; declare schema + metadata.Default. Standard tabular CSV/TSV.
L1L0 plus extra descriptive package fields.Extra metadata, standard validation is fine.
L2Fully custom profile (own schema template + validate()).A dataset type needing custom validation rules.
L3Multiple 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.

Prerequisites

  • A scaffolded PortalJS portal with the metadata contract (lib/metadata/types.ts, pages/[owner]/[slug].tsx); see portaljs-new-portal.
  • The target dataset already registered in datasets.json (see portaljs-add-dataset).
  • For tabular schema inference, the dataset's CSV/TSV file present under PORTAL_DIR/public/data/. JSON/GeoJSON datasets get package metadata only — no fields.
  • Node 18+; tsx optional, used for the schema-validation check.

Instructions

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:

  1. Gather PORTAL_DIR, DATASET (slug or namespace/slug), and LEVEL (default L0) from input; if DATASET is missing, list the portal's slugs and ask.
  2. Validate the portal has the metadata contract (datasets.json, lib/metadata/types.ts, the showcase route); proceed anyway if lib/metadata/ predates the contract.
  3. For tabular datasets, sample the header and ~50 rows from public/data/<file> and infer each field's type, constraints (required, unique, pattern), and a primary key.
  4. Echo the inferred schema as a table for confirmation; offer to go beyond L0 only if warranted.
  5. Ask for optional Data Package metadata: license, source(s), keywords, version.
  6. Write the schema and metadata onto the dataset's entry in datasets.json in place, preserving all other fields; for L2/L3, scaffold and register a custom profile module.
  7. Optionally validate the schema against the data's rows via the profile's validate().
  8. Verify with npx next build; fix malformed JSON or an invalid FieldType before reporting success.
  9. Report the profile, fields, metadata set, and the showcase URL.

Output

  • Modified: datasets.json (target entry gains profile, schema, licenses, sources, keywords, version — unset fields omitted).
  • Created (L2/L3 only): lib/metadata/<profile-id>.ts; lib/metadata/registry.ts updated with a registerProfile(...) call.
  • Verified: npx next build succeeds.
  • Result: /@<namespace>/<slug> renders a typed field table in place of a bare preview.

Error Handling

SymptomCauseFix
Dataset not found in datasets.jsonWrong slug or missing namespace/ prefixList available slugs and re-prompt.
lib/metadata/ missingPortal predates the metadata-profile contractProceed anyway — schema fields are optional and ignored by older showcases.
No fields schema producedDataset is JSON/GeoJSON, not tabularExpected — capture Data Package metadata only.
Validation reports type errorsSampled values don't coerce to the inferred typeRelax the type or drop the offending required/pattern constraint.
next build fails on datasets.jsonStray comma or a type outside FieldTypeFix the JSON/type and rebuild before reporting success.

Examples

Example 1 — Default L0 schema for a CSV dataset

/portaljs-define-schema population-2022

Infers fields (e.g. country: string, population: integer), drafts titles, asks for a license and source, and writes the schema under the default frictionless-tabular profile.

Example 2 — Metadata only for a GeoJSON dataset

/portaljs-define-schema neighborhoods-geo

GeoJSON has no tabular fields; the skill captures license, sources, and keywords onto the entry and skips schema inference.

Example 3 — Custom L2 profile with its own validation

/portaljs-define-schema co2-emissions level=L2

Scaffolds lib/metadata/co2-emissions-profile.ts with a custom validate(), registers it in lib/metadata/registry.ts, and sets "profile": "co2-emissions-profile" on the entry.

Resources

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Migrate a whole ArcGIS Hub site into a PortalJS Arc portal end-to-end. Harvests the Hub /data.json (DCAT-US) inventory, exports every FeatureService layer through the ArcGIS REST query API with resultOffset paging, converts each to the serverless dual tier (PMTiles render + GeoParquet query) with tabular items to Parquet, pushes everything to Cloudflare R2 via Git LFS, appends dual-tier datasets.json entries, and writes a source-vs-derived parity report. Use to move a City or sector ArcGIS Hub open-data portal onto PortalJS with no server-side compute.

日本語の概要は準備中です。原文の説明を表示しています。

datopian/portaljs2,3602026年10月8日 更新

Add a chart (line, bar, area, pie, or scatter) to a dataset's showcase in a PortalJS portal. Installs recharts, writes a reusable Chart component, and renders it in the showcase Views section. Use when visualizing a dataset already registered in datasets.json.

日本語の概要は準備中です。原文の説明を表示しています。

datopian/portaljs2,3602026年10月8日 更新

Add a dataset (CSV, TSV, JSON, or GeoJSON) to an existing PortalJS portal. Appends an entry to datasets.json so the catalog and showcase render it automatically; routes the data by source (local file vs remote URL) — R2 via Git LFS by default, remote URLs by passthrough. Use when registering a new dataset in a scaffolded portal.

日本語の概要は準備中です。原文の説明を表示しています。

datopian/portaljs2,3602026年10月8日 更新

Make a PortalJS portal harvestable by national/EU/US open-data portals — emit standards-compliant DCAT catalog feeds (DCAT 2/3, DCAT-AP, DCAT-US, national profiles) in JSON-LD, Turtle, and RDF/XML at build, with autodiscovery and per-profile conformance checking. Use when a portal needs to be harvested by data.europa.eu, data.gov, or a national open-data catalog.

日本語の概要は準備中です。原文の説明を表示しています。

datopian/portaljs2,3602026年10月8日 更新

Auto-ingest a geospatial file (GeoJSON, Shapefile, GeoPackage, KML/KMZ, FlatGeobuf, CSV-with-geometry) into a PortalJS portal on the user's own machine, with no server. Normalizes CRS to EPSG:4326, derives a PMTiles render tier and a GeoParquet query tier, pushes all three artifacts to Cloudflare R2 via Git LFS, and appends one dual-tier datasets.json entry the showcase auto-renders. Use when the source is a vector geo format that needs a map or spatial-query view.

日本語の概要は準備中です。原文の説明を表示しています。

datopian/portaljs2,3602026年10月8日 更新

Render a GeoJSON dataset on an interactive Leaflet map in the Views section of a dataset's showcase. Installs react-leaflet and a Map component, then renders the map for the chosen dataset. Use when a dataset's data is geographic and a map view is needed alongside the showcase's default metadata and download.

日本語の概要は準備中です。原文の説明を表示しています。

datopian/portaljs2,3602026年10月8日 更新

datopian のスキルをすべて見る

このスキルの問題を報告する