feat/orm
Laurin Weger 4 weeks ago
parent 3c004980e0
commit ea6a860c3e
No known key found for this signature in database
GPG Key ID: 9B372BB0B792770F
  1. 147
      sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/wasm-land/objectBuilder/buildObjects.ts
  2. 2
      sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/wasm-land/sparql/buildConstruct.ts
  3. 6
      sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/wasm-land/sparql/buildSparqlConstructFromShape.ts
  4. 238
      sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/wasm-land/sparql/testShape.schema.ts
  5. 137
      sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/ldo/catShape.schema.ts
  6. 123
      sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/ldo/personShape.schema.ts
  7. 254
      sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/ldo/testShape.schema.ts
  8. 2
      sdk/ng-sdk-js/ng-shex-orm/src/schema-converter/converter.ts
  9. 2
      sdk/ng-sdk-js/ng-shex-orm/src/schema-converter/transformers/ShexJSchemaTransformer.ts
  10. 2
      sdk/ng-sdk-js/ng-shex-orm/src/types.ts

@ -0,0 +1,147 @@
import type {
ShapeType,
Shape,
Predicate,
Schema,
} from "@nextgraph-monorepo/ng-shex-orm";
interface Triple {
s: string;
p: string;
o: string;
}
interface TrackedSubject {
shape: Shape;
parentObject?: TrackedSubject;
valid?: boolean;
trackedPredicates: Record<string, TrackedPredicate>;
/** For Sub-objects only */
untracked?: boolean;
}
interface TrackedPredicate {
shape: Predicate;
currentCardinality: number;
childSubjects?: TrackedSubject[];
}
export function buildObjects(shapeType: ShapeType<any>) {
//
}
export function onTriplesRemoved(
trackedSubjects: Record<string, TrackedSubject[]>,
triplesRemoved: string[][],
shapeType: ShapeType<any>
) {
//
}
/**
* Adds new triples to tracked subjects and creates and returns
* new tracked (possibly nested) subjects.
*/
export function onTriplesAdded(
trackedSubjects: Record<string, TrackedSubject[]>,
triplesAdded: Triple[],
schema: Schema,
rootShape?: Shape
): { newTrackedSubjects: Record<string, TrackedSubject[]> } {
// Track for secondary iterations.
const newTrackedSubjectsCreated: Record<string, TrackedSubject[]> = {};
for (const triple of triplesAdded) {
if (!trackedSubjects[triple.s]) {
// If rootShape is not set, we are applying the triples new nested objects
// and we don't create new tracked subjects.
if (!rootShape) continue;
// Check if predicate is in root shape type.
const matchedPredicate = rootShape.predicates.find((p) => triple.p);
if (!matchedPredicate) {
// Nothing to track.
continue;
}
// The triple should be tracked. Create new tracked subject.
const newTrackedSubject: TrackedSubject = {
shape: rootShape,
trackedPredicates: {
[triple.p]: {
shape: matchedPredicate,
currentCardinality: 1,
},
},
};
trackedSubjects[triple.s] = [newTrackedSubject];
} else {
// Add triple to tracked subject(s).
// In the case of nested shapes, the same subject can be tracked
// in multiple shapes.
const trackedSubjectsMatching = trackedSubjects[triple.s];
for (const trackedSubject of trackedSubjectsMatching) {
// Is predicate tracked in this subject's shape?
const matchedPredShape = trackedSubject.shape.predicates.find(
(predShape) => predShape.iri === triple.p
);
if (!matchedPredShape) continue;
// Get or create tracked predicate for tracked shape.
let trackedPredicate =
trackedSubject.trackedPredicates[matchedPredShape?.iri];
if (!trackedSubjects) {
trackedPredicate = {
currentCardinality: 0,
shape: matchedPredShape,
};
}
// Increase cardinality.
trackedPredicate.currentCardinality += 1;
// If predicate shape has nested object, track that too.
if (trackedPredicate.shape.nestedShape) {
const newTrackedObject: TrackedSubject = {
shape: schema[matchedPredShape.nestedShape as string],
trackedPredicates: {},
parentObject: trackedSubject,
};
// Remember for adding to registry and for re-running on nested shapes.
const newTracked = newTrackedSubjectsCreated[triple.o];
if (!newTracked)
newTrackedSubjectsCreated[triple.o] = [
newTrackedObject,
];
newTracked.push(newTrackedObject);
// Link to parent
const childSubjects = trackedPredicate.childSubjects;
if (childSubjects) childSubjects.push(newTrackedObject);
else trackedPredicate.childSubjects = [newTrackedObject];
}
// TODO: Inform tracked subjects about change
}
}
}
// Rerun triples on new tracked subjects created.
// Then merge with parent tracked subjects
const newNestedSubjectsCreated = onTriplesAdded(
newTrackedSubjectsCreated,
triplesAdded,
schema
);
// TODO: Is it correct to do this?
const ret: Record<string, TrackedSubject[]> = {};
for (const subjectIri of Object.keys(newTrackedSubjectsCreated)) {
ret[subjectIri] = [
...newTrackedSubjectsCreated[subjectIri],
...newNestedSubjectsCreated.newTrackedSubjects[subjectIri],
];
}
// Update Valid invalid
return { newTrackedSubjects: ret };
}
// Do we have infinite-loop issues?

