@comake/skl-js-engine
Version:
Standard Knowledge Language Javascript Engine
455 lines • 16 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createSparqlNotExistsOperation = exports.createSparqlNotInOperation = exports.createSparqlInOperation = exports.createSparqlNotEqualOperation = exports.createSparqlLteOperation = exports.createSparqlLtOperation = exports.createSparqlGteOperation = exports.createSparqlGtOperation = exports.createSparqlContainsOperation = exports.createSparqlLcaseOperation = exports.createSparqlEqualOperation = exports.createSparqlBindPattern = exports.createFilterPatternFromFilters = exports.createSparqlFilterWithExpression = exports.createSparqlSelectQuery = exports.ensureGrouping = exports.ensureVariable = exports.createSparqlServicePattern = exports.createSparqlOptionalGraphSelection = exports.createSparqlBasicGraphPattern = exports.createSparqlUnion = exports.createSparqlOptional = exports.createSparqlSelectGroup = exports.creteSparqlAskQuery = exports.createSparqlCountSelectQuery = exports.createSparqlConstructQuery = exports.createSparqlGraphPattern = exports.createSparqlUpdate = exports.createSparqlDropUpdate = exports.createSparqlClearUpdate = exports.createSparqlGraphQuads = exports.entityGraphTriple = exports.dropAll = exports.bindNow = exports.allTypesAndSuperTypesPath = exports.anyPredicatePropertyPath = exports.nilPredicate = exports.restPredicate = exports.firstPredicate = exports.modified = exports.created = exports.now = exports.countVariable = exports.rdfTypeVariable = exports.entityVariable = exports.objectNode = exports.predicateNode = exports.subjectNode = exports.rdfsSubClassOfNamedNode = exports.rdfTypeNamedNode = void 0;
exports.createValuesPatternsForVariables = exports.getRdfTypeVariableValuesFromVariables = exports.getEntityVariableValuesFromVariables = exports.groupSelectQueryResultsByKey = exports.selectQueryResultsAsJSValues = exports.createSparqlInsertDeleteOperation = exports.createSparqlOneOrMorePredicate = exports.createSparqlZeroOrMorePredicate = exports.createSparqlSequencePredicate = exports.createSparqlOrPredicate = exports.createSparqlInversePredicate = exports.createSparqlExistsOperation = void 0;
const data_model_1 = __importDefault(require("@rdfjs/data-model"));
const constants_1 = require("../constants");
const TripleUtil_1 = require("./TripleUtil");
const Vocabularies_1 = require("./Vocabularies");
exports.rdfTypeNamedNode = data_model_1.default.namedNode(Vocabularies_1.RDF.type);
exports.rdfsSubClassOfNamedNode = data_model_1.default.namedNode(Vocabularies_1.RDFS.subClassOf);
exports.subjectNode = data_model_1.default.variable('subject');
exports.predicateNode = data_model_1.default.variable('predicate');
exports.objectNode = data_model_1.default.variable('object');
exports.entityVariable = data_model_1.default.variable('entity');
exports.rdfTypeVariable = data_model_1.default.variable('rdfType');
exports.countVariable = data_model_1.default.variable('count');
exports.now = data_model_1.default.variable('now');
exports.created = data_model_1.default.namedNode(constants_1.EngineConstants.prop.dateCreated);
exports.modified = data_model_1.default.namedNode(constants_1.EngineConstants.prop.dateModified);
exports.firstPredicate = data_model_1.default.namedNode(Vocabularies_1.RDF.first);
exports.restPredicate = data_model_1.default.namedNode(Vocabularies_1.RDF.rest);
exports.nilPredicate = data_model_1.default.namedNode(Vocabularies_1.RDF.nil);
exports.anyPredicatePropertyPath = {
type: 'path',
pathType: '!',
items: [data_model_1.default.namedNode('')]
};
exports.allTypesAndSuperTypesPath = {
type: 'path',
pathType: '/',
items: [
exports.rdfTypeNamedNode,
{
type: 'path',
pathType: '*',
items: [exports.rdfsSubClassOfNamedNode]
}
]
};
exports.bindNow = {
type: 'bind',
variable: exports.now,
expression: {
type: 'operation',
operator: 'now',
args: []
}
};
exports.dropAll = {
type: 'drop',
silent: true,
graph: {
type: 'graph',
all: true
}
};
exports.entityGraphTriple = { subject: exports.subjectNode, predicate: exports.predicateNode, object: exports.objectNode };
function createSparqlGraphQuads(graph, triples) {
return {
type: 'graph',
name: graph,
triples
};
}
exports.createSparqlGraphQuads = createSparqlGraphQuads;
function createSparqlClearUpdate(graph) {
return {
type: 'clear',
silent: true,
graph: {
type: 'graph',
name: graph
}
};
}
exports.createSparqlClearUpdate = createSparqlClearUpdate;
function createSparqlDropUpdate(graph) {
return {
type: 'drop',
silent: true,
graph: {
type: 'graph',
name: graph
}
};
}
exports.createSparqlDropUpdate = createSparqlDropUpdate;
function createSparqlUpdate(updates) {
return {
type: 'update',
prefixes: {},
updates
};
}
exports.createSparqlUpdate = createSparqlUpdate;
function createSparqlGraphPattern(name, patterns) {
return {
type: 'graph',
name,
patterns
};
}
exports.createSparqlGraphPattern = createSparqlGraphPattern;
function createSparqlConstructQuery(triples, where) {
return {
type: 'query',
prefixes: {},
queryType: 'CONSTRUCT',
template: triples,
where
};
}
exports.createSparqlConstructQuery = createSparqlConstructQuery;
function createSparqlCountSelectQuery(subject, where, order, offset) {
return {
type: 'query',
queryType: 'SELECT',
variables: [
{
expression: {
type: 'aggregate',
aggregation: 'count',
distinct: true,
expression: subject
},
variable: exports.countVariable
}
],
where,
order: order.length > 0 ? order : undefined,
offset,
prefixes: {}
};
}
exports.createSparqlCountSelectQuery = createSparqlCountSelectQuery;
function creteSparqlAskQuery(where) {
return {
type: 'query',
queryType: 'ASK',
where,
prefixes: {}
};
}
exports.creteSparqlAskQuery = creteSparqlAskQuery;
function createSparqlSelectGroup(patterns) {
return {
type: 'group',
patterns
};
}
exports.createSparqlSelectGroup = createSparqlSelectGroup;
function createSparqlOptional(patterns) {
return {
type: 'optional',
patterns
};
}
exports.createSparqlOptional = createSparqlOptional;
function createSparqlUnion(patterns) {
return {
type: 'union',
patterns
};
}
exports.createSparqlUnion = createSparqlUnion;
function createSparqlBasicGraphPattern(triples) {
return { type: 'bgp', triples };
}
exports.createSparqlBasicGraphPattern = createSparqlBasicGraphPattern;
function createSparqlOptionalGraphSelection(name, triples) {
return {
type: 'graph',
name: name,
patterns: [createSparqlOptional([createSparqlBasicGraphPattern(triples)])]
};
}
exports.createSparqlOptionalGraphSelection = createSparqlOptionalGraphSelection;
function createSparqlServicePattern(serviceName, triples) {
return {
type: 'service',
patterns: [createSparqlBasicGraphPattern(triples)],
name: data_model_1.default.namedNode(serviceName),
silent: false
};
}
exports.createSparqlServicePattern = createSparqlServicePattern;
function ensureVariable(variableLike) {
if (typeof variableLike === 'string' && variableLike.startsWith('?')) {
return data_model_1.default.variable(variableLike.slice(1));
}
return variableLike;
}
exports.ensureVariable = ensureVariable;
function ensureGrouping(variableLike) {
return {
expression: ensureVariable(variableLike)
};
}
exports.ensureGrouping = ensureGrouping;
function createSparqlSelectQuery(variable, where, order, group, limit, offset) {
let groupings;
if (group) {
if (Array.isArray(group)) {
// eslint-disable-next-line id-length
groupings = group.map(g => ensureGrouping(g));
}
else {
groupings = [ensureGrouping(group)];
}
}
return {
type: 'query',
queryType: 'SELECT',
variables: Array.isArray(variable) ? variable.map(ensureVariable) : [ensureVariable(variable)],
distinct: true,
where,
group: groupings,
order: order.length > 0 ? order : undefined,
limit,
offset,
prefixes: {}
};
}
exports.createSparqlSelectQuery = createSparqlSelectQuery;
function createSparqlFilterWithExpression(expression) {
return { type: 'filter', expression };
}
exports.createSparqlFilterWithExpression = createSparqlFilterWithExpression;
function createFilterPatternFromFilters(filters) {
if (filters.length > 2) {
return createFilterPatternFromFilters([
{
type: 'operation',
operator: '&&',
args: filters.slice(0, 2)
},
...filters.slice(2)
]);
}
if (filters.length > 1) {
return createSparqlFilterWithExpression({
type: 'operation',
operator: '&&',
args: filters
});
}
return createSparqlFilterWithExpression(filters[0]);
}
exports.createFilterPatternFromFilters = createFilterPatternFromFilters;
function createSparqlBindPattern(expression, variable) {
return {
type: 'bind',
expression,
variable
};
}
exports.createSparqlBindPattern = createSparqlBindPattern;
function createSparqlEqualOperation(leftSide, rightSide) {
return {
type: 'operation',
operator: '=',
args: [leftSide, rightSide]
};
}
exports.createSparqlEqualOperation = createSparqlEqualOperation;
function createSparqlLcaseOperation(expression) {
return {
type: 'operation',
operator: 'lcase',
args: [expression]
};
}
exports.createSparqlLcaseOperation = createSparqlLcaseOperation;
function createSparqlContainsOperation(leftSide, rightSide) {
return {
type: 'operation',
operator: 'contains',
args: [leftSide, rightSide]
};
}
exports.createSparqlContainsOperation = createSparqlContainsOperation;
function createSparqlGtOperation(leftSide, rightSide) {
return {
type: 'operation',
operator: '>',
args: [leftSide, rightSide]
};
}
exports.createSparqlGtOperation = createSparqlGtOperation;
function createSparqlGteOperation(leftSide, rightSide) {
return {
type: 'operation',
operator: '>=',
args: [leftSide, rightSide]
};
}
exports.createSparqlGteOperation = createSparqlGteOperation;
function createSparqlLtOperation(leftSide, rightSide) {
return {
type: 'operation',
operator: '<',
args: [leftSide, rightSide]
};
}
exports.createSparqlLtOperation = createSparqlLtOperation;
function createSparqlLteOperation(leftSide, rightSide) {
return {
type: 'operation',
operator: '<=',
args: [leftSide, rightSide]
};
}
exports.createSparqlLteOperation = createSparqlLteOperation;
function createSparqlNotEqualOperation(leftSide, rightSide) {
return {
type: 'operation',
operator: '!=',
args: [leftSide, rightSide]
};
}
exports.createSparqlNotEqualOperation = createSparqlNotEqualOperation;
function createSparqlInOperation(leftSide, rightSide) {
return {
type: 'operation',
operator: 'in',
args: [leftSide, rightSide]
};
}
exports.createSparqlInOperation = createSparqlInOperation;
function createSparqlNotInOperation(leftSide, rightSide) {
return {
type: 'operation',
operator: 'notin',
args: [leftSide, rightSide]
};
}
exports.createSparqlNotInOperation = createSparqlNotInOperation;
function createSparqlNotExistsOperation(args) {
return {
type: 'operation',
operator: 'notexists',
args
};
}
exports.createSparqlNotExistsOperation = createSparqlNotExistsOperation;
function createSparqlExistsOperation(args) {
return {
type: 'operation',
operator: 'exists',
args
};
}
exports.createSparqlExistsOperation = createSparqlExistsOperation;
function createSparqlInversePredicate(predicates) {
return {
type: 'path',
pathType: '^',
items: predicates
};
}
exports.createSparqlInversePredicate = createSparqlInversePredicate;
function createSparqlOrPredicate(predicates) {
return {
type: 'path',
pathType: '|',
items: predicates
};
}
exports.createSparqlOrPredicate = createSparqlOrPredicate;
function createSparqlSequencePredicate(predicates) {
return {
type: 'path',
pathType: '/',
items: predicates
};
}
exports.createSparqlSequencePredicate = createSparqlSequencePredicate;
function createSparqlZeroOrMorePredicate(predicates) {
return {
type: 'path',
pathType: '*',
items: predicates
};
}
exports.createSparqlZeroOrMorePredicate = createSparqlZeroOrMorePredicate;
function createSparqlOneOrMorePredicate(predicates) {
return {
type: 'path',
pathType: '+',
items: predicates
};
}
exports.createSparqlOneOrMorePredicate = createSparqlOneOrMorePredicate;
function createSparqlInsertDeleteOperation(graph, insertionTriples, deletionTriples) {
return {
updateType: 'insertdelete',
delete: [createSparqlGraphQuads(graph, deletionTriples)],
insert: [createSparqlGraphQuads(graph, insertionTriples)],
where: [createSparqlBasicGraphPattern(deletionTriples)],
using: {
default: [graph]
}
};
}
exports.createSparqlInsertDeleteOperation = createSparqlInsertDeleteOperation;
function selectQueryResultsAsJSValues(results) {
return results.map((result) => Object.entries(result).reduce((obj, [key, value]) => ({
...obj,
[key]: value.termType === 'Literal' ? (0, TripleUtil_1.toJSValueFromDataType)(value.value, value.datatype?.value) : value.value
}),
// eslint-disable-next-line @typescript-eslint/prefer-reduce-type-parameter
{}));
}
exports.selectQueryResultsAsJSValues = selectQueryResultsAsJSValues;
function groupSelectQueryResultsByKey(results) {
return results.reduce((obj, result) => {
for (const [key, value] of Object.entries(result)) {
if (!(key in obj)) {
obj[key] = [value];
}
else {
obj[key].push(value);
}
}
return obj;
}, {});
}
exports.groupSelectQueryResultsByKey = groupSelectQueryResultsByKey;
function getEntityVariableValuesFromVariables(variables) {
if (!(exports.entityVariable.value in variables)) {
return [];
}
return variables[exports.entityVariable.value].map((namedNode) => namedNode.value);
}
exports.getEntityVariableValuesFromVariables = getEntityVariableValuesFromVariables;
function getRdfTypeVariableValuesFromVariables(variables) {
if (!(exports.rdfTypeVariable.value in variables)) {
return [];
}
return variables[exports.rdfTypeVariable.value].map((namedNode) => namedNode.value);
}
exports.getRdfTypeVariableValuesFromVariables = getRdfTypeVariableValuesFromVariables;
function createValuesPatternsForVariables(valuesByVariable) {
return Object.entries(valuesByVariable).map(([variableName, values]) => ({
type: 'values',
values: values.map((value) => ({
[`?${variableName}`]: value
}))
}));
}
exports.createValuesPatternsForVariables = createValuesPatternsForVariables;
//# sourceMappingURL=SparqlUtil.js.map