diff --git a/packages/jsonld-dataset-proxy/src/LdoJsonldContext.ts b/packages/jsonld-dataset-proxy/src/LdoJsonldContext.ts new file mode 100644 index 0000000..75ce20f --- /dev/null +++ b/packages/jsonld-dataset-proxy/src/LdoJsonldContext.ts @@ -0,0 +1,14 @@ +import type { ContextDefinition, ExpandedTermDefinition } from "jsonld"; + +export interface LdoJsonldContext extends ContextDefinition { + [key: string]: + | null + | string + | LdoJsonldContextExpandedTermDefinition + | LdoJsonldContext[keyof LdoJsonldContext]; +} + +export type LdoJsonldContextExpandedTermDefinition = ExpandedTermDefinition & { + "@isCollection": boolean; + "@isOptional": boolean; +}; diff --git a/packages/jsonld-dataset-proxy/test/scopedExampleData.ts b/packages/jsonld-dataset-proxy/test/scopedExampleData.ts new file mode 100644 index 0000000..57e718c --- /dev/null +++ b/packages/jsonld-dataset-proxy/test/scopedExampleData.ts @@ -0,0 +1,226 @@ +import type { ContextDefinition } from "jsonld"; +import type { Schema } from "shexj"; +import type { LdoJsonldContext } from "../src/LdoJsonldContext"; + +export interface Bender { + "@id"?: string; + "@context"?: ContextDefinition; + type: "Bender"; + element: Element; + friend: (Bender | NonBender | Avatar)[]; +} + +export interface Avatar { + "@id"?: string; + "@context"?: ContextDefinition; + type: "Avatar"; + element: Element[]; + friend: (Bender | NonBender | Avatar)[]; +} + +export interface NonBender { + "@id"?: string; + "@context"?: ContextDefinition; + type: "Avatar"; + friend: (Bender | NonBender | Avatar)[]; +} + +export type Element = + | { + "@id": "VideoObject"; + } + | { + "@id": "ImageObject"; + } + | { + "@id": "MediaObject"; + } + | { + "@id": "CreativeWork"; + }; + +// No need to fully define the schema because this library doesn't use it +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore +export const patientSchema: Schema = {}; + +export const patientContext: LdoJsonldContext = { + Bender: { + "@id": "https://example.com/Bender", + "@context": { + type: { + "@id": "@type", + }, + element: { + "@id": "https://example.com/element", + }, + friend: { + "@id": "https://example.com/friend", + } + }, + }, + + Patient: "http://hl7.org/fhir/Patient", + subject: { "@id": "http://hl7.org/fhir/subject", "@type": "@id" }, + name: { + "@id": "http://hl7.org/fhir/name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@container": "@set", + }, + langName: { + "@id": "http://hl7.org/fhir/langName", + "@type": "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString", + "@container": "@set", + }, + birthdate: { + "@id": "http://hl7.org/fhir/birthdate", + "@type": "http://www.w3.org/2001/XMLSchema#date", + }, + age: { + "@id": "http://hl7.org/fhir/age", + "@type": "http://www.w3.org/2001/XMLSchema#integer", + }, + isHappy: { + "@id": "http://hl7.org/fhir/isHappy", + "@type": "http://www.w3.org/2001/XMLSchema#boolean", + }, + roommate: { + "@id": "http://hl7.org/fhir/roommate", + "@type": "@id", + "@container": "@set", + }, + notes: { + "@id": "http://hl7.org/fhir/notes", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + langNotes: { + "@id": "http://hl7.org/fhir/langNotes", + "@type": "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString", + }, +}; + +export const patientData = ` +@prefix example: . +@prefix fhir: . +@prefix xsd: . +@prefix rdf: . + +example:Observation1 + fhir:notes "Cool Notes"^^xsd:string ; + fhir:subject example:Patient1 . + +example:Patient1 + rdf:type fhir:Patient ; + fhir:name "Garrett"^^xsd:string, "Bobby"^^xsd:string, "Ferguson"^^xsd:string ; + fhir:birthdate "1986-01-01"^^xsd:date ; + fhir:age "35"^^xsd:integer ; + fhir:isHappy "true"^^xsd:boolean ; + fhir:roommate example:Patient2, example:Patient3 . + +example:Patient2 + rdf:type fhir:Patient ; + fhir:name "Rob"^^xsd:string ; + fhir:birthdate "1987-01-01"^^xsd:date ; + fhir:age "34"^^xsd:integer ; + fhir:isHappy "false"^^xsd:boolean ; + fhir:roommate example:Patient1, example:Patient3 . + +example:Patient3 + rdf:type fhir:Patient ; + fhir:name "Amy"^^xsd:string ; + fhir:birthdate "1988-01-01"^^xsd:date ; + fhir:age "33"^^xsd:integer ; + fhir:isHappy "true"^^xsd:boolean . +`; + +export const patientDataWithBlankNodes = ` +@prefix example: . +@prefix fhir: . +@prefix xsd: . + +example:Observation1 + fhir:notes "Cool Notes"^^xsd:string ; + fhir:subject _:Patient1 . + +_:Patient1 + fhir:name "Garrett"^^xsd:string, "Bobby"^^xsd:string, "Ferguson"^^xsd:string ; + fhir:birthdate "1986-01-01"^^xsd:date ; + fhir:age "35"^^xsd:integer ; + fhir:isHappy "true"^^xsd:boolean ; + fhir:roommate _:Patient2, _:Patient3 . + +_:Patient2 + fhir:name "Rob"^^xsd:string ; + fhir:birthdate "1987-01-01"^^xsd:date ; + fhir:age "34"^^xsd:integer ; + fhir:isHappy "false"^^xsd:boolean ; + fhir:roommate _:Patient1, _:Patient3 . + +_:Patient3 + fhir:name "Amy"^^xsd:string ; + fhir:birthdate "1988-01-01"^^xsd:date ; + fhir:age "33"^^xsd:integer ; + fhir:isHappy "true"^^xsd:boolean . +`; + +export const tinyPatientData = ` +@prefix example: . +@prefix fhir: . +@prefix xsd: . + +example:Observation1 + fhir:subject example:Patient1 . + +example:Patient1 + fhir:name "Garrett"^^xsd:string ; + fhir:roommate example:Patient2 . + +example:Patient2 + fhir:name "Rob"^^xsd:string ; + fhir:roommate example:Patient1 . +`; + +export const tinyArrayPatientData = ` +@prefix example: . +@prefix fhir: . +@prefix xsd: . + +example:Patient1 + fhir:name "Garrett"^^xsd:string, "Bobby"^^xsd:string, "Ferguson"^^xsd:string . +`; + +export const tinyPatientDataWithBlankNodes = ` +@prefix example: . +@prefix fhir: . +@prefix xsd: . + +example:Observation1 + fhir:subject _:Patient1 . + +_:Patient1 + fhir:name "Garrett"^^xsd:string ; + fhir:roommate _:Patient2 . + +_:Patient2 + fhir:name "Rob"^^xsd:string ; + fhir:roommate _:Patient1 . +`; + +export const tinyPatientDataWithLanguageTags = ` +@prefix example: . +@prefix fhir: . +@prefix xsd: . + +example:Observation1 + fhir:subject example:Patient1 ; + fhir:langNotes "Cool Notes" ; + fhir:langNotes "Cooler Notes"@en ; + fhir:langNotes "Notas Geniales"@es ; + fhir:langNotes "Notes Sympas"@fr . + +example:Patient1 + fhir:langName "Jon" ; + fhir:langName "John"@en ; + fhir:langName "Juan"@es ; + fhir:langName "Jean"@fr . +`;