UNPKG

@jeswr/shacl2shex

Version:
43 lines (42 loc) 1.72 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getSubjects = getSubjects; exports.shapeFromDataset = shapeFromDataset; exports.shapeMatches = shapeMatches; const ldo_1 = require("@ldo/ldo"); const neighborhood_rdfjs_1 = __importDefault(require("@shexjs/neighborhood-rdfjs")); const validator_1 = require("@shexjs/validator"); const term_set_1 = __importDefault(require("@rdfjs/term-set")); function getSubjects(dataset) { const subjects = new term_set_1.default(); for (const quad of dataset) { if (quad.subject.termType === 'NamedNode' || quad.subject.termType === 'BlankNode') subjects.add(quad.subject); } return subjects; } function shapeFromDataset(shapeType, dataset, subject) { const validator = new validator_1.ShExValidator(shapeType.schema, neighborhood_rdfjs_1.default.ctor(dataset)); const validationResult = validator.validateShapeMap([{ node: typeof subject === 'string' ? subject : subject.value, shape: shapeType.shape, }]); if (validationResult[0].status !== 'conformant') { throw new Error(JSON.stringify(validationResult, null, 2)); } return (0, ldo_1.createLdoDataset)([...dataset]).usingType(shapeType).fromSubject(subject); } function* shapeMatches(shapeType, dataset) { for (const subject of getSubjects(dataset)) { try { yield shapeFromDataset(shapeType, dataset, subject); } catch (e) { // Do nothing, not all subjects will match every shape } } }