relaton-w3c 1.20.0 → 1.20.1
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 +4 -4
- data/README.adoc +2 -5
- data/lib/relaton_w3c/data_fetcher.rb +30 -121
- data/lib/relaton_w3c/data_parser.rb +85 -214
- data/lib/relaton_w3c/processor.rb +1 -1
- data/lib/relaton_w3c/rate_limit_handler.rb +32 -0
- data/lib/relaton_w3c/version.rb +1 -1
- data/relaton_w3c.gemspec +1 -8
- metadata +7 -106
- data/lib/relaton_w3c/rdf_archive.rb +0 -67
- data/lib/relaton_w3c/workgroups.yaml +0 -521
@@ -0,0 +1,32 @@
|
|
1
|
+
module RelatonW3c
|
2
|
+
module RateLimitHandler
|
3
|
+
def self.fetched_objects
|
4
|
+
@fetched_objects ||= {}
|
5
|
+
end
|
6
|
+
|
7
|
+
def realize(obj)
|
8
|
+
href = obj.href || obj.links.self.href
|
9
|
+
return RateLimitHandler.fetched_objects[href] if RateLimitHandler.fetched_objects.key?(href)
|
10
|
+
|
11
|
+
n = 1
|
12
|
+
begin
|
13
|
+
RateLimitHandler.fetched_objects[href] = obj.realize
|
14
|
+
rescue NameError, # NameError caused by lutaml-hal-0.1.7/lib/lutaml/hal/client.rb:51:in `rescue in get': uninitialized constant Lutaml::Hal::Client::ConnectionError
|
15
|
+
Faraday::ConnectionFailed, Net::OpenTimeout => e
|
16
|
+
if n < 5
|
17
|
+
sleep_time = n * n
|
18
|
+
n += 1
|
19
|
+
Util.warn "Rate limit exceeded for #{href}, retrying in #{sleep_time} seconds..."
|
20
|
+
sleep sleep_time
|
21
|
+
retry
|
22
|
+
else
|
23
|
+
Util.warn "Failed to realize object: #{href}"
|
24
|
+
raise e
|
25
|
+
end
|
26
|
+
rescue Lutaml::Hal::NotFoundError
|
27
|
+
Util.warn "Object not found: #{href}"
|
28
|
+
RateLimitHandler.fetched_objects[href] = nil
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/relaton_w3c/version.rb
CHANGED
data/relaton_w3c.gemspec
CHANGED
@@ -31,14 +31,7 @@ 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_dependency "linkeddata", "~> 3.2"
|
35
|
-
spec.add_dependency "mechanize", "~> 2.10"
|
36
|
-
spec.add_dependency "rdf", "~> 3.2"
|
37
|
-
spec.add_dependency "rdf-normalize", "~> 0.6"
|
38
34
|
spec.add_dependency "relaton-bib", "~> 1.20.0"
|
39
35
|
spec.add_dependency "relaton-index", "~> 0.2.8"
|
40
|
-
spec.add_dependency "
|
41
|
-
spec.add_dependency "shex", "~> 0.7"
|
42
|
-
spec.add_dependency "csv", "~> 3.0"
|
43
|
-
spec.add_dependency "sparql", "~> 3.2"
|
36
|
+
spec.add_dependency "w3c_api", "~> 0.1.3"
|
44
37
|
end
|
metadata
CHANGED
@@ -1,71 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: relaton-w3c
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.20.
|
4
|
+
version: 1.20.1
|
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: 2025-07-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: linkeddata
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '3.2'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '3.2'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: mechanize
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '2.10'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '2.10'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: rdf
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '3.2'
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '3.2'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: rdf-normalize
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0.6'
|
62
|
-
type: :runtime
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0.6'
|
69
13
|
- !ruby/object:Gem::Dependency
|
70
14
|
name: relaton-bib
|
71
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -95,61 +39,19 @@ dependencies:
|
|
95
39
|
- !ruby/object:Gem::Version
|
96
40
|
version: 0.2.8
|
97
41
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - "~>"
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '2.3'
|
104
|
-
type: :runtime
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - "~>"
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '2.3'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: shex
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - "~>"
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '0.7'
|
118
|
-
type: :runtime
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - "~>"
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '0.7'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: csv
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - "~>"
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '3.0'
|
132
|
-
type: :runtime
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - "~>"
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '3.0'
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: sparql
|
42
|
+
name: w3c_api
|
141
43
|
requirement: !ruby/object:Gem::Requirement
|
142
44
|
requirements:
|
143
45
|
- - "~>"
|
144
46
|
- !ruby/object:Gem::Version
|
145
|
-
version:
|
47
|
+
version: 0.1.3
|
146
48
|
type: :runtime
|
147
49
|
prerelease: false
|
148
50
|
version_requirements: !ruby/object:Gem::Requirement
|
149
51
|
requirements:
|
150
52
|
- - "~>"
|
151
53
|
- !ruby/object:Gem::Version
|
152
|
-
version:
|
54
|
+
version: 0.1.3
|
153
55
|
description: 'RelatonIso: retrieve W3C Standards for bibliographic using the IsoBibliographicItem
|
154
56
|
model'
|
155
57
|
email:
|
@@ -187,12 +89,11 @@ files:
|
|
187
89
|
- lib/relaton_w3c/hit_collection.rb
|
188
90
|
- lib/relaton_w3c/processor.rb
|
189
91
|
- lib/relaton_w3c/pubid.rb
|
190
|
-
- lib/relaton_w3c/
|
92
|
+
- lib/relaton_w3c/rate_limit_handler.rb
|
191
93
|
- lib/relaton_w3c/util.rb
|
192
94
|
- lib/relaton_w3c/version.rb
|
193
95
|
- lib/relaton_w3c/w3c_bibliographic_item.rb
|
194
96
|
- lib/relaton_w3c/w3c_bibliography.rb
|
195
|
-
- lib/relaton_w3c/workgroups.yaml
|
196
97
|
- lib/relaton_w3c/xml_parser.rb
|
197
98
|
- relaton_w3c.gemspec
|
198
99
|
homepage: https://github.com/relaton/relaton-wc3
|
@@ -215,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
215
116
|
- !ruby/object:Gem::Version
|
216
117
|
version: '0'
|
217
118
|
requirements: []
|
218
|
-
rubygems_version: 3.
|
119
|
+
rubygems_version: 3.5.22
|
219
120
|
signing_key:
|
220
121
|
specification_version: 4
|
221
122
|
summary: 'RelatonIso: retrieve W3C Standards for bibliographic using the IsoBibliographicItem
|
@@ -1,67 +0,0 @@
|
|
1
|
-
module RelatonW3c
|
2
|
-
class RDFArchive
|
3
|
-
def initialize(file = "archive.rdf")
|
4
|
-
@file = file
|
5
|
-
end
|
6
|
-
|
7
|
-
#
|
8
|
-
# Get RDF data from the updated archive file.
|
9
|
-
#
|
10
|
-
# @return [RDF::Repository]
|
11
|
-
#
|
12
|
-
def get_data
|
13
|
-
if !File.exist?(@file) || File.mtime(@file) < Time.now - 86_400
|
14
|
-
get_archive
|
15
|
-
update_archive
|
16
|
-
end
|
17
|
-
RDF::Repository.load(@file)
|
18
|
-
end
|
19
|
-
|
20
|
-
private
|
21
|
-
|
22
|
-
def update_archive
|
23
|
-
# Load the older RDF/XML file
|
24
|
-
older = Nokogiri::XML File.read(@file, encoding: "UTF-8")
|
25
|
-
|
26
|
-
# Load the newer RDF/XML file
|
27
|
-
url = "http://www.w3.org/2002/01/tr-automation/tr.rdf"
|
28
|
-
newer = Nokogiri::XML OpenURI.open_uri(url).read
|
29
|
-
|
30
|
-
# Create a hash to store rdf:about attributes from the newer file
|
31
|
-
newer_elements = {}
|
32
|
-
newer.root.element_children.each do |element|
|
33
|
-
rdf_about = element.attribute('about')&.value
|
34
|
-
newer_elements[rdf_about.sub(/^http\s:/, "")] = element if rdf_about
|
35
|
-
end
|
36
|
-
|
37
|
-
# Replace elements in the older document
|
38
|
-
older.root.element_children.each do |element|
|
39
|
-
rdf_about = element.attribute('about')&.value
|
40
|
-
if rdf_about && newer_elements[url = rdf_about.sub(/^http\s:/, "")]
|
41
|
-
element.replace(newer_elements[url])
|
42
|
-
newer_elements.delete(url)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
# Add remaining new elements to the older document
|
47
|
-
newer_elements.each_value do |element|
|
48
|
-
older.root.add_child(element)
|
49
|
-
end
|
50
|
-
|
51
|
-
# Add new namespaces from the newer document to the older document
|
52
|
-
newer.root.namespace_definitions.each do |ns|
|
53
|
-
unless older.root.namespace_definitions.any? { |old_ns| old_ns.href == ns.href }
|
54
|
-
older.root.add_namespace_definition(ns.prefix, ns.href)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
File.write @file, older.to_xml, encoding: "UTF-8"
|
58
|
-
end
|
59
|
-
|
60
|
-
def get_archive
|
61
|
-
unless File.exist? @file
|
62
|
-
url = "https://raw.githubusercontent.com/relaton/relaton-data-w3c/refs/heads/main/archive.rdf"
|
63
|
-
File.write @file, OpenURI.open_uri(url).read, encoding: "UTF-8"
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|