RelatonNist is a Ruby gem that implements the IsoBibliographicItem model.
You can use it to retrieve metadata of NIST Standards from https://csrc.nist.gov, and access such metadata through the IsoBibliographicItem object.
Installation
Add this line to your application’s Gemfile:
gem 'relaton_nist'
And then execute:
$ bundle
Or install it yourself as:
$ gem install relaton_nist
Usage
Search for a standard using keywords
require 'relaton_nist'
hit_collection = RelatonNist::NistBibliography.search("8200")
=> <RelatonNist::HitCollection:0x007fc069d19da0 @ref=8200 @fetched=false>
item = hit_collection[1].fetch
=> #<RelatonNist::NistBibliographicItem:0x007fc049aa6778
...
XML serialization
item.to_xml
=> "<bibitem id="NISTIR8200(DRAFT)" type="standard">
<fetched>2019-05-03</fetched>
<title format="text/plain" language="en" script="Latn">
Interagency Report on Status of International Cybersecurity Standardization for the Internet of Things (IoT)
</title>
...
<bibitem>"
With argument bibdata: true it ouputs XML wrapped by bibdata element and adds flavour ext element.
item.to_xml bibdata: true
=> "<bibdata type="standard">
<fetched>2019-05-17</fetched>
<title format="text/plain" language="en" script="Latn">
Interagency Report on Status of International Cybersecurity Standardization for the Internet of Things (IoT)
</title>
...
<ext>
<doctype>stadard</doctype>
<commentperiod>
<from>2018-02-01</from>
<to>2018-04-18</to>
</commentperiod>
</ext>
</bibdata>"
Get code, and year
RelatonNist::NistBibliography.get("8200", "2018", {})
[relaton-nist] ("8200") fetching...
[relaton-nist] ("8200") found NISTIR 8200
=> #<RelatonNist::NistBibliographicItem:0x007fc06aa2b480
...
Get short citation
Short citation is a convetion about a citation’s format. The format for NIST publications is:
NIST {abbrev(series)} {docnumber} {(edition), optional} {(stage), optional}
# or
{abbrev(series)} {docnumber} {(edition), optional} {(stage), optional}
-
(stage)is empty if the state is "final" (published). In case state is "draft" it shoud be:-
PD for public draft
-
IPD for initial iteration public draft or 2PD, 3PD and so one for following iterations
-
FPD for final public draft
-
-
(edition)is the date of publication or update -
docnumberis the full NIST number, including revision, e.g., 800-52
The format for FIPS publications is:
FIPS {docnumber}
# or
NIST FIPS {docnumber}
RelatonNist::NistBibliography.get("SP 800-205 (February 2019) (PD)")
[relaton-nist] ("SP 800-205") fetching...
[relaton-nist] ("SP 800-205") found SP 800-205 (Draft)
=> #<RelatonNist::NistBibliographicItem:0x007fc059934768
...
Get specific part, volume, version, revision, and addendum
Referehces can contain optional parameters {ptN}{vN}{verN}{rN}{/Add}:
- Part is specified as ptN (SP 800-57pt1)
- Volume is specified as vN (SP 800-60v1)
- Version is specified as verN (SP 800-45ver2)
- Revision is specified as rN (SP 800-40r3)
- Addendum is specified as /Add (SP 800-38A/Add)
item = RelatonNist::NistBibliography.get 'SP 800-67r3'
[relaton-nist] ("SP 800-67r3") fetching...
[relaton-nist] ("SP 800-67r3") found SP 800-67 Rev. 3
=> #<RelatonNist::NistBibliographicItem:0x007fd87bbe9460
...
item.docidentifier.first.id
=> "SP 800-67 Rev. 3"
RelatonNist::NistBibliography.get 'SP 800-38A/Add'
[relaton-nist] ("SP 800-38A/Add") fetching...
[relaton-nist] ("SP 800-38A/Add") found SP 800-38A-Add
=> #<RelatonNist::NistBibliographicItem:0x007fd88c21d880
...
item.docidentifier.first.id
=> "SP 800-38A-Add"
Typed links
NIST documents may have src and doi link types.
item.link
=> [#<RelatonBib::TypedUri:0x00007f901971dc10 @content=#<Addressable::URI:0x62c URI:https://csrc.nist.gov/publications/detail/sp/800-67/rev-2/final>, @type="src">,
#<RelatonBib::TypedUri:0x00007f901971d6e8 @content=#<Addressable::URI:0x640 URI:https://doi.org/10.6028/NIST.SP.800-67r2>, @type="doi">]
Create bibliographic item from YAML
hash = YAML.load_file 'spec/examples/nist_bib_item.yml'
=> {"id"=>"NISTIR 8011 Vol. 3",
...
RelatonNist::NistBibliographicItem.from_hash hash
=> #<RelatonNist::NistBibliographicItem:0x007f8b708505b8
...
Fetch data
This gem uses the https://raw.githubusercontent.com/usnistgov/NIST-Tech-Pubs/nist-pages/xml/allrecords.xml dataset as one of data sources.
The method RelatonNist::DataFetcher.fetch(output: "data", format: "yaml") fetches all the documents from the datast and save them to the ./data folder in YAML format.
Arguments:
-
output- folder to save documents (default './data'). -
format- format in which the documents are saved. Possimle formats are:yaml,xml,bibxxml(defaultyaml).
RelatonNist::DataFetcher.fetch
Started at: 2021-09-01 18:01:01 +0200
Stopped at: 2021-09-01 18:01:43 +0200
Done in: 42 sec.
=> nil
Development
After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to [rubygems.org](https://rubygems.org).
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/metanorma/relaton-nist.
License
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).