@comake/skl-js-engine
Version:
Standard Knowledge Language Javascript Engine
116 lines • 5 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SparqlEndpointQueryExecutor = void 0;
const sparql_http_client_1 = __importDefault(require("sparql-http-client"));
const sparqljs_1 = require("sparqljs");
const logger_1 = require("../../../../logger");
const PerformanceLogger_1 = require("../../../../util/PerformanceLogger");
class SparqlEndpointQueryExecutor {
constructor(options) {
this.sparqlClient = new sparql_http_client_1.default({
endpointUrl: options.endpointUrl,
updateUrl: options.updateUrl ?? options.endpointUrl
});
this.sparqlGenerator = new sparqljs_1.Generator();
this.logger = logger_1.Logger.getInstance();
}
async executeSparqlSelectAndGetData(query) {
const generatedQuery = this.sparqlGenerator.stringify(query);
return this.executeSparqlSelectAndGetDataRaw(generatedQuery);
}
async executeSparqlSelectAndGetDataRaw(query) {
const span = PerformanceLogger_1.PerformanceLogger.startSpan('SPARQL.SELECT', { query });
try {
// This.logger.debug(query);
const stream = await this.sparqlClient.query.select(query, { operation: 'postUrlencoded' });
const result = await new Promise((resolve, reject) => {
const data = [];
stream.on('data', (row) => {
data.push(row);
});
stream.on('end', () => {
resolve(data);
});
stream.on('error', (error) => {
reject(error);
});
});
PerformanceLogger_1.PerformanceLogger.endSpan(span, { resultCount: result.length });
return result;
}
catch (error) {
PerformanceLogger_1.PerformanceLogger.endSpan(span, { error: true });
throw error;
}
}
async executeSparqlConstructAndGetDataRaw(query) {
const span = PerformanceLogger_1.PerformanceLogger.startSpan('SPARQL.CONSTRUCT', { query });
try {
const result = await this.executeSparqlSelectAndGetDataRaw(query);
PerformanceLogger_1.PerformanceLogger.endSpan(span, { resultCount: result.length });
return result;
}
catch (error) {
PerformanceLogger_1.PerformanceLogger.endSpan(span, { error: true });
throw error;
}
}
async executeSparqlUpdate(query) {
const generatedQuery = this.sparqlGenerator.stringify(query);
await this.executeRawSparqlUpdate(generatedQuery);
}
async executeRawSparqlUpdate(query) {
const span = PerformanceLogger_1.PerformanceLogger.startSpan('SPARQL.UPDATE', { query });
try {
await this.sparqlClient.query.update(query);
PerformanceLogger_1.PerformanceLogger.endSpan(span);
}
catch (error) {
PerformanceLogger_1.PerformanceLogger.endSpan(span, { error: true });
throw error;
}
}
async executeAskQueryAndGetResponse(query) {
const generatedQuery = this.sparqlGenerator.stringify(query);
const span = PerformanceLogger_1.PerformanceLogger.startSpan('SPARQL.ASK', { query: generatedQuery });
try {
const result = await this.sparqlClient.query.ask(generatedQuery);
PerformanceLogger_1.PerformanceLogger.endSpan(span, { result });
return result;
}
catch (error) {
PerformanceLogger_1.PerformanceLogger.endSpan(span, { error: true });
throw error;
}
}
async executeSelectCountAndGetResponse(query) {
const generatedQuery = this.sparqlGenerator.stringify(query);
const span = PerformanceLogger_1.PerformanceLogger.startSpan('SPARQL.COUNT', { query: generatedQuery });
try {
const stream = await this.sparqlClient.query.select(generatedQuery, { operation: 'postUrlencoded' });
const countValue = await new Promise((resolve, reject) => {
let count;
stream.on('data', (row) => {
count = Number.parseInt(row.count.value, 10);
});
stream.on('end', () => {
resolve(count);
});
stream.on('error', (error) => {
reject(error);
});
});
PerformanceLogger_1.PerformanceLogger.endSpan(span, { count: countValue });
return countValue;
}
catch (error) {
PerformanceLogger_1.PerformanceLogger.endSpan(span, { error: true });
throw error;
}
}
}
exports.SparqlEndpointQueryExecutor = SparqlEndpointQueryExecutor;
//# sourceMappingURL=SparqlEndpointQueryExecutor.js.map