json-ld 1.1.9 → 1.1.10

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
  SHA1:
3
- metadata.gz: 3404c8ed3ac6a383038d1db06f3c2ad1a8d58135
4
- data.tar.gz: 9818ef47ffd7b6d08eb3f387fc9be333b11aca1e
3
+ metadata.gz: 7e46360376bb00811dd36960ac15dae42a9d35ed
4
+ data.tar.gz: db5cf509c8b10b010bb62a05713037eeafe1122c
5
5
  SHA512:
6
- metadata.gz: 09e34ee5537cb9c5004765c735a1fbfcc33b08b89a6d1f9386912ca006459b3582e33f90236d73074eeb1eafcba7fc87e2acb44c14ebbdeeccac50547f3bf117
7
- data.tar.gz: 0bda2990643c9f5c4cd4c89a74f6594cc7abd6c4b6e55d8d24ece746dc3980a1b7401714aeb490c1882f214a92a81c6baf6128f92a21825c9da28d6d4a1dcf4e
6
+ metadata.gz: a89eec30bedcf9e199f4bcb8aab8e9af134ab9f7fbfd1d97227c27553d356df057ed6fa9727a93d95aec7e5f85309c7db65a69aa8453f48b38c85e5544ee625c
7
+ data.tar.gz: f0f408d42463f63f89f9aec2fb10370d2fbddfb4a7a221f825e12b953b076a31aa44d84e627cd4e337e60e4a313cddd4a35df57e87506e5fe0a53b55b22bd2cd
data/README.md CHANGED
@@ -16,6 +16,9 @@ If the [jsonlint][] gem is installed, it will be used when validating an input d
16
16
 
17
17
  Install with `gem install json-ld`
18
18
 
19
+ ### MultiJson parser
20
+ The [MultiJson](https://rubygems.org/gems/multi_json) gem is used for parsing JSON; this defaults to the native JSON parser, but will use a more performant parser if one is available. A specific parser can be specified by adding the `:adapter` option to any API call. See [MultiJson](https://rubygems.org/gems/multi_json) for more information.
21
+
19
22
  ### JSON-LD Streaming Profile
20
23
  This gem implements an optimized streaming writer used for generating JSON-LD from large repositories. Such documents result in the JSON-LD Streaming Profile:
21
24
 
@@ -219,6 +222,24 @@ This gem implements an optimized streaming writer used for generating JSON-LD fr
219
222
  }
220
223
  ]
221
224
 
225
+ ## Use a custom Document Loader
226
+ In some cases, the built-in document loader {JSON::LD::API.documentLoader} is inadequate; for example, when using `http://schema.org` as a remote context, it will be re-loaded every time.
227
+
228
+ All entries into the {JSON::LD::API} accept a `:documentLoader` option, which can be used to provide an alternative method to use when loading remote documents. For example:
229
+
230
+ def load_document_local(url, options={}, &block)
231
+ if RDF::URI(url, canonicalize: true) == RDF::URI('http://schema.org/')
232
+ remote_document = JSON::LD::API::RemoteDocument.new(url, File.read("etc/schema.org.jsonld"))
233
+ return block_given? ? yield(remote_document) : remote_document
234
+ else
235
+ JSON::LD::API.documentLoader(url, options, &block)
236
+ end
237
+ end
238
+
239
+ Then, when performing something like expansion:
240
+
241
+ JSON::LD::API.expand(input, documentLoader: load_document_local)
242
+
222
243
  ## RDF Reader and Writer
223
244
  {JSON::LD} also acts as a normal RDF reader and writer, using the standard RDF.rb reader/writer interfaces:
224
245
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.9
1
+ 1.1.10
@@ -1,5 +1,6 @@
1
1
  $:.unshift(File.expand_path(File.join(File.dirname(__FILE__), '..')))
2
2
  require 'rdf' # @see http://rubygems.org/gems/rdf
3
+ require 'multi_json'
3
4
 
4
5
  module JSON
5
6
  ##
@@ -81,6 +81,7 @@ module JSON::LD
81
81
  # Use unique bnode identifiers, defaults to using the identifier which the node was originall initialized with (if any).
82
82
  # @option options [Boolean] :simple_compact_iris (false)
83
83
  # When compacting IRIs, do not use terms with expanded term definitions
84
+ # @option options [Symbol] :adapter used with MultiJson
84
85
  # @option options [Boolean] :validate Validate input, if a string or readable object.
85
86
  # @yield [api]
86
87
  # @yieldparam [API]
@@ -108,7 +109,7 @@ module JSON::LD
108
109
 
109
110
  validate_input(input) if options[:validate]
110
111
 
111
- JSON.parse(input.read)
112
+ MultiJson.load(input.read, options)
112
113
  when String
113
114
  remote_doc = @options[:documentLoader].call(input, @options)
114
115
 
@@ -118,7 +119,7 @@ module JSON::LD
118
119
  case remote_doc.document
119
120
  when String
120
121
  validate_input(remote_doc.document) if options[:validate]
121
- JSON.parse(remote_doc.document)
122
+ MultiJson.load(remote_doc.document, options)
122
123
  else
123
124
  remote_doc.document
124
125
  end
@@ -332,11 +333,11 @@ module JSON::LD
332
333
  # de-reference frame to create the framing object
333
334
  frame = case frame
334
335
  when Hash then frame.dup
335
- when IO, StringIO then JSON.parse(frame.read)
336
+ when IO, StringIO then MultiJson.load(frame.read)
336
337
  when String
337
338
  remote_doc = options[:documentLoader].call(frame)
338
339
  case remote_doc.document
339
- when String then JSON.parse(remote_doc.document)
340
+ when String then MultiJson.load(remote_doc.document)
340
341
  else remote_doc.document
341
342
  end
342
343
  end
@@ -156,9 +156,7 @@ module JSON::LD
156
156
  def initialize(options = {})
157
157
  if options[:base]
158
158
  @base = @doc_base = RDF::URI(options[:base]).dup
159
- @doc_base.canonicalize!
160
- @doc_base.fragment = nil
161
- @doc_base.query = nil
159
+ @doc_base.canonicalize! if options[:canonicalize]
162
160
  end
163
161
  options[:documentLoader] ||= JSON::LD::API.method(:documentLoader)
164
162
  @term_definitions = {}
@@ -198,10 +196,8 @@ module JSON::LD
198
196
  def base=(value)
199
197
  if value
200
198
  raise JsonLdError::InvalidBaseIRI, "@base must be a string: #{value.inspect}" unless value.is_a?(String) || value.is_a?(RDF::URI)
201
- @base = RDF::URI(value).dup
202
- @base.canonicalize!
203
- @base.fragment = nil
204
- @base.query = nil
199
+ @base = @base ? @base.join(value) : RDF::URI(value).dup
200
+ @base.canonicalize! if @options[:canonicalize]
205
201
  raise JsonLdError::InvalidBaseIRI, "@base must be an absolute IRI: #{value.inspect}" unless @base.absolute? || !@options[:validate]
206
202
  @base
207
203
  else
@@ -297,7 +293,7 @@ module JSON::LD
297
293
  @options[:documentLoader].call(context.to_s, context_opts) do |remote_doc|
298
294
  # 3.2.5) Dereference context. If the dereferenced document has no top-level JSON object with an @context member, an invalid remote context has been detected and processing is aborted; otherwise, set context to the value of that member.
299
295
  jo = case remote_doc.document
300
- when String then JSON.parse(remote_doc.document)
296
+ when String then MultiJson.load(remote_doc.document)
301
297
  else remote_doc.document
302
298
  end
303
299
  raise JsonLdError::InvalidRemoteContext, "#{context}" unless jo.is_a?(Hash) && jo.has_key?('@context')
@@ -306,6 +302,9 @@ module JSON::LD
306
302
  context_no_base.provided_context = context.dup
307
303
  end
308
304
  end
305
+ rescue JsonLdError::LoadingDocumentFailed => e
306
+ debug("parse") {"Failed to retrieve @context from remote document at #{context_no_base.context_base.inspect}: #{e.message}"}
307
+ raise JsonLdError::LoadingRemoteContextFailed, "#{context_no_base.context_base}", e.backtrace
309
308
  rescue JsonLdError
310
309
  raise
311
310
  rescue Exception => e
@@ -797,7 +796,8 @@ module JSON::LD
797
796
  vocab + value
798
797
  elsif options[:documentRelative] && base = options.fetch(:base, self.base)
799
798
  # Otherwise, if document relative is true, set value to the result of resolving value against the base IRI. Only the basic algorithm in section 5.2 of [RFC3986] is used; neither Syntax-Based Normalization nor Scheme-Based Normalization are performed. Characters additionally allowed in IRI references are treated in the same way that unreserved characters are treated in URI references, per section 6.5 of [RFC3987].
800
- RDF::URI(base).join(value)
799
+ value = RDF::URI(value)
800
+ value.absolute? ? value : RDF::URI(base).join(value)
801
801
  elsif local_context && RDF::URI(value).relative?
802
802
  # If local context is not null and value is not an absolute IRI, an invalid IRI mapping error has been detected and processing is aborted.
803
803
  raise JSON::LD::JsonLdError::InvalidIRIMapping, "not an absolute IRI: #{value}"
@@ -65,36 +65,40 @@ describe JSON::LD::API do
65
65
  end
66
66
 
67
67
  context "Test Files" do
