UNPKG

extract-cbd-shape

Version:

Extract an entity based on CBD and a SHACL shape

89 lines 4.27 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); const process = __importStar(require("process")); const CBDShapeExtractor_1 = require("../lib/CBDShapeExtractor"); const n3_1 = require("n3"); const rdf_data_factory_1 = require("rdf-data-factory"); const rdf_stores_1 = require("rdf-stores"); const rdf_dereference_1 = require("rdf-dereference"); const df = new rdf_data_factory_1.DataFactory(); // Check if at least one command line argument is provided if (process.argv.length <= 2) { console.error('Please provide an entity to describe in the first command line parameter, and optionally a shape IRI to fulfill, and a IRI'); process.exit(1); // Exit with an error code } async function loadShape(shapeURL, shapeStore) { let readStream = (await rdf_dereference_1.rdfDereferencer.dereference(shapeURL)).data; let requested = [shapeURL]; await new Promise((resolve, reject) => { shapeStore.import(readStream).on("end", resolve) .on("error", reject); }); //Now check whether there are one or more owl:imports on the shapesgraph -- But we don’t know how to know the IRI of the shapesgraph as it is not included in the SHACL spec... So we’ll leave it open for now. let importsURLs = shapeStore.getQuads(null, df.namedNode('http://www.w3.org/2002/07/owl#imports'), null, null).map((quad) => { return quad.object.value; }); //If the import has not been requested before, let’s request it for (let imp of importsURLs) { if (!requested.includes(imp)) { requested.push(imp); let newReadStream = (await rdf_dereference_1.rdfDereferencer.dereference(imp)).data; await new Promise((resolve, reject) => { shapeStore.import(newReadStream).on("end", resolve) .on("error", reject); }); //check for new imports URLs importsURLs = shapeStore.getQuads(null, df.namedNode('http://www.w3.org/2002/07/owl#imports'), null, null).map((quad) => { return quad.object.value; }); } } } async function main() { // Get the command line parameter at index 2 (index 0 is the node executable and index 1 is the script file) const entity = process.argv[2]; let shapeStore = rdf_stores_1.RdfStore.createDefault(); let shapeId = ""; if (process.argv[3]) { //A shape type has been set! if (process.argv[3] === 'shape') { //Use our own shape extractor shape shapeId = "https://raw.githubusercontent.com/pietercolpaert/extract-cbd-shape/main/extract-cbd-shape-ap.ttl#ShapeShape"; } else { shapeId = process.argv[3]; } await loadShape(shapeId, shapeStore); } let extractor = new CBDShapeExtractor_1.CBDShapeExtractor(shapeStore); console.error('Processing shape ' + shapeId + ' from this shape: ', extractor.shapesGraph); let writer = new n3_1.Writer(); let quads = await extractor.extract(rdf_stores_1.RdfStore.createDefault(), df.namedNode(entity), df.namedNode(shapeId)); writer.addQuads(quads); writer.end((err, res) => { console.log(res); }); } main(); //# sourceMappingURL=extract.js.map