import N3DataFactory from './N3DataFactory';
N3Util provides N3 utility functions.
import N3DataFactory from './N3DataFactory';
Tests whether the given term represents an IRI
export function isNamedNode(term) {
return !!term && term.termType === 'NamedNode';
}
Tests whether the given term represents a blank node
export function isBlankNode(term) {
return !!term && term.termType === 'BlankNode';
}
Tests whether the given term represents a literal
export function isLiteral(term) {
return !!term && term.termType === 'Literal';
}
Tests whether the given term represents a variable
export function isVariable(term) {
return !!term && term.termType === 'Variable';
}
Tests whether the given term represents the default graph
export function isDefaultGraph(term) {
return !!term && term.termType === 'DefaultGraph';
}
Tests whether the given quad is in the default graph
export function inDefaultGraph(quad) {
return isDefaultGraph(quad.graph);
}
Creates a function that prepends the given IRI to a local name
export function prefix(iri, factory) {
return prefixes({ '': iri.value || iri }, factory)('');
}
Creates a function that allows registering and expanding prefixes
export function prefixes(defaultPrefixes, factory) {
Add all of the default prefixes
const prefixes = Object.create(null);
for (const prefix in defaultPrefixes)
processPrefix(prefix, defaultPrefixes[prefix]);
Set the default factory if none was specified
factory = factory || N3DataFactory;
Registers a new prefix (if an IRI was specified) or retrieves a function that expands an existing prefix (if no IRI was specified)
function processPrefix(prefix, iri) {
Create a new prefix if an IRI is specified or the prefix doesn’t exist
if (typeof iri === 'string') {
Create a function that expands the prefix
const cache = Object.create(null);
prefixes[prefix] = local => {
return cache[local] || (cache[local] = factory.namedNode(iri + local));
};
}
else if (!(prefix in prefixes)) {
throw new Error(`Unknown prefix: ${prefix}`);
}
return prefixes[prefix];
}
return processPrefix;
}