inist-ark

    2.1.3 • Public • Published

    node-inist-ark

    Build Status bitHound Overall Score

    NodeJS package used to handle "normalized" ARK for the INIST organization This library can be used to generate a lot of random and valid ARKs dedicated to a specific NAAN and subpublisher, or to parse an existing ARK as a nice JSON object, or to validate the content of a given ARK (ex: checking this ARK as not been misspelled thanks to its checksum).

    All generated identifiers are conform to The ARK Identifier Scheme RFC

    INIST's ARK anatomy is:

        ark:/67375/39D-S2GXG1TW-8
        \__/ \___/ \__/\______/\_/
         |     |    |     |     |
    ARK Label  |    |     |     Check sum (1 char)
               |    |    Identifier (8 chars)
               |   Sub-publisher (3 chars, it has to be generated in the centralized INIST ARK registry)
               |
    Name Assigning Authority Number (NAAN) (67375 is dedicated for INIST)
    
    • INIST NAAN will not change and is this integer: 67375
    • Sub-publisher is handled by a centralized ARK registry for INIST
    • Identifier is a string of 8 uppercase characters from this alphabet 0123456789BCDFGHJKLMNPQRSTVWXZ
    • Check sum is 1 character calculated from the ARK identifier following the NCDA checksum algorithm. It is used to help detecting mispelled ARK.

    Install

    npm i inist-ark

    Usage

    Generate lot of ARKs

    Notice that when generating an ARK, you must know the wanted subpublisher that you registred in the INIST's central ARK registry.

    var InistArk = require('inist-ark');
     
    var ark = new InistArk({ subpublisher: '4G1' });
    ark.generate(); // returns: ark:/67375/4G1-D4S484DN-9
    ark.generate(); // returns: ark:/67375/4G1-TT6MHSX5-9
     
    var ark2 = new InistArk();
    ark2.generate({ subpublisher: '39D' }); // returns: ark:/67375/39D-S2GXG1TW-8
    ark2.generate({ subpublisher: '015' }); // returns: ark:/67375/015-FG0H2546-9
    ark2.generate({ subpublisher: '015' }); // returns: ark:/67375/015-X73BVHH2-2
    ark2.generate({ subpublisher: '015' }); // returns: ark:/67375/015-TD0G7P90-X
    ark2.generate({ subpublisher: '015' }); // returns: ark:/67375/015-5PZW7M6Q-5
    ark2.generate({ subpublisher: '015' }); // returns: ark:/67375/015-58VCS11W-9
     

    Parse an ARK

    var InistArk = require('inist-ark');
     
    var ark = new InistArk();
    ark.parse('ark:/67375/39D-S2GXG1TW-8');
    // returns:
    // { ark:          'ark:/67375/39D-L2DM2F95-7',
    //   naan:         '67375',
    //   name:         '39D-L2DM2F95-7',
    //   subpublisher: '39D',
    //   identifier:   'L2DM2F95',
    //   checksum:     '7'
    // }
     
    ark.parse('ark:/67375/39D-L2-');
    // returns: an exception
    //   new Error('Invalid ARK syntax')
     

    Validate an ARK

    var InistArk = require('inist-ark');
     
    var ark = new InistArk();
    ark.validate('ark:/67375/39D-S2GXG1TW-8');
    // returns:
    // { ark: true,          // false if one of the following fields is false
    //   naan: true,         // false if it's not the inist naan
    //   name: true,         // false if subpubliser, identifier or checksum is false
    //   subpublisher: true, // false if not 3 chars length or not respecting the alphabet
    //   identifier: true,   // false if not 8 chars length or not respecting the alphabet
    //   checksum: true      // false if the checksum is wrong ncda(naan+sp+id)
    // }
    //

    Checksum calculation is based on the NCDA algorithm

    Generate an ARK without subpublisher

    var InistArk = require('inist-ark');
     
    var ark = new InistArk({
    naan: 12345
    subpublisher: false
    });
    ark.generate();
    // returns something like that:
    //     ark:/12345/SX52MR0K-4
    //
     

    Generate an ARK without hyphen

    var InistArk = require('inist-ark');
     
    var ark = new InistArk({
        naan: 12345,
        subpublisher: 'XYZ',
        hyphen: false,
    });
    ark.generate();
    // returns something like that:
    //     ark:/12345/XYZSHML4WGPD
    //
     
     
    ark.generate({ subpublisher: false });
    // returns something like that:
    //    ark:/12345/NW4CQCGC4
    //
     
     
     

    Constructor parameters

    When creating a new InistArk instance, you can specify several parameters:

    var ark = new InistArk({
      // warn: do not modify this option if your are generating ARK for INIST's ressources
      naan: '67375',
     
      // setup the defaut subpublisher if you do not want to specify it when calling generate
      // notice that you have to register a subpublihser for your resource at INIST's central ARK registry
      // 3 characters length
      // if set to false, no subpublisher will be generate
      subpublisher: '',
      
      // INIST use a hyphen as separator be default, 
      // if we don't want to separate sub publisher,
      // identifier and checksum with a hyphen just set this option to false
      hyphen: true,
     
      // warn: do not modify if you want to be INIST "normalized"
      // (notice there is no voyels and everything is uppercase)
      alphabet: '0123456789BCDFGHJKLMNPQRSTVWXZ'
    });

    Install

    npm i inist-ark

    DownloadsWeekly Downloads

    158

    Version

    2.1.3

    License

    MIT

    Unpacked Size

    29.9 kB

    Total Files

    15

    Last publish

    Collaborators

    • kerphi
    • niederlec
    • parmentf
    • pseudom
    • touv