Namespaces are strongly typed containers for Linked Data vocabularies. They provide type safe access to all vocabulary terms as well as IDE auto-complete for the best developer experience.

import { createNamespace } from "ldkit";

const onto = createNamespace(
    iri: "http://www.example.com/ontology#",
    prefix: "onto:",
    terms: [
  } as const,

console.log(onto.subject); // prints http://www.example.com/ontology#subject
console.log(onto.unknown); // TypeScript error! This term does not exist

In addition to terms, namespaces include $iri and $prefix properties to access its IRI and prefix denomination.

Included namespaces

LDkit ships with several ready to use namespaces of the most widely used Linked Data ontologies.

These ontologies are provided as a ldkit/namespaces subpackage. You can use them like this:

import { rdf, schema } from "ldkit/namespaces";

console.log(rdf.type); // prints http://www.w3.org/1999/02/22-rdf-syntax-ns#type
console.log(schema.Person); // prints http://schema.org/Person

If you are using Deno without the recommended import map, you can import namespaces like this:

import { rdf, schema } from "https://deno.land/x/ldkit@$VERSION/namespaces.ts";

or directly like:

import { rdf } from "https://deno.land/x/ldkit@$VERSION/namespaces/rdf.ts";

List of included namespaces

Shortcut Name Namespace
dbo DBPedia ontology https://dbpedia.org/ontology/
dc DCMI Metadata Terms http://purl.org/dc/elements/1.1/
dcterms DCMI Metadata Terms http://purl.org/dc/terms/
foaf FOAF ontology http://xmlns.com/foaf/0.1/
gr Good Relations http://purl.org/goodrelations/v1#
owl OWL Web Ontology Language http://www.w3.org/2002/07/owl#
rdf RDF vocabulary http://www.w3.org/1999/02/22-rdf-syntax-ns#
rdfs RDF Schema 1.1 http://www.w3.org/2000/01/rdf-schema#
schema Schema.org https://schema.org/
sioc SIOC ontology http://rdfs.org/sioc/ns#
skos SKOS (Simple Knowledge Organization System) http://www.w3.org/2008/05/skos#
xsd XML Schema Datatypes http://www.w3.org/2001/XMLSchema#

Creating your own namespace

When accessing Linked Data on the web, it is highly likely that you will need to create a custom namespace to help you create LDkit schemas. Below is an example of such a namespace facilitating full text Lucene-based search in GraphDB.

import { createNamespace } from "ldkit";

export const lucene = createNamespace(
    iri: "http://www.ontotext.com/connectors/lucene#",
    prefix: "lucene:",
    terms: [
  } as const, // This line is important for inferring TypeScript types

console.log(lucene.query); // prints http://www.ontotext.com/connectors/lucene#query

Using namespaces in a schema

Using namespaces in schema is optional, but recommended. You can use namespace terms as keys, or you can use even shorter aliases.

import { dbo, rdfs } from "ldkit/namespaces";
// Create a schema
const PersonSchema = {
  "@type": dbo.Person,
  name: rdfs.label,
  abstract: dbo.abstract,
  birthDate: {
    "@id": dbo.birthDate,
    "@type": xsd.date,
} as const;