relaton-w3c 1.14.1 → 1.14.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 98704ba5a2584740f2b47ac2710a68ead213e027ff7a1ee319e40180210c5b34
4
- data.tar.gz: 4ae2f3cee7bfef6432ed4542f49d43e7e63bd52f4c8bdba2e5e37058d3adca10
3
+ metadata.gz: 5a1a222450fe77ebead97e01ba3e660fb06992b2d13c6628a8089a27e5058307
4
+ data.tar.gz: a46a34fe7cf17baacbab2502b17bc0f3446e840a80e98b4f304c3ca5d3d255e5
5
5
  SHA512:
6
- metadata.gz: 481c6d393908896813dd6f523d9b4e6f48dc15d825ff416cf8c5df70d95f29cd2013e80eb45704c126847c82b6addda8f02aeec214bc3bea0c226bd485da7d95
7
- data.tar.gz: f6d8a22c1d3385c4e808b937f6d32f2c6f394f868168323f2c734d7d2a18f818e6ea304b122a6ef20766a05f9ffae8fc03b984856dca1148210e3dca2d12fa64
6
+ metadata.gz: cb3d82c9e735eae6f1029f473fa1c0fe63890861f13360259b7e6e3b189ba19e76ef1faa013735e6accd4887d69ad732fb6fe2c7b6cc2285e27bb8bc1982c55b
7
+ data.tar.gz: 0562d37dee60a531f1f23106de50df4f7e1a9e9bfd865ba0345108cbf246e0523dddb2f29763c00d2174adf62b04125a2587388b096148d516345b9bc58c49a4
@@ -5,6 +5,7 @@ name: rake
5
5
  on:
6
6
  push:
7
7
  branches: [ master, main ]
8
+ tags: [ v* ]
8
9
  pull_request:
9
10
 
10
11
  jobs:
@@ -10,8 +10,9 @@ on:
10
10
  Next release version. Possible values: x.y.z, major, minor, patch or pre|rc|etc
11
11
  required: true
12
12
  default: 'skip'
13
- push:
14
- tags: [ v* ]
13
+ repository_dispatch:
14
+ types: [ do-release ]
15
+
15
16
 
16
17
  jobs:
17
18
  release:
data/.gitignore CHANGED
@@ -6,6 +6,7 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+ /vendor/
9
10
 
10
11
  # rspec failure tracking
11
12
  .rspec_status
data/.rubocop.yml CHANGED
@@ -7,6 +7,6 @@ require: rubocop-rails
7
7
  inherit_from:
8
8
  - https://raw.githubusercontent.com/riboseinc/oss-guides/master/ci/rubocop.yml
9
9
  AllCops:
10
- TargetRubyVersion: 2.6
10
+ TargetRubyVersion: 2.7
11
11
  Rails:
12
12
  Enabled: false
data/Gemfile CHANGED
@@ -5,3 +5,9 @@ gemspec
5
5
 
6
6
  gem "rake", "~> 13.0"
7
7
  gem "rspec", "~> 3.0"
8
+
9
+ gem "equivalent-xml"
10
+ gem "ruby-jing"
11
+ gem "simplecov"
12
+ gem "vcr"
13
+ gem "webmock"
@@ -522,7 +522,6 @@
522
522
  <value>tip</value>
523
523
  <value>important</value>
524
524
  <value>caution</value>
525
- <value>statement</value>
526
525
  </choice>
527
526
  </define>
528
527
  <define name="figure">
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
- <ref name="organization"/>
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>complements</value>
1329
+ <value>hasComplement</value>
1320
1330
  <value>complementOf</value>
1321
1331
  <value>obsoletes</value>
1322
1332
  <value>obsoletedBy</value>
@@ -21,6 +21,7 @@ module RelatonW3c
21
21
  dir = File.dirname(File.expand_path(__FILE__))
22
22
  @group_names = YAML.load_file(File.join(dir, "workgroups.yaml"))
23
23
  @index = DataIndex.create_from_file
24
+ @index1 = Relaton::Index.find_or_create :W3C, file: "index1.yaml"
24
25
  end
25
26
 
26
27
  #
@@ -60,6 +61,7 @@ module RelatonW3c
60
61
  end
61
62
  end
62
63
  @index.sort!.save
64
+ @index1.save
63
65
  end
64
66
 
65
67
  #
@@ -218,7 +220,9 @@ module RelatonW3c
218
220
  if @files.include?(file)
219
221
  warn "File #{file} already exists. Document: #{bib.docnumber}" if warn_duplicate
220
222
  else
221
- @index.add bib.docnumber, file
223
+ pubid = PubId.parse bib.docnumber
224
+ @index.add pubid, file
225
+ @index1.add_or_update pubid.to_hash, file
222
226
  @files << file
