UNPKG

@comake/skl-js-engine

Version:

Standard Knowledge Language Javascript Engine

455 lines 16 kB
"use strict"; 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