npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

jsdoc-plugin-rdf

v1.0.0

Published

Generate Linked Data from JSDoc comments

Downloads

3

Readme

This plugin can be used to generate a Linked Data description in JSON-LD format by writing JSDoc comments.

Installation

Use the following command in the root directory where JSDoc is installed

npm install jsdoc-plugin-rdf

Add the plugin to JSDoc

In JSDoc's configuration file add the path to the plugin

...
"plugins": [
  "node_modules/jsdoc-plugin-rdf"
],

If you want to print only the JSON-LD and no JSDoc documentation, you can change the JSDoc template in opts.template of JSDoc's configuration file. By using plugin-rdf-template only the JSON-LD will be printed to the path in opts.destination. Otherwise the JSON-LD will be generated along with the documentation and printed to a sub-folder as described under the output section.

...
"opts": {
  "destination": "./jsonld",
  "template": "node_modules/jsdoc-plugin-rdf/plugin-rdf-template"
}

Usage

Generate a RDF triple with a subject, predicate and object tag.

JSDoc comment:

@subj {type} id1 subject description
@pred predicate
@obj object

JSON-LD:

{
  "@context": {
    "schema": "https://schema.org/"
  },
  "@graph": [
    {
      "@id": "_:id1",
      "@type": "type",
      "schema:description": "subject description",
      "predicate": "object"
    }
  ]
}

The object position can have type and description too, but it will change the object string from a property value to a graph node id for the object description

@subj {subjectType} id2 subject description
@pred predicate
@obj {objectType} object the object description
{
  "@context": {
    "schema": "https://schema.org/"
  },
  "@graph": [
    {
      "@id": "_:id2",
      "@type": "subjectType",
      "schema:description": "subject description",
      "predicate": {
        "@id": "_:object"
      }
    },
    {
      "@id": "_:object",
      "@type": "objectType",
      "schema:description": "the object description"
    }
  ]
}

Examples

An example jsdoc.config.json with a playground js file and its jsonld result can be found in the examples directory. With JSDoc installed globally, you can run

jsdoc -c jsdoc.config.json

in the examples directory to test your own descriptions added to the js folder. Rename the EXAMPLE.rdf.config.json to rdf.config.json to try the settings explained below.

The example of the JSON-LD Playground can be generated with the following JSDoc comment.

playground.js

/**
@subj {schema:Person} 42
@pred schema:givenName
@obj John
@pred schema:familyName
@obj Doe
@pred schema:birthDate
@obj 1978-05-17
*/

JSON-LD result:

{
  "@context": {
    "schema": "https://schema.org/"
  },
  "@graph": [
    {
      "@id": "_:42",
      "@type": "schema:Person",
      "schema:givenName": "John",
      "schema:familyName": "Doe",
      "schema:birthDate": "1978-05-17"
    }
  ]
}

plugin configuration

The default settings are in config.js. They can be replaced with a rdf.config.json in the same directory as index.js.

The tag @LinkedDataDescription in the beginning of a JSDoc comment tells the plugin that a JSON-LD description should be generated for this comment, due to this setting:

encoderSettings: {
  createFor: { hasKey: 'LinkedDataDescription' },

This way more JSON-LD files can be generated from a single JavaScript file with separate comments. If you only want to generate one description per file and the file contains no other JSDoc annotations that should be excluded, you can choose createFor: false and don't have to use the tag anymore. Or set a file path or name as condition using the path and filename keys in the createFor object.

tags

The default tag titles can be adjusted by changing the following settings:

"tagSettings": {
    "vocabTags": ["vocab", "context"],
    "subjectTag": "subj",
    "predicateTag": "pred",
    "objectTag": "obj",
}

Optionally you can define your own tag titles to combine the predicate and object tags by adding titles to the propertyTags option. In the example above we could replace the @pred schema:givenName @obj John annotation with @schema:givenName John by using the following settings:

"tagSettings": {
    "propertyTags": ["schema:givenName"],
},

The tags defined with this option will become a property of the preceding subject tag.

default vocabulary

The vocabulary that will always be added to the context is given in encoderSettings. You can change the vocab property with the setting or add new vocabularies with the tag @vocab <prefix>: <url> in your description.

"encoderSettings": {
    "vocab": {
      "schema": "https://schema.org/"
    }
}

converter

In the example above, the tag @schema:givenName can be shortened to @givenName by using the vocabMap setting. It will map any string in predicate or object position of the description.

"tagSettings": {
    "propertyTags": ["givenName"],
},
"converterSettings": {
    "vocabMap": {
        "givenName": "schema:givenName"
    },
    "flattenedFormat": true,
    "predNoNestedFormat": [],
}

The default is JSON-LD in flattened document form. Set the option to false for the nodes to be nested or combine the two options by giving predicate names to predNoNestedFormat that should remain flattened in an otherwise nested format.

output

A JSON-LD description will be printed for every file that is parsed by JSDoc. You can print all descriptions to one file by changing printPerDesc to false. The default output path is a plugin-rdf directory in JSDoc's destination (if the plugin's template wasn't used). Change it by setting the destination directory (relative to JSDoc's destination).

"general": {
    "printPerDesc": true,
    "destination": "./plugin-rdf"
}

Replace the converter

To change or replace the converter a rdfConverter module in the converter directory has to export a convert(rdf) function, where the rdf parameter that the function will receive is an intermediate RDF format of the form

{
  subject: {
    predicate: object
  }
}