https://github.com/solidlabresearch/rdf-package
Packaging for RDF
https://github.com/solidlabresearch/rdf-package
Last synced: 11 months ago
JSON representation
Packaging for RDF
- Host: GitHub
- URL: https://github.com/solidlabresearch/rdf-package
- Owner: SolidLabResearch
- Created: 2024-02-07T15:34:24.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2024-02-13T09:39:55.000Z (almost 2 years ago)
- Last Synced: 2025-01-17T07:09:34.541Z (about 1 year ago)
- Language: TypeScript
- Size: 271 KB
- Stars: 1
- Watchers: 4
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: Readme.md
Awesome Lists containing this project
README
# RDF-Package
This library enables the packaging of RDF graphs with provenance, usage control, signature and other custom RDF metadata.
## Installation
This process depends on Node v21 because of a dependency on the crypto module.
The inclusion of jest-rdf is because of a bug that fails compilation. This will be removed in the future.
```bash
npm install jest-rdf SolidLabResearch/RDF-Package
```
## Usage
```js
const triples = [ df.triple(
df.namedNode('http://example.org/ns#a'),
df.namedNode('http://example.org/ns#b'),
df.namedNode('http://example.org/ns#c')
), df.triple(
df.namedNode('http://example.org/ns#x'),
df.namedNode('http://example.org/ns#y'),
df.namedNode('http://example.org/ns#z')
)]
const personURI = "http://people.org/#me"
const dataspaceURI = "http://dataspace.org/#me"
// Packaging
const packagedContent = await pack.packageContent(triples, {
actor: personURI,
origin: dataspaceURI
})
console.log(`
###Packaged##
${await pack.serializePackage(packagedContent)}
`)
// Singing
const keyPair = await pack.generateKeyPair();
const signaturePackage = await pack.signContent(
packagedContent,
personURI,
keyPair.privateKey
)
console.log(`
###Signed###
${await pack.serializePackage(signaturePackage)}
`)
// Verifying
const keyMap = new Map([[personURI, keyPair.publicKey]])
const verified = await pack.verifySignatures(signaturePackage, keyMap)
console.log(`
###Verified###
${verified}
`)
// Unpackaging
const originalContent = await pack.unpackageContent(signaturePackage)
console.log(`
###Unpackaged###
${await pack.serializePackage(originalContent)}
`)
```
# Example package
## N3
## Trig
```
@prefix : .
@prefix pack: .
@prefix sign: .
@prefix pol: .
@prefix xsd: .
@prefix vcard: .
@prefix lingua: .
@prefix var: .
[] pack:package _:pack1 .
_:pack1 {
[] pack:content _:content1 ;
pack:origin :Endpoint ;
pack:createdAt "2024-01-08T17:08:52.165Z"^^xsd:dateTime ;
pack:hasContentSignature [
a sign:Signature ;
sign:issuer :Alice ;
sign:created "2024-01-08T17:08:52.166Z"^^xsd:dateTime ;
sign:proofValue "sSJ0xHT7yH2MeYjI6I7fVy+PRfh/EDJkTEOhbCA2BYcd+GBJRD1BQV1rwVe69cNPHhtvGKbITIf7TBlbpkE6YANMNNS2aSQMw8i6TLTXa16zhukp+V1nLYKE/51rt/Us"
] .
}
_:content1 {
:Bob vcard:bday "2000-01-01T09:00:00.000Z"^^xsd:dateTime .
}
```