Portaljs Add Dcat
Make a PortalJS portal harvestable by national/EU/US open-data portals, emit...
Install
npx skills add datopian/portaljs --skill portaljs-add-dcat -g -a claude-code -y- Repository
- datopian/portaljs2.4k
- Category
- Engineering
- Updated
- 7d ago
- License
- MIT
- Context cost
- Mediumabout 1,626 tokens
- Runs scripts
- No, instructions only
What it does
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.
PortalJS, Add DCAT
Overview
Turn an existing PortalJS (portaljs-catalog) portal into a harvestable data catalog.
PortalJS is Frictionless-native, a dataset is a Data Package (see
portaljs-define-schema), and DCAT is the serialization + harvest layer on top
(lib/metadata/dcat.ts + lib/metadata/dcat-profiles.ts). This skill selects one or
more DCAT application profiles, maps every dataset's metadata to them, and writes
static feed files at build time, JSON-LD, Turtle, and RDF/XML, so external catalogs
(data.europa.eu, data.gov, national portals) can harvest the datasets automatically,
on any static host, with no runtime.
Prerequisites
- A scaffolded PortalJS portal with
datasets.json,package.json, andlib/metadata/(the metadata-profile contract) present. lib/metadata/dcat.ts(the DCAT-3 core) already in place, profiles augment it.- Node 18+ and npm available in the portal directory.
- For DCAT-AP / DCAT-US: a publishing organization (name + homepage) and a contact
(name + email), both profiles require
dct:publisheranddcat:contactPoint. - Optional but recommended: network access to run SHACL conformance checks against the
official EU ITB validator or
pyshacl.
Instructions
The canonical, full step-by-step workflow is
.claude/commands/portaljs-add-dcat.md, the single source of truth. Read and follow it when executing. Summary:
