extract-cbd-shape
Version:
Extract an entity based on CBD and a SHACL shape
89 lines • 4.27 kB
JavaScript
;
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