rdf-microdata 2.2.0 → 3.1.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 +5 -5
- data/README.md +25 -19
- data/UNLICENSE +1 -1
- data/VERSION +1 -1
- data/etc/doap.html +9 -9
- data/etc/doap.nt +19 -19
- data/etc/doap.ttl +17 -16
- data/lib/rdf/microdata.rb +10 -7
- data/lib/rdf/microdata/expansion.rb +2 -3
- data/lib/rdf/microdata/format.rb +87 -1
- data/lib/rdf/microdata/rdfa_reader.rb +121 -0
- data/lib/rdf/microdata/reader.rb +73 -160
- data/lib/rdf/microdata/reader/nokogiri.rb +13 -5
- data/lib/rdf/microdata/registry.rb +109 -0
- metadata +44 -29
@@ -0,0 +1,109 @@
|
|
1
|
+
require 'json'
|
2
|
+
module RDF::Microdata
|
3
|
+
|
4
|
+
# Interface to registry
|
5
|
+
class Registry
|
6
|
+
# @return [RDF::URI] Prefix of vocabulary
|
7
|
+
attr_reader :uri
|
8
|
+
|
9
|
+
# @return [Hash] properties
|
10
|
+
attr_reader :properties
|
11
|
+
|
12
|
+
##
|
13
|
+
# Initialize the registry from a URI or file path
|
14
|
+
#
|
15
|
+
# @param [String] registry_uri
|
16
|
+
def self.load_registry(registry_uri)
|
17
|
+
return if @registry_uri == registry_uri
|
18
|
+
|
19
|
+
json = RDF::Util::File.open_file(registry_uri) { |f| ::JSON.load(f) }
|
20
|
+
|
21
|
+
@prefixes = {}
|
22
|
+
json.each do |prefix, elements|
|
23
|
+
next unless elements.is_a?(Hash)
|
24
|
+
properties = elements.fetch("properties", {})
|
25
|
+
@prefixes[prefix] = Registry.new(prefix, properties)
|
26
|
+
end
|
27
|
+
@registry_uri = registry_uri
|
28
|
+
end
|
29
|
+
|
30
|
+
##
|
31
|
+
# Initialize registry for a particular prefix URI
|
32
|
+
#
|
33
|
+
# @param [RDF::URI] prefixURI
|
34
|
+
# @param [Hash] properties ({})
|
35
|
+
def initialize(prefixURI, properties = {})
|
36
|
+
@uri = prefixURI
|
37
|
+
@properties = properties
|
38
|
+
@property_base = prefixURI.to_s
|
39
|
+
# Append a '#' for fragment if necessary
|
40
|
+
@property_base += '#' unless %w(/ #).include?(@property_base[-1,1])
|
41
|
+
end
|
42
|
+
|
43
|
+
##
|
44
|
+
# Find a registry entry given a type URI
|
45
|
+
#
|
46
|
+
# @param [RDF::URI] type
|
47
|
+
# @return [Registry]
|
48
|
+
def self.find(type)
|
49
|
+
@prefixes ||= {}
|
50
|
+
k = @prefixes.keys.detect {|key| type.to_s.index(key) == 0 }
|
51
|
+
@prefixes[k] if k
|
52
|
+
end
|
53
|
+
|
54
|
+
##
|
55
|
+
# Generate a predicateURI given a `name`
|
56
|
+
#
|
57
|
+
# @param [#to_s] name
|
58
|
+
# @param [RDF::URI] base_uri base URI for resolving `name`.
|
59
|
+
# @return [RDF::URI]
|
60
|
+
def predicateURI(name, base_uri)
|
61
|
+
u = RDF::URI(name)
|
62
|
+
# 1) If _name_ is an _absolute URL_, return _name_ as a _URI reference_
|
63
|
+
return u if u.absolute?
|
64
|
+
|
65
|
+
n = frag_escape(name)
|
66
|
+
if uri.nil?
|
67
|
+
# 2) If current vocabulary from context is null, there can be no current vocabulary.
|
68
|
+
# Return the URI reference that is the document base with its fragment set to the fragment-escaped value of name
|
69
|
+
u = RDF::URI(base_uri.to_s)
|
70
|
+
u.fragment = frag_escape(name)
|
71
|
+
u
|
72
|
+
else
|
73
|
+
# 4) If scheme is vocabulary return the URI reference constructed by appending the fragment escaped value of name to current vocabulary, separated by a U+0023 NUMBER SIGN character (#) unless the current vocabulary ends with either a U+0023 NUMBER SIGN character (#) or SOLIDUS U+002F (/).
|
74
|
+
RDF::URI(@property_base + n)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
##
|
79
|
+
# Yield a equivalentProperty or subPropertyOf if appropriate
|
80
|
+
#
|
81
|
+
# @param [RDF::URI] predicateURI
|
82
|
+
# @yield equiv
|
83
|
+
# @yieldparam [RDF::URI] equiv
|
84
|
+
def expand(predicateURI)
|
85
|
+
tok = tokenize(predicateURI)
|
86
|
+
if @properties[tok].is_a?(Hash)
|
87
|
+
value = @properties[tok].fetch("subPropertyOf", nil)
|
88
|
+
value ||= @properties[tok].fetch("equivalentProperty", nil)
|
89
|
+
|
90
|
+
Array(value).each {|equiv| yield RDF::URI(equiv)}
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
##
|
95
|
+
# Turn a predicateURI into a simple token
|
96
|
+
# @param [RDF::URI] predicateURI
|
97
|
+
# @return [String]
|
98
|
+
def tokenize(predicateURI)
|
99
|
+
predicateURI.to_s.sub(@property_base, '')
|
100
|
+
end
|
101
|
+
|
102
|
+
##
|
103
|
+
# Fragment escape a name
|
104
|
+
def frag_escape(name)
|
105
|
+
name.to_s.gsub(/["#%<>\[\\\]^{|}]/) {|c| '%' + c.unpack('H2' * c.bytesize).join('%').upcase}
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rdf-microdata
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gregg
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2020-07-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rdf
|
@@ -17,28 +17,28 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: '
|
20
|
+
version: '3.1'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: '
|
27
|
+
version: '3.1'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: rdf-xsd
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
32
|
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '
|
34
|
+
version: '3.1'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: '
|
41
|
+
version: '3.1'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: htmlentities
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -59,14 +59,14 @@ dependencies:
|
|
59
59
|
requirements:
|
60
60
|
- - "~>"
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version: '1.
|
62
|
+
version: '1.10'
|
63
63
|
type: :runtime
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
67
|
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: '1.
|
69
|
+
version: '1.10'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: equivalent-xml
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
@@ -87,98 +87,112 @@ dependencies:
|
|
87
87
|
requirements:
|
88
88
|
- - "~>"
|
89
89
|
- !ruby/object:Gem::Version
|
90
|
-
version:
|
90
|
+
version: 0.9.20
|
91
91
|
type: :development
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
95
|
- - "~>"
|
96
96
|
- !ruby/object:Gem::Version
|
97
|
-
version:
|
97
|
+
version: 0.9.20
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
99
|
name: rspec
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
101
101
|
requirements:
|
102
102
|
- - "~>"
|
103
103
|
- !ruby/object:Gem::Version
|
104
|
-
version: '3.
|
104
|
+
version: '3.9'
|
105
105
|
type: :development
|
106
106
|
prerelease: false
|
107
107
|
version_requirements: !ruby/object:Gem::Requirement
|
108
108
|
requirements:
|
109
109
|
- - "~>"
|
110
110
|
- !ruby/object:Gem::Version
|
111
|
-
version: '3.
|
111
|
+
version: '3.9'
|
112
112
|
- !ruby/object:Gem::Dependency
|
113
113
|
name: rspec-its
|
114
114
|
requirement: !ruby/object:Gem::Requirement
|
115
115
|
requirements:
|
116
116
|
- - "~>"
|
117
117
|
- !ruby/object:Gem::Version
|
118
|
-
version: '1.
|
118
|
+
version: '1.3'
|
119
119
|
type: :development
|
120
120
|
prerelease: false
|
121
121
|
version_requirements: !ruby/object:Gem::Requirement
|
122
122
|
requirements:
|
123
123
|
- - "~>"
|
124
124
|
- !ruby/object:Gem::Version
|
125
|
-
version: '1.
|
125
|
+
version: '1.3'
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
127
|
name: rdf-spec
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|
129
129
|
requirements:
|
130
130
|
- - "~>"
|
131
131
|
- !ruby/object:Gem::Version
|
132
|
-
version: '
|
132
|
+
version: '3.1'
|
133
133
|
type: :development
|
134
134
|
prerelease: false
|
135
135
|
version_requirements: !ruby/object:Gem::Requirement
|
136
136
|
requirements:
|
137
137
|
- - "~>"
|
138
138
|
- !ruby/object:Gem::Version
|
139
|
-
version: '
|
139
|
+
version: '3.1'
|
140
140
|
- !ruby/object:Gem::Dependency
|
141
|
-
name: rdf-
|
141
|
+
name: rdf-turtle
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - ">="
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '3.1'
|
147
|
+
type: :development
|
148
|
+
prerelease: false
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - ">="
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '3.1'
|
154
|
+
- !ruby/object:Gem::Dependency
|
155
|
+
name: rdf-isomorphic
|
142
156
|
requirement: !ruby/object:Gem::Requirement
|
143
157
|
requirements:
|
144
158
|
- - "~>"
|
145
159
|
- !ruby/object:Gem::Version
|
146
|
-
version: '
|
160
|
+
version: '3.1'
|
147
161
|
type: :development
|
148
162
|
prerelease: false
|
149
163
|
version_requirements: !ruby/object:Gem::Requirement
|
150
164
|
requirements:
|
151
165
|
- - "~>"
|
152
166
|
- !ruby/object:Gem::Version
|
153
|
-
version: '
|
167
|
+
version: '3.1'
|
154
168
|
- !ruby/object:Gem::Dependency
|
155
|
-
name:
|
169
|
+
name: json-ld
|
156
170
|
requirement: !ruby/object:Gem::Requirement
|
157
171
|
requirements:
|
158
172
|
- - "~>"
|
159
173
|
- !ruby/object:Gem::Version
|
160
|
-
version: '
|
174
|
+
version: '3.1'
|
161
175
|
type: :development
|
162
176
|
prerelease: false
|
163
177
|
version_requirements: !ruby/object:Gem::Requirement
|
164
178
|
requirements:
|
165
179
|
- - "~>"
|
166
180
|
- !ruby/object:Gem::Version
|
167
|
-
version: '
|
181
|
+
version: '3.1'
|
168
182
|
- !ruby/object:Gem::Dependency
|
169
|
-
name: rdf-
|
183
|
+
name: rdf-rdfa
|
170
184
|
requirement: !ruby/object:Gem::Requirement
|
171
185
|
requirements:
|
172
186
|
- - "~>"
|
173
187
|
- !ruby/object:Gem::Version
|
174
|
-
version: '
|
188
|
+
version: '3.1'
|
175
189
|
type: :development
|
176
190
|
prerelease: false
|
177
191
|
version_requirements: !ruby/object:Gem::Requirement
|
178
192
|
requirements:
|
179
193
|
- - "~>"
|
180
194
|
- !ruby/object:Gem::Version
|
181
|
-
version: '
|
195
|
+
version: '3.1'
|
182
196
|
description: Reads HTML Microdata as RDF.
|
183
197
|
email: public-rdf-ruby@w3.org
|
184
198
|
executables: []
|
@@ -196,11 +210,13 @@ files:
|
|
196
210
|
- lib/rdf/microdata.rb
|
197
211
|
- lib/rdf/microdata/expansion.rb
|
198
212
|
- lib/rdf/microdata/format.rb
|
213
|
+
- lib/rdf/microdata/rdfa_reader.rb
|
199
214
|
- lib/rdf/microdata/reader.rb
|
200
215
|
- lib/rdf/microdata/reader/nokogiri.rb
|
216
|
+
- lib/rdf/microdata/registry.rb
|
201
217
|
- lib/rdf/microdata/version.rb
|
202
218
|
- lib/rdf/microdata/vocab.rb
|
203
|
-
homepage:
|
219
|
+
homepage: https://ruby-rdf.github.com/rdf-microdata
|
204
220
|
licenses:
|
205
221
|
- Unlicense
|
206
222
|
metadata: {}
|
@@ -212,15 +228,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
212
228
|
requirements:
|
213
229
|
- - ">="
|
214
230
|
- !ruby/object:Gem::Version
|
215
|
-
version: 2.
|
231
|
+
version: '2.4'
|
216
232
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
217
233
|
requirements:
|
218
234
|
- - ">="
|
219
235
|
- !ruby/object:Gem::Version
|
220
236
|
version: '0'
|
221
237
|
requirements: []
|
222
|
-
|
223
|
-
rubygems_version: 2.6.11
|
238
|
+
rubygems_version: 3.1.3
|
224
239
|
signing_key:
|
225
240
|
specification_version: 4
|
226
241
|
summary: Microdata reader for Ruby.
|