@ -73,7 +73,7 @@ function addConstructPattern(
valuesBlocks: string[], valuesBlocks: string[],
options?: SparqlBuildOptions options?: SparqlBuildOptions
) { ) {
const p = `<${pred.predicateUri}>`; const p = `<${pred.iri}>`;
const objVar = uniqueVar(ctx, pred.readablePredicate); const objVar = uniqueVar(ctx, pred.readablePredicate);
const triple = `${subjectVar} ${p} ${objTerm} .`; const triple = `${subjectVar} ${p} ${objTerm} .`;

@ -47,7 +47,7 @@ export const buildConstructQuery = ({
constructStatements.push({ constructStatements.push({
s: `?${subjectVarName}`, s: `?${subjectVarName}`,
p: `<${pred.predicateUri}>`, p: `<${pred.iri}>`,
o: `?${shapeVarName}`, o: `?${shapeVarName}`,
optional: pred.minCardinality < 1, optional: pred.minCardinality < 1,
literals: pred.literalValue, literals: pred.literalValue,
@ -58,12 +58,12 @@ export const buildConstructQuery = ({
addTriples(schema[pred.nestedShape]); addTriples(schema[pred.nestedShape]);
} else { } else {
const objVarName = getVarNameFor( const objVarName = getVarNameFor(
shapeId + "__separator__" + pred.predicateUri shapeId + "__separator__" + pred.iri
); );
constructStatements.push({ constructStatements.push({
s: `?${subjectVarName}`, s: `?${subjectVarName}`,
p: `<${pred.predicateUri}>`, p: `<${pred.iri}>`,
o: `?${objVarName}`, o: `?${objVarName}`,
optional: pred.minCardinality < 1, optional: pred.minCardinality < 1,
literals: pred.literalValue, literals: pred.literalValue,

@ -6,124 +6,124 @@ import type { Schema } from "@nextgraph-monorepo/ng-shex-orm";
* ============================================================================= * =============================================================================
*/ */
export const testShapeSchema: Schema = { export const testShapeSchema: Schema = {
"http://example.org/TestObject": { "http://example.org/TestObject": {
iri: "http://example.org/TestObject", iri: "http://example.org/TestObject",
predicates: [ predicates: [
{ {
type: "literal", type: "literal",
literalValue: ["TestObject"], literalValue: ["TestObject"],
maxCardinality: 1, maxCardinality: 1,
minCardinality: 1, minCardinality: 1,
predicateUri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", iri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type",
readablePredicate: "type", readablePredicate: "type",
extra: true, extra: true,
}, },
{ {
type: "string", type: "string",
maxCardinality: 1, maxCardinality: 1,
minCardinality: 1, minCardinality: 1,
predicateUri: "http://example.org/stringValue", iri: "http://example.org/stringValue",
readablePredicate: "stringValue", readablePredicate: "stringValue",
}, },
{ {
type: "number", type: "number",
maxCardinality: 1, maxCardinality: 1,
minCardinality: 1, minCardinality: 1,
predicateUri: "http://example.org/numValue", iri: "http://example.org/numValue",
readablePredicate: "numValue", readablePredicate: "numValue",
}, },
{ {
type: "boolean", type: "boolean",
maxCardinality: 1, maxCardinality: 1,
minCardinality: 1, minCardinality: 1,
predicateUri: "http://example.org/boolValue", iri: "http://example.org/boolValue",
readablePredicate: "boolValue", readablePredicate: "boolValue",
}, },
{ {
type: "number", type: "number",
maxCardinality: -1, maxCardinality: -1,
minCardinality: 0, minCardinality: 0,
predicateUri: "http://example.org/arrayValue", iri: "http://example.org/arrayValue",
readablePredicate: "arrayValue", readablePredicate: "arrayValue",
}, },
{ {
type: "nested", type: "nested",
nestedShape: nestedShape:
"http://example.org/TestObject||http://example.org/objectValue", "http://example.org/TestObject||http://example.org/objectValue",
maxCardinality: 1, maxCardinality: 1,
minCardinality: 1, minCardinality: 1,
predicateUri: "http://example.org/objectValue", iri: "http://example.org/objectValue",
readablePredicate: "objectValue", readablePredicate: "objectValue",
}, },
{ {
type: "nested", type: "nested",
nestedShape: nestedShape:
"http://example.org/TestObject||http://example.org/anotherObject", "http://example.org/TestObject||http://example.org/anotherObject",
maxCardinality: -1, maxCardinality: -1,
minCardinality: 0, minCardinality: 0,
predicateUri: "http://example.org/anotherObject", iri: "http://example.org/anotherObject",
readablePredicate: "anotherObject", readablePredicate: "anotherObject",
}, },
{ {
type: "eitherOf", type: "eitherOf",
eitherOf: [ eitherOf: [
{ {
type: "string", type: "string",
}, },
{ {
type: "number", type: "number",
}, },
],
maxCardinality: 1,
minCardinality: 1,
iri: "http://example.org/numOrStr",
readablePredicate: "numOrStr",
},
], ],
maxCardinality: 1, },
minCardinality: 1, "http://example.org/TestObject||http://example.org/objectValue": {
predicateUri: "http://example.org/numOrStr", iri: "http://example.org/TestObject||http://example.org/objectValue",
readablePredicate: "numOrStr", predicates: [
}, {
], type: "string",
}, maxCardinality: 1,
"http://example.org/TestObject||http://example.org/objectValue": { minCardinality: 1,
iri: "http://example.org/TestObject||http://example.org/objectValue", iri: "http://example.org/nestedString",
predicates: [ readablePredicate: "nestedString",
{ },
type: "string", {
maxCardinality: 1, type: "number",
minCardinality: 1, maxCardinality: 1,
predicateUri: "http://example.org/nestedString", minCardinality: 1,
readablePredicate: "nestedString", iri: "http://example.org/nestedNum",
}, readablePredicate: "nestedNum",
{ },
type: "number", {
maxCardinality: 1, type: "number",
minCardinality: 1, maxCardinality: -1,
predicateUri: "http://example.org/nestedNum", minCardinality: 0,
readablePredicate: "nestedNum", iri: "http://example.org/nestedArray",
}, readablePredicate: "nestedArray",
{ },
type: "number", ],
maxCardinality: -1, },
minCardinality: 0, "http://example.org/TestObject||http://example.org/anotherObject": {
predicateUri: "http://example.org/nestedArray", iri: "http://example.org/TestObject||http://example.org/anotherObject",
readablePredicate: "nestedArray", predicates: [
}, {
], type: "string",
}, maxCardinality: 1,
"http://example.org/TestObject||http://example.org/anotherObject": { minCardinality: 1,
iri: "http://example.org/TestObject||http://example.org/anotherObject", iri: "http://example.org/prop1",
predicates: [ readablePredicate: "prop1",
{ },
type: "string", {
maxCardinality: 1, type: "number",
minCardinality: 1, maxCardinality: 1,
predicateUri: "http://example.org/prop1", minCardinality: 1,
readablePredicate: "prop1", iri: "http://example.org/prop2",
}, readablePredicate: "prop2",
{ },
type: "number", ],
maxCardinality: 1, },
minCardinality: 1,
predicateUri: "http://example.org/prop2",
readablePredicate: "prop2",
},
],
},
}; };

@ -6,72 +6,73 @@ import type { Schema } from "@nextgraph-monorepo/ng-shex-orm";
* ============================================================================= * =============================================================================
*/ */
export const catShapeSchema: Schema = { export const catShapeSchema: Schema = {
"http://example.org/Cat": { "http://example.org/Cat": {
iri: "http://example.org/Cat", iri: "http://example.org/Cat",
predicates: [ predicates: [
{ {
type: "literal", type: "literal",
literalValue: ["http://example.org/Cat"], literalValue: ["http://example.org/Cat"],
maxCardinality: 1, maxCardinality: 1,
minCardinality: 1, minCardinality: 1,
predicateUri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", iri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type",
readablePredicate: "type", readablePredicate: "type",
}, },
{ {
type: "string", type: "string",
maxCardinality: 1, maxCardinality: 1,
minCardinality: 1, minCardinality: 1,
predicateUri: "http://example.org/name", iri: "http://example.org/name",
readablePredicate: "name", readablePredicate: "name",
}, },
{ {
type: "number", type: "number",
maxCardinality: 1, maxCardinality: 1,
minCardinality: 1, minCardinality: 1,
predicateUri: "http://example.org/age", iri: "http://example.org/age",
readablePredicate: "age", readablePredicate: "age",
}, },
{ {
type: "number", type: "number",
maxCardinality: 1, maxCardinality: 1,
minCardinality: 1, minCardinality: 1,
predicateUri: "http://example.org/numberOfHomes", iri: "http://example.org/numberOfHomes",
readablePredicate: "numberOfHomes", readablePredicate: "numberOfHomes",
}, },
{ {
type: "nested", type: "nested",
nestedShape: "http://example.org/Cat||http://example.org/address", nestedShape:
maxCardinality: 1, "http://example.org/Cat||http://example.org/address",
minCardinality: 1, maxCardinality: 1,
predicateUri: "http://example.org/address", minCardinality: 1,
readablePredicate: "address", iri: "http://example.org/address",
}, readablePredicate: "address",
], },
}, ],
"http://example.org/Cat||http://example.org/address": { },
iri: "http://example.org/Cat||http://example.org/address", "http://example.org/Cat||http://example.org/address": {
predicates: [ iri: "http://example.org/Cat||http://example.org/address",
{ predicates: [
type: "string", {
maxCardinality: 1, type: "string",
minCardinality: 1, maxCardinality: 1,
predicateUri: "http://example.org/street", minCardinality: 1,
readablePredicate: "street", iri: "http://example.org/street",
}, readablePredicate: "street",
{ },
type: "string", {
maxCardinality: 1, type: "string",
minCardinality: 1, maxCardinality: 1,
predicateUri: "http://example.org/houseNumber", minCardinality: 1,
readablePredicate: "houseNumber", iri: "http://example.org/houseNumber",
}, readablePredicate: "houseNumber",
{ },
type: "number", {
maxCardinality: 1, type: "number",
minCardinality: 1, maxCardinality: 1,
predicateUri: "http://example.org/floor", minCardinality: 1,
readablePredicate: "floor", iri: "http://example.org/floor",
}, readablePredicate: "floor",
], },
}, ],
},
}; };

@ -6,65 +6,66 @@ import type { Schema } from "@nextgraph-monorepo/ng-shex-orm";
* ============================================================================= * =============================================================================
*/ */
export const personShapeSchema: Schema = { export const personShapeSchema: Schema = {
"http://example.org/Person": { "http://example.org/Person": {
iri: "http://example.org/Person", iri: "http://example.org/Person",
predicates: [ predicates: [
{ {
type: "literal", type: "literal",
literalValue: ["http://example.org/Person"], literalValue: ["http://example.org/Person"],
maxCardinality: 1, maxCardinality: 1,
minCardinality: 1, minCardinality: 1,
predicateUri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", iri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type",
readablePredicate: "type", readablePredicate: "type",
}, },
{ {
type: "string", type: "string",
maxCardinality: 1, maxCardinality: 1,
minCardinality: 1, minCardinality: 1,
predicateUri: "http://example.org/name", iri: "http://example.org/name",
readablePredicate: "name", readablePredicate: "name",
}, },
{ {
type: "nested", type: "nested",
nestedShape: "http://example.org/Person||http://example.org/address", nestedShape:
maxCardinality: 1, "http://example.org/Person||http://example.org/address",
minCardinality: 1, maxCardinality: 1,
predicateUri: "http://example.org/address", minCardinality: 1,
readablePredicate: "address", iri: "http://example.org/address",
}, readablePredicate: "address",
{ },
type: "boolean", {
maxCardinality: 1, type: "boolean",
minCardinality: 1, maxCardinality: 1,
predicateUri: "http://example.org/hasChildren", minCardinality: 1,
readablePredicate: "hasChildren", iri: "http://example.org/hasChildren",
}, readablePredicate: "hasChildren",
{ },
type: "number", {
maxCardinality: 1, type: "number",
minCardinality: 1, maxCardinality: 1,
predicateUri: "http://example.org/numberOfHouses", minCardinality: 1,
readablePredicate: "numberOfHouses", iri: "http://example.org/numberOfHouses",
}, readablePredicate: "numberOfHouses",
], },
}, ],
"http://example.org/Person||http://example.org/address": { },
iri: "http://example.org/Person||http://example.org/address", "http://example.org/Person||http://example.org/address": {
predicates: [ iri: "http://example.org/Person||http://example.org/address",
{ predicates: [
type: "string", {
maxCardinality: 1, type: "string",
minCardinality: 1, maxCardinality: 1,
predicateUri: "http://example.org/street", minCardinality: 1,
readablePredicate: "street", iri: "http://example.org/street",
}, readablePredicate: "street",
{ },
type: "string", {
maxCardinality: 1, type: "string",
minCardinality: 1, maxCardinality: 1,
predicateUri: "http://example.org/houseNumber", minCardinality: 1,
readablePredicate: "houseNumber", iri: "http://example.org/houseNumber",
}, readablePredicate: "houseNumber",
], },
}, ],
},
}; };

@ -6,132 +6,132 @@ import type { Schema } from "@nextgraph-monorepo/ng-shex-orm";
* ============================================================================= * =============================================================================
*/ */
export const testShapeSchema: Schema = { export const testShapeSchema: Schema = {
"http://example.org/TestObject": { "http://example.org/TestObject": {
iri: "http://example.org/TestObject", iri: "http://example.org/TestObject",
predicates: [ predicates: [
{ {
type: "literal", type: "literal",
literalValue: ["http://example.org/TestObject"], literalValue: ["http://example.org/TestObject"],
maxCardinality: 1, maxCardinality: 1,
minCardinality: 1, minCardinality: 1,
predicateUri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", iri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type",
readablePredicate: "type", readablePredicate: "type",
extra: true, extra: true,
}, },
{ {
type: "string", type: "string",
maxCardinality: 1, maxCardinality: 1,
minCardinality: 1, minCardinality: 1,
predicateUri: "http://example.org/stringValue", iri: "http://example.org/stringValue",
readablePredicate: "stringValue", readablePredicate: "stringValue",
}, },
{ {
type: "number", type: "number",
maxCardinality: 1, maxCardinality: 1,
minCardinality: 1, minCardinality: 1,
predicateUri: "http://example.org/numValue", iri: "http://example.org/numValue",
readablePredicate: "numValue", readablePredicate: "numValue",
}, },
{ {
type: "boolean", type: "boolean",
maxCardinality: 1, maxCardinality: 1,
minCardinality: 1, minCardinality: 1,
predicateUri: "http://example.org/boolValue", iri: "http://example.org/boolValue",
readablePredicate: "boolValue", readablePredicate: "boolValue",
}, },
{ {
type: "number", type: "number",
maxCardinality: -1, maxCardinality: -1,
minCardinality: 0, minCardinality: 0,
predicateUri: "http://example.org/arrayValue", iri: "http://example.org/arrayValue",
readablePredicate: "arrayValue", readablePredicate: "arrayValue",
}, },
{ {
type: "nested", type: "nested",
nestedShape: nestedShape:
"http://example.org/TestObject||http://example.org/objectValue", "http://example.org/TestObject||http://example.org/objectValue",
maxCardinality: 1, maxCardinality: 1,
minCardinality: 1, minCardinality: 1,
predicateUri: "http://example.org/objectValue", iri: "http://example.org/objectValue",
readablePredicate: "objectValue", readablePredicate: "objectValue",
}, },
{ {
type: "nested", type: "nested",
nestedShape: nestedShape:
"http://example.org/TestObject||http://example.org/anotherObject", "http://example.org/TestObject||http://example.org/anotherObject",
maxCardinality: -1, maxCardinality: -1,
minCardinality: 0, minCardinality: 0,
predicateUri: "http://example.org/anotherObject", iri: "http://example.org/anotherObject",
readablePredicate: "anotherObject", readablePredicate: "anotherObject",
}, },
{ {
type: "eitherOf", type: "eitherOf",
eitherOf: [ eitherOf: [
{ {
type: "string", type: "string",
}, },
{ {
type: "number", type: "number",
}, },
],
maxCardinality: 1,
minCardinality: 1,
iri: "http://example.org/numOrStr",
readablePredicate: "numOrStr",
},
{
type: "literal",
literalValue: ["lit1", "lit2"],
maxCardinality: 1,
minCardinality: 1,
iri: "http://example.org/lit1Or2",
readablePredicate: "lit1Or2",
},
], ],
maxCardinality: 1, },
minCardinality: 1, "http://example.org/TestObject||http://example.org/objectValue": {
predicateUri: "http://example.org/numOrStr", iri: "http://example.org/TestObject||http://example.org/objectValue",
readablePredicate: "numOrStr", predicates: [
}, {
{ type: "string",
type: "literal", maxCardinality: 1,
literalValue: ["lit1", "lit2"], minCardinality: 1,
maxCardinality: 1, iri: "http://example.org/nestedString",
minCardinality: 1, readablePredicate: "nestedString",
predicateUri: "http://example.org/lit1Or2", },
readablePredicate: "lit1Or2", {
}, type: "number",
], maxCardinality: 1,
}, minCardinality: 1,
"http://example.org/TestObject||http://example.org/objectValue": { iri: "http://example.org/nestedNum",
iri: "http://example.org/TestObject||http://example.org/objectValue", readablePredicate: "nestedNum",
predicates: [ },
{ {
type: "string", type: "number",
maxCardinality: 1, maxCardinality: -1,
minCardinality: 1, minCardinality: 0,
predicateUri: "http://example.org/nestedString", iri: "http://example.org/nestedArray",
readablePredicate: "nestedString", readablePredicate: "nestedArray",
}, },
{ ],
type: "number", },
maxCardinality: 1, "http://example.org/TestObject||http://example.org/anotherObject": {
minCardinality: 1, iri: "http://example.org/TestObject||http://example.org/anotherObject",
predicateUri: "http://example.org/nestedNum", predicates: [
readablePredicate: "nestedNum", {
}, type: "string",
{ maxCardinality: 1,
type: "number", minCardinality: 1,
maxCardinality: -1, iri: "http://example.org/prop1",
minCardinality: 0, readablePredicate: "prop1",
predicateUri: "http://example.org/nestedArray", },
readablePredicate: "nestedArray", {
}, type: "number",
], maxCardinality: 1,
}, minCardinality: 1,
"http://example.org/TestObject||http://example.org/anotherObject": { iri: "http://example.org/prop2",
iri: "http://example.org/TestObject||http://example.org/anotherObject", readablePredicate: "prop2",
predicates: [ },
{ ],
type: "string", },
maxCardinality: 1,
minCardinality: 1,
predicateUri: "http://example.org/prop1",
readablePredicate: "prop1",
},
{
type: "number",
maxCardinality: 1,
minCardinality: 1,
predicateUri: "http://example.org/prop2",
readablePredicate: "prop2",
},
],
},
}; };

@ -84,7 +84,7 @@ function flattenSchema(shapes: Shape[]): ShapeSchema {
); );
for (const pred of nestedSchemaPredicates) { for (const pred of nestedSchemaPredicates) {
const newId = shape.iri + "||" + pred.predicateUri; const newId = shape.iri + "||" + pred.iri;
// Recurse // Recurse
const flattened = flattenSchema([ const flattened = flattenSchema([

@ -99,7 +99,7 @@ export const ShexJSchemaTransformerCompact = ShexJTraverser.createTransformer<
for (const extra of _shape.extra || []) { for (const extra of _shape.extra || []) {
const extraPredicate = compactShape.predicates.find( const extraPredicate = compactShape.predicates.find(
(p) => p.predicateUri === extra (p) => p.iri === extra
); );
if (extraPredicate) extraPredicate.extra = true; if (extraPredicate) extraPredicate.extra = true;
} }

@ -25,7 +25,7 @@ export interface Predicate {
/** Type of property. */ /** Type of property. */
type: DataType["type"] | "nested" | "eitherOf"; type: DataType["type"] | "nested" | "eitherOf";
/** The RDF predicate URI. */ /** The RDF predicate URI. */
predicateUri: string; iri: string;
/** The alias of the `predicateUri` when serialized to a JSON object. */ /** The alias of the `predicateUri` when serialized to a JSON object. */
readablePredicate: string; readablePredicate: string;
/** The required literal value(s), if type is `literal`. Others are allowed, if `extra` is true. */ /** The required literal value(s), if type is `literal`. Others are allowed, if `extra` is true. */

Loading…
Cancel
Save