68
- Dir.glob(File.expand_path(File.join(File.dirname(__FILE__), 'test-files/*-input.*'))) do |filename|
69
- test = File.basename(filename).sub(/-input\..*$/, '')
70
- frame = filename.sub(/-input\..*$/, '-frame.json')
71
- framed = filename.sub(/-input\..*$/, '-framed.json')
72
- compacted = filename.sub(/-input\..*$/, '-compacted.json')
73
- context = filename.sub(/-input\..*$/, '-context.json')
74
- expanded = filename.sub(/-input\..*$/, '-expanded.json')
75
- ttl = filename.sub(/-input\..*$/, '-rdf.ttl')
68
+ %w(oj json_gem ok_json yajl).map(&:to_sym).each do |adapter|
69
+ context "with MultiJson adapter #{adapter.inspect}" do
70
+ Dir.glob(File.expand_path(File.join(File.dirname(__FILE__), 'test-files/*-input.*'))) do |filename|
71
+ test = File.basename(filename).sub(/-input\..*$/, '')
72
+ frame = filename.sub(/-input\..*$/, '-frame.json')
73
+ framed = filename.sub(/-input\..*$/, '-framed.json')
74
+ compacted = filename.sub(/-input\..*$/, '-compacted.json')
75
+ context = filename.sub(/-input\..*$/, '-context.json')
76
+ expanded = filename.sub(/-input\..*$/, '-expanded.json')
77
+ ttl = filename.sub(/-input\..*$/, '-rdf.ttl')
76
78
 
77
- context test do
78
- it "expands" do
79
- options = {debug: @debug}
80
- options[:expandContext] = File.open(context) if context
81
- jld = described_class.expand(File.open(filename), options)
82
- expect(jld).to produce(JSON.load(File.open(expanded)), @debug)
83
- end if File.exist?(expanded)
79
+ context test, skip: ("Not supported in JRuby" if RUBY_ENGINE == "jruby" && %w(oj yajl).include?(adapter.to_s)) do
80
+ it "expands" do
81
+ options = {debug: @debug, adapter: adapter}
82
+ options[:expandContext] = File.open(context) if context
83
+ jld = described_class.expand(File.open(filename), options)
84
+ expect(jld).to produce(JSON.load(File.open(expanded)), @debug)
85
+ end if File.exist?(expanded)
84
86
 
85
- it "compacts" do
86
- jld = described_class.compact(File.open(filename), File.open(context), debug: @debug)
87
- expect(jld).to produce(JSON.load(File.open(compacted)), @debug)
88
- end if File.exist?(compacted) && File.exist?(context)
87
+ it "compacts" do
88
+ jld = described_class.compact(File.open(filename), File.open(context), adapter: adapter, debug: @debug)
89
+ expect(jld).to produce(JSON.load(File.open(compacted)), @debug)
90
+ end if File.exist?(compacted) && File.exist?(context)
89
91
 
90
- it "frame" do
91
- jld = described_class.frame(File.open(filename), File.open(frame), debug: @debug)
92
- expect(jld).to produce(JSON.load(File.open(framed)), @debug)
93
- end if File.exist?(framed) && File.exist?(frame)
92
+ it "frame" do
93
+ jld = described_class.frame(File.open(filename), File.open(frame), adapter: adapter, debug: @debug)
94
+ expect(jld).to produce(JSON.load(File.open(framed)), @debug)
95
+ end if File.exist?(framed) && File.exist?(frame)
94
96
 
95
- it "toRdf" do
96
- expect(RDF::Repository.load(filename, debug: @debug)).to be_equivalent_graph(RDF::Repository.load(ttl), trace: @debug)
97
- end if File.exist?(ttl)
97
+ it "toRdf" do
98
+ expect(RDF::Repository.load(filename, adapter: adapter, debug: @debug)).to be_equivalent_graph(RDF::Repository.load(ttl), trace: @debug)
99
+ end if File.exist?(ttl)
100
+ end
101
+ end
98
102
  end
99
103
  end
100
104
  end
@@ -603,6 +603,28 @@ describe JSON::LD::Context do
603
603
 
604
604
  end
605
605
 
606
+ describe "#base=" do
607
+ subject {
608
+ context.parse({
609
+ '@base' => 'http://base/',
610
+ '@vocab' => 'http://vocab/',
611
+ 'ex' => 'http://example.org/',
612
+ '' => 'http://empty/',
613
+ '_' => 'http://underscore/'
614
+ })
615
+ }
616
+
617
+ it "sets new base uri given an absolute uri" do
618
+ subject.base = "http://example.org/"
619
+ expect(subject.base).to eql RDF::URI("http://example.org/")
620
+ end
621
+
622
+ it "sets relative URI" do
623
+ subject.base = "foo/bar"
624
+ expect(subject.base).to eql RDF::URI("http://base/foo/bar")
625
+ end
626
+ end
627
+
606
628
  describe "#expand_iri" do
