🚀 Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more
Socket
Book a DemoInstallSign in
Socket

sssom-js

Package Overview
Dependencies
Maintainers
1
Versions
18
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

sssom-js

Simple Standard for Sharing Ontology Mappings (SSOM) JavaScript library

0.4.4
latest
Source
npm
Version published
Weekly downloads
17
6.25%
Maintainers
1
Weekly downloads
 
Created
Source

sssom-js

Test NPM Version

Simple Standard for Sharing Ontology Mappings (SSOM) JavaScript library

This Node package provides methods and a command line client to process mappings in SSSOM format.

It implements parsing variants of SSSOM (TSV, CSV and JSON) with validation and transformation to multiple formats, including JSKOS and RDF.

Table of Contents

Install

Requires Node.js >= 20.19.

npm install sssom-js

For RDF export in the command line client also install jsonld2rdf.

npm install jsonld2rdf

The web interface can be deployed on any web server by copying directory docs/ of the source code repository.

Usage

Command line

The package includes a command line client to parse and convert SSSOM. Usage and options:

sssom [options] [<mappings-file> [<metadata-file>]] 
shortlongargumentdescription
-f--fromformatinput format (csv, tsv, json)
-t--toformatoutput format (json, ndjson, jskos, ndjskos, nq, nt, ttl)
-o--outputfileoutput filename or default - for stdout
-p--propagateadd propagatable slots to mappings
-b--liberalparse less strict than the specification
-c--curiefileadditional CURIE map (JSON or YAML file)
-s--schemesfileJSKOS concept schemes to detect
-m--mappingsemit mappings only
-v--verboseemit error verbosely
-j--json-errorsemit errors detailled in JSON
-h--helpemit usage information
-V--versionemit the version number

### Web interface

A web interface to validate and transform SSSOM/TSV is made available at <https://gbv.github.io/sssom-js/>. The application is not included in the package release at npm.

### API

~~~js
import { parseSSSOM, TSVReader, toJskosRegistry, toJskosMapping } from "sssom-js"

parseSSSOM (input, options)

This asynchronous function parses SSSOM in an input format from a stream or file and returns a mapping set on success. The result should directly be serializable as SSSOM/JSON (or as JSKOS with option to set to jskos).

import { parseSSSOM } from "sssom-js"
const { mappings, ...metadata } = await parseSSSOM(process.stdin)

An untruthy input value will skip processing of mappings so only the mapping set is returned:

const metadata = await parseSSSOM(false, { metadata: "metadata.sssom.yaml" })

See below for a description of common options. Additional options are:

  • metadataHandler (function) called for parsed metadata
  • mappingHandler (function) called for each parsed mapping

parseSSSOMString (input, options)

This is a utility function to parse SSSOM from a string. Equivalent implementation in NodeJS:

parseSSSOMString = (input, options={}) => parseSSSOM(Readable.from(input), options)

TSVReader

This event emitter parses SSSOM/TSV from a stream and emits metadata and mapping events:

import fs from "fs"
import { TSVReader } from "sssom-js"

const input = fs.createReadStream("test/valid/minimal.sssom.tsv")
new TSVReader(input)
  .on("metadata", console.log)
  .on("mapping", console.log)
  .on("error", console.error)
  .on("end", console.log)

new TSVReader(input, { delimiter: "," }) // parse SSSOM/CSV

The following parsing options can be given with a second optional argument object:

  • metadata (must be an object)
  • curie (must be an object)
  • propagate (boolean)
  • liberal (boolean)
  • delimiter (string)
  • storeMappings (boolean) whether to store parsed mappings and include them in the result

toJskosRegistry

Convert a parsed MappingSet to a JSKOS Registry object.

toJskosMapping

Convert a parsed Mapping to a JSKOS Concept Mapping object.

Options

The following options are supported by both the command line client, and the API:

propagate

Enables propagation of mapping set slots. False by default.

liberal

Enabling liberal parsing will

  • allow empty mappings block in SSSOM/TSV (but still read and validate the metadata block)
  • not require mapping set slots (neither mapping_set_id nor license) so the metadata block can be empty
  • not require mapping slot mapping_justification

curie

If you want to allow all CURIE prefixes from Bioregistry without explicitly defining them in curie_map you can download and convert the current list for instance with command line tools curl and jq this way (requires local copy of file bioregistry.jq) and then reference result file bioregistry.json with option --curie:

curl -sL https://w3id.org/biopragmatics/bioregistry.epm.json | \
jq -Sf bioregistry.jq > bioregistry.json

schemes

JSKOS Concept Schemes to detect when transforming to JSKOS

mappings

Emit mappings only. Metadata is parsed and validated nevertheless.

metadata

Mapping set metadata file in JSON or YAML format for external metadata mode. Is passed as second argument in the command line client or as named option in the API. The API also accepts a parsed object.

Validation errors

