json-ld 3.2.4 → 3.3.0

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.
Files changed (100) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -4
  3. data/VERSION +1 -1
  4. data/lib/json/ld/api.rb +807 -771
  5. data/lib/json/ld/compact.rb +304 -304
  6. data/lib/json/ld/conneg.rb +179 -161
  7. data/lib/json/ld/context.rb +2079 -1913
  8. data/lib/json/ld/expand.rb +745 -666
  9. data/lib/json/ld/extensions.rb +14 -13
  10. data/lib/json/ld/flatten.rb +257 -247
  11. data/lib/json/ld/format.rb +202 -194
  12. data/lib/json/ld/frame.rb +525 -502
  13. data/lib/json/ld/from_rdf.rb +223 -204
  14. data/lib/json/ld/html/nokogiri.rb +123 -121
  15. data/lib/json/ld/html/rexml.rb +151 -147
  16. data/lib/json/ld/reader.rb +107 -100
  17. data/lib/json/ld/resource.rb +224 -205
  18. data/lib/json/ld/streaming_reader.rb +574 -507
  19. data/lib/json/ld/streaming_writer.rb +93 -92
  20. data/lib/json/ld/to_rdf.rb +171 -169
  21. data/lib/json/ld/utils.rb +270 -264
  22. data/lib/json/ld/version.rb +24 -14
  23. data/lib/json/ld/writer.rb +334 -311
  24. data/lib/json/ld.rb +103 -96
  25. metadata +56 -225
  26. data/spec/api_spec.rb +0 -132
  27. data/spec/compact_spec.rb +0 -3482
  28. data/spec/conneg_spec.rb +0 -373
  29. data/spec/context_spec.rb +0 -2056
  30. data/spec/expand_spec.rb +0 -4496
  31. data/spec/flatten_spec.rb +0 -1203
  32. data/spec/format_spec.rb +0 -115
  33. data/spec/frame_spec.rb +0 -2541
  34. data/spec/from_rdf_spec.rb +0 -1072
  35. data/spec/matchers.rb +0 -20
  36. data/spec/rdfstar_spec.rb +0 -25
  37. data/spec/reader_spec.rb +0 -883
  38. data/spec/resource_spec.rb +0 -76
  39. data/spec/spec_helper.rb +0 -281
  40. data/spec/streaming_reader_spec.rb +0 -237
  41. data/spec/streaming_writer_spec.rb +0 -145
  42. data/spec/suite_compact_spec.rb +0 -22
  43. data/spec/suite_expand_spec.rb +0 -36
  44. data/spec/suite_flatten_spec.rb +0 -34
  45. data/spec/suite_frame_spec.rb +0 -29
  46. data/spec/suite_from_rdf_spec.rb +0 -22
  47. data/spec/suite_helper.rb +0 -411
  48. data/spec/suite_html_spec.rb +0 -22
  49. data/spec/suite_http_spec.rb +0 -35
  50. data/spec/suite_remote_doc_spec.rb +0 -22
  51. data/spec/suite_to_rdf_spec.rb +0 -30
  52. data/spec/support/extensions.rb +0 -44
  53. data/spec/test-files/test-1-compacted.jsonld +0 -10
  54. data/spec/test-files/test-1-context.jsonld +0 -7
  55. data/spec/test-files/test-1-expanded.jsonld +0 -5
  56. data/spec/test-files/test-1-input.jsonld +0 -10
  57. data/spec/test-files/test-1-rdf.ttl +0 -8
  58. data/spec/test-files/test-2-compacted.jsonld +0 -20
  59. data/spec/test-files/test-2-context.jsonld +0 -7
  60. data/spec/test-files/test-2-expanded.jsonld +0 -16
  61. data/spec/test-files/test-2-input.jsonld +0 -20
  62. data/spec/test-files/test-2-rdf.ttl +0 -14
  63. data/spec/test-files/test-3-compacted.jsonld +0 -11
  64. data/spec/test-files/test-3-context.jsonld +0 -8
  65. data/spec/test-files/test-3-expanded.jsonld +0 -10
  66. data/spec/test-files/test-3-input.jsonld +0 -11
  67. data/spec/test-files/test-3-rdf.ttl +0 -8
  68. data/spec/test-files/test-4-compacted.jsonld +0 -10
  69. data/spec/test-files/test-4-context.jsonld +0 -7
  70. data/spec/test-files/test-4-expanded.jsonld +0 -6
  71. data/spec/test-files/test-4-input.jsonld +0 -10
  72. data/spec/test-files/test-4-rdf.ttl +0 -5
  73. data/spec/test-files/test-5-compacted.jsonld +0 -13
  74. data/spec/test-files/test-5-context.jsonld +0 -7
  75. data/spec/test-files/test-5-expanded.jsonld +0 -9
  76. data/spec/test-files/test-5-input.jsonld +0 -13
  77. data/spec/test-files/test-5-rdf.ttl +0 -7
  78. data/spec/test-files/test-6-compacted.jsonld +0 -10
  79. data/spec/test-files/test-6-context.jsonld +0 -7
  80. data/spec/test-files/test-6-expanded.jsonld +0 -10
  81. data/spec/test-files/test-6-input.jsonld +0 -10
  82. data/spec/test-files/test-6-rdf.ttl +0 -6
  83. data/spec/test-files/test-7-compacted.jsonld +0 -23
  84. data/spec/test-files/test-7-context.jsonld +0 -4
  85. data/spec/test-files/test-7-expanded.jsonld +0 -20
  86. data/spec/test-files/test-7-input.jsonld +0 -23
  87. data/spec/test-files/test-7-rdf.ttl +0 -14
  88. data/spec/test-files/test-8-compacted.jsonld +0 -34
  89. data/spec/test-files/test-8-context.jsonld +0 -11
  90. data/spec/test-files/test-8-expanded.jsonld +0 -24
  91. data/spec/test-files/test-8-frame.jsonld +0 -18
  92. data/spec/test-files/test-8-framed.jsonld +0 -25
  93. data/spec/test-files/test-8-input.jsonld +0 -30
  94. data/spec/test-files/test-8-rdf.ttl +0 -15
  95. data/spec/test-files/test-9-compacted.jsonld +0 -20
  96. data/spec/test-files/test-9-context.jsonld +0 -13
  97. data/spec/test-files/test-9-expanded.jsonld +0 -14
  98. data/spec/test-files/test-9-input.jsonld +0 -12
  99. data/spec/to_rdf_spec.rb +0 -1684
  100. data/spec/writer_spec.rb +0 -427
