relaton-3gpp 2.0.0.pre.alpha.3 → 2.0.0.pre.alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ada5bf14c17b0d99ad251241de54f501cd4f12197e0d8d9de180ab44d26b0b25
4
- data.tar.gz: 2ed4f171bb9ba4d9e9ad424e5aacfaace18e4f1ef68d9f22a2393a77e6a67f95
3
+ metadata.gz: 36aaf69cf6ab6c4b1e3aac54b311a3ef3ef2d373eaf5817a8ce6217036b7c819
4
+ data.tar.gz: 98589496e8b8d507208fbf37c2c43ea56f038b0987aed437e54b2291fc82eec5
5
5
  SHA512:
6
- metadata.gz: b82d46d6e02acf6cfaf8a6a818f059fea88ddbdebd1ebe3d309d85fed318471b120e191508474c572454cf9ec928c7d70b7225fc6a1a89059e1e8fe72e05579d
7
- data.tar.gz: 873408391ed636d15d8cb399283774d828cabfb1f8009f0a4a3f6a2ac9b907cbcef60446b3a872936192608facb552946b7b6d1f21809fd5bd44ab3bb0856626
6
+ metadata.gz: 61237ceb9c0539b8d7bd770b656e051a33d8c8738ca90557f63c1b26f6d23511c14d1687d2b13b6e19f70465e1917fb324dc39fce8312d85474f1e432bfd6e3c
7
+ data.tar.gz: 403bbe3698c30452bb4a8d5cfe2478e6d6227e6c39de4bd560e426546a83ae405be8f7ea75b5df53ce49ce1a10f7825044468cc7a6e3eee8ed10cb0dc5a92092
data/README.adoc CHANGED
@@ -64,7 +64,7 @@ item.to_xml bibdata: true
64
64
  <docidentifier type="3GPP" primary="true">3GPP TR 00.01U:UMTS/3.0.0</docidentifier>
65
65
  <docnumber>TR 00.01U:UMTS/3.0.0</docnumber>
66
66
  ...
67
- <ext schema-version="v1.0.1">
67
+ <ext schema-version="v1.0.4">
68
68
  <doctype>TR</doctype>
69
69
  <editorialgroup>
70
70
  <technical-committee type="prime">SMG5</technical-committee>
@@ -187,6 +187,15 @@ Applicable to modify and delete</a:documentation>
187
187
  <a:documentation>Optional caption of this block</a:documentation>
188
188
  </attribute>
189
189
  </optional>
190
+ <optional>
191
+ <attribute name="position">
192
+ <a:documentation>For an "add" change, whether the change is added before or after the location</a:documentation>
193
+ <choice>
194
+ <value>before</value>
195
+ <value>after</value>
196
+ </choice>
197
+ </attribute>
198
+ </optional>
190
199
  <optional>
191
200
  <element name="location">
192
201
  <a:documentation>The location(s) in the original document which have undergone the change described in this block</a:documentation>
@@ -208,11 +217,15 @@ Applicable to modify and delete</a:documentation>
208
217
  </zeroOrMore>
209
218
  <optional>
210
219
  <element name="newcontent">
211
- <a:documentation>New content to be added to the document; applicable to add and modify</a:documentation>
220
+ <a:documentation>New content to be added to the document; applicable to add and modify.
221
+ Can be blocks and/or sections</a:documentation>
212
222
  <ref name="OptionalId"/>
213
223
  <zeroOrMore>
214
224
  <ref name="BasicBlock"/>
215
225
  </zeroOrMore>
226
+ <zeroOrMore>
227
+ <ref name="section"/>
228
+ </zeroOrMore>
216
229
  </element>
217
230
  </optional>
218
231
  <zeroOrMore>
data/grammars/biblio.rng CHANGED
@@ -1142,11 +1142,11 @@ NOTE: This should preferably be encoded as a URI or short identifier, rather th
1142
1142
  <a:documentation>Information about how long the current description of the bibliographic item is valid for</a:documentation>
1143
1143
  </ref>
1144
1144
  </optional>
1145
- <optional>
1145
+ <zeroOrMore>
1146
1146
  <ref name="depiction">
1147
1147
  <a:documentation>Depiction of the bibliographic item, typically an image</a:documentation>
1148
1148
  </ref>
1149
- </optional>
1149
+ </zeroOrMore>
1150
1150
  </define>
1151
1151
  <define name="ReducedBibliographicItem">
1152
1152
  <a:documentation>Reduced description of a bibliographic resource, without mandatory title and docidentifier, used for document relations
@@ -1939,10 +1939,10 @@ Detailed in https://www.relaton.org/model/relations/</a:documentation>
1939
1939
  <value>hasAnnotation</value>
1940
1940
  <value>draftOf</value>
1941
1941
  <value>hasDraft</value>
1942
- <value>preliminaryDraftOf</value>
1943
- <value>hasPreliminaryDraft</value>
1944
- <value>revisionDraftOf</value>
1945
- <value>hasRevisionDraft</value>
1942
+ <value>predecessorDraftOf</value>
1943
+ <value>hasPredecessorDraft</value>
1944
+ <value>successorDraftOf</value>
1945
+ <value>hasSuccessorDraft</value>
1946
1946
  <value>editionOf</value>
1947
1947
  <value>hasEdition</value>
1948
1948
  <value>updates</value>
@@ -2063,13 +2063,13 @@ provided that it is not the entire bibliographic item that is so related</a:docu
2063
2063
  <ref name="LocalizedString"/>
2064
2064
  </element>
2065
2065
  </optional>
2066
- <oneOrMore>
2066
+ <zeroOrMore>
2067
2067
  <element name="taxon">
2068
2068
  <a:documentation>The keywords as a hierarchical taxonomy. For example, the sequence of `taxon` elements
2069
2069
  `pump`, `centrifugal pump`, `line shaft pump` represents a taxonomic classification</a:documentation>
2070
2070
  <ref name="LocalizedString"/>
2071
2071
  </element>
2072
- </oneOrMore>
2072
+ </zeroOrMore>
2073
2073
  <zeroOrMore>
2074
2074
  <ref name="vocabid">
2075
2075
  <a:documentation>Identifiers for the keyword as a controlled vocabulary</a:documentation>
@@ -13,31 +13,21 @@
13
13
  <value>release</value>
14
14
  </choice>
15
15
  </define>
16
- <define name="BibDataExtensionType">
17
- <optional>
18
- <attribute name="schema-version"/>
19
- </optional>
20
- <ref name="doctype"/>
21
- <optional>
22
- <ref name="docsubtype"/>
23
- </optional>
24
- <zeroOrMore>
25
- <ref name="ics"/>
26
- </zeroOrMore>
27
- <optional>
28
- <ref name="radiotechnology"/>
29
- </optional>
30
- <optional>
31
- <ref name="common-ims-spec"/>
32
- </optional>
33
- <optional>
34
- <ref name="internal"/>
35
- </optional>
36
- <optional>
37
- <ref name="release"/>
38
- </optional>
39
- </define>
40
16
  </include>
17
+ <define name="BibDataExtensionType" combine="interleave">
18
+ <optional>
19
+ <ref name="radiotechnology"/>
20
+ </optional>
21
+ <optional>
22
+ <ref name="common-ims-spec"/>
23
+ </optional>
24
+ <optional>
25
+ <ref name="internal"/>
26
+ </optional>
27
+ <optional>
28
+ <ref name="release"/>
29
+ </optional>
30
+ </define>
41
31
  <define name="RadioTechnologyType">
42
32
  <choice>
43
33
  <value>2G</value>
@@ -8,6 +8,10 @@ module Relaton
8
8
  class DataFetcher < Core::DataFetcher
9
9
  CURRENT = "current.yaml".freeze
10
10
 
11
+ def log_error(msg)
12
+ Util.error msg
13
+ end
14
+
11
15
  def index
12
16
  @index ||= Relaton::Index.find_or_create "3gpp", file: "#{INDEXFILE}.yaml"
13
17
  end
@@ -27,10 +31,11 @@ module Relaton
27
31
  index.remove_all # if renewal
28
32
  end
29
33
  CSV.open(file, "r:bom|utf-8", headers: true).each do |row|
30
- save_doc Parser.parse(row)
34
+ save_doc Parser.parse(row, @errors)
31
35
  end
32
36
  File.write CURRENT, @current.to_yaml, encoding: "UTF-8"
33
37
  index.save
38
+ report_errors
34
39
  end
35
40
 
36
41
  #
@@ -45,7 +50,7 @@ module Relaton
45
50
  @current ||= {}
46
51
  n = 0
47
52
  begin
48
- ftp = Net::FTP.new("www.3gpp.org")
53
+ ftp = Net::FTP.new("www.3gpp.org", open_timeout: 30)
49
54
  ftp.resume = true
50
55
  ftp.login
51
56
  ftp.chdir "/Information/Databases/"
@@ -60,7 +65,7 @@ module Relaton
60
65
 
61
66
  tmp_file = File.join Dir.tmpdir, "3gpp.csv"
62
67
  ftp.get(file, tmp_file)
63
- rescue Net::ReadTimeout => e
68
+ rescue Net::OpenTimeout, Net::ReadTimeout => e
64
69
  n += 1
65
70
  retry if n < 5
66
71
  raise e
@@ -10,19 +10,21 @@ module Relaton
10
10
  #
11
11
  # @param [CSV::Row] row CSV row
12
12
  #
13
- def initialize(row)
13
+ def initialize(row, errors)
14
14
  @row = row
15
+ @errors = errors
15
16
  end
16
17
 
17
18
  #
18
19
  # Initialize document parser and run it
19
20
  #
20
21
  # @param [CSV:Row] row CSV row
22
+ # @param [Hash] errors collection of parsing errors
21
23
  #
22
24
  # @return [RelatonBib:BibliographicItem, nil] bibliographic item
23
25
  #
24
- def self.parse(row)
25
- new(row).parse
26
+ def self.parse(row, errors = {})
27
+ new(row, errors).parse
26
28
  end
27
29
 
28
30
  #
@@ -58,8 +60,8 @@ module Relaton
58
60
  # @return [RelatonBib::TypedTitleStringCollection] title
59
61
  #
60
62
  def parse_title
63
+ @errors[:title] &&= @row["Title"].nil? || @row["Title"].empty?
61
64
  [Bib::Title.new(content: @row["Title"], type: "main")]
62
- # RelatonBib::TypedTitleStringCollection.new [t]
63
65
  end
64
66
 
65
67
  #
@@ -68,6 +70,7 @@ module Relaton
68
70
  # @return [Array<RelatonBib::TypedUri>] link
69
71
  #
70
72
  def parse_source
73
+ @errors[:source] &&= @row["Link"].nil? || @row["Link"].empty?
71
74
  return [] unless @row["Link"]
72
75
 
73
76
  [Bib::Uri.new(type: "src", content: @row["Link"])]
@@ -90,6 +93,7 @@ module Relaton
90
93
  # @return [Arra<RelatonBib::DocumentIdentifier>] docidentifier
91
94
  #
92
95
  def parse_docid
96
+ @errors[:docid] &&= @row[0].nil? || @row[0].empty?
93
97
  [Bib::Docidentifier.new(type: "3GPP", content: "3GPP #{number}", primary: true)]
94
98
  end
95
99
 
@@ -109,6 +113,7 @@ module Relaton
109
113
  end
110
114
 
111
115
  def parse_version
116
+ @errors[:version] &&= version.nil? || version.empty?
112
117
  [Bib::Version.new(draft: version)]
113
118
  end
114
119
 
@@ -117,11 +122,15 @@ module Relaton
117
122
  end
118
123
 
119
124
  def release
120
- @release ||= case @row["WPM Code 2G"]
121
- when /Release_(\d+)/ then "REL-#{$1}"
122
- when /PH(\d+)/ then "Ph#{$1}"
123
- else @row["Release"]
124
- end
125
+ @release ||= begin
126
+ r = case @row["WPM Code 2G"]
127
+ when /Release_(\d+)/ then "REL-#{$1}"
128
+ when /PH(\d+)/ then "Ph#{$1}"
129
+ else @row["Release"]
130
+ end
131
+ @errors[:release] &&= r.nil? || r.empty?
132
+ r
133
+ end
125
134
  end
126
135
 
127
136
  #
@@ -144,6 +153,7 @@ module Relaton
144
153
  on = Date.parse(@row["Date"]).to_s
145
154
  dates << Bib::Date.new(type: "published", at: on)
146
155
  end
156
+ @errors[:date] &&= dates.empty?
147
157
  dates
148
158
  end
149
159
 
@@ -190,19 +200,29 @@ module Relaton
190
200
  role = Bib::Contributor::Role.new type: "author"
191
201
  contribs << Bib::Contributor.new(person: person, role: [role])
192
202
  end
193
- contribs + editorial_group_contributors
203
+ @errors[:contributor] &&= contribs.empty?
204
+ contribs + prime_contribs + other_contribs
194
205
  end
195
206
 
196
- def editorial_group_contributors # rubocop:disable Metrics/MethodLength
197
- contribs = []
198
- prime = @row["Responsible Primary"]
199
- contribs << editorial_group_contributor(prime, "prime") unless prime.nil? || prime.empty?
200
- @row["Responsible Secondary"].strip.split(", ").each do |wg|
201
- contribs << editorial_group_contributor(wg, "other")
207
+ def other_contribs
208
+ contribs = @row["Responsible Secondary"].strip.split(", ").map do |wg|
209
+ editorial_group_contributor(wg, "other")
202
210
  end
211
+ @errors[:editorial_group_contributor_other] &&= contribs.empty?
203
212
  contribs
204
213
  end
205
214
 
215
+ def prime_contribs
216
+ prime = @row["Responsible Primary"]
217
+ if prime.nil? || prime.empty?
218
+ @errors[:editorial_group_contributor_prime] &&= true
219
+ return []
220
+ end
221
+
222
+ @errors[:editorial_group_contributor_prime] &&= false
223
+ [editorial_group_contributor(prime, "prime")]
224
+ end
225
+
206
226
  def editorial_group_contributor(wg_name, wg_type)
207
227
  Bib::Contributor.new(
208
228
  role: [Bib::Contributor::Role.new(
@@ -231,15 +251,37 @@ module Relaton
231
251
  end
232
252
 
233
253
  def person
234
- surname = Bib::LocalizedString.new content: @row["Last Name"], language: "en", script: "Latn"
235
- forename = Bib::FullNameType::Forename.new content: @row["First Name"], language: "en", script: "Latn"
236
254
  name = Bib::FullName.new(surname: surname, forename: [forename])
237
255
  Bib::Person.new(name: name, affiliation: affiliation)
238
256
  end
239
257
 
258
+ def surname
259
+ if @row["Last Name"].nil? || @row["Last Name"].empty?
260
+ @errors[:contributor_person_surname] &&= true
261
+ return nil
262
+ end
263
+
264
+ @errors[:contributor_person_surname] &&= false
265
+ Bib::LocalizedString.new content: @row["Last Name"], language: "en", script: "Latn"
266
+ end
267
+
268
+ def forename
269
+ if @row["First Name"].nil? || @row["First Name"].empty?
270
+ @errors[:contributor_person_forename] &&= true
271
+ return nil
272
+ end
273
+
274
+ @errors[:contributor_person_forename] &&= false
275
+ Bib::FullNameType::Forename.new content: @row["First Name"], language: "en", script: "Latn"
276
+ end
277
+
240
278
  def affiliation
241
- return [] if @row["Organisation"].nil? || @row["Organisation"].empty?
279
+ if @row["Organisation"].nil? || @row["Organisation"].empty?
280
+ @errors[:contributor_person_affiliation] &&= true
281
+ return []
282
+ end
242
283
 
284
+ @errors[:contributor_person_affiliation] &&= false
243
285
  name = Bib::TypedLocalizedString.new(content: @row["Organisation"])
244
286
  org = Bib::Organization.new(name: [name])
245
287
  [Bib::Affiliation.new(organization: org)]
@@ -252,6 +294,7 @@ module Relaton
252
294
  def parse_ext
253
295
  Ext.new(
254
296
  doctype: parse_doctype,
297
+ flavor: "3gpp",
255
298
  radiotechnology: parse_radiotechnology,
256
299
  release: parse_release,
257
300
  )
@@ -269,12 +312,14 @@ module Relaton
269
312
  # @return [String] radio technology
270
313
  #
271
314
  def parse_radiotechnology
272
- case @row["WPM Code 3G"]
273
- when /5G/ then "5G"
274
- when /4G/ then "LTE"
275
- when /3G/ then "3G"
276
- else @row["WPM Code 2G"] && "2G"
277
- end
315
+ result = case @row["WPM Code 3G"]
316
+ when /5G/ then "5G"
317
+ when /4G/ then "LTE"
318
+ when /3G/ then "3G"
319
+ else @row["WPM Code 2G"] && "2G"
320
+ end
321
+ @errors[:radiotechnology] &&= result.nil?
322
+ result
278
323
  end
279
324
 
280
325
  #
@@ -283,23 +328,66 @@ module Relaton
283
328
  # @return [Relaton3gpp::Release, nil] release
284
329
  #
285
330
  def parse_release # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
286
- project_start = Date.parse(@row["Project Start"]) if @row["Project Start"]
287
- project_end = Date.parse(@row["Project End"]) if @row["Project End"]
331
+ unless wmp_code2g || wmp_code3g || stage1_freeze || stage2_freeze ||
332
+ stage3_freeze || close_meeting || project_start || project_end
333
+ return
334
+ end
335
+
288
336
  Release.new(
289
337
  # version2g: @rel[:version_2g],
290
338
  # version3g: @rel[:version_3g],
291
339
  # defunct: @rel[:defunct] == "1",
292
- wpm_code_2g: @row["WPM Code 2G"],
293
- wpm_code_3g: @row["WPM Code 3G"],
340
+ wpm_code_2g: wmp_code2g,
341
+ wpm_code_3g: wmp_code3g,
294
342
  # freeze_meeting: @rel[:"freeze meeting"],
295
- freeze_stage1_meeting: @row["Stage 1 Freeze"],
296
- freeze_stage2_meeting: @row["Stage 2 Freeze"],
297
- freeze_stage3_meeting: @row["Stage 3 Freeze"],
298
- close_meeting: @row["Close Meeting"],
343
+ freeze_stage1_meeting: stage1_freeze,
344
+ freeze_stage2_meeting: stage2_freeze,
345
+ freeze_stage3_meeting: stage3_freeze,
346
+ close_meeting: close_meeting,
299
347
  project_start: project_start,
300
348
  project_end: project_end,
301
349
  )
302
350
  end
351
+
352
+ def wmp_code2g
353
+ @errors[:wmp_code_2g] &&= @row["WPM Code 2G"].nil? || @row["WPM Code 2G"].empty?
354
+ @row["WPM Code 2G"]
355
+ end
356
+
357
+ def wmp_code3g
358
+ @errors[:wmp_code_3g] &&= @row["WPM Code 3G"].nil? || @row["WPM Code 3G"].empty?
359
+ @row["WPM Code 3G"]
360
+ end
361
+
362
+ def stage1_freeze
363
+ @errors[:freeze_stage1_meeting] &&= @row["Stage 1 Freeze"].nil? || @row["Stage 1 Freeze"].empty?
364
+ @row["Stage 1 Freeze"]
365
+ end
366
+
367
+ def stage2_freeze
368
+ @errors[:freeze_stage2_meeting] &&= @row["Stage 2 Freeze"].nil? || @row["Stage 2 Freeze"].empty?
369
+ @row["Stage 2 Freeze"]
370
+ end
371
+
372
+ def stage3_freeze
373
+ @errors[:freeze_stage3_meeting] &&= @row["Stage 3 Freeze"].nil? || @row["Stage 3 Freeze"].empty?
374
+ @row["Stage 3 Freeze"]
375
+ end
376
+
377
+ def close_meeting
378
+ @errors[:close_meeting] &&= @row["Close Meeting"].nil? || @row["Close Meeting"].empty?
379
+ @row["Close Meeting"]
380
+ end
381
+
382
+ def project_start
383
+ @errors[:project_start] &&= @row["Project Start"].nil? || @row["Project Start"].empty?
384
+ Date.parse(@row["Project Start"]) if @row["Project Start"]
385
+ end
386
+
387
+ def project_end
388
+ @errors[:project_end] &&= @row["Project End"].nil? || @row["Project End"].empty?
389
+ Date.parse(@row["Project End"]) if @row["Project End"]
390
+ end
303
391
  end
304
392
  end
305
393
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Relaton
4
4
  module ThreeGpp
5
- VERSION = "2.0.0-alpha.3"
5
+ VERSION = "2.0.0-alpha.4"
6
6
  end
7
7
  end
data/relaton_3gpp.gemspec CHANGED
@@ -38,7 +38,7 @@ Gem::Specification.new do |spec| # rubocop:disable Metrics/BlockLength
38
38
 
39
39
  spec.add_dependency "csv"
40
40
  spec.add_dependency "net-ftp", "~> 0.1.0"
41
- spec.add_dependency "relaton-bib", "~> 2.0.0-alpha.4"
42
- spec.add_dependency "relaton-core", "~> 0.0.8"
41
+ spec.add_dependency "relaton-bib", "~> 2.0.0-alpha.7"
42
+ spec.add_dependency "relaton-core", "~> 0.0.12"
43
43
  spec.add_dependency "relaton-index", "~> 0.2.0"
44
44
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: relaton-3gpp
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.pre.alpha.3
4
+ version: 2.0.0.pre.alpha.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
@@ -43,28 +43,28 @@ dependencies:
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: 2.0.0.pre.alpha.4
46
+ version: 2.0.0.pre.alpha.7
47
47
  type: :runtime
48
48
  prerelease: false
49
49
  version_requirements: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: 2.0.0.pre.alpha.4
53
+ version: 2.0.0.pre.alpha.7
54
54
  - !ruby/object:Gem::Dependency
55
55
  name: relaton-core
56
56
  requirement: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: 0.0.8
60
+ version: 0.0.12
61
61
  type: :runtime
62
62
  prerelease: false
63
63
  version_requirements: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: 0.0.8
67
+ version: 0.0.12
68
68
  - !ruby/object:Gem::Dependency
69
69
  name: relaton-index
70
70
  requirement: !ruby/object:Gem::Requirement