Validation errors are objects with three fields:

  • message an error message
  • value an optional value that caused the error
  • position an optional object mapping locator types to error locations. The following locator types are used:
    • line: a line number given as string, starting with 1 for the first line.
    • jsonpointer: a JSON Pointer to the malformed YAML or JSON element, for instance /creator_id.
    • rfc5147: line span conforming to RFC 5147, for instance line=2,4 for line 3 (!) to 4.

Formats

Input format and output format can be specified via command line options from and to, and in the web interface.

of the mappings, given as string. The following formats are supported so far:

formatdescriptionfromtoAPI
tsvSSSOM/TSVyes-yes
csvSSSOM/CSVyes-yes
jsonSSSOM/JSON/JSON-LDyesyesyes
ndjsonmetadata and mappings on individual lines (SSSOM/JSON)to-
jskosJSKOS-toyes
ndjskosmetadata and mappings on individual lines (JSKOS)to-
nqNQuads of raw mappings-to-
ntNTriples-to (requires jsonld2rdf)-
ttlRDF/Turtle-to (requires jsonld2rdf)-

If not specified, formats are guessed from file name with fallback to tsv (from) and ndjson (to).

Formats json, jskos, nt, and ttl require to fully load the input into memory for processing, the other formats support streaming processing.

NQuads format (nq) is limited to the raw mapping statements without metadata and additional slots except subject_id, predicate_id, object_id, and optional mapping_set_id. Combine with option -m, --mappings to omit the latter, resulting in NTriples format of raw mappings.

JSKOS

The JSKOS data format is used in terminology applications for controlled vocabularies and their mappings.

The following correspondence between SSSOM and JSKOS has not fully been implemented yet. Some JSKOS fields will only be available since version 0.7.0 of JSKOS specification.

Common slots

SSSOM slotJSKOS field
commentnote.und[]
creator_idcontributor[].uri
creator_labelcontributor[].prefLabel.und
publication_datepublished
see_also?
other-

Propagatable slots

SSSOM slotJSKOS field
mapping_datecreated
mapping_providerpublisher[].url
mapping_tooltool[].prefLabel.und (0.7.0)
mapping_tool_versiontool[].version (0.7.0)
object_sourceto.memberSet[].inScheme[].uri
object_source_versionto.memberSet[].inScheme[].version (0.7.0)
object_typefrom.memberSet[].type (URI, limited list)
subject_sourcefrom.memberSet[].inScheme
subject_source_versionfrom.memberSet[].inScheme[].version (0.7.0)
subject_typefrom.memberSet[].type (URI, limited list)
predicate_type-
object_match_field- (see #152)
object_preprocessing- (see #152)
subject_match_field- (see #152)
subject_preprocessing- (see #152)
similarity_measure- (see #152)

Mapping set slots

SSSOM slotJSKOS field
curie_map-
licenselicense.uri
mappingsmappings (of a registry or concordance)
mapping_set_iduri
mapping_set_versionversion (0.7.0)
mapping_set_sourcesource
mapping_set_titleprefLabel.und
mapping_set_descriptiondefinition
issue_trackerissueTracker (0.7.0)
predicate_label-
extension_definitions-

Mapping slots

SSSOM slotJSKOS field
mapping_iduri
subject_idfrom.memberSet[].uri
subject_labelfrom.memberSet[].prefLabel
subject_category-
predicate_idtype
predicate_label- (implied by type)
object_idto.memberSet[].uri
object_labelto.memberSet[].prefLabel
object_category-
mapping_justificationjustification (0.7.0)
author_idcreator[].uri
author_labelcreator[].prefLabel
reviewer_idannotations[].creator.id
reviewer_labelannotations[].creator.name
mapping_sourcesource
confidencemappingRelevance
curation_ruleguidelines (0.7.0)
curation_rule_textguidelines[].prefLabel (0.7.0)
issue_tracker_itemissue (0.7.0)
license- (only for mapping sets)
predicate_modifier-
mapping_cardinality-
match_string- (see #152)
similarity_score- (see #152)

Limitations

This library follows the SSSOM specification as close as possible, but it does not aim to be a fully compliant implementation. The latter would require to also comply to LinkML, a specification much more complex then needed for SSSOM and not fully been implemented in JavaScript yet. In particular:

  • All slots of type Uri must be absolute URIs as defined in RFC 3986
  • Literal Mappings are not supported
  • Non-standard slots are not supported:
    • mapping set slot extension_definition is ignored
    • mapping set slot other is read and validated but not used
  • SSSOM/JSON, the JSON serialization of SSSOM has not been specified yet, so it may differ from the JSON(-LD) format used in this library
  • Transformation to RDF lacks creator_label and author_label
  • Propagation silently overwrites existing mapping slots instead of raising an error
  • There is an additional non-SSSOM mapping slot mapping_id. Uniqueness is not checked.

Survey

Directory survey contains a survey of published SSSOM data with validation results. See dev branch for most recent update.

Maintainers

Contribute

Contributions are welcome! Best use the issue tracker for questions, bug reports, and/or feature requests!

License

MIT license

Keywords

crosswalk

FAQs

Package last updated on 11 Jun 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts