relaton-w3c 1.12.3 → 1.12.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: b0e1e914bfe536b10f9d3b9e48f946e9d86a66df1db0233e1b6d3f67b29beaa6
4
- data.tar.gz: 635cd920c1b8ff93678083790518eade6ce7051653e190eb8294a25306e3e69a
3
+ metadata.gz: 99d8437c234f255a39c904f66b9a31a54bc8d96278cdf62be3097e53bc3f22d4
4
+ data.tar.gz: 42cb93c06794e8c72cbf81f43af3a7b3e4f5504f54215e2ac4872e61b84169bb
5
5
  SHA512:
6
- metadata.gz: bcdce1b3f1e10def99be7e5d51d98acb868d9d94884211d17814b22ffc64b5d2b4cfdee45bebe784fe02672d1af0cabb1a7dc7f3671433bd63c296a9ed106016
7
- data.tar.gz: 81457b4d1f0f59a6b869a7089bd9173164abd126ed17a923f5f02f1766e7d732ba421c61284cfd35b1ca006b75c0e8e1ff7e80d55f58d7af09f64460bd8e1d8f
6
+ metadata.gz: 3f970f7fbcdf0f3490ceea00f891877bfc235e5c1ac6a3e2dbf61845686088800281ae7c2d09ac98c8a51a5d6e8b4e9447e4aaa0ab14db52be141265ed4b2999
7
+ data.tar.gz: 57b934f34559e319b627c1747133a807f4befbf1a41f28523197c6fc66e51484bab2b43feaea90e92c02f7a15a3dedde55a20b9cf5f97c3c6410b85a2fa3acbe
data/.gitignore CHANGED
@@ -12,3 +12,4 @@
12
12
  Gemfile.lock
13
13
  .rubocop-https---raw-githubusercontent-com-riboseinc-oss-guides-master-ci-rubocop-yml
14
14
  .vscode/
15
+ tr.rdf
@@ -67,21 +67,52 @@ module RelatonW3c
67
67
  #
68
68
  # @param [RelatonW3c::W3cBibliographicItem] bib bibligraphic item
69
69
  #
70
- def add_has_edition_relation(bib) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/CyclomaticComplexity
70
+ def add_has_edition_relation(bib) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/MethodLength
71
71
  file = file_name bib.docnumber
72
- return unless File.exist? file
73
-
74
- b = case @format
75
- when "xml" then XMLParser.from_xml(File.read(file, encoding: "UTF-8"))
76
- when "yaml"
77
- hash = YAML.load_file(file)
78
- W3cBibliographicItem.from_hash(hash)
79
- when "bibxml" then BibXMLParser.parse File.read(file, encoding: "UTF-8")
80
- end
81
- b.relation.each do |r|
82
- same_edition = bib.relation.detect { |r2| same_edition?(r, r2) }
83
- bib.relation << r unless same_edition
72
+ if File.exist? file
73
+ item = send "read_#{@format}", file
74
+ item.relation.each do |r1|
75
+ r1.type = "hasEdition" if r1.type == "instance"
76
+ same_edition = bib.relation.detect { |r2| same_edition?(r1, r2) }
77
+ bib.relation << r1 unless same_edition
78
+ end
84
79
  end
80
+ bib.relation.select { |r| r.type == "hasEdition" }
81
+ .max_by { |r| r.bibitem.id.match(/(?<=-)\d{8}$/).to_s }&.type = "instance"
82
+ end
83
+
84
+ #
85
+ # Read XML file
86
+ #
87
+ # @param [String] file file name
88
+ #
89
+ # @return [RelatonW3c::W3cBibliographicItem] bibliographic item
90
+ #
91
+ def read_xml(file)
92
+ XMLParser.from_xml(File.read(file, encoding: "UTF-8"))
93
+ end
94
+
95
+ #
96
+ # Read YAML file
97
+ #
98
+ # @param [String] file file name
99
+ #
100
+ # @return [RelatonW3c::W3cBibliographicItem] bibliographic item
101
+ #
102
+ def read_yaml(file)
103
+ hash = YAML.load_file(file)
104
+ W3cBibliographicItem.from_hash(hash)
105
+ end
106
+
107
+ #
108
+ # Read BibXML file
109
+ #
110
+ # @param [String] file file name
111
+ #
112
+ # @return [RelatonW3c::W3cBibliographicItem] bibliographic item
113
+ #
114
+ def read_bibxml(file)
115
+ BibXMLParser.parse File.read(file, encoding: "UTF-8")
85
116
  end
86
117
 
87
118
  #
@@ -101,7 +101,7 @@ module RelatonW3c
101
101
  #
102
102
  def parse_link
103
103
  link = @sol.respond_to?(:link) ? @sol.link : @sol.version_of
104
- [RelatonBib::TypedUri.new(type: "src", content: link.to_s.strip)]
104
+ [RelatonBib::TypedUri.new(type: "src", content: link.to_s.strip)] + editor_drafts
105
105
  end
106
106
 
107
107
  #
@@ -176,29 +176,64 @@ module RelatonW3c
176
176
  #
177
177
  # @return [Array<String>] types and stages
178
178
  #
179
- def types_stages # rubocop:disable Metrics/MethodLength
180
- return unless @sol.respond_to?(:link)
181
-
179
+ def types_stages
182
180
  @types_stages ||= begin
183
- sse = SPARQL.parse(%(
184
- PREFIX : <http://www.w3.org/2001/02pd/rec54#>
185
- PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
186
- SELECT ?type
187
- WHERE {
188
- { <#{@sol.link.to_s.strip}> rdf:type ?type }
189
- }
190
- ))
181
+ sse = @sol.respond_to?(:link) ? versioned_types_stages : unversioned_types_stages
191
182
  @rdf.query(sse).map { |s| s.type.to_s.split("#").last }
192
183
  end
193
184
  end
194
185
 
186
+ #
187
+ # Create SPARQL query for versioned types and stages
188
+ #
189
+ # @return [SPARQL::Algebra::Operator::Prefix] SPARQL query
190
+ #
191
+ def versioned_types_stages
192
+ SPARQL.parse(%(
193
+ PREFIX : <http://www.w3.org/2001/02pd/rec54#>
194
+ PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
195
+ SELECT ?type
196
+ WHERE {
197
+ { <#{@sol.link.to_s.strip}> rdf:type ?type }
198
+ }
199
+ ))
200
+ end
201
+
202
+ #
203
+ # Create SPARQL query for unversioned types and stages
204
+ #
205
+ # @return [SPARQL::Algebra::Operator::Prefix] SPARQL query
206
+ #
207
+ def unversioned_types_stages
208
+ SPARQL.parse(%(
209
+ PREFIX : <http://www.w3.org/2001/02pd/rec54#>
210
+ PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
211
+ PREFIX doc: <http://www.w3.org/2000/10/swap/pim/doc#>
212
+ SELECT ?type
213
+ WHERE {
214
+ ?link doc:versionOf <#{@sol.version_of}>; rdf:type ?type .
215
+ FILTER ( isURI(?link) && STR(?link) != <#{@sol.version_of}> )
216
+ }
217
+ ))
218
+ end
219
+
195
220
  #
196
221
  # Parse doctype
197
222
  #
198
- # @return [Strinf] doctype
223
+ # @return [String, nil] doctype
199
224
  #
200
225
  def parse_doctype
201
- DOCTYPES[type] || "recommendation"
226
+ DOCTYPES[type] || DOCTYPES[type_from_link]
227
+ end
228
+
229
+ #
230
+ # Fetch type from link
231
+ #
232
+ # @return [String, nil] type
233
+ #
234
+ def type_from_link
235
+ link = @sol.respond_to?(:link) ? @sol.link : @sol.version_of
236
+ link.to_s.strip.match(/www\.w3\.org\/(TR)/)&.to_a&.fetch 1
202
237
  end
203
238
 
204
239
  #
@@ -219,7 +254,7 @@ module RelatonW3c
219
254
  #
220
255
  def parse_relation
221
256
  if @sol.respond_to?(:link)
222
- relations + editor_drafts
257
+ relations
223
258
  else
224
259
  document_versions.map { |r| create_relation(r.link.to_s.strip, "hasEdition") }
225
260
  end
@@ -250,14 +285,16 @@ module RelatonW3c
250
285
  # @return [Array<RelatonBib::DocumentRelation>] relation
251
286
  #
252
287
  def editor_drafts # rubocop:disable Metrics/MethodLength
288
+ return [] unless @sol.respond_to?(:link)
289
+
253
290
  sse = SPARQL.parse(%(
254
291
  PREFIX : <http://www.w3.org/2001/02pd/rec54#>
255
292
  PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
256
- SELECT ?rel
257
- WHERE { <#{@sol.link.to_s.strip}> :ED ?rel . }
293
+ SELECT ?latest
294
+ WHERE { <#{@sol.link.to_s.strip}> :ED ?latest . }
258
295
  ))
259
296
  @rdf.query(sse).map do |s|
260
- create_relation(s.rel.to_s, "hasDraft", "Editor's draft")
297
+ RelatonBib::TypedUri.new(type: "current", content: s.latest.to_s.strip)
261
298
  end
262
299
  end
263
300
 
@@ -1,3 +1,3 @@
1
1
  module RelatonW3c
2
- VERSION = "1.12.3".freeze
2
+ VERSION = "1.12.4".freeze
3
3
  end
@@ -2,7 +2,7 @@ module RelatonW3c
2
2
  class W3cBibliographicItem < RelatonBib::BibliographicItem
3
3
  TYPES = %w[
4
4
  candidateRecommendation groupNote proposedEditedRecommendation
5
- proposedRecommendation recommendation retired workingDraft
5
+ proposedRecommendation recommendation retired workingDraft technicalReport
6
6
  ].freeze
7
7
 
8
8
  # @param doctype [String]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: relaton-w3c
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.12.3
4
+ version: 1.12.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-07-20 00:00:00.000000000 Z
11
+ date: 2022-08-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: equivalent-xml