parent
fa141fed5d
commit
33c2c5cf9f
@ -0,0 +1,106 @@ |
||||
import { parseRdf } from "@ldo/ldo"; |
||||
import { namedNode, quad as createQuad } from "@rdfjs/data-model"; |
||||
import { DataResult } from "../requester/requesterResults/DataResult"; |
||||
import { TurtleFormattingError } from "../requester/requesterResults/DataResult"; |
||||
import type { Dataset } from "@rdfjs/types"; |
||||
import { isContainerUri } from "./uriTypes"; |
||||
import { TransactionalDataset } from "@ldo/subscribable-dataset"; |
||||
|
||||
const ldpContains = namedNode("http://www.w3.org/ns/ldp#contains"); |
||||
const rdfType = namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"); |
||||
const ldpResource = namedNode("http://www.w3.org/ns/ldp#Resource"); |
||||
const ldpContainer = namedNode("http://www.w3.org/ns/ldp#Container"); |
||||
const ldpBasicContainer = namedNode("http://www.w3.org/ns/ldp#BasicContainer"); |
||||
|
||||
export function getParentUri(uri: string): string | undefined { |
||||
const urlObject = new URL(uri); |
||||
const pathItems = urlObject.pathname.split("/"); |
||||
if ( |
||||
pathItems.length < 2 || |
||||
(pathItems.length === 2 && pathItems[1].length === 0) |
||||
) { |
||||
return undefined; |
||||
} |
||||
if (pathItems[pathItems.length - 1] === "") { |
||||
pathItems.pop(); |
||||
} |
||||
pathItems.pop(); |
||||
urlObject.pathname = `${pathItems.join("/")}/`; |
||||
return urlObject.toString(); |
||||
} |
||||
|
||||
export function getSlug(uri: string): string { |
||||
const urlObject = new URL(uri); |
||||
const pathItems = urlObject.pathname.split("/"); |
||||
return pathItems[pathItems.length - 1]; |
||||
} |
||||
|
||||
export function deleteResourceRdfFromContainer( |
||||
resourceUri: string, |
||||
dataset: Dataset, |
||||
) { |
||||
const parentUri = getParentUri(resourceUri); |
||||
if (parentUri) { |
||||
const parentNode = namedNode(parentUri); |
||||
const resourceNode = namedNode(resourceUri); |
||||
dataset.delete( |
||||
createQuad(parentNode, ldpContains, resourceNode, parentNode), |
||||
); |
||||
dataset.deleteMatches(resourceNode, undefined, undefined, parentNode); |
||||
} |
||||
} |
||||
|
||||
export function addResourceRdfToContainer( |
||||
resourceUri: string, |
||||
dataset: Dataset, |
||||
) { |
||||
const parentUri = getParentUri(resourceUri); |
||||
console.log("Before thing"); |
||||
console.log(dataset.toString()); |
||||
if (parentUri) { |
||||
const parentNode = namedNode(parentUri); |
||||
const resourceNode = namedNode(resourceUri); |
||||
dataset.add(createQuad(parentNode, ldpContains, resourceNode, parentNode)); |
||||
console.log("In Between thing"); |
||||
console.log(dataset.toString()); |
||||
console.log((dataset as TransactionalDataset).getChanges()); |
||||
dataset.add(createQuad(resourceNode, rdfType, ldpResource, parentNode)); |
||||
if (isContainerUri(resourceUri)) { |
||||
dataset.add( |
||||
createQuad(resourceNode, rdfType, ldpBasicContainer, parentNode), |
||||
); |
||||
dataset.add(createQuad(resourceNode, rdfType, ldpContainer, parentNode)); |
||||
} |
||||
} |
||||
console.log("After thing"); |
||||
console.log(dataset.toString()); |
||||
} |
||||
|
||||
export async function addRawTurtleToDataset( |
||||
rawTurtle: string, |
||||
dataset: Dataset, |
||||
baseUri: string, |
||||
): Promise<DataResult | TurtleFormattingError> { |
||||
let loadedDataset: Dataset; |
||||
try { |
||||
loadedDataset = await parseRdf(rawTurtle, { |
||||
baseIRI: baseUri, |
||||
}); |
||||
} catch (err) { |
||||
return new TurtleFormattingError( |
||||
baseUri, |
||||
err instanceof Error ? err.message : "Failed to parse rdf", |
||||
); |
||||
} |
||||
|
||||
const graphNode = namedNode(baseUri); |
||||
// Destroy all triples that were once a part of this resouce
|
||||
dataset.deleteMatches(undefined, undefined, undefined, graphNode); |
||||
// Add the triples from the fetched item
|
||||
dataset.addAll( |
||||
loadedDataset.map((quad) => |
||||
createQuad(quad.subject, quad.predicate, quad.object, graphNode), |
||||
), |
||||
); |
||||
return new DataResult(baseUri); |
||||
} |
@ -0,0 +1,3 @@ |
||||
import { config } from "dotenv"; |
||||
|
||||
config(); |
Loading…
Reference in new issue