schemaorg-jsd
Version:
JSON Schema validation for JSON-LD files using Schema.org vocabulary.
77 lines (76 loc) • 3.55 kB
JavaScript
;
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;