relaton-w3c 1.12.2 → 1.13.0

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: 0bf7e3fdd349e94b272db7045c88bae46fe32f642436527486ff4db8abd08518
4
- data.tar.gz: d66405c0f27950d42f1ceac65d3be95a7f93e19ff5045d4c4618ddb551d819b1
3
+ metadata.gz: 22ce649a3b14df8df8f9e3f8bc6f62b762b589489abfd09fb46cf3fc90d3fb30
4
+ data.tar.gz: 2994d75163681a80278d2701f51acd767ac38011290b3c24561255118b8a697b
5
5
  SHA512:
6
- metadata.gz: fb14cc520b1fbe3f5bc0dfd387b990b1693e5e7ab8c15d093372cf8ebe5f11ae4df521c5d05885da83ef60b3fe475dedaeb3dc764a9aaad22f9288de50307ede
7
- data.tar.gz: 5d36eea643697240c15bc24abcc6b03414731fd1aed4dc48f4e86f32c7feba6cfa99e3e6f1503882b241414875534a480f4e3c215a39b9bccb60bf0d3c798df5
6
+ metadata.gz: 816d7ef8942dfdcf7cc9e9ea3de4cf682a9cded874d080002d1a9689f01ec432f137c6e8bd74ec7568e06ed8cc401e433ca7300e22fca18615e8909a1620ae19
7
+ data.tar.gz: 611763003e4faa41a922d4cf49a5236f40c40c95fe348a413a112911a7f0393005308651bd657b4e6d5a21c7c6ee10c7945c389d2844825fde5cc5326b660176
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
data/grammars/biblio.rng CHANGED
@@ -225,9 +225,9 @@
225
225
  <zeroOrMore>
226
226
  <ref name="forename"/>
227
227
  </zeroOrMore>
228
- <zeroOrMore>
229
- <ref name="initial"/>
230
- </zeroOrMore>
228
+ <optional>
229
+ <ref name="formatted-initials"/>
230
+ </optional>
231
231
  <ref name="surname"/>
232
232
  <zeroOrMore>
233
233
  <ref name="addition"/>
@@ -247,8 +247,8 @@
247
247
  <ref name="LocalizedString"/>
248
248
  </element>
249
249
  </define>
250
- <define name="initial">
251
- <element name="initial">
250
+ <define name="formatted-initials">
251
+ <element name="formatted-initials">
252
252
  <ref name="LocalizedString"/>
253
253
  </element>
254
254
  </define>
@@ -264,6 +264,9 @@
264
264
  </define>
265
265
  <define name="forename">
266
266
  <element name="forename">
267
+ <optional>
268
+ <attribute name="initial"/>
269
+ </optional>
267
270
  <ref name="LocalizedString"/>
268
271
  </element>
269
272
  </define>
data/grammars/isodoc.rng CHANGED
@@ -69,6 +69,17 @@
69
69
  </zeroOrMore>
70
70
  </element>
71
71
  </define>
72
+ <define name="AdmonitionType">
73
+ <choice>
74
+ <value>warning</value>
75
+ <value>note</value>
76
+ <value>tip</value>
77
+ <value>important</value>
78
+ <value>caution</value>
79
+ <value>statement</value>
80
+ <value>editorial</value>
81
+ </choice>
82
+ </define>
72
83
  <define name="index">
73
84
  <element name="index">
74
85
  <optional>
@@ -1274,7 +1285,12 @@
1274
1285
  </define>
1275
1286
  <define name="span">
1276
1287
  <element name="span">
1277
- <attribute name="class"/>
1288
+ <optional>
1289
+ <attribute name="class"/>
1290
+ </optional>
1291
+ <optional>
1292
+ <attribute name="style"/>
1293
+ </optional>
1278
1294
  <oneOrMore>
1279
1295
  <ref name="TextElement"/>
1280
1296
  </oneOrMore>
@@ -2493,6 +2509,16 @@
2493
2509
  <text/>
2494
2510
  </element>
2495
2511
  </optional>
2512
+ <optional>
2513
+ <element name="amendment">
2514
+ <text/>
2515
+ </element>
2516
+ </optional>
2517
+ <optional>
2518
+ <element name="corrigendum">
2519
+ <text/>
2520
+ </element>
2521
+ </optional>
2496
2522
  <optional>
2497
2523
  <element name="language">
2498
2524
  <text/>
@@ -20,7 +20,7 @@ module RelatonW3c
20
20
  @ext = format.sub(/^bib/, "")
21
21
  dir = File.dirname(File.expand_path(__FILE__))
22
22
  @group_names = YAML.load_file(File.join(dir, "workgroups.yaml"))
23
- @index = DataIndex.new
23
+ @index = DataIndex.create_from_file
24
24
  end
25
25
 
26
26
  #
@@ -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
  #
@@ -136,7 +136,10 @@ module RelatonW3c
136
136
  # @return [RelatonW3c::DataIndex] data index
137
137
  #
138
138
  def create_from_file(index_file = "index-w3c.yaml")
139
- index = RelatonBib.parse_yaml(File.read(index_file), [Symbol])
139
+ index = if File.exist?(index_file)
140
+ RelatonBib.parse_yaml(File.read(index_file), [Symbol])
141
+ else []
142
+ end
140
143
  new index_file: index_file, index: index
141
144
  end
142
145
 
@@ -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.2".freeze
2
+ VERSION = "1.13.0".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]
data/relaton_w3c.gemspec CHANGED
@@ -41,7 +41,7 @@ Gem::Specification.new do |spec|
41
41
  spec.add_dependency "mechanize", "~> 2.8.0"
42
42
  spec.add_dependency "rdf", "~> 3.2.0"
43
43
  spec.add_dependency "rdf-normalize", "~> 0.5.0"
44
- spec.add_dependency "relaton-bib", "~> 1.12.0"
44
+ spec.add_dependency "relaton-bib", "~> 1.13.0"
45
45
  spec.add_dependency "rubyzip", "~> 2.3.0"
46
46
  spec.add_dependency "shex", "~> 0.6.0"
47
47
  spec.add_dependency "sparql", "~> 3.1.0"
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.2
4
+ version: 1.13.0
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-15 00:00:00.000000000 Z
11
+ date: 2022-08-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: equivalent-xml
@@ -142,14 +142,14 @@ dependencies:
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: 1.12.0
145
+ version: 1.13.0
146
146
  type: :runtime
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: 1.12.0
152
+ version: 1.13.0
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: rubyzip
155
155
  requirement: !ruby/object:Gem::Requirement