Every open data portal needs a common language for "here's a dataset"
data.gov, the EU Open Data Portal, and hundreds of city and state open-data sites all run different software, but they can all be crawled and federated together because they describe their contents using the same vocabulary: DCAT (Data Catalog Vocabulary), a W3C standard for publishing dataset metadata as JSON-LD. If you've read schema.org's structured data for AI search, the underlying idea is the same — a shared, machine-readable vocabulary lets systems that have never talked to each other still understand what a piece of content is.
The core shapes: Catalog, Dataset, Distribution
DCAT models three levels, and the nesting matters:
{
"@context": "https://www.w3.org/ns/dcat.jsonld",
"@type": "Catalog",
"dataset": [
{
"@type": "Dataset",
"title": "City Traffic Incidents 2026",
"description": "Reported traffic incidents by location and time.",
"keyword": ["traffic", "public-safety"],
"distribution": [
{
"@type": "Distribution",
"format": "CSV",
"downloadURL": "https://data.example.gov/traffic-2026.csv"
},
{
"@type": "Distribution",
"format": "JSON",
"accessURL": "https://data.example.gov/api/traffic-2026"
}
]
}
]
}A Catalog contains Datasets; each Dataset describes the *what* (title, description, keywords, license, update frequency) once, and can have multiple Distributions — the actual downloadable files or API endpoints, since the same logical dataset is often published as CSV, JSON, and a queryable API simultaneously. This separation is exactly why "give me this dataset" and "give me this specific file format of this dataset" are different questions in DCAT, and why a Dataset record with zero distributions still means something (metadata about data that isn't downloadable yet, or is available on request).
Where to actually find datasets through this
Most major portals expose a queryable catalog API built on this model rather than requiring you to scrape the site — data.gov's CKAN-based API and the EU portal's SPARQL endpoint both return DCAT-shaped JSON-LD you can query programmatically by keyword, organization, or update date, rather than clicking through search result pages. This is the practical "where to find" payoff of the standard: once you know the DCAT shape, the same request pattern works across portals that otherwise share no code.
Why JSON-LD specifically
DCAT catalogs use JSON-LD rather than plain JSON so a record is simultaneously valid JSON *and* valid RDF (linked data) — the @context and @type keys are what let a generic Linked Data crawler interpret the exact same file a normal JSON parser reads without special DCAT-aware code. It's the same mechanism Schema.org markup relies on for Google Dataset Search, and not a coincidence — DCAT and schema.org/Dataset are commonly mapped to each other so a portal only has to publish once and still be discoverable by both general web search and dedicated open-data catalogs.
Working with a catalog response
A real catalog page can return hundreds of nested Dataset/Distribution records in one response — format it before trying to read it manually, and if you're building an ingestion pipeline against a portal's API, generate a schema from a sample response so a future field the portal adds doesn't silently break your parser.