223
227
  File.write file, c, encoding: "UTF-8"
224
228
  end
@@ -16,19 +16,21 @@ module RelatonW3c
16
16
  #
17
17
  # Add document to index or update it if already exists
18
18
  #
19
- # @param [String] docnumber document number
19
+ # @param [RelatonW3c::PubId] pubid document number
20
20
  # @param [String] file path to document file
21
21
  #
22
- def add(docnumber, file) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/MethodLength
23
- dnparts = self.class.docnumber_to_parts docnumber
22
+ def add(pubid, file) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/MethodLength
23
+ # dnparts = self.class.docnumber_to_parts docnumber
24
+ # pubid = PubId.parse docnumber
24
25
  rec = @index.detect { |i| i[:file] == file }
25
26
  if rec
26
- rec[:code] = dnparts[:code]
27
- dnparts[:stage] ? rec[:stage] = dnparts[:stage] : rec.delete(:stage)
28
- dnparts[:type] ? rec[:type] = dnparts[:type] : rec.delete(:type)
29
- dnparts[:date] ? rec[:date] = dnparts[:date] : rec.delete(:date)
30
- dnparts[:suff] ? rec[:suff] = dnparts[:suff] : rec.delete(:suff)
27
+ rec[:code] = pubid.code
28
+ pubid.stage ? rec[:stage] = pubid.stage : rec.delete(:stage)
29
+ pubid.type ? rec[:type] = pubid.type : rec.delete(:type)
30
+ pubid.date ? rec[:date] = pubid.date : rec.delete(:date)
31
+ pubid.suff ? rec[:suff] = pubid.suff : rec.delete(:suff)
31
32
  else
33
+ dnparts = pubid.to_hash
32
34
  dnparts[:file] = file
33
35
  @index << dnparts
34
36
  end
@@ -58,19 +60,19 @@ module RelatonW3c
58
60
  #
59
61
  # @return [String] document's filename
60
62
  #
61
- def search(ref) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
62
- dparts = self.class.docnumber_to_parts(ref)
63
- return if dparts[:code].nil?
63
+ # def search(ref) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
64
+ # pubid = PubId.parse(ref)
65
+ # return if pubid.code.nil?
64
66
 