607
629
  subject {
608
630
  context.parse({
@@ -123,4 +123,760 @@ describe JSON::LD::Reader do
123
123
  end
124
124
  end
125
125
  end
126
+
127
+ describe "Base IRI resolution" do
128
+ # From https://gist.github.com/RubenVerborgh/39f0e8d63e33e435371a
129
+ let(:json) {%q{[
130
+ {
131
+ "@context": {"@base": "http://a/bb/ccc/d;p?q", "urn:ex:p": {"@type": "@id"}},
132
+ "@graph": [
133
+ {"@id": "urn:ex:s001", "urn:ex:p": "g:h"},
134
+ {"@id": "urn:ex:s002", "urn:ex:p": "g"},
135
+ {"@id": "urn:ex:s003", "urn:ex:p": "./g"},
136
+ {"@id": "urn:ex:s004", "urn:ex:p": "g/"},
137
+ {"@id": "urn:ex:s005", "urn:ex:p": "/g"},
138
+ {"@id": "urn:ex:s006", "urn:ex:p": "//g"},
139
+ {"@id": "urn:ex:s007", "urn:ex:p": "?y"},
140
+ {"@id": "urn:ex:s008", "urn:ex:p": "g?y"},
141
+ {"@id": "urn:ex:s009", "urn:ex:p": "#s"},
142
+ {"@id": "urn:ex:s010", "urn:ex:p": "g#s"},
143
+ {"@id": "urn:ex:s011", "urn:ex:p": "g?y#s"},
144
+ {"@id": "urn:ex:s012", "urn:ex:p": ";x"},
145
+ {"@id": "urn:ex:s013", "urn:ex:p": "g;x"},
146
+ {"@id": "urn:ex:s014", "urn:ex:p": "g;x?y#s"},
147
+ {"@id": "urn:ex:s015", "urn:ex:p": ""},
148
+ {"@id": "urn:ex:s016", "urn:ex:p": "."},
149
+ {"@id": "urn:ex:s017", "urn:ex:p": "./"},
150
+ {"@id": "urn:ex:s018", "urn:ex:p": ".."},
151
+ {"@id": "urn:ex:s019", "urn:ex:p": "../"},
152
+ {"@id": "urn:ex:s020", "urn:ex:p": "../g"},
153
+ {"@id": "urn:ex:s021", "urn:ex:p": "../.."},
154
+ {"@id": "urn:ex:s022", "urn:ex:p": "../../"},
155
+ {"@id": "urn:ex:s023", "urn:ex:p": "../../g"}
156
+ ]
157
+ },
158
+ {
159
+ "@context": {"@base": "http://a/bb/ccc/d;p?q", "urn:ex:p": {"@type": "@id"}},
160
+ "@graph": [
161
+ {"@id": "urn:ex:s024", "urn:ex:p": "../../../g"},
162
+ {"@id": "urn:ex:s025", "urn:ex:p": "../../../../g"},
163
+ {"@id": "urn:ex:s026", "urn:ex:p": "/./g"},
164
+ {"@id": "urn:ex:s027", "urn:ex:p": "/../g"},
165
+ {"@id": "urn:ex:s028", "urn:ex:p": "g."},
166
+ {"@id": "urn:ex:s029", "urn:ex:p": ".g"},
167
+ {"@id": "urn:ex:s030", "urn:ex:p": "g.."},
168
+ {"@id": "urn:ex:s031", "urn:ex:p": "..g"},
169
+ {"@id": "urn:ex:s032", "urn:ex:p": "./../g"},
170
+ {"@id": "urn:ex:s033", "urn:ex:p": "./g/."},
171
+ {"@id": "urn:ex:s034", "urn:ex:p": "g/./h"},
172
+ {"@id": "urn:ex:s035", "urn:ex:p": "g/../h"},
173
+ {"@id": "urn:ex:s036", "urn:ex:p": "g;x=1/./y"},
174
+ {"@id": "urn:ex:s037", "urn:ex:p": "g;x=1/../y"},
175
+ {"@id": "urn:ex:s038", "urn:ex:p": "g?y/./x"},
176
+ {"@id": "urn:ex:s039", "urn:ex:p": "g?y/../x"},
177
+ {"@id": "urn:ex:s040", "urn:ex:p": "g#s/./x"},
178
+ {"@id": "urn:ex:s041", "urn:ex:p": "g#s/../x"},
179
+ {"@id": "urn:ex:s042", "urn:ex:p": "http:g"}
180
+ ]
181
+ },
182
+ {
183
+ "@context": {"@base": "http://a/bb/ccc/d/", "urn:ex:p": {"@type": "@id"}},
184
+ "@graph": [
185
+ {"@id": "urn:ex:s043", "urn:ex:p": "g:h"},
186
+ {"@id": "urn:ex:s044", "urn:ex:p": "g"},
187
+ {"@id": "urn:ex:s045", "urn:ex:p": "./g"},
188
+ {"@id": "urn:ex:s046", "urn:ex:p": "g/"},
189
+ {"@id": "urn:ex:s047", "urn:ex:p": "/g"},
190
+ {"@id": "urn:ex:s048", "urn:ex:p": "//g"},
191
+ {"@id": "urn:ex:s049", "urn:ex:p": "?y"},
192
+ {"@id": "urn:ex:s050", "urn:ex:p": "g?y"},
193
+ {"@id": "urn:ex:s051", "urn:ex:p": "#s"},
194
+ {"@id": "urn:ex:s052", "urn:ex:p": "g#s"},
195
+ {"@id": "urn:ex:s053", "urn:ex:p": "g?y#s"},
196
+ {"@id": "urn:ex:s054", "urn:ex:p": ";x"},
197
+ {"@id": "urn:ex:s055", "urn:ex:p": "g;x"},
198
+ {"@id": "urn:ex:s056", "urn:ex:p": "g;x?y#s"},
199
+ {"@id": "urn:ex:s057", "urn:ex:p": ""},
200
+ {"@id": "urn:ex:s058", "urn:ex:p": "."},
201
+ {"@id": "urn:ex:s059", "urn:ex:p": "./"},
202
+ {"@id": "urn:ex:s060", "urn:ex:p": ".."},
203
+ {"@id": "urn:ex:s061", "urn:ex:p": "../"},
204
+ {"@id": "urn:ex:s062", "urn:ex:p": "../g"},
205
+ {"@id": "urn:ex:s063", "urn:ex:p": "../.."},
206
+ {"@id": "urn:ex:s064", "urn:ex:p": "../../"},
207
+ {"@id": "urn:ex:s065", "urn:ex:p": "../../g"}
208
+ ]
209
+ },
210
+ {
211
+ "@context": {"@base": "http://a/bb/ccc/d/", "urn:ex:p": {"@type": "@id"}},
212
+ "@graph": [
213
+ {"@id": "urn:ex:s066", "urn:ex:p": "../../../g"},
214
+ {"@id": "urn:ex:s067", "urn:ex:p": "../../../../g"},
215
+ {"@id": "urn:ex:s068", "urn:ex:p": "/./g"},
216
+ {"@id": "urn:ex:s069", "urn:ex:p": "/../g"},
217
+ {"@id": "urn:ex:s070", "urn:ex:p": "g."},
218
+ {"@id": "urn:ex:s071", "urn:ex:p": ".g"},
219
+ {"@id": "urn:ex:s072", "urn:ex:p": "g.."},
220
+ {"@id": "urn:ex:s073", "urn:ex:p": "..g"},
221
+ {"@id": "urn:ex:s074", "urn:ex:p": "./../g"},
222
+ {"@id": "urn:ex:s075", "urn:ex:p": "./g/."},
223
+ {"@id": "urn:ex:s076", "urn:ex:p": "g/./h"},
224
+ {"@id": "urn:ex:s077", "urn:ex:p": "g/../h"},
225
+ {"@id": "urn:ex:s078", "urn:ex:p": "g;x=1/./y"},
226
+ {"@id": "urn:ex:s079", "urn:ex:p": "g;x=1/../y"},
227
+ {"@id": "urn:ex:s080", "urn:ex:p": "g?y/./x"},
228
+ {"@id": "urn:ex:s081", "urn:ex:p": "g?y/../x"},
229
+ {"@id": "urn:ex:s082", "urn:ex:p": "g#s/./x"},
230
+ {"@id": "urn:ex:s083", "urn:ex:p": "g#s/../x"},
231
+ {"@id": "urn:ex:s084", "urn:ex:p": "http:g"}
232
+ ]
233
+ },
234
+ {
235
+ "@context": {"@base": "http://a/bb/ccc/./d;p?q", "urn:ex:p": {"@type": "@id"}},
236
+ "@graph": [
237
+ {"@id": "urn:ex:s085", "urn:ex:p": "g:h"},
238
+ {"@id": "urn:ex:s086", "urn:ex:p": "g"},
239
+ {"@id": "urn:ex:s087", "urn:ex:p": "./g"},
240
+ {"@id": "urn:ex:s088", "urn:ex:p": "g/"},
241
+ {"@id": "urn:ex:s089", "urn:ex:p": "/g"},
242
+ {"@id": "urn:ex:s090", "urn:ex:p": "//g"},
243
+ {"@id": "urn:ex:s091", "urn:ex:p": "?y"},
244
+ {"@id": "urn:ex:s092", "urn:ex:p": "g?y"},
245
+ {"@id": "urn:ex:s093", "urn:ex:p": "#s"},
246
+ {"@id": "urn:ex:s094", "urn:ex:p": "g#s"},
247
+ {"@id": "urn:ex:s095", "urn:ex:p": "g?y#s"},
248
+ {"@id": "urn:ex:s096", "urn:ex:p": ";x"},
249
+ {"@id": "urn:ex:s097", "urn:ex:p": "g;x"},
250
+ {"@id": "urn:ex:s098", "urn:ex:p": "g;x?y#s"},
251
+ {"@id": "urn:ex:s099", "urn:ex:p": ""},
252
+ {"@id": "urn:ex:s100", "urn:ex:p": "."},
253
+ {"@id": "urn:ex:s101", "urn:ex:p": "./"},
254
+ {"@id": "urn:ex:s102", "urn:ex:p": ".."},
255
+ {"@id": "urn:ex:s103", "urn:ex:p": "../"},
256
+ {"@id": "urn:ex:s104", "urn:ex:p": "../g"},
257
+ {"@id": "urn:ex:s105", "urn:ex:p": "../.."},
258
+ {"@id": "urn:ex:s106", "urn:ex:p": "../../"},
259
+ {"@id": "urn:ex:s107", "urn:ex:p": "../../g"}
260
+ ]
261
+ },
262
+ {
263
+ "@context": {"@base": "http://a/bb/ccc/./d;p?q", "urn:ex:p": {"@type": "@id"}},
264
+ "@graph": [
265
+ {"@id": "urn:ex:s108", "urn:ex:p": "../../../g"},
266
+ {"@id": "urn:ex:s109", "urn:ex:p": "../../../../g"},
267
+ {"@id": "urn:ex:s110", "urn:ex:p": "/./g"},
268
+ {"@id": "urn:ex:s111", "urn:ex:p": "/../g"},
269
+ {"@id": "urn:ex:s112", "urn:ex:p": "g."},
270
+ {"@id": "urn:ex:s113", "urn:ex:p": ".g"},
271
+ {"@id": "urn:ex:s114", "urn:ex:p": "g.."},
272
+ {"@id": "urn:ex:s115", "urn:ex:p": "..g"},
273
+ {"@id": "urn:ex:s116", "urn:ex:p": "./../g"},
274
+ {"@id": "urn:ex:s117", "urn:ex:p": "./g/."},
275
+ {"@id": "urn:ex:s118", "urn:ex:p": "g/./h"},
276
+ {"@id": "urn:ex:s119", "urn:ex:p": "g/../h"},
277
+ {"@id": "urn:ex:s120", "urn:ex:p": "g;x=1/./y"},
278
+ {"@id": "urn:ex:s121", "urn:ex:p": "g;x=1/../y"},
279
+ {"@id": "urn:ex:s122", "urn:ex:p": "g?y/./x"},
280
+ {"@id": "urn:ex:s123", "urn:ex:p": "g?y/../x"},
281
+ {"@id": "urn:ex:s124", "urn:ex:p": "g#s/./x"},
282
+ {"@id": "urn:ex:s125", "urn:ex:p": "g#s/../x"},
283
+ {"@id": "urn:ex:s126", "urn:ex:p": "http:g"}
284
+ ]
285
+ },
286
+ {
287
+ "@context": {"@base": "http://a/bb/ccc/../d;p?q", "urn:ex:p": {"@type": "@id"}},
288
+ "@graph": [
289
+ {"@id": "urn:ex:s127", "urn:ex:p": "g:h"},
290
+ {"@id": "urn:ex:s128", "urn:ex:p": "g"},
291
+ {"@id": "urn:ex:s129", "urn:ex:p": "./g"},
292
+ {"@id": "urn:ex:s130", "urn:ex:p": "g/"},
293
+ {"@id": "urn:ex:s131", "urn:ex:p": "/g"},
294
+ {"@id": "urn:ex:s132", "urn:ex:p": "//g"},
295
+ {"@id": "urn:ex:s133", "urn:ex:p": "?y"},
296
+ {"@id": "urn:ex:s134", "urn:ex:p": "g?y"},
297
+ {"@id": "urn:ex:s135", "urn:ex:p": "#s"},
298
+ {"@id": "urn:ex:s136", "urn:ex:p": "g#s"},
299
+ {"@id": "urn:ex:s137", "urn:ex:p": "g?y#s"},
300
+ {"@id": "urn:ex:s138", "urn:ex:p": ";x"},
301
+ {"@id": "urn:ex:s139", "urn:ex:p": "g;x"},
302
+ {"@id": "urn:ex:s140", "urn:ex:p": "g;x?y#s"},
303
+ {"@id": "urn:ex:s141", "urn:ex:p": ""},
304
+ {"@id": "urn:ex:s142", "urn:ex:p": "."},
305
+ {"@id": "urn:ex:s143", "urn:ex:p": "./"},
306
+ {"@id": "urn:ex:s144", "urn:ex:p": ".."},
307
+ {"@id": "urn:ex:s145", "urn:ex:p": "../"},
308
+ {"@id": "urn:ex:s146", "urn:ex:p": "../g"},
309
+ {"@id": "urn:ex:s147", "urn:ex:p": "../.."},
310
+ {"@id": "urn:ex:s148", "urn:ex:p": "../../"},
311
+ {"@id": "urn:ex:s149", "urn:ex:p": "../../g"}
312
+ ]
313
+ },
314
+ {
315
+ "@context": {"@base": "http://a/bb/ccc/../d;p?q", "urn:ex:p": {"@type": "@id"}},
316
+ "@graph": [
317
+ {"@id": "urn:ex:s150", "urn:ex:p": "../../../g"},
318
+ {"@id": "urn:ex:s151", "urn:ex:p": "../../../../g"},
319
+ {"@id": "urn:ex:s152", "urn:ex:p": "/./g"},
320
+ {"@id": "urn:ex:s153", "urn:ex:p": "/../g"},
321
+ {"@id": "urn:ex:s154", "urn:ex:p": "g."},
322
+ {"@id": "urn:ex:s155", "urn:ex:p": ".g"},
323
+ {"@id": "urn:ex:s156", "urn:ex:p": "g.."},
324
+ {"@id": "urn:ex:s157", "urn:ex:p": "..g"},
325
+ {"@id": "urn:ex:s158", "urn:ex:p": "./../g"},
326
+ {"@id": "urn:ex:s159", "urn:ex:p": "./g/."},
327
+ {"@id": "urn:ex:s160", "urn:ex:p": "g/./h"},
328
+ {"@id": "urn:ex:s161", "urn:ex:p": "g/../h"},
329
+ {"@id": "urn:ex:s162", "urn:ex:p": "g;x=1/./y"},
330
+ {"@id": "urn:ex:s163", "urn:ex:p": "g;x=1/../y"},
331
+ {"@id": "urn:ex:s164", "urn:ex:p": "g?y/./x"},
332
+ {"@id": "urn:ex:s165", "urn:ex:p": "g?y/../x"},
333
+ {"@id": "urn:ex:s166", "urn:ex:p": "g#s/./x"},
334
+ {"@id": "urn:ex:s167", "urn:ex:p": "g#s/../x"},
335
+ {"@id": "urn:ex:s168", "urn:ex:p": "http:g"}
336
+ ]
337
+ },
338
+ {
339
+ "@context": {"@base": "http://a/bb/ccc/.", "urn:ex:p": {"@type": "@id"}},
340
+ "@graph": [
341
+ {"@id": "urn:ex:s169", "urn:ex:p": "g:h"},
342
+ {"@id": "urn:ex:s170", "urn:ex:p": "g"},
343
+ {"@id": "urn:ex:s171", "urn:ex:p": "./g"},
344
+ {"@id": "urn:ex:s172", "urn:ex:p": "g/"},
345
+ {"@id": "urn:ex:s173", "urn:ex:p": "/g"},
346
+ {"@id": "urn:ex:s174", "urn:ex:p": "//g"},
347
+ {"@id": "urn:ex:s175", "urn:ex:p": "?y"},
348
+ {"@id": "urn:ex:s176", "urn:ex:p": "g?y"},
349
+ {"@id": "urn:ex:s177", "urn:ex:p": "#s"},
350
+ {"@id": "urn:ex:s178", "urn:ex:p": "g#s"},
351
+ {"@id": "urn:ex:s179", "urn:ex:p": "g?y#s"},
352
+ {"@id": "urn:ex:s180", "urn:ex:p": ";x"},
353
+ {"@id": "urn:ex:s181", "urn:ex:p": "g;x"},
354
+ {"@id": "urn:ex:s182", "urn:ex:p": "g;x?y#s"},
355
+ {"@id": "urn:ex:s183", "urn:ex:p": ""},
356
+ {"@id": "urn:ex:s184", "urn:ex:p": "."},
357
+ {"@id": "urn:ex:s185", "urn:ex:p": "./"},
358
+ {"@id": "urn:ex:s186", "urn:ex:p": ".."},
359
+ {"@id": "urn:ex:s187", "urn:ex:p": "../"},
360
+ {"@id": "urn:ex:s188", "urn:ex:p": "../g"},
361
+ {"@id": "urn:ex:s189", "urn:ex:p": "../.."},
362
+ {"@id": "urn:ex:s190", "urn:ex:p": "../../"},
363
+ {"@id": "urn:ex:s191", "urn:ex:p": "../../g"}
364
+ ]
365
+ },
366
+ {
367
+ "@context": {"@base": "http://a/bb/ccc/.", "urn:ex:p": {"@type": "@id"}},
368
+ "@graph": [
369
+ {"@id": "urn:ex:s192", "urn:ex:p": "../../../g"},
370
+ {"@id": "urn:ex:s193", "urn:ex:p": "../../../../g"},
371
+ {"@id": "urn:ex:s194", "urn:ex:p": "/./g"},
372
+ {"@id": "urn:ex:s195", "urn:ex:p": "/../g"},
373
+ {"@id": "urn:ex:s196", "urn:ex:p": "g."},
374
+ {"@id": "urn:ex:s197", "urn:ex:p": ".g"},
375
+ {"@id": "urn:ex:s198", "urn:ex:p": "g.."},
376
+ {"@id": "urn:ex:s199", "urn:ex:p": "..g"},
377
+ {"@id": "urn:ex:s200", "urn:ex:p": "./../g"},
378
+ {"@id": "urn:ex:s201", "urn:ex:p": "./g/."},
379
+ {"@id": "urn:ex:s202", "urn:ex:p": "g/./h"},
380
+ {"@id": "urn:ex:s203", "urn:ex:p": "g/../h"},
381
+ {"@id": "urn:ex:s204", "urn:ex:p": "g;x=1/./y"},
382
+ {"@id": "urn:ex:s205", "urn:ex:p": "g;x=1/../y"},
383
+ {"@id": "urn:ex:s206", "urn:ex:p": "g?y/./x"},
384
+ {"@id": "urn:ex:s207", "urn:ex:p": "g?y/../x"},
385
+ {"@id": "urn:ex:s208", "urn:ex:p": "g#s/./x"},
386
+ {"@id": "urn:ex:s209", "urn:ex:p": "g#s/../x"},
387
+ {"@id": "urn:ex:s210", "urn:ex:p": "http:g"}
388
+ ]
389
+ },
390
+ {
391
+ "@context": {"@base": "http://a/bb/ccc/..", "urn:ex:p": {"@type": "@id"}},
392
+ "@graph": [
393
+ {"@id": "urn:ex:s211", "urn:ex:p": "g:h"},
394
+ {"@id": "urn:ex:s212", "urn:ex:p": "g"},
395
+ {"@id": "urn:ex:s213", "urn:ex:p": "./g"},
396
+ {"@id": "urn:ex:s214", "urn:ex:p": "g/"},
397
+ {"@id": "urn:ex:s215", "urn:ex:p": "/g"},
398
+ {"@id": "urn:ex:s216", "urn:ex:p": "//g"},
399
+ {"@id": "urn:ex:s217", "urn:ex:p": "?y"},
400
+ {"@id": "urn:ex:s218", "urn:ex:p": "g?y"},
401
+ {"@id": "urn:ex:s219", "urn:ex:p": "#s"},
402
+ {"@id": "urn:ex:s220", "urn:ex:p": "g#s"},
403
+ {"@id": "urn:ex:s221", "urn:ex:p": "g?y#s"},
404
+ {"@id": "urn:ex:s222", "urn:ex:p": ";x"},
405
+ {"@id": "urn:ex:s223", "urn:ex:p": "g;x"},
406
+ {"@id": "urn:ex:s224", "urn:ex:p": "g;x?y#s"},
407
+ {"@id": "urn:ex:s225", "urn:ex:p": ""},
408
+ {"@id": "urn:ex:s226", "urn:ex:p": "."},
409
+ {"@id": "urn:ex:s227", "urn:ex:p": "./"},
410
+ {"@id": "urn:ex:s228", "urn:ex:p": ".."},
411
+ {"@id": "urn:ex:s229", "urn:ex:p": "../"},
412
+ {"@id": "urn:ex:s230", "urn:ex:p": "../g"},
413
+ {"@id": "urn:ex:s231", "urn:ex:p": "../.."},
414
+ {"@id": "urn:ex:s232", "urn:ex:p": "../../"},
415
+ {"@id": "urn:ex:s233", "urn:ex:p": "../../g"}
416
+ ]
417
+ },
418
+ {
419
+ "@context": {"@base": "http://a/bb/ccc/..", "urn:ex:p": {"@type": "@id"}},
420
+ "@graph": [
421
+ {"@id": "urn:ex:s234", "urn:ex:p": "../../../g"},
422
+ {"@id": "urn:ex:s235", "urn:ex:p": "../../../../g"},
423
+ {"@id": "urn:ex:s236", "urn:ex:p": "/./g"},
424
+ {"@id": "urn:ex:s237", "urn:ex:p": "/../g"},
425
+ {"@id": "urn:ex:s238", "urn:ex:p": "g."},
426
+ {"@id": "urn:ex:s239", "urn:ex:p": ".g"},
427
+ {"@id": "urn:ex:s240", "urn:ex:p": "g.."},
428
+ {"@id": "urn:ex:s241", "urn:ex:p": "..g"},
429
+ {"@id": "urn:ex:s242", "urn:ex:p": "./../g"},
430
+ {"@id": "urn:ex:s243", "urn:ex:p": "./g/."},
431
+ {"@id": "urn:ex:s244", "urn:ex:p": "g/./h"},
432
+ {"@id": "urn:ex:s245", "urn:ex:p": "g/../h"},
433
+ {"@id": "urn:ex:s246", "urn:ex:p": "g;x=1/./y"},
434
+ {"@id": "urn:ex:s247", "urn:ex:p": "g;x=1/../y"},
435
+ {"@id": "urn:ex:s248", "urn:ex:p": "g?y/./x"},
436
+ {"@id": "urn:ex:s249", "urn:ex:p": "g?y/../x"},
437
+ {"@id": "urn:ex:s250", "urn:ex:p": "g#s/./x"},
438
+ {"@id": "urn:ex:s251", "urn:ex:p": "g#s/../x"},
439
+ {"@id": "urn:ex:s252", "urn:ex:p": "http:g"}
440
+ ]
441
+ },
442
+ {
443
+ "@context": {"@base": "file:///a/bb/ccc/d;p?q", "urn:ex:p": {"@type": "@id"}},
444
+ "@graph": [
445
+ {"@id": "urn:ex:s253", "urn:ex:p": "g:h"},
446
+ {"@id": "urn:ex:s254", "urn:ex:p": "g"},
447
+ {"@id": "urn:ex:s255", "urn:ex:p": "./g"},
448
+ {"@id": "urn:ex:s256", "urn:ex:p": "g/"},
449
+ {"@id": "urn:ex:s257", "urn:ex:p": "/g"},
450
+ {"@id": "urn:ex:s258", "urn:ex:p": "//g"},
451
+ {"@id": "urn:ex:s259", "urn:ex:p": "?y"},
452
+ {"@id": "urn:ex:s260", "urn:ex:p": "g?y"},
453
+ {"@id": "urn:ex:s261", "urn:ex:p": "#s"},
454
+ {"@id": "urn:ex:s262", "urn:ex:p": "g#s"},
455
+ {"@id": "urn:ex:s263", "urn:ex:p": "g?y#s"},
456
+ {"@id": "urn:ex:s264", "urn:ex:p": ";x"},
457
+ {"@id": "urn:ex:s265", "urn:ex:p": "g;x"},
458
+ {"@id": "urn:ex:s266", "urn:ex:p": "g;x?y#s"},
459
+ {"@id": "urn:ex:s267", "urn:ex:p": ""},
460
+ {"@id": "urn:ex:s268", "urn:ex:p": "."},
461
+ {"@id": "urn:ex:s269", "urn:ex:p": "./"},
462
+ {"@id": "urn:ex:s270", "urn:ex:p": ".."},
463
+ {"@id": "urn:ex:s271", "urn:ex:p": "../"},
464
+ {"@id": "urn:ex:s272", "urn:ex:p": "../g"},
465
+ {"@id": "urn:ex:s273", "urn:ex:p": "../.."},
466
+ {"@id": "urn:ex:s274", "urn:ex:p": "../../"},
467
+ {"@id": "urn:ex:s275", "urn:ex:p": "../../g"}
468
+ ]
469
+ },
470
+ {
471
+ "@context": {"@base": "file:///a/bb/ccc/d;p?q", "urn:ex:p": {"@type": "@id"}},
472
+ "@graph": [
473
+ {"@id": "urn:ex:s276", "urn:ex:p": "../../../g"},
474
+ {"@id": "urn:ex:s277", "urn:ex:p": "../../../../g"},
475
+ {"@id": "urn:ex:s278", "urn:ex:p": "/./g"},
476
+ {"@id": "urn:ex:s279", "urn:ex:p": "/../g"},
477
+ {"@id": "urn:ex:s280", "urn:ex:p": "g."},
478
+ {"@id": "urn:ex:s281", "urn:ex:p": ".g"},
479
+ {"@id": "urn:ex:s282", "urn:ex:p": "g.."},
480
+ {"@id": "urn:ex:s283", "urn:ex:p": "..g"},
481
+ {"@id": "urn:ex:s284", "urn:ex:p": "./../g"},
482
+ {"@id": "urn:ex:s285", "urn:ex:p": "./g/."},
483
+ {"@id": "urn:ex:s286", "urn:ex:p": "g/./h"},
484
+ {"@id": "urn:ex:s287", "urn:ex:p": "g/../h"},
485
+ {"@id": "urn:ex:s288", "urn:ex:p": "g;x=1/./y"},
486
+ {"@id": "urn:ex:s289", "urn:ex:p": "g;x=1/../y"},
487
+ {"@id": "urn:ex:s290", "urn:ex:p": "g?y/./x"},
488
+ {"@id": "urn:ex:s291", "urn:ex:p": "g?y/../x"},
489
+ {"@id": "urn:ex:s292", "urn:ex:p": "g#s/./x"},
490
+ {"@id": "urn:ex:s293", "urn:ex:p": "g#s/../x"},
491
+ {"@id": "urn:ex:s294", "urn:ex:p": "http:g"}
492
+ ]
493
+ },
494
+ {
495
+ "@context": {"@base": "http://abc/def/ghi", "urn:ex:p": {"@type": "@id"}},
496
+ "@graph": [
497
+ {"@id": "urn:ex:s295", "urn:ex:p": "."},
498
+ {"@id": "urn:ex:s296", "urn:ex:p": ".?a=b"},
499
+ {"@id": "urn:ex:s297", "urn:ex:p": ".#a=b"},
500
+ {"@id": "urn:ex:s298", "urn:ex:p": ".."},
501
+ {"@id": "urn:ex:s299", "urn:ex:p": "..?a=b"},
502
+ {"@id": "urn:ex:s300", "urn:ex:p": "..#a=b"}
503
+ ]
504
+ },
505
+ {
506
+ "@context": {"@base": "http://ab//de//ghi", "urn:ex:p": {"@type": "@id"}},
507
+ "@graph": [
508
+ {"@id": "urn:ex:s301", "urn:ex:p": "xyz"},
509
+ {"@id": "urn:ex:s302", "urn:ex:p": "./xyz"},
510
+ {"@id": "urn:ex:s303", "urn:ex:p": "../xyz"}
511
+ ]
512
+ },
513
+ {
514
+ "@context": {"@base": "http://abc/d:f/ghi", "urn:ex:p": {"@type": "@id"}},
515
+ "@graph": [
516
+ {"@id": "urn:ex:s304", "urn:ex:p": "xyz"},
517
+ {"@id": "urn:ex:s305", "urn:ex:p": "./xyz"},
518
+ {"@id": "urn:ex:s306", "urn:ex:p": "../xyz"}
519
+ ]
520
+ }
521
+ ]}}
522
+ let(:nt) {%q{
523
+ # RFC3986 normal examples
524
+
525
+ <urn:ex:s001> <urn:ex:p> <g:h>.
526
+ <urn:ex:s002> <urn:ex:p> <http://a/bb/ccc/g>.
527
+ <urn:ex:s003> <urn:ex:p> <http://a/bb/ccc/g>.
528
+ <urn:ex:s004> <urn:ex:p> <http://a/bb/ccc/g/>.
529
+ <urn:ex:s005> <urn:ex:p> <http://a/g>.
530
+ <urn:ex:s006> <urn:ex:p> <http://g>.
531
+ <urn:ex:s007> <urn:ex:p> <http://a/bb/ccc/d;p?y>.
532
+ <urn:ex:s008> <urn:ex:p> <http://a/bb/ccc/g?y>.
533
+ <urn:ex:s009> <urn:ex:p> <http://a/bb/ccc/d;p?q#s>.
534
+ <urn:ex:s010> <urn:ex:p> <http://a/bb/ccc/g#s>.
535
+ <urn:ex:s011> <urn:ex:p> <http://a/bb/ccc/g?y#s>.
536
+ <urn:ex:s012> <urn:ex:p> <http://a/bb/ccc/;x>.
537
+ <urn:ex:s013> <urn:ex:p> <http://a/bb/ccc/g;x>.
538
+ <urn:ex:s014> <urn:ex:p> <http://a/bb/ccc/g;x?y#s>.
539
+ <urn:ex:s015> <urn:ex:p> <http://a/bb/ccc/d;p?q>.
540
+ <urn:ex:s016> <urn:ex:p> <http://a/bb/ccc/>.
541
+ <urn:ex:s017> <urn:ex:p> <http://a/bb/ccc/>.
542
+ <urn:ex:s018> <urn:ex:p> <http://a/bb/>.
543
+ <urn:ex:s019> <urn:ex:p> <http://a/bb/>.
544
+ <urn:ex:s020> <urn:ex:p> <http://a/bb/g>.
545
+ <urn:ex:s021> <urn:ex:p> <http://a/>.
546
+ <urn:ex:s022> <urn:ex:p> <http://a/>.
547
+ <urn:ex:s023> <urn:ex:p> <http://a/g>.
548
+
549
+ # RFC3986 abnormal examples
550
+
551
+ <urn:ex:s024> <urn:ex:p> <http://a/g>.
552
+ <urn:ex:s025> <urn:ex:p> <http://a/g>.
553
+ <urn:ex:s026> <urn:ex:p> <http://a/g>.
554
+ <urn:ex:s027> <urn:ex:p> <http://a/g>.
555
+ <urn:ex:s028> <urn:ex:p> <http://a/bb/ccc/g.>.
556
+ <urn:ex:s029> <urn:ex:p> <http://a/bb/ccc/.g>.
557
+ <urn:ex:s030> <urn:ex:p> <http://a/bb/ccc/g..>.
558
+ <urn:ex:s031> <urn:ex:p> <http://a/bb/ccc/..g>.
559
+ <urn:ex:s032> <urn:ex:p> <http://a/bb/g>.
560
+ <urn:ex:s033> <urn:ex:p> <http://a/bb/ccc/g/>.
561
+ <urn:ex:s034> <urn:ex:p> <http://a/bb/ccc/g/h>.
562
+ <urn:ex:s035> <urn:ex:p> <http://a/bb/ccc/h>.
563
+ <urn:ex:s036> <urn:ex:p> <http://a/bb/ccc/g;x=1/y>.
564
+ <urn:ex:s037> <urn:ex:p> <http://a/bb/ccc/y>.
565
+ <urn:ex:s038> <urn:ex:p> <http://a/bb/ccc/g?y/./x>.
566
+ <urn:ex:s039> <urn:ex:p> <http://a/bb/ccc/g?y/../x>.
567
+ <urn:ex:s040> <urn:ex:p> <http://a/bb/ccc/g#s/./x>.
568
+ <urn:ex:s041> <urn:ex:p> <http://a/bb/ccc/g#s/../x>.
569
+ <urn:ex:s042> <urn:ex:p> <http:g>.
570
+
571
+ # RFC3986 normal examples with trailing slash in base IRI
572
+
573
+ <urn:ex:s043> <urn:ex:p> <g:h>.
574
+ <urn:ex:s044> <urn:ex:p> <http://a/bb/ccc/d/g>.
575
+ <urn:ex:s045> <urn:ex:p> <http://a/bb/ccc/d/g>.
576
+ <urn:ex:s046> <urn:ex:p> <http://a/bb/ccc/d/g/>.
577
+ <urn:ex:s047> <urn:ex:p> <http://a/g>.
578
+ <urn:ex:s048> <urn:ex:p> <http://g>.
579
+ <urn:ex:s049> <urn:ex:p> <http://a/bb/ccc/d/?y>.
580
+ <urn:ex:s050> <urn:ex:p> <http://a/bb/ccc/d/g?y>.
581
+ <urn:ex:s051> <urn:ex:p> <http://a/bb/ccc/d/#s>.
582
+ <urn:ex:s052> <urn:ex:p> <http://a/bb/ccc/d/g#s>.
583
+ <urn:ex:s053> <urn:ex:p> <http://a/bb/ccc/d/g?y#s>.
584
+ <urn:ex:s054> <urn:ex:p> <http://a/bb/ccc/d/;x>.
585
+ <urn:ex:s055> <urn:ex:p> <http://a/bb/ccc/d/g;x>.
586
+ <urn:ex:s056> <urn:ex:p> <http://a/bb/ccc/d/g;x?y#s>.
587
+ <urn:ex:s057> <urn:ex:p> <http://a/bb/ccc/d/>.
588
+ <urn:ex:s058> <urn:ex:p> <http://a/bb/ccc/d/>.
589
+ <urn:ex:s059> <urn:ex:p> <http://a/bb/ccc/d/>.
590
+ <urn:ex:s060> <urn:ex:p> <http://a/bb/ccc/>.
591
+ <urn:ex:s061> <urn:ex:p> <http://a/bb/ccc/>.
592
+ <urn:ex:s062> <urn:ex:p> <http://a/bb/ccc/g>.
593
+ <urn:ex:s063> <urn:ex:p> <http://a/bb/>.
594
+ <urn:ex:s064> <urn:ex:p> <http://a/bb/>.
595
+ <urn:ex:s065> <urn:ex:p> <http://a/bb/g>.
596
+
597
+ # RFC3986 abnormal examples with trailing slash in base IRI
598
+
599
+ <urn:ex:s066> <urn:ex:p> <http://a/g>.
600
+ <urn:ex:s067> <urn:ex:p> <http://a/g>.
601
+ <urn:ex:s068> <urn:ex:p> <http://a/g>.
602
+ <urn:ex:s069> <urn:ex:p> <http://a/g>.
603
+ <urn:ex:s070> <urn:ex:p> <http://a/bb/ccc/d/g.>.
604
+ <urn:ex:s071> <urn:ex:p> <http://a/bb/ccc/d/.g>.
605
+ <urn:ex:s072> <urn:ex:p> <http://a/bb/ccc/d/g..>.
606
+ <urn:ex:s073> <urn:ex:p> <http://a/bb/ccc/d/..g>.
607
+ <urn:ex:s074> <urn:ex:p> <http://a/bb/ccc/g>.
608
+ <urn:ex:s075> <urn:ex:p> <http://a/bb/ccc/d/g/>.
609
+ <urn:ex:s076> <urn:ex:p> <http://a/bb/ccc/d/g/h>.
610
+ <urn:ex:s077> <urn:ex:p> <http://a/bb/ccc/d/h>.
611
+ <urn:ex:s078> <urn:ex:p> <http://a/bb/ccc/d/g;x=1/y>.
612
+ <urn:ex:s079> <urn:ex:p> <http://a/bb/ccc/d/y>.
613
+ <urn:ex:s080> <urn:ex:p> <http://a/bb/ccc/d/g?y/./x>.
614
+ <urn:ex:s081> <urn:ex:p> <http://a/bb/ccc/d/g?y/../x>.
615
+ <urn:ex:s082> <urn:ex:p> <http://a/bb/ccc/d/g#s/./x>.
616
+ <urn:ex:s083> <urn:ex:p> <http://a/bb/ccc/d/g#s/../x>.
617
+ <urn:ex:s084> <urn:ex:p> <http:g>.
618
+
619
+ # RFC3986 normal examples with /. in the base IRI
620
+
621
+ <urn:ex:s085> <urn:ex:p> <g:h>.
622
+ <urn:ex:s086> <urn:ex:p> <http://a/bb/ccc/g>.
623
+ <urn:ex:s087> <urn:ex:p> <http://a/bb/ccc/g>.
624
+ <urn:ex:s088> <urn:ex:p> <http://a/bb/ccc/g/>.
625
+ <urn:ex:s089> <urn:ex:p> <http://a/g>.
626
+ <urn:ex:s090> <urn:ex:p> <http://g>.
627
+ <urn:ex:s091> <urn:ex:p> <http://a/bb/ccc/./d;p?y>.
628
+ <urn:ex:s092> <urn:ex:p> <http://a/bb/ccc/g?y>.
629
+ <urn:ex:s093> <urn:ex:p> <http://a/bb/ccc/./d;p?q#s>.
630
+ <urn:ex:s094> <urn:ex:p> <http://a/bb/ccc/g#s>.
631
+ <urn:ex:s095> <urn:ex:p> <http://a/bb/ccc/g?y#s>.
632
+ <urn:ex:s096> <urn:ex:p> <http://a/bb/ccc/;x>.
633
+ <urn:ex:s097> <urn:ex:p> <http://a/bb/ccc/g;x>.
634
+ <urn:ex:s098> <urn:ex:p> <http://a/bb/ccc/g;x?y#s>.
635
+ <urn:ex:s099> <urn:ex:p> <http://a/bb/ccc/./d;p?q>.
636
+ <urn:ex:s100> <urn:ex:p> <http://a/bb/ccc/>.
637
+ <urn:ex:s101> <urn:ex:p> <http://a/bb/ccc/>.
638
+ <urn:ex:s102> <urn:ex:p> <http://a/bb/>.
639
+ <urn:ex:s103> <urn:ex:p> <http://a/bb/>.
640
+ <urn:ex:s104> <urn:ex:p> <http://a/bb/g>.
641
+ <urn:ex:s105> <urn:ex:p> <http://a/>.
642
+ <urn:ex:s106> <urn:ex:p> <http://a/>.
643
+ <urn:ex:s107> <urn:ex:p> <http://a/g>.
644
+
645
+ # RFC3986 abnormal examples with /. in the base IRI
646
+
647
+ <urn:ex:s108> <urn:ex:p> <http://a/g>.
648
+ <urn:ex:s109> <urn:ex:p> <http://a/g>.
649
+ <urn:ex:s110> <urn:ex:p> <http://a/g>.
650
+ <urn:ex:s111> <urn:ex:p> <http://a/g>.
651
+ <urn:ex:s112> <urn:ex:p> <http://a/bb/ccc/g.>.
652
+ <urn:ex:s113> <urn:ex:p> <http://a/bb/ccc/.g>.
653
+ <urn:ex:s114> <urn:ex:p> <http://a/bb/ccc/g..>.
654
+ <urn:ex:s115> <urn:ex:p> <http://a/bb/ccc/..g>.
655
+ <urn:ex:s116> <urn:ex:p> <http://a/bb/g>.
656
+ <urn:ex:s117> <urn:ex:p> <http://a/bb/ccc/g/>.
657
+ <urn:ex:s118> <urn:ex:p> <http://a/bb/ccc/g/h>.
658
+ <urn:ex:s119> <urn:ex:p> <http://a/bb/ccc/h>.
659
+ <urn:ex:s120> <urn:ex:p> <http://a/bb/ccc/g;x=1/y>.
660
+ <urn:ex:s121> <urn:ex:p> <http://a/bb/ccc/y>.
661
+ <urn:ex:s122> <urn:ex:p> <http://a/bb/ccc/g?y/./x>.
662
+ <urn:ex:s123> <urn:ex:p> <http://a/bb/ccc/g?y/../x>.
663
+ <urn:ex:s124> <urn:ex:p> <http://a/bb/ccc/g#s/./x>.
664
+ <urn:ex:s125> <urn:ex:p> <http://a/bb/ccc/g#s/../x>.
665
+ <urn:ex:s126> <urn:ex:p> <http:g>.
666
+
667
+ # RFC3986 normal examples with /.. in the base IRI
668
+
669
+ <urn:ex:s127> <urn:ex:p> <g:h>.
670
+ <urn:ex:s128> <urn:ex:p> <http://a/bb/g>.
671
+ <urn:ex:s129> <urn:ex:p> <http://a/bb/g>.
672
+ <urn:ex:s130> <urn:ex:p> <http://a/bb/g/>.
673
+ <urn:ex:s131> <urn:ex:p> <http://a/g>.
674
+ <urn:ex:s132> <urn:ex:p> <http://g>.
675
+ <urn:ex:s133> <urn:ex:p> <http://a/bb/ccc/../d;p?y>.
676
+ <urn:ex:s134> <urn:ex:p> <http://a/bb/g?y>.
677
+ <urn:ex:s135> <urn:ex:p> <http://a/bb/ccc/../d;p?q#s>.
678
+ <urn:ex:s136> <urn:ex:p> <http://a/bb/g#s>.
679
+ <urn:ex:s137> <urn:ex:p> <http://a/bb/g?y#s>.
680
+ <urn:ex:s138> <urn:ex:p> <http://a/bb/;x>.
681
+ <urn:ex:s139> <urn:ex:p> <http://a/bb/g;x>.
682
+ <urn:ex:s140> <urn:ex:p> <http://a/bb/g;x?y#s>.
683
+ <urn:ex:s141> <urn:ex:p> <http://a/bb/ccc/../d;p?q>.
684
+ <urn:ex:s142> <urn:ex:p> <http://a/bb/>.
685
+ <urn:ex:s143> <urn:ex:p> <http://a/bb/>.
686
+ <urn:ex:s144> <urn:ex:p> <http://a/>.
687
+ <urn:ex:s145> <urn:ex:p> <http://a/>.
688
+ <urn:ex:s146> <urn:ex:p> <http://a/g>.
689
+ <urn:ex:s147> <urn:ex:p> <http://a/>.
690
+ <urn:ex:s148> <urn:ex:p> <http://a/>.
691
+ <urn:ex:s149> <urn:ex:p> <http://a/g>.
692
+
693
+ # RFC3986 abnormal examples with /.. in the base IRI
694
+
695
+ <urn:ex:s150> <urn:ex:p> <http://a/g>.
696
+ <urn:ex:s151> <urn:ex:p> <http://a/g>.
697
+ <urn:ex:s152> <urn:ex:p> <http://a/g>.
698
+ <urn:ex:s153> <urn:ex:p> <http://a/g>.
699
+ <urn:ex:s154> <urn:ex:p> <http://a/bb/g.>.
700
+ <urn:ex:s155> <urn:ex:p> <http://a/bb/.g>.
701
+ <urn:ex:s156> <urn:ex:p> <http://a/bb/g..>.
702
+ <urn:ex:s157> <urn:ex:p> <http://a/bb/..g>.
703
+ <urn:ex:s158> <urn:ex:p> <http://a/g>.
704
+ <urn:ex:s159> <urn:ex:p> <http://a/bb/g/>.
705
+ <urn:ex:s160> <urn:ex:p> <http://a/bb/g/h>.
706
+ <urn:ex:s161> <urn:ex:p> <http://a/bb/h>.
707
+ <urn:ex:s162> <urn:ex:p> <http://a/bb/g;x=1/y>.
708
+ <urn:ex:s163> <urn:ex:p> <http://a/bb/y>.
709
+ <urn:ex:s164> <urn:ex:p> <http://a/bb/g?y/./x>.
710
+ <urn:ex:s165> <urn:ex:p> <http://a/bb/g?y/../x>.
711
+ <urn:ex:s166> <urn:ex:p> <http://a/bb/g#s/./x>.
712
+ <urn:ex:s167> <urn:ex:p> <http://a/bb/g#s/../x>.
713
+ <urn:ex:s168> <urn:ex:p> <http:g>.
714
+
715
+ # RFC3986 normal examples with trailing /. in the base IRI
716
+
717
+ <urn:ex:s169> <urn:ex:p> <g:h>.
718
+ <urn:ex:s170> <urn:ex:p> <http://a/bb/ccc/g>.
719
+ <urn:ex:s171> <urn:ex:p> <http://a/bb/ccc/g>.
720
+ <urn:ex:s172> <urn:ex:p> <http://a/bb/ccc/g/>.
721
+ <urn:ex:s173> <urn:ex:p> <http://a/g>.
722
+ <urn:ex:s174> <urn:ex:p> <http://g>.
723
+ <urn:ex:s175> <urn:ex:p> <http://a/bb/ccc/.?y>.
724
+ <urn:ex:s176> <urn:ex:p> <http://a/bb/ccc/g?y>.
725
+ <urn:ex:s177> <urn:ex:p> <http://a/bb/ccc/.#s>.
726
+ <urn:ex:s178> <urn:ex:p> <http://a/bb/ccc/g#s>.
727
+ <urn:ex:s179> <urn:ex:p> <http://a/bb/ccc/g?y#s>.
728
+ <urn:ex:s180> <urn:ex:p> <http://a/bb/ccc/;x>.
729
+ <urn:ex:s181> <urn:ex:p> <http://a/bb/ccc/g;x>.
730
+ <urn:ex:s182> <urn:ex:p> <http://a/bb/ccc/g;x?y#s>.
731
+ <urn:ex:s183> <urn:ex:p> <http://a/bb/ccc/.>.
732
+ <urn:ex:s184> <urn:ex:p> <http://a/bb/ccc/>.
733
+ <urn:ex:s185> <urn:ex:p> <http://a/bb/ccc/>.
734
+ <urn:ex:s186> <urn:ex:p> <http://a/bb/>.
735
+ <urn:ex:s187> <urn:ex:p> <http://a/bb/>.
736
+ <urn:ex:s188> <urn:ex:p> <http://a/bb/g>.
737
+ <urn:ex:s189> <urn:ex:p> <http://a/>.
738
+ <urn:ex:s190> <urn:ex:p> <http://a/>.
739
+ <urn:ex:s191> <urn:ex:p> <http://a/g>.
740
+
741
+ # RFC3986 abnormal examples with trailing /. in the base IRI
742
+
743
+ <urn:ex:s192> <urn:ex:p> <http://a/g>.
744
+ <urn:ex:s193> <urn:ex:p> <http://a/g>.
745
+ <urn:ex:s194> <urn:ex:p> <http://a/g>.
746
+ <urn:ex:s195> <urn:ex:p> <http://a/g>.
747
+ <urn:ex:s196> <urn:ex:p> <http://a/bb/ccc/g.>.
748
+ <urn:ex:s197> <urn:ex:p> <http://a/bb/ccc/.g>.
749
+ <urn:ex:s198> <urn:ex:p> <http://a/bb/ccc/g..>.
750
+ <urn:ex:s199> <urn:ex:p> <http://a/bb/ccc/..g>.
751
+ <urn:ex:s200> <urn:ex:p> <http://a/bb/g>.
752
+ <urn:ex:s201> <urn:ex:p> <http://a/bb/ccc/g/>.
753
+ <urn:ex:s202> <urn:ex:p> <http://a/bb/ccc/g/h>.
754
+ <urn:ex:s203> <urn:ex:p> <http://a/bb/ccc/h>.
755
+ <urn:ex:s204> <urn:ex:p> <http://a/bb/ccc/g;x=1/y>.
756
+ <urn:ex:s205> <urn:ex:p> <http://a/bb/ccc/y>.
757
+ <urn:ex:s206> <urn:ex:p> <http://a/bb/ccc/g?y/./x>.
758
+ <urn:ex:s207> <urn:ex:p> <http://a/bb/ccc/g?y/../x>.
759
+ <urn:ex:s208> <urn:ex:p> <http://a/bb/ccc/g#s/./x>.
760
+ <urn:ex:s209> <urn:ex:p> <http://a/bb/ccc/g#s/../x>.
761
+ <urn:ex:s210> <urn:ex:p> <http:g>.
762
+
763
+ # RFC3986 normal examples with trailing /.. in the base IRI
764
+
765
+ <urn:ex:s211> <urn:ex:p> <g:h>.
766
+ <urn:ex:s212> <urn:ex:p> <http://a/bb/ccc/g>.
767
+ <urn:ex:s213> <urn:ex:p> <http://a/bb/ccc/g>.
768
+ <urn:ex:s214> <urn:ex:p> <http://a/bb/ccc/g/>.
769
+ <urn:ex:s215> <urn:ex:p> <http://a/g>.
770
+ <urn:ex:s216> <urn:ex:p> <http://g>.
771
+ <urn:ex:s217> <urn:ex:p> <http://a/bb/ccc/..?y>.
772
+ <urn:ex:s218> <urn:ex:p> <http://a/bb/ccc/g?y>.
773
+ <urn:ex:s219> <urn:ex:p> <http://a/bb/ccc/..#s>.
774
+ <urn:ex:s220> <urn:ex:p> <http://a/bb/ccc/g#s>.
775
+ <urn:ex:s221> <urn:ex:p> <http://a/bb/ccc/g?y#s>.
776
+ <urn:ex:s222> <urn:ex:p> <http://a/bb/ccc/;x>.
777
+ <urn:ex:s223> <urn:ex:p> <http://a/bb/ccc/g;x>.
778
+ <urn:ex:s224> <urn:ex:p> <http://a/bb/ccc/g;x?y#s>.
779
+ <urn:ex:s225> <urn:ex:p> <http://a/bb/ccc/..>.
780
+ <urn:ex:s226> <urn:ex:p> <http://a/bb/ccc/>.
781
+ <urn:ex:s227> <urn:ex:p> <http://a/bb/ccc/>.
782
+ <urn:ex:s228> <urn:ex:p> <http://a/bb/>.
783
+ <urn:ex:s229> <urn:ex:p> <http://a/bb/>.
784
+ <urn:ex:s230> <urn:ex:p> <http://a/bb/g>.
785
+ <urn:ex:s231> <urn:ex:p> <http://a/>.
786
+ <urn:ex:s232> <urn:ex:p> <http://a/>.
787
+ <urn:ex:s233> <urn:ex:p> <http://a/g>.
788
+
789
+ # RFC3986 abnormal examples with trailing /.. in the base IRI
790
+
791
+ <urn:ex:s234> <urn:ex:p> <http://a/g>.
792
+ <urn:ex:s235> <urn:ex:p> <http://a/g>.
793
+ <urn:ex:s236> <urn:ex:p> <http://a/g>.
794
+ <urn:ex:s237> <urn:ex:p> <http://a/g>.
795
+ <urn:ex:s238> <urn:ex:p> <http://a/bb/ccc/g.>.
796
+ <urn:ex:s239> <urn:ex:p> <http://a/bb/ccc/.g>.
797
+ <urn:ex:s240> <urn:ex:p> <http://a/bb/ccc/g..>.
798
+ <urn:ex:s241> <urn:ex:p> <http://a/bb/ccc/..g>.
799
+ <urn:ex:s242> <urn:ex:p> <http://a/bb/g>.
800
+ <urn:ex:s243> <urn:ex:p> <http://a/bb/ccc/g/>.
801
+ <urn:ex:s244> <urn:ex:p> <http://a/bb/ccc/g/h>.
802
+ <urn:ex:s245> <urn:ex:p> <http://a/bb/ccc/h>.
803
+ <urn:ex:s246> <urn:ex:p> <http://a/bb/ccc/g;x=1/y>.
804
+ <urn:ex:s247> <urn:ex:p> <http://a/bb/ccc/y>.
805
+ <urn:ex:s248> <urn:ex:p> <http://a/bb/ccc/g?y/./x>.
806
+ <urn:ex:s249> <urn:ex:p> <http://a/bb/ccc/g?y/../x>.
807
+ <urn:ex:s250> <urn:ex:p> <http://a/bb/ccc/g#s/./x>.
808
+ <urn:ex:s251> <urn:ex:p> <http://a/bb/ccc/g#s/../x>.
809
+ <urn:ex:s252> <urn:ex:p> <http:g>.
810
+
811
+ # RFC3986 normal examples with file path
812
+
813
+ <urn:ex:s253> <urn:ex:p> <g:h>.
814
+ <urn:ex:s254> <urn:ex:p> <file:///a/bb/ccc/g>.
815
+ <urn:ex:s255> <urn:ex:p> <file:///a/bb/ccc/g>.
816
+ <urn:ex:s256> <urn:ex:p> <file:///a/bb/ccc/g/>.
817
+ <urn:ex:s257> <urn:ex:p> <file:///g>.
818
+ <urn:ex:s258> <urn:ex:p> <file://g>.
819
+ <urn:ex:s259> <urn:ex:p> <file:///a/bb/ccc/d;p?y>.
820
+ <urn:ex:s260> <urn:ex:p> <file:///a/bb/ccc/g?y>.
821
+ <urn:ex:s261> <urn:ex:p> <file:///a/bb/ccc/d;p?q#s>.
822
+ <urn:ex:s262> <urn:ex:p> <file:///a/bb/ccc/g#s>.
823
+ <urn:ex:s263> <urn:ex:p> <file:///a/bb/ccc/g?y#s>.
824
+ <urn:ex:s264> <urn:ex:p> <file:///a/bb/ccc/;x>.
825
+ <urn:ex:s265> <urn:ex:p> <file:///a/bb/ccc/g;x>.
826
+ <urn:ex:s266> <urn:ex:p> <file:///a/bb/ccc/g;x?y#s>.
827
+ <urn:ex:s267> <urn:ex:p> <file:///a/bb/ccc/d;p?q>.
828
+ <urn:ex:s268> <urn:ex:p> <file:///a/bb/ccc/>.
829
+ <urn:ex:s269> <urn:ex:p> <file:///a/bb/ccc/>.
830
+ <urn:ex:s270> <urn:ex:p> <file:///a/bb/>.
831
+ <urn:ex:s271> <urn:ex:p> <file:///a/bb/>.
832
+ <urn:ex:s272> <urn:ex:p> <file:///a/bb/g>.
833
+ <urn:ex:s273> <urn:ex:p> <file:///a/>.
834
+ <urn:ex:s274> <urn:ex:p> <file:///a/>.
835
+ <urn:ex:s275> <urn:ex:p> <file:///a/g>.
836
+
837
+ # RFC3986 abnormal examples with file path
838
+
839
+ <urn:ex:s276> <urn:ex:p> <file:///g>.
840
+ <urn:ex:s277> <urn:ex:p> <file:///g>.
841
+ <urn:ex:s278> <urn:ex:p> <file:///g>.
842
+ <urn:ex:s279> <urn:ex:p> <file:///g>.
843
+ <urn:ex:s280> <urn:ex:p> <file:///a/bb/ccc/g.>.
844
+ <urn:ex:s281> <urn:ex:p> <file:///a/bb/ccc/.g>.
845
+ <urn:ex:s282> <urn:ex:p> <file:///a/bb/ccc/g..>.
846
+ <urn:ex:s283> <urn:ex:p> <file:///a/bb/ccc/..g>.
847
+ <urn:ex:s284> <urn:ex:p> <file:///a/bb/g>.
848
+ <urn:ex:s285> <urn:ex:p> <file:///a/bb/ccc/g/>.
849
+ <urn:ex:s286> <urn:ex:p> <file:///a/bb/ccc/g/h>.
850
+ <urn:ex:s287> <urn:ex:p> <file:///a/bb/ccc/h>.
851
+ <urn:ex:s288> <urn:ex:p> <file:///a/bb/ccc/g;x=1/y>.
852
+ <urn:ex:s289> <urn:ex:p> <file:///a/bb/ccc/y>.
853
+ <urn:ex:s290> <urn:ex:p> <file:///a/bb/ccc/g?y/./x>.
854
+ <urn:ex:s291> <urn:ex:p> <file:///a/bb/ccc/g?y/../x>.
855
+ <urn:ex:s292> <urn:ex:p> <file:///a/bb/ccc/g#s/./x>.
856
+ <urn:ex:s293> <urn:ex:p> <file:///a/bb/ccc/g#s/../x>.
857
+ <urn:ex:s294> <urn:ex:p> <http:g>.
858
+
859
+ # additional cases
860
+
861
+ <urn:ex:s295> <urn:ex:p> <http://abc/def/>.
862
+ <urn:ex:s296> <urn:ex:p> <http://abc/def/?a=b>.
863
+ <urn:ex:s297> <urn:ex:p> <http://abc/def/#a=b>.
864
+ <urn:ex:s298> <urn:ex:p> <http://abc/>.
865
+ <urn:ex:s299> <urn:ex:p> <http://abc/?a=b>.
866
+ <urn:ex:s300> <urn:ex:p> <http://abc/#a=b>.
867
+
868
+ <urn:ex:s301> <urn:ex:p> <http://ab//de//xyz>.
869
+ <urn:ex:s302> <urn:ex:p> <http://ab//de//xyz>.
870
+ <urn:ex:s303> <urn:ex:p> <http://ab//de/xyz>.
871
+
872
+ <urn:ex:s304> <urn:ex:p> <http://abc/d:f/xyz>.
873
+ <urn:ex:s305> <urn:ex:p> <http://abc/d:f/xyz>.
874
+ <urn:ex:s306> <urn:ex:p> <http://abc/xyz>.
875
+ }}
876
+ it "produces equivalent triples" do
877
+ nt_str = RDF::NTriples::Reader.new(nt).dump(:ntriples)
878
+ json_str = JSON::LD::Reader.new(json).dump(:ntriples)
879
+ expect(json_str).to eql(nt_str)
880
+ end
881
+ end
126
882
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json-ld
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.9
4
+ version: 1.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gregg Kellogg
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-06 00:00:00.000000000 Z
11
+ date: 2015-09-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rdf
@@ -30,6 +30,20 @@ dependencies:
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
32
  version: 1.1.7
33
+ - !ruby/object:Gem::Dependency
34
+ name: multi_json
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.11'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '1.11'
33
47
  - !ruby/object:Gem::Dependency
34
48
  name: jsonlint
35
49
  requirement: !ruby/object:Gem::Requirement
@@ -44,6 +58,34 @@ dependencies:
44
58
  - - "~>"
45
59
  - !ruby/object:Gem::Version
46
60
  version: 0.1.0
61
+ - !ruby/object:Gem::Dependency
62
+ name: oj
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '2.12'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '2.12'
75
+ - !ruby/object:Gem::Dependency
76
+ name: yajl-ruby
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: 1.2.1
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: 1.2.1
47
89
  - !ruby/object:Gem::Dependency
48
90
  name: rack-cache
49
91
  requirement: !ruby/object:Gem::Requirement
@@ -162,14 +204,14 @@ dependencies:
162
204
  requirements:
163
205
  - - "~>"
164
206
  - !ruby/object:Gem::Version
165
- version: '3.0'
207
+ version: 3.2.0
166
208
  type: :development
167
209
  prerelease: false
168
210
  version_requirements: !ruby/object:Gem::Requirement
169
211
  requirements:
170
212
  - - "~>"
171
213
  - !ruby/object:Gem::Version
172
- version: '3.0'
214
+ version: 3.2.0
173
215
  - !ruby/object:Gem::Dependency
174
216
  name: rspec-its
175
217
  requirement: !ruby/object:Gem::Requirement
@@ -329,7 +371,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
329
371
  version: '0'
330
372
  requirements: []
331
373
  rubyforge_project: json-ld
332
- rubygems_version: 2.4.7
374
+ rubygems_version: 2.4.3
333
375
  signing_key:
334
376
  specification_version: 4
335
377
  summary: JSON-LD reader/writer for Ruby.