json-ld 1.1.9 → 1.1.10

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
  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.