65
- @index.detect do |parts|
66
- parts[:code].match?(/^#{Regexp.escape dparts[:code]}/i) &&
67
- (dparts[:stage].nil? || dparts[:stage].casecmp?(parts[:stage])) &&
68
- (dparts[:type].nil? || dparts[:type].casecmp?(parts[:type]) ||
69
- (parts[:type].nil? && dparts[:type] == "TR")) &&
70
- (dparts[:date].nil? || dparts[:date] == parts[:date]) &&
71
- (dparts[:suff].nil? || dparts[:suff].casecmp?(parts[:suff]))
72
- end&.fetch(:file)
73
- end
67
+ # @index.detect do |parts|
68
+ # parts[:code].match?(/^#{Regexp.escape pubid.code}/i) &&
69
+ # (pubid.stage.nil? || pubid.stage.casecmp?(parts[:stage])) &&
70
+ # (pubid.type.nil? || pubid.type.casecmp?(parts[:type]) ||
71
+ # (parts[:type].nil? && pubid.type == "TR")) &&
72
+ # (pubid.date.nil? || pubid.date == parts[:date]) &&
73
+ # (pubid.suff.nil? || pubid.suff.casecmp?(parts[:suff]))
74
+ # end&.fetch(:file)
75
+ # end
74
76
 
75
77
  #
76
78
  # Compare index items
@@ -120,13 +122,13 @@ module RelatonW3c
120
122
  #
121
123
  # @return [RelatonW3c::DataIndex] data index
122
124
  #
123
- def create_from_repo
124
- uri = URI("#{W3cBibliography::SOURCE}index-w3c.zip").open
125
- resp = Zip::InputStream.new uri
126
- zip = resp.get_next_entry
127
- index = RelatonBib.parse_yaml(zip.get_input_stream.read, [Symbol])
128
- new index: index
129
- end
125
+ # def create_from_repo
126
+ # uri = URI("#{W3cBibliography::SOURCE}index-w3c.zip").open
127
+ # resp = Zip::InputStream.new uri
128
+ # zip = resp.get_next_entry
129
+ # index = RelatonBib.parse_yaml(zip.get_input_stream.read, [Symbol])
130
+ # new index: index
131
+ # end
130
132
 
131
133
  #
132
134
  # Create index from a file
@@ -142,28 +144,6 @@ module RelatonW3c
142
144
  end
143
145
  new index_file: index_file, index: index
144
146
  end
145
-
146
- #
147
- # Parse document number to parts
148
- #
149
- # @param [String] docnumber document number
150
- #
151
- # @return [Hash{Symbol=>String}] document parts
152
- #
153
- def docnumber_to_parts(docnumber) # rubocop:disable Metrics/MethodLength
154
- %r{
155
- ^(?:(?:(?<stage>WD|CRD|CR|PR|PER|REC|SPSD|OBSL|RET)|(?<type>D?NOTE|TR))-)?
156
- (?<code>\w+(?:[+-][\w.]+)*?)
157
- (?:-(?<date>\d{8}|\d{6}|\d{4}))?
158
- (?:/(?<suff>\w+))?$
159
- }xi =~ docnumber
160
- entry = { code: code }
161
- entry[:stage] = stage if stage
162
- entry[:type] = type if type
163
- entry[:date] = date if date
164
- entry[:suff] = suff if suff
165
- entry
166
- end
167
147
  end
168
148
  end
169
149
  end
@@ -50,5 +50,12 @@ module RelatonW3c
50
50
  def grammar_hash
51
51
  @grammar_hash ||= ::RelatonW3c.grammar_hash
52
52
  end
53
+
54
+ #
55
+ # Remove index file
56
+ #
57
+ def remove_index_file
58
+ Relaton::Index.find_or_create(:W3C, url: true, file: "#{W3cBibliography::INDEX}.yaml").remove_file
59
+ end
53
60
  end
54
61
  end
@@ -0,0 +1,54 @@
1
+ module RelatonW3c
2
+ class PubId
3
+ PARTS = %i[code stage type date suff].freeze
4
+
5
+ PARTS.each { |part| attr_accessor part }
6
+
7
+ def initialize(**parts)
8
+ PARTS.each { |part| send "#{part}=", parts[part] }
9
+ end
10
+
11
+ #
12
+ # Parse document identifier.
13
+ #
14
+ # @param [String] docnumber document identifier
15
+ #
16
+ # @return [RelatonW3c::PubId] document identifier parts
17
+ #
18
+ def self.parse(docnumber) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
19
+ %r{
20
+ (?:^|/)(?:(?:(?<stage>WD|CRD|CR|PR|PER|REC|SPSD|OBSL|RET)|(?<type>D?NOTE|TR))[\s/-])?
21
+ (?<code>\w+(?:[+-][\w.]+)*?)
22
+ (?:-(?<date>\d{8}|\d{6}|\d{4}))?
23
+ (?:/(?<suff>\w+))?(?:$|/)
24
+ }xi =~ docnumber
25
+ entry = { code: code }
26
+ entry[:stage] = stage if stage
27
+ entry[:type] = type if type && type != "TR"
28
+ entry[:date] = date if date
29
+ entry[:suff] = suff if suff
30
+ new(**entry)
31
+ end
32
+
33
+ #
34
+ # Compare document identifiers against Hash ID representation.
35
+ #
36
+ # @param [Hash] other hash of document identifier parts
37
+ #
38
+ # @return [Boolean] true if document identifiers are same
39
+ #
40
+ def ==(other) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
41
+ other[:code].casecmp?(code) && other[:stage] == stage && other[:type] == type &&
42
+ (date.nil? || other[:date] == date) && (suff.nil? || other[:suff]&.casecmp?(suff))
43
+ end
44
+
45
+ #
46
+ # Convert docidentifier identifier to hash.
47
+ #
48
+ # @return [Hash] hash of docidentifier parts
49
+ #
50
+ def to_hash
51
+ PARTS.each_with_object({}) { |part, hash| hash[part] = send part if send part }
52
+ end
53
+ end
54
+ end
@@ -1,3 +1,3 @@
1
1
  module RelatonW3c
2
- VERSION = "1.14.1".freeze
2
+ VERSION = "1.14.3".freeze
3
3
  end
@@ -6,16 +6,20 @@ module RelatonW3c
6
6
  # Class methods for search W3C standards.
7
7
  class W3cBibliography
8
8
  SOURCE = "https://raw.githubusercontent.com/relaton/relaton-data-w3c/main/"
9
+ INDEX = "index1"
9
10
 
10
11
  class << self
11
12
  # @param text [String]
12
13
  # @return [RelatonW3c::W3cBibliographicItem]
13
14
  def search(text) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
14
- ref = DataParser.parse_identifier text.sub(/^W3C\s/, "")
15
- file = DataIndex.create_from_repo.search ref.gsub(" ", "-").squeeze("-")
16
- return unless file
15
+ pubid = PubId.parse text.sub(/^W3C\s/, "")
16
+ index = Relaton::Index.find_or_create(
17
+ :W3C, url: "#{SOURCE}#{INDEX}.zip", file: "#{INDEX}.yaml", id_keys: PubId::PARTS
18
+ )
19
+ row = index.search { |r| pubid == r[:id] }.first
20
+ return unless row
17
21
 
18
- url = "#{SOURCE}#{file}"
22
+ url = "#{SOURCE}#{row[:file]}"
19
23
  resp = Net::HTTP.get_response(URI.parse(url))
20
24
  return unless resp.code == "200"
21
25
 
data/lib/relaton_w3c.rb CHANGED
@@ -1,10 +1,12 @@
1
1
  require "relaton_bib"
2
+ require "relaton/index"
2
3
  require "relaton_w3c/version"
3
4
  require "relaton_w3c/w3c_bibliography"
4
5
  require "relaton_w3c/w3c_bibliographic_item"
5
6
  require "relaton_w3c/xml_parser"
6
7
  require "relaton_w3c/bibxml_parser"
7
8
  require "relaton_w3c/hash_converter"
9
+ require "relaton_w3c/pubid"
8
10
  require "relaton_w3c/data_fetcher"
9
11
  require "relaton_w3c/data_index"
10
12
 
data/relaton_w3c.gemspec CHANGED
@@ -14,7 +14,7 @@ Gem::Specification.new do |spec|
14
14
  "using the IsoBibliographicItem model"
15
15
  spec.homepage = "https://github.com/relaton/relaton-wc3"
16
16
  spec.license = "BSD-2-Clause"
17
- spec.required_ruby_version = Gem::Requirement.new(">= 2.6.0")
17
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
18
18
 
19
19
  # spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
20
20
 
@@ -31,17 +31,12 @@ Gem::Specification.new do |spec|
31
31
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
32
32
  spec.require_paths = ["lib"]
33
33
 
34
- spec.add_development_dependency "equivalent-xml", "~> 0.6"
35
- spec.add_development_dependency "ruby-jing"
36
- spec.add_development_dependency "simplecov"
37
- spec.add_development_dependency "vcr"
38
- spec.add_development_dependency "webmock"
39
-
40
34
  spec.add_dependency "linkeddata", "~> 3.2.0"
41
35
  spec.add_dependency "mechanize", "~> 2.8.0"
42
36
  spec.add_dependency "rdf", "~> 3.2.0"
43
37
  spec.add_dependency "rdf-normalize", "~> 0.5.0"
44
38
  spec.add_dependency "relaton-bib", "~> 1.14.0"
39
+ spec.add_dependency "relaton-index", "~> 0.2.4"
45
40
  spec.add_dependency "rubyzip", "~> 2.3.0"
46
41
  spec.add_dependency "shex", "~> 0.7.0"
47
42
  spec.add_dependency "sparql", "~> 3.2.0"
metadata CHANGED
@@ -1,85 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: relaton-w3c
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.14.1
4
+ version: 1.14.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-02-20 00:00:00.000000000 Z
11
+ date: 2023-06-14 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: equivalent-xml
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '0.6'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '0.6'
27
- - !ruby/object:Gem::Dependency
28
- name: ruby-jing
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: simplecov
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: vcr
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: webmock
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
13
  - !ruby/object:Gem::Dependency
84
14
  name: linkeddata
85
15
  requirement: !ruby/object:Gem::Requirement
@@ -150,6 +80,20 @@ dependencies:
150
80
  - - "~>"
151
81
  - !ruby/object:Gem::Version
152
82
  version: 1.14.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: relaton-index
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.2.4
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 0.2.4
153
97
  - !ruby/object:Gem::Dependency
154
98
  name: rubyzip
155
99
  requirement: !ruby/object:Gem::Requirement
@@ -225,6 +169,7 @@ files:
225
169
  - lib/relaton_w3c/data_parser.rb
226
170
  - lib/relaton_w3c/hash_converter.rb
227
171
  - lib/relaton_w3c/processor.rb
172
+ - lib/relaton_w3c/pubid.rb
228
173
  - lib/relaton_w3c/version.rb
229
174
  - lib/relaton_w3c/w3c_bibliographic_item.rb
230
175
  - lib/relaton_w3c/w3c_bibliography.rb
@@ -244,14 +189,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
244
189
  requirements:
245
190
  - - ">="
246
191
  - !ruby/object:Gem::Version
247
- version: 2.6.0
192
+ version: 2.7.0
248
193
  required_rubygems_version: !ruby/object:Gem::Requirement
249
194
  requirements:
250
195
  - - ">="
251
196
  - !ruby/object:Gem::Version
252
197
  version: '0'
253
198
  requirements: []
254
- rubygems_version: 3.1.6
199
+ rubygems_version: 3.3.26
255
200
  signing_key:
256
201
  specification_version: 4
257
202
  summary: 'RelatonIso: retrieve W3C Standards for bibliographic using the IsoBibliographicItem