Skip to content

@lde/dataset-registry-client

A client for registries that contain DCAT-AP 3.0 dataset descriptions.

Installation

sh
npm install @lde/dataset-registry-client

Usage

Create a Client for the registry’s SPARQL endpoint, then query() it with search criteria or with a custom SPARQL CONSTRUCT query. Both return a Paginator of @lde/dataset Dataset objects that you can iterate asynchronously – but only criteria queries actually fetch page by page; a custom CONSTRUCT query or an $id lookup is fetched in a single call:

ts
import { Client } from '@lde/dataset-registry-client';
import { rdfMediaTypes, sparqlMediaTypes } from '@lde/dataset';

const client = new Client(new URL('https://example.com/registry/sparql'));

const results = await client.query({
  distribution: {
    mediaType: {
      $in: [...sparqlMediaTypes, ...rdfMediaTypes],
    },
  },
});

console.log(results.total);
for await (const dataset of results) {
  console.log(dataset.iri.toString());
}

The Client constructor takes an optional second parameter: the LDkit schema to query with, defaulting to the exported DatasetSchema (DCAT-AP 3.0 datasets).

Search criteria

SearchCriteria follows DatasetSchema, so these fields are queryable:

  • title, description, language, license
  • creator.name, publisher.name
  • distribution.accessURL, distribution.mediaType, distribution.byteSize, distribution.compressFormat, distribution.conformsTo, distribution.modified

A field matches either a plain value (equality) or an operator object:

  • $id – top-level only: select a dataset by its IRI (or an array of IRIs). Fetched in a single call, without pagination.
  • $in – match any of an array of values, e.g. mediaType: { $in: [...sparqlMediaTypes, ...rdfMediaTypes] }.
  • $filter – a raw SPARQL expression for anything the other operators can’t express. Write ?value for the property’s variable; it is substituted before the query runs:
ts
const results = await client.query({
  distribution: {
    accessURL: { $filter: '!CONTAINS(STR(?value), "edm")' },
  },
});

Criteria are LDkit’s search interface, so LDkit’s other operators ($equals, $not, $contains, $regex, $gt, …) are available too – see the LDkit documentation.

Custom queries

A custom query must be a SPARQL CONSTRUCT query – anything else throws Must be CONSTRUCT query. The client rewrites the query’s template before running it, adding ?firstSubject rdf:type ldkit:Resource (where ?firstSubject is the subject of the first template triple) so LDkit recognises the constructed resources as results. The whole result is fetched in one call.

Paginator

query() resolves to a Paginator<Dataset>: an AsyncIterable with a total property. Criteria queries first run a count() to establish total, then fetch pages of 1 000 datasets as you iterate, so memory stays bounded regardless of registry size. Custom queries and $id lookups are pre-fetched in full, and the paginator simply replays them.

Namespaces

The package also exports dcat, an LDkit namespace covering the full DCAT 3 vocabulary, for building custom schemas and queries.

Released under the MIT License.