RelatonBipm is a Ruby gem that implements the IsoBibliographicItem model.
You can use it to retrieve metadata of BIPM Standards from https://www.bipm.org, and access such metadata through the BipmBibliographicItem
object.
Installation
Add this line to your application’s Gemfile:
gem 'relaton-bipm'
And then execute:
$ bundle install
Or install it yourself as:
$ gem install relaton-bipm
Usage
Search for a standard using keywords
References for Si-Brochure documents
BIPM {DOCUMENT_NAME}
Allowed document names are:
-
CCEM-GD-RSI-1
-
CCL-GD-MeP-1
-
CCL-GD-MeP-2
-
CCL-GD-MeP-3
-
CCM-GD-RSI-1
-
CCM-GD-RSI-2
-
SI MEP A1
-
SI MEP Cd1
-
Rapport BIPM-2019/05
-
SI MEP KUPRTM
-
SI MEP KAPRT
-
SI MEP K1
-
SI MEP KLJNT
-
SI MEP KRPRT
-
SI MEP Kg1
-
SI MEP M1
-
SI MEP Mol1
-
SI MEP S1
-
SI Brochure
-
SI Brochure, Appendix 4
Reference structure for Metrologia documents
BIPM Metrologia {JOURNAL} {VOLUME} {ISSUE}
-
{JOURNAL}
- journal number, optional -
{VOLUME}
- volume number, optional -
{ISSUE}
- issue number, optional
Reference structures for Outcomes documents
Basic pattern
Long:
{group name} -- {type} {number} ({year})
{group name} {type} {number} ({year})
{group name} {type} {year}-{zero_leading_number}
Short:
{group name} -- {type-abbrev} {number} ({year}, {lang})
{group name} {type-abbrev} {number} ({year}, {lang})
-
group name
- a name of the group, required. A full list of group names is available here. -
type
- a type of document, required. A list of types is: Resolution (Résolution), Recommendation (Recommandation), Decision (Décision), Meeting (Réunion), Declaration (Déclaration). -
type-abbrev
- an abbreviation of the type, required. A list of abbreviations: RES (Resolution), REC (Recommendation), DECN (Decision). -
number
- a number of the document, optional. Can be with part, e.g.1-2
. -
zero_leading_number
- a number of the document with a leading zero, required. Can be used when a document has a 1 or 2 digits number. It’s00
for documents without a number. -
year
- a year of the document, optional. -
lang
- a language of the document, optional. Can beEN
orFR
.
Special case pattern
The basic pattern works fine for all, except for these 2 cases:
-
Decisions of the CIPM (since 2012)
-
Recommendations/Resolutions/Decisions of the JCRB
Where the committee name is part of the outcome identifier.
Special cases:
Decision CIPM/111-10 (2022) / Décision CIPM/111-10 (2022)
Recommendation JCRB/43-1 (2021) / Recommandation JCRB/43-1 (2021)
Single language version (English)
type
can be:
-
Resolution (RES)
-
Recommendation (REC)
-
Decision (DECN)
-
Statement (DECL)
e.g.
CCTF -- Recommendation 2 (1970)
CCTF -- REC 2 (1970, EN)
Special cases:
Decision CIPM/111-10 (2022)
CIPM DECN CIPM/111-10 (2022, EN)
Recommendation JCRB/43-1 (2021)
JCRB REC JCRB/43-1 (2021, EN)
Single language version (French)
type
can be:
-
Résolution (RES)
-
Recommandation (REC)
-
Décision (DECN)
-
Déclaration (DECL)
e.g.
CCTF -- Recommandation 2 (1970)
CCTF -- REC 2 (1970, FR)
Special cases:
Décision CIPM/111-10 (2022)
CIPM DECN CIPM/111-10 (2022, FR)
Recommandation JCRB/43-1 (2021)
JCRB REC JCRB/43-1 (2021, FR)
Dual language version (language independent version)
type
can be in their respective languages or the following abbreviations:
-
RES
-
REC
-
DECN
-
DECL
CCTF -- Recommandation 2 (1970) / Recommendation 2 (1970)
CCTF REC 2 (1970)
Special cases:
Decision CIPM/110-10 (2022) / Décision CIPM/111-10 (2022)
CIPM DECN CIPM/110-10 (2022)
Recommendation JCRB/43-1 (2021) / Recommandation JCRB/43-1 (2021)
JCRB REC JCRB/43-1 (2021)
Examples
require "relaton_bipm"
=> true
# get BIPM brochure
item = RelatonBipm::BipmBibliography.get "BIPM SI Brochure"
[relaton-bipm] (BIPM SI Brochure) Fetching from Relaton repository ...
[relaton-bipm] (BIPM SI Brochure) Found: `BIPM SI Brochure`
=> #<RelatonBipm::BipmBibliographicItem:0x007ffb83982fe8
...
# get BIPM Metrologia page
bib = RelatonBipm::BipmBibliography.get "BIPM Metrologia 29 6 001"
[relaton-bipm] (BIPM Metrologia 29 6 001) Fetching from Relaton repository ...
[relaton-bipm] (BIPM Metrologia 29 6 001) Found: `Metrologia 29 6 001`
=> #<RelatonBipm::BipmBibliographicItem:0x007f8857f94d40
...
# get CGPM meetings
RelatonBipm::BipmBibliography.get "CGPM 1st Meeting (1889)"
[relaton-bipm] (CGPM 1st Meeting (1889)) Fetching from Relaton repository ...
[relaton-bipm] (CGPM 1st Meeting (1889)) Found: `CGPM 1th meeting (1889)`
=> #<RelatonBipm::BipmBibliographicItem:0x00007f7fd02aba28
...
# get CGPM resolutions
RelatonBipm::BipmBibliography.get "CGPM RES (1889, E)"
[relaton-bipm] (CGPM RES (1889, E)) Fetching from Relaton repository ...
[relaton-bipm] (CGPM RES (1889, E)) Found: `CGPM RES (1889)`
=> #<RelatonBipm::BipmBibliographicItem:0x00007f80421f93d8
...
RelatonBipm::BipmBibliography.get "CGPM Resolution (1889)"
[relaton-bipm] (CGPM Resolution (1889)) Fetching from Relaton repository ...
[relaton-bipm] (CGPM Resolution (1889)) Found: `CGPM RES (1889)`
=> #<RelatonBipm::BipmBibliographicItem:0x00007f8017f60c18
...
RelatonBipm::BipmBibliography.get "CGPM Résolution (1889)"
[relaton-bipm] (CGPM Résolution (1889)) Fetching from Relaton repository ...
[relaton-bipm] (CGPM Résolution (1889)) Found: `CGPM RES (1889)`
=> #<RelatonBipm::BipmBibliographicItem:0x00007f8017f492e8
...
# get CIPM decision by year and decision number
RelatonBipm::BipmBibliography.get "BIPM Decision CIPM/101-1 (2012)"
[relaton-bipm] (BIPM Decision CIPM/101-1 (2012)) Fetching from Relaton repository ...
[relaton-bipm] (BIPM Decision CIPM/101-1 (2012)) Found: `CIPM DECN 101-1 (2012)`
=> #<RelatonBipm::BipmBibliographicItem:0x00007f8017f2bd88
...
RelatonBipm::BipmBibliography.get "BIPM DECN CIPM/101-1 (2012, E)"
[relaton-bipm] (BIPM DECN CIPM/101-1 (2012, E)) Fetching from Relaton repository ...
[relaton-bipm] (BIPM DECN CIPM/101-1 (2012, E)) Found: `CIPM DECN 101-1 (2012)`
=> #<RelatonBipm::BipmBibliographicItem:0x00007f8017f39438
...
# get CIPM recommendation
RelatonBipm::BipmBibliography.get "CIPM Recommendation 1 (2005)"
[relaton-bipm] (CIPM Recommendation 1 (2005)) Fetching from Relaton repository ...
[relaton-bipm] (CIPM Recommendation 1 (2005)) Found: `CIPM REC 1 (2005)`
=> #<RelatonBipm::BipmBibliographicItem:0x00007f8017f31da0
...
RelatonBipm::BipmBibliography.get "CIPM REC 1 (2005, FR)"
[relaton-bipm] (CIPM REC 1 (2005, FR)) Fetching from Relaton repository ...
[relaton-bipm] (CIPM REC 1 (2005, FR)) Found: `CIPM REC 1 (2005)`
=> #<RelatonBipm::BipmBibliographicItem:0x00007f80422100d8
...
XML serialization
item.to_xml
=> "<bibitem id="BIPMSIBrochurePart1" type="standard" schema-version="v1.2.1">
<fetched>2022-12-02</fetched>
<title type="main" format="text/plain" language="en">The International System of Units</title>
<title type="cover" format="text/plain" language="en">The International System of Units (SI)</title>
<title type="main" format="text/plain" language="fr">Le Système international d’unités</title>
<title type="cover" format="text/plain" language="fr">Le Système international d’unités (SI)</title>
<docidentifier type="BIPM" primary="true">BIPM SI Brochure</docidentifier>
...
</bibitem>"
With argument bibdata: true
it outputs XML wrapped by bibdata
element and adds flavor ext
element.
item.to_xml bibdata: true
=> "<bibdata type="standard" schema-version="v1.2.1">
<fetched>2022-12-02</fetched>
<title type="main" format="text/plain" language="en">The International System of Units</title>
<title type="cover" format="text/plain" language="en">The International System of Units (SI)</title>
<title type="main" format="text/plain" language="fr">Le Système international d’unités</title>
<title type="cover" format="text/plain" language="fr">Le Système international d’unités (SI)</title>
<docidentifier type="BIPM" primary="true">BIPM SI Brochure</docidentifier>
...
<ext schema-version="v1.0.0">
<doctype>brochure</doctype>
...
</ext>
</bibdata>"
Typed links
Each BIPM document has src
type link and an optional doi
type link.
bib.link
=> [#<RelatonBib::TypedUri:0x00007fa6d6a51728 @content=#<Addressable::URI:0xc29c URI:https://iopscience.iop.org/article/10.1088/0026-1394/29/6/001>, @type="src">,
#<RelatonBib::TypedUri:0x00007fa6d6a29250 @content=#<Addressable::URI:0xc2b0 URI:https://doi.org/10.1088/0026-1394/29/6/001>, @type="doi">]
Create a bibliographic item from XML
RelatonBipm::XMLParser.from_xml File.read('spec/fixtures/bipm_item.xml')
=> #<RelatonBipm::BipmBibliographicItem:0x007ffb83827a90
...
Create a bibliographic item from YAML
hash = YAML.load_file 'spec/fixtures/bipm_item.yml'
=> {"id"=>"Draft-Agenda-NMI-Dir-Meeting-2017-v10",
...
RelatonBipm::BipmBibliographicItem.from_hash hash
=> #<RelatonBipm::BipmBibliographicItem:0x007ffb668755a0
...
Fetch data
This gem uses the following datasets as data sources:
- bipm-data-outcomes
- looking for a local directory with the repository https://github.com/metanorma/bipm-data-outcomes
- bipm-si-brochute
- looking for a local directory with the repository https://github.com/metanorma/bipm-si-brochure
- rawdata-bipm-metrologia
- looking for a local directory with the repository https://github.com/relaton/rawdata-bipm-metrologia
The method RelatonBipm::DataFetcher.fetch(source, output: "data", format: "yaml")
fetches all the documents from the dataset and saves them to the ./data
folder in YAML format.
Arguments:
-
source
- the name of the source dataset -
output
- folder to save documents (default './data'). -
format
- the format in which the documents are saved. Possible formats are:yaml
,xml
,bibxxml
(defaultyaml
).
RelatonBipm::DataFetcher.fetch "bipm-data-outcomes"
Started at: 2022-06-23 09:36:55 +0200
Stopped at: 2022-06-23 09:36:58 +0200
Done in: 2 sec.
=> nil
RelatonBipm::DataFetcher.fetch "bipm-si-brochure"
Started at: 2022-06-23 09:37:12 +0200
Stopped at: 2022-06-23 09:37:12 +0200
Done in: 0 sec.
=> nil
RelatonBipm::DataFetcher.fetch "rawdata-bipm-metrologia"
Started at: 2022-06-23 09:39:12 +0200
Stopped at: 2022-06-23 09:40:34 +0200
Done in: 82 sec.
=> nil
Logging
RelatonBipm uses the relaton-logger gem for logging. By default, it logs to STDOUT. To change the log levels and add other loggers, read the relaton-logger documentation.
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/relaton/relaton-bipm.
License
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).