data/spec/conneg_spec.rb DELETED
@@ -1,373 +0,0 @@
1
- # coding: utf-8
2
- require_relative 'spec_helper'
3
- require 'rack/linkeddata'
4
- require 'rack/test'
5
-
6
- describe JSON::LD::ContentNegotiation do
7
- include ::Rack::Test::Methods
8
- let(:logger) {RDF::Spec.logger}
9
-
10
- let(:app) do
11
- described_class.new(double("Target Rack Application", :call => [200, {}, @results || "A String"]))
12
- end
13
-
14
- describe "#parse_accept_header" do
15
- {
16
- "application/n-triples, application/ld+json;q=0.5" => %w(application/ld+json),
17
- "application/ld+json, application/ld+json;profile=http://www.w3.org/ns/json-ld#compacted" =>
18
- %w(application/ld+json;profile=http://www.w3.org/ns/json-ld#compacted application/ld+json),
19
- }.each do |accept, content_types|
20
- it "returns #{content_types.inspect} given #{accept.inspect}" do
21
- expect(app.send(:parse_accept_header, accept)).to eq content_types
22
- end
23
- end
24
- end
25
-
26
- describe "#find_content_type_for_media_range" do
27
- {
28
- "*/*" => "application/ld+json",
29
- "application/*" => "application/ld+json",
30
- "application/json" => "application/ld+json",
31
- "application/json;profile=http://www.w3.org/ns/json-ld#compacted" =>
32
- "application/ld+json;profile=http://www.w3.org/ns/json-ld#compacted",
33
- "text/plain" => nil
34
- }.each do |media_range, content_type|
35
- it "returns #{content_type.inspect} for #{media_range.inspect}" do
36
- expect(app.send(:find_content_type_for_media_range, media_range)).to eq content_type
37
- end
38
- end
39
- end
40
-
41
- describe "#call" do
42
- let(:schema_context) {
43
- JSON::LD::API::RemoteDocument.new(%q({
44
- "@context": {
45
- "@vocab": "http://schema.org/",
46
- "id": "@id",
47
- "type": "@type"
48
- }
49
- }), documentUrl: "http://schema.org")
50
- }
51
- let(:frame) {
52
- JSON::LD::API::RemoteDocument.new(%q({
53
- "@context": {
54
- "dc": "http://purl.org/dc/elements/1.1/",
55
- "ex": "http://example.org/vocab#"
56
- },
57
- "@type": "ex:Library",
58
- "ex:contains": {
59
- "@type": "ex:Book",
60
- "ex:contains": {
61
- "@type": "ex:Chapter"
62
- }
63
- }
64
- }), documentUrl: "http://conneg.example.com/frame")
65
- }
66
- let(:context) {
67
- JSON::LD::API::RemoteDocument.new(%q({
68
- "@context": {
69
- "dc": "http://purl.org/dc/elements/1.1/",
70
- "ex": "http://example.org/vocab#"
71
- }
72
- }), documentUrl: "http://conneg.example.com/context")
73
- }
74
-
75
- before(:each) do
76
- allow(JSON::LD::API).to receive(:documentLoader).with("http://schema.org", any_args).and_yield(schema_context)
77
- allow(JSON::LD::API).to receive(:documentLoader).with("http://conneg.example.com/context", any_args).and_yield(context)
78
- allow(JSON::LD::API).to receive(:documentLoader).with("http://conneg.example.com/frame", any_args).and_yield(frame)
79
- end
80
-
81
- context "with text result" do
82
- it "returns text unchanged" do
83
- get '/'
84
- expect(last_response.body).to eq 'A String'
85
- end
86
- end
87
-
88
- context "with object result" do
89
- before(:each) do
90
- @results = LIBRARY_INPUT
91
- end
92
-
93
- it "returns expanded result" do
94
- get '/'
95
- expect(JSON.parse(last_response.body)).to produce_jsonld(LIBRARY_INPUT, logger)
96
- end
97
-
98
- context "with Accept" do
99
- {
100
- "application/n-triples" => "406 Not Acceptable (No appropriate combinaion of media-type and parameters found)\n",
101
- "application/json" => LIBRARY_INPUT,
102
- "application/ld+json" => LIBRARY_INPUT,
103
- %(application/ld+json;profile=http://www.w3.org/ns/json-ld#expanded) =>
104
- LIBRARY_EXPANDED,
105
-
106
- %(application/ld+json;profile=http://www.w3.org/ns/json-ld#compacted) =>
107
- LIBRARY_COMPACTED_DEFAULT,
108
-
109
- %(application/ld+json;profile=http://www.w3.org/ns/json-ld#flattened) =>
110
- LIBRARY_FLATTENED_EXPANDED,
111
- %(application/ld+json;profile="http://www.w3.org/ns/json-ld#flattened http://www.w3.org/ns/json-ld#expanded") =>
112
- LIBRARY_FLATTENED_EXPANDED,
113
- %(application/ld+json;profile="http://www.w3.org/ns/json-ld#expanded http://www.w3.org/ns/json-ld#flattened") =>
114
- LIBRARY_FLATTENED_EXPANDED,
115
-
116
- %(application/ld+json;profile="http://www.w3.org/ns/json-ld#flattened http://www.w3.org/ns/json-ld#compacted") =>
117
- LIBRARY_FLATTENED_COMPACTED_DEFAULT,
118
- %(application/ld+json;profile="http://www.w3.org/ns/json-ld#compacted http://www.w3.org/ns/json-ld#flattened") =>
119
- LIBRARY_FLATTENED_COMPACTED_DEFAULT,
120
-
121
- %(application/ld+json;profile=http://www.w3.org/ns/json-ld#framed) =>
122
- "406 Not Acceptable (framed profile without a frame)\n",
123
- %(application/ld+json;profile="http://www.w3.org/ns/json-ld#framed http://www.w3.org/ns/json-ld#expanded") =>
124
- "406 Not Acceptable (framed profile without a frame)\n",
125
- %(application/ld+json;profile="http://www.w3.org/ns/json-ld#expanded http://www.w3.org/ns/json-ld#framed") =>
126
- "406 Not Acceptable (framed profile without a frame)\n",
127
- %(application/ld+json;profile="http://www.w3.org/ns/json-ld#framed http://www.w3.org/ns/json-ld#compacted") =>
128
- "406 Not Acceptable (framed profile without a frame)\n",
129
- %(application/ld+json;profile="http://www.w3.org/ns/json-ld#compacted http://www.w3.org/ns/json-ld#framed") =>
130
- "406 Not Acceptable (framed profile without a frame)\n",
131
- }.each do |accepts, result|
132
- context accepts do
133
- before(:each) do
134
- get '/', {}, {"HTTP_ACCEPT" => accepts}
135
- end
136
-
137
- it "status" do
138
- expect(last_response.status).to satisfy("be 200 or 406") {|x| [200, 406].include?(x)}
139
- end
140
-
141
- it "sets content type" do
142
- expect(last_response.content_type).to eq(last_response.status == 406 ? 'text/plain' : 'application/ld+json')
143
- end
144
-
145
- it "returns serialization" do
146
- if last_response.status == 406
147
- expect(last_response.body).to eq result
148
- else
149
- expect(JSON.parse(last_response.body)).to produce_jsonld(result, logger)
150
- end
151
- end
152
- end
153
- end
154
- end
155
-
156
- context "with Link" do
157
- {
158
- "compacted with context" => {
159
- accept: %(application/ld+json;profile=http://www.w3.org/ns/json-ld#compacted),
160
- link: %(<http://conneg.example.com/context> rel="http://www.w3.org/ns/json-ld#context"),
161
- result: LIBRARY_COMPACTED
162
- },
163
- "flattened with context" => {
164
- accept: %(application/ld+json;profile=http://www.w3.org/ns/json-ld#flattened),
165
- link: %(<http://conneg.example.com/context> rel="http://www.w3.org/ns/json-ld#context"),
166
- result: LIBRARY_FLATTENED_COMPACTED
167
- },
168
- "flattened and compacted with context" => {
169
- accept: %(application/ld+json;profile="http://www.w3.org/ns/json-ld#flattened http://www.w3.org/ns/json-ld#compacted"),
170
- link: %(<http://conneg.example.com/context> rel="http://www.w3.org/ns/json-ld#context"),
171
- result: LIBRARY_FLATTENED_COMPACTED
172
- },
173
- "compacted and flattened with context" => {
174
- accept: %(application/ld+json;profile="http://www.w3.org/ns/json-ld#compacted http://www.w3.org/ns/json-ld#flattened"),
175
- link: %(<http://conneg.example.com/context> rel="http://www.w3.org/ns/json-ld#context"),
176
- result: LIBRARY_FLATTENED_COMPACTED
177
- },
178
- "framed with frame" => {
179
- accept: %(application/ld+json;profile=http://www.w3.org/ns/json-ld#framed),
180
- link: %(<http://conneg.example.com/frame> rel="http://www.w3.org/ns/json-ld#frame"),
181
- result: LIBRARY_FRAMED
182
- },
183
-
184
- "framed with context" => {
185
- accept: %(application/ld+json;profile=http://www.w3.org/ns/json-ld#framed),
186
- link: %(<http://conneg.example.com/context> rel="http://www.w3.org/ns/json-ld#context"),
187
- result: "406 Not Acceptable (framed profile without a frame)\n"
188
- },
189
- }.each do |name, params|
190
- context name do
191
- before(:each) do
192
- get '/', {}, {"HTTP_ACCEPT" => params[:accept], "HTTP_LINK" => params[:link]}
193
- end
194
-
195
- it "status" do
196
- expect(last_response.status).to satisfy("be 200 or 406") {|x| [200, 406].include?(x)}
197
- end
198
-
199
- it "sets content type" do
200
- expect(last_response.content_type).to eq(last_response.status == 406 ? 'text/plain' : 'application/ld+json')
201
- end
202
-
203
- it "returns serialization" do
204
- if last_response.status == 406
205
- expect(last_response.body).to eq params[:result]
206
- else
207
- expect(JSON.parse(last_response.body)).to produce_jsonld(params[:result], logger)
208
- end
209
- end
210
- end
211
- end
212
- end
213
- end
214
- end
215
- end
216
-
217
- describe Rack::LinkedData::ContentNegotiation do
218
- include ::Rack::Test::Methods
219
- let(:logger) {RDF::Spec.logger}
220
-
221
- let(:app) do
222
- graph = RDF::NTriples::Reader.new(%(
223
- <http://example.org/library> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://example.org/vocab#Library> .
224
- <http://example.org/library> <http://example.org/vocab#contains> <http://example.org/library/the-republic> .
225
- <http://example.org/library/the-republic> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://example.org/vocab#Book> .
226
- <http://example.org/library/the-republic> <http://purl.org/dc/elements/1.1/title> "The Republic" .
227
- <http://example.org/library/the-republic> <http://purl.org/dc/elements/1.1/creator> "Plato" .
228
- <http://example.org/library/the-republic> <http://example.org/vocab#contains> <http://example.org/library/the-republic#introduction> .
229
- <http://example.org/library/the-republic#introduction> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://example.org/vocab#Chapter> .
230
- <http://example.org/library/the-republic#introduction> <http://purl.org/dc/elements/1.1/title> "The Introduction" .
231
- <http://example.org/library/the-republic#introduction> <http://purl.org/dc/elements/1.1/description> "An introductory chapter on The Republic." .
232
- ))
233
- Rack::LinkedData::ContentNegotiation.new(double("Target Rack Application", :call => [200, {}, graph]), {})
234
- end
235
-
236
- describe "#call" do
237
- let(:schema_context) {
238
- JSON::LD::API::RemoteDocument.new(%q({
239
- "@context": {
240
- "@vocab": "http://schema.org/",
241
- "id": "@id",
242
- "type": "@type"
243
- }
244
- }), documentUrl: "http://schema.org")
245
- }
246
- let(:frame) {
247
- JSON::LD::API::RemoteDocument.new(%q({
248
- "@context": {
249
- "dc": "http://purl.org/dc/elements/1.1/",
250
- "ex": "http://example.org/vocab#"
251
- },
252
- "@type": "ex:Library",
253
- "ex:contains": {
254
- "@type": "ex:Book",
255
- "ex:contains": {
256
- "@type": "ex:Chapter"
257
- }
258
- }
259
- }), documentUrl: "http://conneg.example.com/frame")
260
- }
261
- let(:context) {
262
- JSON::LD::API::RemoteDocument.new(%q({
263
- "@context": {
264
- "dc": "http://purl.org/dc/elements/1.1/",
265
- "ex": "http://example.org/vocab#"
266
- }
267
- }), documentUrl: "http://conneg.example.com/context")
268
- }
269
-
270
- before(:each) do
271
- allow(JSON::LD::API).to receive(:documentLoader).with("http://schema.org", any_args).and_yield(schema_context)
272
- allow(JSON::LD::API).to receive(:documentLoader).with("http://conneg.example.com/context", any_args).and_yield(context)
273
- allow(JSON::LD::API).to receive(:documentLoader).with("http://conneg.example.com/frame", any_args).and_yield(frame)
274
- end
275
-
276
- {
277
- "application/json" => LIBRARY_FLATTENED_EXPANDED,
278
- "application/ld+json" => LIBRARY_FLATTENED_EXPANDED,
279
- %(application/ld+json;profile=http://www.w3.org/ns/json-ld#expanded) =>
280
- LIBRARY_FLATTENED_EXPANDED,
281
-
282
- %(application/ld+json;profile=http://www.w3.org/ns/json-ld#compacted) =>
283
- LIBRARY_FLATTENED_COMPACTED_DEFAULT,
284
-
285
- %(application/ld+json;profile=http://www.w3.org/ns/json-ld#flattened) =>
286
- LIBRARY_FLATTENED_EXPANDED,
287
- %(application/ld+json;profile="http://www.w3.org/ns/json-ld#flattened http://www.w3.org/ns/json-ld#expanded") =>
288
- LIBRARY_FLATTENED_EXPANDED,
289
- %(application/ld+json;profile="http://www.w3.org/ns/json-ld#expanded http://www.w3.org/ns/json-ld#flattened") =>
290
- LIBRARY_FLATTENED_EXPANDED,
291
-
292
- %(application/ld+json;profile="http://www.w3.org/ns/json-ld#flattened http://www.w3.org/ns/json-ld#compacted") =>
293
- LIBRARY_FLATTENED_COMPACTED_DEFAULT,
294
- %(application/ld+json;profile="http://www.w3.org/ns/json-ld#compacted http://www.w3.org/ns/json-ld#flattened") =>
295
- LIBRARY_FLATTENED_COMPACTED_DEFAULT,
296
-
297
- }.each do |accepts, result|
298
- context accepts do
299
- before(:each) do
300
- get '/', {}, {"HTTP_ACCEPT" => accepts}
301
- end
302
-
303
- it "status" do
304
- expect(last_response.status).to satisfy("200 or 406") {|x| [200, 406].include?(x)}
305
- end
306
-
307
- it "sets content type" do
308
- expect(last_response.content_type).to eq(last_response.status == 406 ? 'text/plain' : 'application/ld+json')
309
- end
310
-
311
- it "returns serialization" do
312
- if last_response.status == 406
313
- expect(last_response.body).to eq result
314
- else
315
- expect(JSON.parse(last_response.body)).to produce_jsonld(result, logger)
316
- end
317
- end
318
- end
319
- end
320
-
321
- context "with Link" do
322
- {
323
- "with context" => {
324
- accept: %(application/ld+json),
325
- link: %(<http://conneg.example.com/context> rel="http://www.w3.org/ns/json-ld#context"),
326
- result: LIBRARY_FLATTENED_COMPACTED
327
- },
328
- "compacted with context" => {
329
- accept: %(application/ld+json;profile=http://www.w3.org/ns/json-ld#compacted),
330
- link: %(<http://conneg.example.com/context> rel="http://www.w3.org/ns/json-ld#context"),
331
- result: LIBRARY_FLATTENED_COMPACTED
332
- },
333
- "flattened and compacted with context" => {
334
- accept: %(application/ld+json;profile="http://www.w3.org/ns/json-ld#flattened http://www.w3.org/ns/json-ld#compacted"),
335
- link: %(<http://conneg.example.com/context> rel="http://www.w3.org/ns/json-ld#context"),
336
- result: LIBRARY_FLATTENED_COMPACTED
337
- },
338
- "compacted and flattened with context" => {
339
- accept: %(application/ld+json;profile="http://www.w3.org/ns/json-ld#compacted http://www.w3.org/ns/json-ld#flattened"),
340
- link: %(<http://conneg.example.com/context> rel="http://www.w3.org/ns/json-ld#context"),
341
- result: LIBRARY_FLATTENED_COMPACTED
342
- },
343
- "framed with frame" => {
344
- accept: %(application/ld+json;profile=http://www.w3.org/ns/json-ld#framed),
345
- link: %(<http://conneg.example.com/frame> rel="http://www.w3.org/ns/json-ld#frame"),
346
- result: LIBRARY_FRAMED
347
- },
348
- }.each do |name, params|
349
- context name do
350
- before(:each) do
351
- get '/', {}, {"HTTP_ACCEPT" => params[:accept], "HTTP_LINK" => params[:link]}
352
- end
353
-
354
- it "status" do
355
- expect(last_response.status).to satisfy("be 200 or 406") {|x| [200, 406].include?(x)}
356
- end
357
-
358
- it "sets content type" do
359
- expect(last_response.content_type).to eq(last_response.status == 406 ? 'text/plain' : 'application/ld+json')
360
- end
361
-
362
- it "returns serialization" do
363
- if last_response.status == 406
364
- expect(last_response.body).to eq params[:result]
365
- else
366
- expect(JSON.parse(last_response.body)).to produce_jsonld(params[:result], logger)
367
- end
368
- end
369
- end
370
- end
371
- end
372
- end
373
- end