relaton-ieee 1.14.4 → 1.14.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/grammars/basicdoc.rng +0 -1
- data/grammars/biblio.rng +12 -2
- data/lib/relaton_ieee/data_fetcher.rb +2 -7
- data/lib/relaton_ieee/data_parser.rb +64 -29
- data/lib/relaton_ieee/hash_converter.rb +17 -6
- data/lib/relaton_ieee/ieee_bibliographic_item.rb +26 -5
- data/lib/relaton_ieee/version.rb +1 -1
- data/lib/relaton_ieee/xml_parser.rb +5 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8d8765c1fbcffbcaa1100c86bf97e9dc3704aae3dea2617c839b00db5822dc47
|
4
|
+
data.tar.gz: 74577930c19049f0ee094ef155b8e6125c286b61592d69b89fdb1afc2c68f925
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ba4821384d2c1f45ccf4328c40063e690422366320a138d06e02a65b5dc7e74c9ec7ab04467907eb4f67b1616977fa09605db45f6a3c2db07eab97cae113cd46
|
7
|
+
data.tar.gz: 80de43ec9e466351f04751e6d9347766258a1ba82e581e24914204219e1ac6eb21949b07be654f99564621578f4e6ab1e791dd64d1c7cc623cc729506b54e66e
|
data/grammars/basicdoc.rng
CHANGED
data/grammars/biblio.rng
CHANGED
@@ -216,6 +216,9 @@
|
|
216
216
|
<optional>
|
217
217
|
<ref name="fullname"/>
|
218
218
|
</optional>
|
219
|
+
<zeroOrMore>
|
220
|
+
<ref name="credential"/>
|
221
|
+
</zeroOrMore>
|
219
222
|
<zeroOrMore>
|
220
223
|
<ref name="affiliation"/>
|
221
224
|
</zeroOrMore>
|
@@ -232,6 +235,11 @@
|
|
232
235
|
<ref name="FullNameType"/>
|
233
236
|
</element>
|
234
237
|
</define>
|
238
|
+
<define name="credential">
|
239
|
+
<element name="credential">
|
240
|
+
<text/>
|
241
|
+
</element>
|
242
|
+
</define>
|
235
243
|
<define name="FullNameType">
|
236
244
|
<choice>
|
237
245
|
<group>
|
@@ -305,7 +313,9 @@
|
|
305
313
|
<zeroOrMore>
|
306
314
|
<ref name="affiliationdescription"/>
|
307
315
|
</zeroOrMore>
|
308
|
-
<
|
316
|
+
<optional>
|
317
|
+
<ref name="organization"/>
|
318
|
+
</optional>
|
309
319
|
</element>
|
310
320
|
</define>
|
311
321
|
<define name="affiliationname">
|
@@ -1316,7 +1326,7 @@
|
|
1316
1326
|
<value>commentaryOf</value>
|
1317
1327
|
<value>hasCommentary</value>
|
1318
1328
|
<value>related</value>
|
1319
|
-
<value>
|
1329
|
+
<value>hasComplement</value>
|
1320
1330
|
<value>complementOf</value>
|
1321
1331
|
<value>obsoletes</value>
|
1322
1332
|
<value>obsoletedBy</value>
|
@@ -97,13 +97,8 @@ module RelatonIeee
|
|
97
97
|
return
|
98
98
|
end
|
99
99
|
stdid = doc.at("./publicationinfo/standard_id")&.text
|
100
|
-
if stdid == "0"
|
101
|
-
|
102
|
-
# ntid = @normtitles.index nt
|
103
|
-
# @normtitles << nt if nt && !ntid
|
104
|
-
# warn "Zero standard_id in #{filename}"
|
105
|
-
return
|
106
|
-
end
|
100
|
+
return if stdid == "0"
|
101
|
+
|
107
102
|
bib = DataParser.parse doc, self
|
108
103
|
if bib.docnumber.nil?
|
109
104
|
nt = doc&.at("./normtitle")&.text
|
@@ -2,6 +2,11 @@ module RelatonIeee
|
|
2
2
|
class DataParser
|
3
3
|
DATETYPES = { "OriginalPub" => "created", "ePub" => "published",
|
4
4
|
"LastInspecUpd" => "updated" }.freeze
|
5
|
+
ATTRS = %i[
|
6
|
+
docnumber title date docid contributor abstract copyright docstatus
|
7
|
+
relation link keyword ics editorialgroup standard_status standard_modified
|
8
|
+
pubstatus holdstatus doctype
|
9
|
+
].freeze
|
5
10
|
|
6
11
|
attr_reader :doc, :fetcher
|
7
12
|
|
@@ -33,25 +38,9 @@ module RelatonIeee
|
|
33
38
|
#
|
34
39
|
# @return [RelatonIeee::IeeeBibliographicItem]
|
35
40
|
#
|
36
|
-
def parse
|
37
|
-
args = {
|
38
|
-
|
39
|
-
docnumber: docnumber,
|
40
|
-
title: parse_title,
|
41
|
-
date: parse_date,
|
42
|
-
docid: parse_docid,
|
43
|
-
contributor: parse_contributor,
|
44
|
-
abstract: parse_abstract,
|
45
|
-
copyright: parse_copyright,
|
46
|
-
language: ["en"],
|
47
|
-
script: ["Latn"],
|
48
|
-
docstatus: parse_status,
|
49
|
-
relation: parse_relation,
|
50
|
-
link: parse_link,
|
51
|
-
keyword: parse_keyword,
|
52
|
-
ics: parse_ics,
|
53
|
-
editorialgroup: parse_editorialgroup,
|
54
|
-
}
|
41
|
+
def parse
|
42
|
+
args = { type: "standard", language: ["en"], script: ["Latn"] }
|
43
|
+
ATTRS.each { |attr| args[attr] = send("parse_#{attr}") }
|
55
44
|
IeeeBibliographicItem.new(**args)
|
56
45
|
end
|
57
46
|
|
@@ -142,6 +131,10 @@ module RelatonIeee
|
|
142
131
|
end
|
143
132
|
end
|
144
133
|
|
134
|
+
def parse_docnumber
|
135
|
+
docnumber
|
136
|
+
end
|
137
|
+
|
145
138
|
#
|
146
139
|
# Parse docnumber
|
147
140
|
#
|
@@ -227,16 +220,13 @@ module RelatonIeee
|
|
227
220
|
#
|
228
221
|
# Parse status
|
229
222
|
#
|
230
|
-
# @return [
|
223
|
+
# @return [RelatonIee::DocumentStatus, nil]
|
231
224
|
#
|
232
|
-
def
|
233
|
-
st =
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
else st
|
238
|
-
end
|
239
|
-
DocumentStatus.new stage: stage
|
225
|
+
def parse_docstatus
|
226
|
+
st = parse_standard_modified
|
227
|
+
return unless %w[Draft Approved Superseded Withdrawn].include?(st)
|
228
|
+
|
229
|
+
DocumentStatus.new stage: st.downcase
|
240
230
|
end
|
241
231
|
|
242
232
|
#
|
@@ -250,7 +240,7 @@ module RelatonIeee
|
|
250
240
|
if (ref = fetcher.backrefs[r.text])
|
251
241
|
rel = fetcher.create_relation(r[:type], ref)
|
252
242
|
rels << rel if rel
|
253
|
-
elsif
|
243
|
+
elsif !"Inactive Date".include?(r) && docnumber
|
254
244
|
fetcher.add_crossref(docnumber, r)
|
255
245
|
end
|
256
246
|
end
|
@@ -302,5 +292,50 @@ module RelatonIeee
|
|
302
292
|
).map &:text
|
303
293
|
EditorialGroup.new committee: committee if committee.any?
|
304
294
|
end
|
295
|
+
|
296
|
+
#
|
297
|
+
# Parse standard status
|
298
|
+
#
|
299
|
+
# @return [String, nil] standard status or nil
|
300
|
+
#
|
301
|
+
def parse_standard_status
|
302
|
+
doc.at("./publicationinfo/standard_status")&.text
|
303
|
+
end
|
304
|
+
|
305
|
+
#
|
306
|
+
# Parse standard modifier
|
307
|
+
#
|
308
|
+
# @return [String, nil] standard modifier or nil
|
309
|
+
#
|
310
|
+
def parse_standard_modified
|
311
|
+
doc.at("./publicationinfo/standardmodifierset/standard_modifier")&.text
|
312
|
+
end
|
313
|
+
|
314
|
+
#
|
315
|
+
# Parse pubstatus
|
316
|
+
#
|
317
|
+
# @return [String, nil] pubstatus or nil
|
318
|
+
#
|
319
|
+
def parse_pubstatus
|
320
|
+
doc.at("./publicationinfo/pubstatus")&.text
|
321
|
+
end
|
322
|
+
|
323
|
+
#
|
324
|
+
# Pasrse holdstatus
|
325
|
+
#
|
326
|
+
# @return [String, nil] holdstatus or nil
|
327
|
+
#
|
328
|
+
def parse_holdstatus
|
329
|
+
doc.at("./publicationinfo/holdstatus")&.text
|
330
|
+
end
|
331
|
+
|
332
|
+
#
|
333
|
+
# Parse doctype
|
334
|
+
#
|
335
|
+
# @return [String] doctype
|
336
|
+
#
|
337
|
+
def parse_doctype
|
338
|
+
parse_standard_modified == "Redline" ? "redline" : "standard"
|
339
|
+
end
|
305
340
|
end
|
306
341
|
end
|
@@ -4,13 +4,14 @@ module RelatonIeee
|
|
4
4
|
# @param args [Hash]
|
5
5
|
# @param neated [TrueClas, FalseClass] default true
|
6
6
|
# @return [Hash]
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
def hash_to_bib(args)
|
8
|
+
hash = super
|
9
|
+
return unless hash.is_a?(Hash)
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
# editorialgroup_hash_to_bib hash
|
12
|
+
ext_hash_to_bib hash
|
13
|
+
hash
|
14
|
+
end
|
14
15
|
|
15
16
|
# @param item_hash [Hash]
|
16
17
|
# @return [RelatonIeee::IeeeBibliographicItem]
|
@@ -24,6 +25,16 @@ module RelatonIeee
|
|
24
25
|
|
25
26
|
hash[:editorialgroup] = EditorialGroup.new(**hash[:editorialgroup])
|
26
27
|
end
|
28
|
+
|
29
|
+
def ext_hash_to_bib(hash)
|
30
|
+
ext = hash.delete(:ext)
|
31
|
+
return unless ext
|
32
|
+
|
33
|
+
attrs = %i[standard_status standard_modified pubstatus holdstatus]
|
34
|
+
ext.select { |k, _| attrs.include? k }.each do |k, v|
|
35
|
+
hash[k] = v
|
36
|
+
end
|
37
|
+
end
|
27
38
|
end
|
28
39
|
end
|
29
40
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module RelatonIeee
|
2
2
|
class IeeeBibliographicItem < RelatonBib::BibliographicItem
|
3
|
-
|
3
|
+
DOCTYPES = %w[guide recommended-practice standard witepaper redline other].freeze
|
4
4
|
SUBTYPES = %w[amendment corrigendum erratum].freeze
|
5
5
|
|
6
6
|
# @return [RelatonIeee::EditorialGroup, nil]
|
@@ -9,16 +9,24 @@ module RelatonIeee
|
|
9
9
|
# @return [Boolean, nil] Trial use
|
10
10
|
attr_reader :trialuse
|
11
11
|
|
12
|
+
# @return [String, nil]
|
13
|
+
attr_reader :standard_status, :standard_modified, :pubstatus, :holdstatus
|
14
|
+
|
12
15
|
#
|
13
16
|
# @param [Hash] args
|
14
17
|
# @option args [Boolean, nil] :trialuse Trial use
|
15
18
|
# @option args [Array<RelatonIeee::EditorialGroup>] :editorialgroup
|
16
19
|
# Editorial group
|
20
|
+
# @option args [String, nil] :standard_status Active, Inactive, Superseded
|
21
|
+
# @option args [String, nil] :standard_modified Draft, Withdrawn, Suspended,
|
22
|
+
# Approved, Reserved, Redline
|
23
|
+
# @option args [String, nil] :pubstatus Active, Inactive
|
24
|
+
# @option args [String, nil] :holdstatus Held, Publish
|
17
25
|
#
|
18
26
|
def initialize(**args) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
19
|
-
if args[:doctype] && !
|
27
|
+
if args[:doctype] && !DOCTYPES.include?(args[:doctype])
|
20
28
|
warn "[relaton-ieee] invalid doctype \"#{args[:doctype]}\". " \
|
21
|
-
"It should be one of: #{
|
29
|
+
"It should be one of: #{DOCTYPES.join(', ')}."
|
22
30
|
end
|
23
31
|
if args[:docsubtype] && !SUBTYPES.include?(args[:docsubtype])
|
24
32
|
warn "[relaton-ieee] invalid docsubtype \"#{args[:docsubtype]}\". " \
|
@@ -26,6 +34,10 @@ module RelatonIeee
|
|
26
34
|
end
|
27
35
|
eg = args.delete(:editorialgroup)
|
28
36
|
@trialuse = args.delete(:trialuse)
|
37
|
+
@standard_status = args.delete(:standard_status)
|
38
|
+
@standard_modified = args.delete(:standard_modified)
|
39
|
+
@pubstatus = args.delete(:pubstatus)
|
40
|
+
@holdstatus = args.delete(:holdstatus)
|
29
41
|
super
|
30
42
|
@editorialgroup = eg
|
31
43
|
end
|
@@ -53,13 +65,18 @@ module RelatonIeee
|
|
53
65
|
# @return [String] XML
|
54
66
|
def to_xml(**opts) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
55
67
|
super(**opts) do |bldr|
|
56
|
-
if opts[:bibdata] && (doctype || subdoctype || !trialuse.nil? || editorialgroup ||
|
68
|
+
if opts[:bibdata] && (doctype || subdoctype || !trialuse.nil? || editorialgroup ||
|
69
|
+
ics.any? || standard_status || standard_modified || pubstatus || holdstatus)
|
57
70
|
ext = bldr.ext do |b|
|
58
71
|
b.doctype doctype if doctype
|
59
72
|
b.subdoctype subdoctype if subdoctype
|
60
73
|
b.send :"trial-use", trialuse unless trialuse.nil?
|
61
74
|
editorialgroup&.to_xml(b)
|
62
75
|
ics.each { |ic| ic.to_xml(b) }
|
76
|
+
b.standard_status standard_status if standard_status
|
77
|
+
b.standard_modified standard_modified if standard_modified
|
78
|
+
b.pubstatus pubstatus if pubstatus
|
79
|
+
b.holdstatus holdstatus if holdstatus
|
63
80
|
end
|
64
81
|
ext["schema-version"] = ext_schema unless opts[:embedded]
|
65
82
|
end
|
@@ -73,9 +90,13 @@ module RelatonIeee
|
|
73
90
|
#
|
74
91
|
# @return [Hash]
|
75
92
|
#
|
76
|
-
def to_hash(embedded: false)
|
93
|
+
def to_hash(embedded: false) # rubocop:disable Metrics/AbcSize
|
77
94
|
hash = super
|
78
95
|
hash["trialuse"] = trialuse unless trialuse.nil?
|
96
|
+
hash["ext"]["standard_status"] = standard_status unless standard_status.nil?
|
97
|
+
hash["ext"]["standard_modified"] = standard_modified unless standard_modified.nil?
|
98
|
+
hash["ext"]["pubstatus"] = pubstatus unless pubstatus.nil?
|
99
|
+
hash["ext"]["holdstatus"] = holdstatus unless holdstatus.nil?
|
79
100
|
hash
|
80
101
|
end
|
81
102
|
|
data/lib/relaton_ieee/version.rb
CHANGED
@@ -6,12 +6,16 @@ module RelatonIeee
|
|
6
6
|
# Override RelatonBib::XMLParser.item_data method.
|
7
7
|
# @param item [Nokogiri::XML::Element]
|
8
8
|
# @returtn [Hash]
|
9
|
-
def item_data(item)
|
9
|
+
def item_data(item) # rubocop:disable Metrics/AbcSize
|
10
10
|
data = super
|
11
11
|
ext = item.at "./ext"
|
12
12
|
return data unless ext
|
13
13
|
|
14
14
|
data[:editorialgroup] = parse_editorialgroup(item)
|
15
|
+
data[:standard_status] = ext.at("./standard_status")&.text
|
16
|
+
data[:standard_modified] = ext.at("./standard_modified")&.text
|
17
|
+
data[:pubstatus] = ext.at("./pubstatus")&.text
|
18
|
+
data[:holdstatus] = ext.at("./holdstatus")&.text
|
15
19
|
data
|
16
20
|
end
|
17
21
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: relaton-ieee
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.14.
|
4
|
+
version: 1.14.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-04-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: equivalent-xml
|