UNPKG

schemaorg-jsd

Version:

JSON Schema validation for JSON-LD files using Schema.org vocabulary.

77 lines (76 loc) 3.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildTS = exports.buildLD = void 0; const sdo_ld_1 = require("./sdo-ld"); function buildLD(schemabase) { function processSubclasses(jsonld, classbase) { const superclass = jsonld['rdfs:subClassOf']; const referenced = superclass && classbase.find((c) => c['@id'] === superclass['@id']) || null; if (referenced) { referenced.superClassOf.push({ '@id': jsonld['@id'] }); } } function processSubproperties(jsonld, propertybase) { const superproperty = jsonld['rdfs:subPropertyOf']; const referenced = superproperty && propertybase.find((p) => p['@id'] === superproperty['@id']) || null; if (referenced) { referenced.superPropertyOf.push({ '@id': jsonld['@id'] }); } } function processDomains(jsonld, propertybase) { jsonld['rdfs:member'].forEach((property_ref) => { const referenced = propertybase.find((p) => p['@id'] === property_ref['@id']) || null; if (referenced) { referenced['rdfs:domain'].push({ '@id': jsonld['@id'] }); } }); } function processValueOf(jsonld, classbase) { jsonld['rdfs:range'].forEach((class_ref) => { const referenced = classbase.find((c) => c['@id'] === class_ref['@id']) || null; if (referenced) { referenced.valueOf.push({ '@id': jsonld['@id'] }); } }); } const datatypeJSDs = schemabase.filter((jsd) => jsd.$schema === 'http://json-schema.org/draft-07/schema#'); const classJSDs = schemabase.filter((jsd) => jsd.$schema === 'https://chharvey.github.io/schemaorg-jsd/meta/type.jsd#'); const propertyJSDs = schemabase.filter((jsd) => jsd.$schema === 'https://chharvey.github.io/schemaorg-jsd/meta/member.jsd#'); const datatypeLDs = datatypeJSDs.map((jsd) => new sdo_ld_1.SDODatatypeLD(jsd)); const classLDs = classJSDs.map((jsd) => new sdo_ld_1.SDOClassLD(jsd, propertyJSDs)); const propertyLDs = propertyJSDs.map((jsd) => new sdo_ld_1.SDOPropertyLD(jsd)); classLDs.forEach((jsonld) => { processSubclasses(jsonld, classLDs); processDomains(jsonld, propertyLDs); }); propertyLDs.forEach((jsonld) => { processSubproperties(jsonld, propertyLDs); processValueOf(jsonld, classLDs); }); return { '@context': { sdo: 'http://schema.org/', rdf: 'https://www.w3.org/1999/02/22-rdf-syntax-ns#', rdfs: 'http://www.w3.org/2000/01/rdf-schema#', superClassOf: { '@reverse': 'rdfs:subClassOf' }, superPropertyOf: { '@reverse': 'rdfs:subPropertyOf' }, valueOf: { '@reverse': 'rdfs:range' }, }, '@graph': [ ...datatypeLDs, ...classLDs, ...propertyLDs, ], }; } exports.buildLD = buildLD; function buildTS(jsonlddocument) { const JSONLD = '@graph' in jsonlddocument ? jsonlddocument['@graph'] : []; return [ `import {NodeObject} from 'jsonld';`, ...JSONLD.filter((jsonld) => jsonld['@type'] === 'rdfs:Datatype').map((jsonld) => sdo_ld_1.SDODatatypeLD.toTS(jsonld)), ...JSONLD.filter((jsonld) => jsonld['@type'] === 'rdfs:Class').map((jsonld) => sdo_ld_1.SDOClassLD.toTS(jsonld)), ...JSONLD.filter((jsonld) => jsonld['@type'] === 'rdf:Property').map((jsonld) => sdo_ld_1.SDOPropertyLD.toTS(jsonld)), ].join(''); } exports.buildTS = buildTS;