All Projects → COALAIP → js-coalaip

COALAIP / js-coalaip

Licence: MIT license
Javascript implementation for COALA IP

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to js-coalaip

nft.storage
😋 Free decentralized storage and bandwidth for NFTs on IPFS and Filecoin.
Stars: ✭ 309 (+1616.67%)
Mutual labels:  metadata, persistence
metad
Metad is a metadata server, support self semantic.
Stars: ✭ 77 (+327.78%)
Mutual labels:  metadata
ethrelay
Ethereum smart contracts that enable the verification of transactions of a "target" blockchain on a different "verifying" blockchain in a trustless and decentralized way
Stars: ✭ 34 (+88.89%)
Mutual labels:  blockchain-technology
pipm
Python dependency management workflow using setup.cfg and requirements files without reinventing the wheels
Stars: ✭ 30 (+66.67%)
Mutual labels:  metadata
envoke
A demo client-side application for persisting music metadata and rights to BigchainDB/IPDB.
Stars: ✭ 17 (-5.56%)
Mutual labels:  metadata
sched
⏳ a high performance reliable task scheduling package in Go.
Stars: ✭ 46 (+155.56%)
Mutual labels:  persistence
SilentETHMiner
A Silent (Hidden) Ethereum (ETH & ETC) Miner Builder
Stars: ✭ 219 (+1116.67%)
Mutual labels:  persistence
DeFiDefender
基于分布式身份的微贷联合风控平台
Stars: ✭ 25 (+38.89%)
Mutual labels:  blockchain-technology
metadata-one-liners
retrive metadata endpoint data with these one liners.
Stars: ✭ 38 (+111.11%)
Mutual labels:  metadata
unfurl
Extract rich metadata from URLs
Stars: ✭ 41 (+127.78%)
Mutual labels:  metadata
exempi
Exempi: XMP SDK (freedesktop mirror)
Stars: ✭ 19 (+5.56%)
Mutual labels:  metadata
MetadataRemover
Android App to remove images' metadata
Stars: ✭ 42 (+133.33%)
Mutual labels:  metadata
meta-extractor
Super simple and fast html page meta data extractor with low memory footprint
Stars: ✭ 38 (+111.11%)
Mutual labels:  metadata
hasura-sdk
Hasura Schema & Metadata Typescript SDK
Stars: ✭ 21 (+16.67%)
Mutual labels:  metadata
IFIscripts
Detailed documentation is available here: http://ifiscripts.readthedocs.io/en/latest/index.html
Stars: ✭ 46 (+155.56%)
Mutual labels:  metadata
chainDB
A noSQL database based on blockchain technology
Stars: ✭ 13 (-27.78%)
Mutual labels:  blockchain-technology
goexif2
MAINTAINER WANTED -- Decode embedded EXIF meta data from image files written in Pure Golang
Stars: ✭ 35 (+94.44%)
Mutual labels:  metadata
geoflow
R engine to orchestrate and run (meta)data workflows
Stars: ✭ 28 (+55.56%)
Mutual labels:  metadata
metadata-tools
Contains tools for metadata, such as Roslyn's metadata visualizer.
Stars: ✭ 37 (+105.56%)
Mutual labels:  metadata
conp-dataset
📂 A DataLad dataset for CONP
Stars: ✭ 17 (-5.56%)
Mutual labels:  metadata

Javascript implementation for COALA IP.

Install

This project is available through npm. To install run

> npm install coalaip --save

Linked Metadata

This project provides tools for structuring metadata, using schema definitions with the ability to set arbitrary properties on type instances. Metadata is translatable to linked-data formats (e.g. IPLD) for persistence to different databases/storage layers.

Module Overview

Core

This module contains the types outlined in the specification. Additional types have been included because types in the specification inherit from them or certain properties expect other types.

Music

This module extends the core module with the following types: MusicAlbum, MusicComposition, MusicGroup, MusicPlaylist, MusicRecording, and MusicRelease.

Getting Started

Some code to get started structuring metadata. In order to persist to a storage layer, consider using Constellate.

Create a Person

const Person = require('coalaip/lib/core').Person

const man = new Person()
man.setGivenName('John')
man.setFamilyName('Smith')
man.setEmail('[email protected]')
man.set('arbitrary', 'value')

// or if the object is already structured
const woman = {
  givenName: 'Jane',
  familyName: 'Smith',
  email: '[email protected]',
  arbitrary: 'value'
}

const person = new Person()
person.withData(woman)

Access the Person's data

console.log(man.data())

// {
//   "@context": "http://schema.org",
//   "@type": "Person",
//   "givenName": "John",
//   "familyName": "Smith",
//   "email": "[email protected]",
//   "arbitrary": "value"
// }

// or if you want the data canonically ordered...

console.log(man.dataOrdered())

// {
//   "@context": "http://schema.org",
//   "@type": "Person",
//   "arbitrary": "value",
//   "email": "[email protected]",
//   "familyName": "Smith",
//   "givenName": "John"
// }

Add/Set sub-instances

addProperty for property that expects an array

setProperty for property that expects a single value

const {
  MusicComposition,
  MusicGroup,
  MusicRecording
} = require('coalaip/lib/music')

// 'member' expects an array of Parties
const group = new MusicGroup()
group.setDescription('descriptive')
group.setName('Beatles')
group.addMember(man)
group.path = '<placeholder group path>'

const composition = new MusicComposition()
// 'composer' expects an array of Parties
composition.addComposer(man)
composition.path = '<placeholder composition path>'

const recording = new MusicRecording()
// 'byArtist' expects an array of MusicGroups
recording.addByArtist(group)
// 'recordingOf' expects a MusicComposition
recording.setRecordingOf(comp)

console.log(recording.data())

// {  
//   "@context": "http://coalaip.org",
//   "@type": "MusicRecording",
//   "byArtist": [  
//     {  
//       "@context": "http://schema.org",
//       "@type": "MusicGroup",
//       "name": "Beatles",
//       "description": "descriptive",
//       "member": [  
//         {  
//           "@context": "http://schema.org",
//           "@type": "Person",
//           "givenName": "John",
//           "familyName": "Smith",
//           "email": "[email protected]"
//         }
//       ]
//     }
//   ],
//   "recordingOf": {  
//     "@context": "http://coalaip.org",
//     "@type": "MusicComposition",
//     "composer": [  
//       {  
//         "@context": "http://schema.org",
//         "@type": "Person",
//         "givenName": "John",
//         "familyName": "Smith",
//         "email": "[email protected]"
//       }
//     ]
//   }
// }

// and the ipld...

console.log(recording.ipld())

// {  
//   "@context": "http://coalaip.org",
//   "@type": "MusicRecording",
//   "byArtist": [  
//     {  
//       "/": "<placeholder group path>"
//     }
//   ],
//   "recordingOf": {  
//     "/": "<placeholder composition path>"
//   }
// }

Access sub-instances

instance.subInstances() returns a flattened array with instance and the unique instances nested within instance. To ease handling of metadata in other programs, the instances are ordered based on the other instances they contain.

const metadata = recording.subInstances()
console.log(metadata)

// [man, group, composition, recording]

// (1) man contains no other instances
// (2,3) group and composition contain man
// (4) recording contains composition and group
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].