json-ld 3.0.0 → 3.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/lib/json/ld/api.rb +28 -16
- data/lib/json/ld/compact.rb +10 -9
- data/lib/json/ld/context.rb +3 -3
- data/lib/json/ld/expand.rb +1 -1
- data/lib/json/ld/extensions.rb +6 -6
- data/lib/json/ld/flatten.rb +3 -1
- data/lib/json/ld/frame.rb +10 -8
- data/lib/json/ld/from_rdf.rb +5 -3
- data/lib/json/ld/reader.rb +1 -1
- data/lib/json/ld/writer.rb +25 -15
- data/spec/api_spec.rb +3 -3
- data/spec/compact_spec.rb +7 -2
- data/spec/expand_spec.rb +30 -4
- data/spec/flatten_spec.rb +1 -1
- data/spec/frame_spec.rb +73 -86
- data/spec/from_rdf_spec.rb +88 -77
- data/spec/matchers.rb +20 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/streaming_writer_spec.rb +1 -1
- data/spec/suite_compact_spec.rb +7 -1
- data/spec/suite_expand_spec.rb +7 -1
- data/spec/suite_flatten_spec.rb +7 -2
- data/spec/suite_frame_spec.rb +8 -2
- data/spec/suite_from_rdf_spec.rb +7 -1
- data/spec/suite_helper.rb +42 -12
- data/spec/suite_remote_doc_spec.rb +7 -1
- data/spec/support/extensions.rb +31 -1
- data/spec/writer_spec.rb +8 -8
- metadata +4 -2
data/spec/api_spec.rb
CHANGED
@@ -81,17 +81,17 @@ describe JSON::LD::API do
|
|
81
81
|
options = {logger: logger, adapter: adapter}
|
82
82
|
options[:expandContext] = File.open(context) if context
|
83
83
|
jld = described_class.expand(File.open(filename), options)
|
84
|
-
expect(jld).to
|
84
|
+
expect(jld).to produce_jsonld(JSON.load(File.open(expanded)), logger)
|
85
85
|
end if File.exist?(expanded)
|
86
86
|
|
87
87
|
it "compacts" do
|
88
88
|
jld = described_class.compact(File.open(filename), File.open(context), adapter: adapter, logger: logger)
|
89
|
-
expect(jld).to
|
89
|
+
expect(jld).to produce_jsonld(JSON.load(File.open(compacted)), logger)
|
90
90
|
end if File.exist?(compacted) && File.exist?(context)
|
91
91
|
|
92
92
|
it "frame" do
|
93
93
|
jld = described_class.frame(File.open(filename), File.open(frame), adapter: adapter, logger: logger)
|
94
|
-
expect(jld).to
|
94
|
+
expect(jld).to produce_jsonld(JSON.load(File.open(framed)), logger)
|
95
95
|
end if File.exist?(framed) && File.exist?(frame)
|
96
96
|
|
97
97
|
it "toRdf" do
|
data/spec/compact_spec.rb
CHANGED
@@ -501,7 +501,7 @@ describe JSON::LD::API do
|
|
501
501
|
})
|
502
502
|
allow(JSON::LD::API).to receive(:documentLoader).with("http://example.com/context", anything).and_yield(remote_doc)
|
503
503
|
jld = JSON::LD::API.compact(input, "http://example.com/context", logger: logger, validate: true)
|
504
|
-
expect(jld).to
|
504
|
+
expect(jld).to produce_jsonld(expected, logger)
|
505
505
|
end
|
506
506
|
end
|
507
507
|
|
@@ -2237,7 +2237,12 @@ describe JSON::LD::API do
|
|
2237
2237
|
expect {JSON::LD::API.compact(input, context, params.merge(logger: logger))}.to raise_error(params[:exception])
|
2238
2238
|
else
|
2239
2239
|
jld = JSON::LD::API.compact(input, context, params.merge(logger: logger))
|
2240
|
-
expect(jld).to
|
2240
|
+
expect(jld).to produce_jsonld(output, logger)
|
2241
|
+
|
2242
|
+
# Compare expanded jld/output too to make sure list values remain ordered
|
2243
|
+
exp_jld = JSON::LD::API.expand(jld, processingMode: 'json-ld-1.1')
|
2244
|
+
exp_output = JSON::LD::API.expand(output, processingMode: 'json-ld-1.1')
|
2245
|
+
expect(exp_jld).to produce_jsonld(exp_output, logger)
|
2241
2246
|
end
|
2242
2247
|
end
|
2243
2248
|
end
|
data/spec/expand_spec.rb
CHANGED
@@ -96,6 +96,32 @@ describe JSON::LD::API do
|
|
96
96
|
it(title) {run_expand params}
|
97
97
|
end
|
98
98
|
|
99
|
+
context "default language" do
|
100
|
+
{
|
101
|
+
"base": {
|
102
|
+
input: %({
|
103
|
+
"http://example/foo": "bar"
|
104
|
+
}),
|
105
|
+
output: %([{
|
106
|
+
"http://example/foo": [{"@value": "bar", "@language": "en"}]
|
107
|
+
}]),
|
108
|
+
language: "en"
|
109
|
+
},
|
110
|
+
"override": {
|
111
|
+
input: %({
|
112
|
+
"@context": {"@language": null},
|
113
|
+
"http://example/foo": "bar"
|
114
|
+
}),
|
115
|
+
output: %([{
|
116
|
+
"http://example/foo": [{"@value": "bar"}]
|
117
|
+
}]),
|
118
|
+
language: "en"
|
119
|
+
}
|
120
|
+
}.each_pair do |title, params|
|
121
|
+
it(title) {run_expand params}
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
99
125
|
context "with relative IRIs" do
|
100
126
|
{
|
101
127
|
"base": {
|
@@ -2349,15 +2375,15 @@ describe JSON::LD::API do
|
|
2349
2375
|
end
|
2350
2376
|
|
2351
2377
|
def run_expand(params)
|
2352
|
-
input, output
|
2378
|
+
input, output = params[:input], params[:output]
|
2353
2379
|
input = ::JSON.parse(input) if input.is_a?(String)
|
2354
2380
|
output = ::JSON.parse(output) if output.is_a?(String)
|
2355
2381
|
pending params.fetch(:pending, "test implementation") unless input
|
2356
2382
|
if params[:exception]
|
2357
|
-
expect {JSON::LD::API.expand(input,
|
2383
|
+
expect {JSON::LD::API.expand(input, params)}.to raise_error(params[:exception])
|
2358
2384
|
else
|
2359
|
-
jld = JSON::LD::API.expand(input,
|
2360
|
-
expect(jld).to
|
2385
|
+
jld = JSON::LD::API.expand(input, {logger: logger}.merge(params))
|
2386
|
+
expect(jld).to produce_jsonld(output, logger)
|
2361
2387
|
end
|
2362
2388
|
end
|
2363
2389
|
end
|
data/spec/flatten_spec.rb
CHANGED
@@ -294,7 +294,7 @@ describe JSON::LD::API do
|
|
294
294
|
expect {JSON::LD::API.flatten(input, context, params.merge(logger: logger))}.to raise_error(params[:exception])
|
295
295
|
else
|
296
296
|
jld = JSON::LD::API.flatten(input, context, params.merge(logger: logger))
|
297
|
-
expect(jld).to
|
297
|
+
expect(jld).to produce_jsonld(output, logger)
|
298
298
|
end
|
299
299
|
end
|
300
300
|
end
|
data/spec/frame_spec.rb
CHANGED
@@ -652,20 +652,18 @@ describe JSON::LD::API do
|
|
652
652
|
"query": {"@id": "mq:query", "@type": "@id"},
|
653
653
|
"result": {"@id": "mf:result", "@type": "xsd:boolean"}
|
654
654
|
},
|
655
|
-
"@
|
656
|
-
|
657
|
-
|
658
|
-
"
|
659
|
-
|
660
|
-
"
|
661
|
-
|
662
|
-
|
663
|
-
|
664
|
-
|
665
|
-
|
666
|
-
|
667
|
-
"name": "Test 0001"
|
668
|
-
}]
|
655
|
+
"@type": "mf:Manifest",
|
656
|
+
"comment": "Positive processor tests",
|
657
|
+
"entries": [{
|
658
|
+
"@type": "mf:ManifestEntry",
|
659
|
+
"action": {
|
660
|
+
"@type": "mq:QueryTest",
|
661
|
+
"data": "http://www.w3.org/TR/microdata-rdf/tests/0001.html",
|
662
|
+
"query": "http://www.w3.org/TR/microdata-rdf/tests/0001.ttl"
|
663
|
+
},
|
664
|
+
"comment": "Item with no itemtype and literal itemprop",
|
665
|
+
"mf:result": "true",
|
666
|
+
"name": "Test 0001"
|
669
667
|
}]
|
670
668
|
}),
|
671
669
|
processingMode: 'json-ld-1.1'
|
@@ -815,7 +813,7 @@ describe JSON::LD::API do
|
|
815
813
|
frame = ::JSON.parse(frame) if frame.is_a?(String)
|
816
814
|
output = ::JSON.parse(output) if output.is_a?(String)
|
817
815
|
jld = JSON::LD::API.frame(input, frame, logger: logger)
|
818
|
-
expect(jld).to
|
816
|
+
expect(jld).to produce_jsonld(output, logger)
|
819
817
|
rescue JSON::LD::JsonLdError => e
|
820
818
|
fail("#{e.class}: #{e.message}\n" +
|
821
819
|
"#{logger}\n" +
|
@@ -1129,11 +1127,9 @@ describe JSON::LD::API do
|
|
1129
1127
|
}),
|
1130
1128
|
output: %({
|
1131
1129
|
"@context": {"@vocab": "urn:"},
|
1132
|
-
"@
|
1133
|
-
|
1134
|
-
|
1135
|
-
"preserve": {}
|
1136
|
-
}]
|
1130
|
+
"@id": "urn:id-1",
|
1131
|
+
"@type": "Class",
|
1132
|
+
"preserve": {}
|
1137
1133
|
}),
|
1138
1134
|
processingMode: 'json-ld-1.1'
|
1139
1135
|
},
|
@@ -1157,17 +1153,15 @@ describe JSON::LD::API do
|
|
1157
1153
|
}),
|
1158
1154
|
output: %({
|
1159
1155
|
"@context": {"@vocab": "urn:"},
|
1160
|
-
"@
|
1161
|
-
|
1162
|
-
|
1163
|
-
"
|
1164
|
-
|
1165
|
-
"@
|
1166
|
-
|
1167
|
-
"term": "data"
|
1168
|
-
}
|
1156
|
+
"@id": "urn:id-1",
|
1157
|
+
"@type": "Class",
|
1158
|
+
"preserve": {
|
1159
|
+
"@id": "urn:gr-1",
|
1160
|
+
"@graph": {
|
1161
|
+
"@id": "urn:id-2",
|
1162
|
+
"term": "data"
|
1169
1163
|
}
|
1170
|
-
}
|
1164
|
+
}
|
1171
1165
|
}),
|
1172
1166
|
processingMode: 'json-ld-1.1'
|
1173
1167
|
},
|
@@ -1200,21 +1194,19 @@ describe JSON::LD::API do
|
|
1200
1194
|
}),
|
1201
1195
|
output: %({
|
1202
1196
|
"@context": {"@vocab": "urn:"},
|
1203
|
-
"@
|
1204
|
-
|
1205
|
-
|
1206
|
-
"
|
1207
|
-
|
1208
|
-
|
1209
|
-
|
1210
|
-
"
|
1211
|
-
|
1212
|
-
"@
|
1213
|
-
|
1214
|
-
"term": "bar"
|
1215
|
-
}
|
1197
|
+
"@id": "urn:id-1",
|
1198
|
+
"@type": "Class",
|
1199
|
+
"merge": {
|
1200
|
+
"@id": "urn:id-2",
|
1201
|
+
"term": "foo"
|
1202
|
+
},
|
1203
|
+
"preserve": {
|
1204
|
+
"@id": "urn:graph-1",
|
1205
|
+
"@graph": {
|
1206
|
+
"@id": "urn:id-3",
|
1207
|
+
"term": "bar"
|
1216
1208
|
}
|
1217
|
-
}
|
1209
|
+
}
|
1218
1210
|
}),
|
1219
1211
|
processingMode: 'json-ld-1.1'
|
1220
1212
|
},
|
@@ -1250,22 +1242,20 @@ describe JSON::LD::API do
|
|
1250
1242
|
}),
|
1251
1243
|
output: %({
|
1252
1244
|
"@context": {"@vocab": "urn:"},
|
1253
|
-
"@
|
1254
|
-
|
1255
|
-
|
1256
|
-
"
|
1257
|
-
|
1258
|
-
|
1259
|
-
|
1260
|
-
"
|
1261
|
-
"
|
1262
|
-
"@
|
1263
|
-
|
1264
|
-
"term": "bar"
|
1265
|
-
}
|
1245
|
+
"@id": "urn:id-1",
|
1246
|
+
"@type": "Class",
|
1247
|
+
"merge": {
|
1248
|
+
"@id": "urn:id-2",
|
1249
|
+
"term": "foo"
|
1250
|
+
},
|
1251
|
+
"preserve": {
|
1252
|
+
"deep": {
|
1253
|
+
"@graph": {
|
1254
|
+
"@id": "urn:id-3",
|
1255
|
+
"term": "bar"
|
1266
1256
|
}
|
1267
1257
|
}
|
1268
|
-
}
|
1258
|
+
}
|
1269
1259
|
}),
|
1270
1260
|
processingMode: 'json-ld-1.1'
|
1271
1261
|
},
|
@@ -1301,28 +1291,24 @@ describe JSON::LD::API do
|
|
1301
1291
|
}),
|
1302
1292
|
output: %({
|
1303
1293
|
"@context": {"@vocab": "http://example.org/"},
|
1304
|
-
"@
|
1305
|
-
|
1306
|
-
|
1307
|
-
|
1308
|
-
|
1294
|
+
"@id": "http://example.org/library",
|
1295
|
+
"@type": "Library",
|
1296
|
+
"name": "Library",
|
1297
|
+
"contains": {
|
1298
|
+
"@id": "http://example.org/graphs/books",
|
1299
|
+
"@graph": {
|
1300
|
+
"@id": "http://example.org/library/the-republic",
|
1301
|
+
"@type": "Book",
|
1302
|
+
"creator": "Plato",
|
1303
|
+
"title": "The Republic",
|
1309
1304
|
"contains": {
|
1310
|
-
"@id": "http://example.org/
|
1311
|
-
"@
|
1312
|
-
|
1313
|
-
|
1314
|
-
"creator": "Plato",
|
1315
|
-
"title": "The Republic",
|
1316
|
-
"contains": {
|
1317
|
-
"@id": "http://example.org/library/the-republic#introduction",
|
1318
|
-
"@type": "Chapter",
|
1319
|
-
"description": "An introductory chapter on The Republic.",
|
1320
|
-
"title": "The Introduction"
|
1321
|
-
}
|
1322
|
-
}
|
1305
|
+
"@id": "http://example.org/library/the-republic#introduction",
|
1306
|
+
"@type": "Chapter",
|
1307
|
+
"description": "An introductory chapter on The Republic.",
|
1308
|
+
"title": "The Introduction"
|
1323
1309
|
}
|
1324
1310
|
}
|
1325
|
-
|
1311
|
+
}
|
1326
1312
|
}),
|
1327
1313
|
processingMode: 'json-ld-1.1'
|
1328
1314
|
}
|
@@ -1523,14 +1509,10 @@ describe JSON::LD::API do
|
|
1523
1509
|
},
|
1524
1510
|
"id": "@id"
|
1525
1511
|
},
|
1526
|
-
"
|
1527
|
-
|
1528
|
-
|
1529
|
-
|
1530
|
-
"test": "foo"
|
1531
|
-
}
|
1532
|
-
}
|
1533
|
-
]
|
1512
|
+
"claim": {
|
1513
|
+
"id": "ex:1",
|
1514
|
+
"test": "foo"
|
1515
|
+
}
|
1534
1516
|
})
|
1535
1517
|
do_frame(input: input, frame: frame, output: expected, processingMode: 'json-ld-1.1')
|
1536
1518
|
end
|
@@ -1708,7 +1690,12 @@ describe JSON::LD::API do
|
|
1708
1690
|
frame = ::JSON.parse(frame) if frame.is_a?(String)
|
1709
1691
|
output = ::JSON.parse(output) if output.is_a?(String)
|
1710
1692
|
jld = JSON::LD::API.frame(input, frame, logger: logger, processingMode: processingMode)
|
1711
|
-
expect(jld).to
|
1693
|
+
expect(jld).to produce_jsonld(output, logger)
|
1694
|
+
|
1695
|
+
# Compare expanded jld/output too to make sure list values remain ordered
|
1696
|
+
exp_jld = JSON::LD::API.expand(jld, processingMode: 'json-ld-1.1')
|
1697
|
+
exp_output = JSON::LD::API.expand(output, processingMode: 'json-ld-1.1')
|
1698
|
+
expect(exp_jld).to produce_jsonld(exp_output, logger)
|
1712
1699
|
rescue JSON::LD::JsonLdError => e
|
1713
1700
|
fail("#{e.class}: #{e.message}\n" +
|
1714
1701
|
"#{logger}\n" +
|
data/spec/from_rdf_spec.rb
CHANGED
@@ -9,7 +9,7 @@ describe JSON::LD::API do
|
|
9
9
|
context "simple tests" do
|
10
10
|
it "One subject IRI object" do
|
11
11
|
input = %(<http://a/b> <http://a/c> <http://a/d> .)
|
12
|
-
expect(serialize(input)).to
|
12
|
+
expect(serialize(input)).to produce_jsonld([
|
13
13
|
{
|
14
14
|
'@id' => "http://a/b",
|
15
15
|
"http://a/c" => [{"@id" => "http://a/d"}]
|
@@ -20,7 +20,7 @@ describe JSON::LD::API do
|
|
20
20
|
it "should generate object list" do
|
21
21
|
input = %(@prefix : <http://example.com/> . :b :c :d, :e .)
|
22
22
|
expect(serialize(input)).
|
23
|
-
to
|
23
|
+
to produce_jsonld([{
|
24
24
|
'@id' => "http://example.com/b",
|
25
25
|
"http://example.com/c" => [
|
26
26
|
{"@id" => "http://example.com/d"},
|
@@ -33,7 +33,7 @@ describe JSON::LD::API do
|
|
33
33
|
it "should generate property list" do
|
34
34
|
input = %(@prefix : <http://example.com/> . :b :c :d; :e :f .)
|
35
35
|
expect(serialize(input)).
|
36
|
-
to
|
36
|
+
to produce_jsonld([{
|
37
37
|
'@id' => "http://example.com/b",
|
38
38
|
"http://example.com/c" => [{"@id" => "http://example.com/d"}],
|
39
39
|
"http://example.com/e" => [{"@id" => "http://example.com/f"}]
|
@@ -49,7 +49,7 @@ describe JSON::LD::API do
|
|
49
49
|
<test-cases/0002> a :TestCase .
|
50
50
|
)
|
51
51
|
expect(serialize(input)).
|
52
|
-
to
|
52
|
+
to produce_jsonld([
|
53
53
|
{'@id' => "test-cases/0001", '@type' => ["http://www.w3.org/2006/03/test-description#TestCase"]},
|
54
54
|
{'@id' => "test-cases/0002", '@type' => ["http://www.w3.org/2006/03/test-description#TestCase"]},
|
55
55
|
], logger)
|
@@ -60,7 +60,7 @@ describe JSON::LD::API do
|
|
60
60
|
context "coercion" do
|
61
61
|
it "typed literal" do
|
62
62
|
input = %(@prefix ex: <http://example.com/> . ex:a ex:b "foo"^^ex:d .)
|
63
|
-
expect(serialize(input)).to
|
63
|
+
expect(serialize(input)).to produce_jsonld([
|
64
64
|
{
|
65
65
|
'@id' => "http://example.com/a",
|
66
66
|
"http://example.com/b" => [{"@value" => "foo", "@type" => "http://example.com/d"}]
|
@@ -70,7 +70,7 @@ describe JSON::LD::API do
|
|
70
70
|
|
71
71
|
it "integer" do
|
72
72
|
input = %(@prefix ex: <http://example.com/> . ex:a ex:b 1 .)
|
73
|
-
expect(serialize(input, useNativeTypes: true)).to
|
73
|
+
expect(serialize(input, useNativeTypes: true)).to produce_jsonld([{
|
74
74
|
'@id' => "http://example.com/a",
|
75
75
|
"http://example.com/b" => [{"@value" => 1}]
|
76
76
|
}], logger)
|
@@ -78,7 +78,7 @@ describe JSON::LD::API do
|
|
78
78
|
|
79
79
|
it "integer (non-native)" do
|
80
80
|
input = %(@prefix ex: <http://example.com/> . ex:a ex:b 1 .)
|
81
|
-
expect(serialize(input, useNativeTypes: false)).to
|
81
|
+
expect(serialize(input, useNativeTypes: false)).to produce_jsonld([{
|
82
82
|
'@id' => "http://example.com/a",
|
83
83
|
"http://example.com/b" => [{"@value" => "1","@type" => "http://www.w3.org/2001/XMLSchema#integer"}]
|
84
84
|
}], logger)
|
@@ -86,7 +86,7 @@ describe JSON::LD::API do
|
|
86
86
|
|
87
87
|
it "boolean" do
|
88
88
|
input = %(@prefix ex: <http://example.com/> . ex:a ex:b true .)
|
89
|
-
expect(serialize(input, useNativeTypes: true)).to
|
89
|
+
expect(serialize(input, useNativeTypes: true)).to produce_jsonld([{
|
90
90
|
'@id' => "http://example.com/a",
|
91
91
|
"http://example.com/b" => [{"@value" => true}]
|
92
92
|
}], logger)
|
@@ -94,7 +94,7 @@ describe JSON::LD::API do
|
|
94
94
|
|
95
95
|
it "boolean (non-native)" do
|
96
96
|
input = %(@prefix ex: <http://example.com/> . ex:a ex:b true .)
|
97
|
-
expect(serialize(input, useNativeTypes: false)).to
|
97
|
+
expect(serialize(input, useNativeTypes: false)).to produce_jsonld([{
|
98
98
|
'@id' => "http://example.com/a",
|
99
99
|
"http://example.com/b" => [{"@value" => "true","@type" => "http://www.w3.org/2001/XMLSchema#boolean"}]
|
100
100
|
}], logger)
|
@@ -102,7 +102,7 @@ describe JSON::LD::API do
|
|
102
102
|
|
103
103
|
it "decmal" do
|
104
104
|
input = %(@prefix ex: <http://example.com/> . ex:a ex:b 1.0 .)
|
105
|
-
expect(serialize(input, useNativeTypes: true)).to
|
105
|
+
expect(serialize(input, useNativeTypes: true)).to produce_jsonld([{
|
106
106
|
'@id' => "http://example.com/a",
|
107
107
|
"http://example.com/b" => [{"@value" => "1.0", "@type" => "http://www.w3.org/2001/XMLSchema#decimal"}]
|
108
108
|
}], logger)
|
@@ -110,7 +110,7 @@ describe JSON::LD::API do
|
|
110
110
|
|
111
111
|
it "double" do
|
112
112
|
input = %(@prefix ex: <http://example.com/> . ex:a ex:b 1.0e0 .)
|
113
|
-
expect(serialize(input, useNativeTypes: true)).to
|
113
|
+
expect(serialize(input, useNativeTypes: true)).to produce_jsonld([{
|
114
114
|
'@id' => "http://example.com/a",
|
115
115
|
"http://example.com/b" => [{"@value" => 1.0E0}]
|
116
116
|
}], logger)
|
@@ -118,7 +118,7 @@ describe JSON::LD::API do
|
|
118
118
|
|
119
119
|
it "double (non-native)" do
|
120
120
|
input = %(@prefix ex: <http://example.com/> . ex:a ex:b 1.0e0 .)
|
121
|
-
expect(serialize(input, useNativeTypes: false)).to
|
121
|
+
expect(serialize(input, useNativeTypes: false)).to produce_jsonld([{
|
122
122
|
'@id' => "http://example.com/a",
|
123
123
|
"http://example.com/b" => [{"@value" => "1.0E0","@type" => "http://www.w3.org/2001/XMLSchema#double"}]
|
124
124
|
}], logger)
|
@@ -140,7 +140,7 @@ describe JSON::LD::API do
|
|
140
140
|
@prefix ex: <http://example.com/> .
|
141
141
|
ex:a ex:b "#{v}"^^xsd:#{t} .
|
142
142
|
)
|
143
|
-
expect(serialize(input, useNativeTypes: false)).to
|
143
|
+
expect(serialize(input, useNativeTypes: false)).to produce_jsonld([{
|
144
144
|
'@id' => "http://example.com/a",
|
145
145
|
"http://example.com/b" => [{"@value" => "#{v}","@type" => "http://www.w3.org/2001/XMLSchema##{t}"}]
|
146
146
|
}], logger)
|
@@ -150,7 +150,7 @@ describe JSON::LD::API do
|
|
150
150
|
|
151
151
|
it "encodes language literal" do
|
152
152
|
input = %(@prefix ex: <http://example.com/> . ex:a ex:b "foo"@en-us .)
|
153
|
-
expect(serialize(input)).to
|
153
|
+
expect(serialize(input)).to produce_jsonld([{
|
154
154
|
'@id' => "http://example.com/a",
|
155
155
|
"http://example.com/b" => [{"@value" => "foo", "@language" => "en-us"}]
|
156
156
|
}], logger)
|
@@ -160,7 +160,7 @@ describe JSON::LD::API do
|
|
160
160
|
context "anons" do
|
161
161
|
it "should generate bare anon" do
|
162
162
|
input = %(@prefix : <http://example.com/> . _:a :a :b .)
|
163
|
-
expect(serialize(input)).to
|
163
|
+
expect(serialize(input)).to produce_jsonld([
|
164
164
|
{
|
165
165
|
"@id" => "_:a",
|
166
166
|
"http://example.com/a" => [{"@id" => "http://example.com/b"}]
|
@@ -170,7 +170,7 @@ describe JSON::LD::API do
|
|
170
170
|
|
171
171
|
it "should generate anon as object" do
|
172
172
|
input = %(@prefix : <http://example.com/> . :a :b _:a . _:a :c :d .)
|
173
|
-
expect(serialize(input)).to
|
173
|
+
expect(serialize(input)).to produce_jsonld([
|
174
174
|
{
|
175
175
|
"@id" => "_:a",
|
176
176
|
"http://example.com/c" => [{"@id" => "http://example.com/d"}]
|
@@ -185,13 +185,13 @@ describe JSON::LD::API do
|
|
185
185
|
|
186
186
|
context "lists" do
|
187
187
|
{
|
188
|
-
"literal list" =>
|
189
|
-
%q(
|
188
|
+
"literal list" => {
|
189
|
+
input: %q(
|
190
190
|
@prefix : <http://example.com/> .
|
191
191
|
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
|
192
192
|
:a :b ("apple" "banana") .
|
193
193
|
),
|
194
|
-
[{
|
194
|
+
output: [{
|
195
195
|
'@id' => "http://example.com/a",
|
196
196
|
"http://example.com/b" => [{
|
197
197
|
"@list" => [
|
@@ -200,10 +200,10 @@ describe JSON::LD::API do
|
|
200
200
|
]
|
201
201
|
}]
|
202
202
|
}]
|
203
|
-
|
204
|
-
"iri list" =>
|
205
|
-
%q(@prefix : <http://example.com/> . :a :b (:c) .),
|
206
|
-
[{
|
203
|
+
},
|
204
|
+
"iri list" => {
|
205
|
+
input: %q(@prefix : <http://example.com/> . :a :b (:c) .),
|
206
|
+
output: [{
|
207
207
|
'@id' => "http://example.com/a",
|
208
208
|
"http://example.com/b" => [{
|
209
209
|
"@list" => [
|
@@ -211,24 +211,24 @@ describe JSON::LD::API do
|
|
211
211
|
]
|
212
212
|
}]
|
213
213
|
}]
|
214
|
-
|
215
|
-
"empty list" =>
|
216
|
-
%q(@prefix : <http://example.com/> . :a :b () .),
|
217
|
-
[{
|
214
|
+
},
|
215
|
+
"empty list" => {
|
216
|
+
input: %q(@prefix : <http://example.com/> . :a :b () .),
|
217
|
+
output: [{
|
218
218
|
'@id' => "http://example.com/a",
|
219
219
|
"http://example.com/b" => [{"@list" => []}]
|
220
220
|
}]
|
221
|
-
|
222
|
-
"single element list" =>
|
223
|
-
%q(@prefix : <http://example.com/> . :a :b ( "apple" ) .),
|
224
|
-
[{
|
221
|
+
},
|
222
|
+
"single element list" => {
|
223
|
+
input: %q(@prefix : <http://example.com/> . :a :b ( "apple" ) .),
|
224
|
+
output: [{
|
225
225
|
'@id' => "http://example.com/a",
|
226
226
|
"http://example.com/b" => [{"@list" => [{"@value" => "apple"}]}]
|
227
227
|
}]
|
228
|
-
|
229
|
-
"single element list without @type" =>
|
230
|
-
%q(@prefix : <http://example.com/> . :a :b ( _:a ) . _:a :b "foo" .),
|
231
|
-
[
|
228
|
+
},
|
229
|
+
"single element list without @type" => {
|
230
|
+
input: %q(@prefix : <http://example.com/> . :a :b ( _:a ) . _:a :b "foo" .),
|
231
|
+
output: [
|
232
232
|
{
|
233
233
|
'@id' => "_:a",
|
234
234
|
"http://example.com/b" => [{"@value" => "foo"}]
|
@@ -238,9 +238,9 @@ describe JSON::LD::API do
|
|
238
238
|
"http://example.com/b" => [{"@list" => [{"@id" => "_:a"}]}]
|
239
239
|
},
|
240
240
|
]
|
241
|
-
|
242
|
-
"multiple graphs with shared BNode" =>
|
243
|
-
%q(
|
241
|
+
},
|
242
|
+
"multiple graphs with shared BNode" => {
|
243
|
+
input: %q(
|
244
244
|
<http://www.example.com/z> <http://www.example.com/q> _:z0 <http://www.example.com/G> .
|
245
245
|
_:z0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "cell-A" <http://www.example.com/G> .
|
246
246
|
_:z0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:z1 <http://www.example.com/G> .
|
@@ -248,7 +248,7 @@ describe JSON::LD::API do
|
|
248
248
|
_:z1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> <http://www.example.com/G> .
|
249
249
|
<http://www.example.com/x> <http://www.example.com/p> _:z1 <http://www.example.com/G1> .
|
250
250
|
),
|
251
|
-
[{
|
251
|
+
output: [{
|
252
252
|
"@id" => "http://www.example.com/G",
|
253
253
|
"@graph" => [{
|
254
254
|
"@id" => "_:z0",
|
@@ -270,10 +270,10 @@ describe JSON::LD::API do
|
|
270
270
|
"http://www.example.com/p" => [{"@id" => "_:z1"}]
|
271
271
|
}]
|
272
272
|
}],
|
273
|
-
RDF::NQuads::Reader
|
274
|
-
|
275
|
-
"multiple graphs with shared BNode (at head)" =>
|
276
|
-
%q(
|
273
|
+
reader: RDF::NQuads::Reader
|
274
|
+
},
|
275
|
+
"multiple graphs with shared BNode (at head)" => {
|
276
|
+
input: %q(
|
277
277
|
<http://www.example.com/z> <http://www.example.com/q> _:z0 <http://www.example.com/G> .
|
278
278
|
_:z0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "cell-A" <http://www.example.com/G> .
|
279
279
|
_:z0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:z1 <http://www.example.com/G> .
|
@@ -281,7 +281,7 @@ describe JSON::LD::API do
|
|
281
281
|
_:z1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> <http://www.example.com/G> .
|
282
282
|
<http://www.example.com/z> <http://www.example.com/q> _:z0 <http://www.example.com/G1> .
|
283
283
|
),
|
284
|
-
[{
|
284
|
+
output: [{
|
285
285
|
"@id" => "http://www.example.com/G",
|
286
286
|
"@graph" => [{
|
287
287
|
"@id" => "_:z0",
|
@@ -299,33 +299,33 @@ describe JSON::LD::API do
|
|
299
299
|
"http://www.example.com/q" => [{"@id" => "_:z0"}]
|
300
300
|
}]
|
301
301
|
}],
|
302
|
-
RDF::NQuads::Reader
|
303
|
-
|
304
|
-
"@list containing empty @list" =>
|
305
|
-
%(
|
302
|
+
reader: RDF::NQuads::Reader
|
303
|
+
},
|
304
|
+
"@list containing empty @list" => {
|
305
|
+
input: %(
|
306
306
|
<http://example.com/a> <http://example.com/property> (()) .
|
307
307
|
),
|
308
|
-
|
308
|
+
output: %([{
|
309
309
|
"@id": "http://example.com/a",
|
310
310
|
"http://example.com/property": [{"@list": [{"@list": []}]}]
|
311
|
-
}])
|
312
|
-
RDF::Turtle::Reader
|
313
|
-
|
314
|
-
"@list containing multiple lists" =>
|
315
|
-
%(
|
311
|
+
}]),
|
312
|
+
reader: RDF::Turtle::Reader
|
313
|
+
},
|
314
|
+
"@list containing multiple lists" => {
|
315
|
+
input: %(
|
316
316
|
<http://example.com/a> <http://example.com/property> (("a") ("b")) .
|
317
317
|
),
|
318
|
-
|
318
|
+
output: %([{
|
319
319
|
"@id": "http://example.com/a",
|
320
320
|
"http://example.com/property": [{"@list": [
|
321
321
|
{"@list": [{"@value": "a"}]},
|
322
322
|
{"@list": [{"@value": "b"}]}
|
323
323
|
]}]
|
324
|
-
}])
|
325
|
-
RDF::Turtle::Reader
|
326
|
-
|
327
|
-
"0008a" =>
|
328
|
-
%(
|
324
|
+
}]),
|
325
|
+
reader: RDF::Turtle::Reader
|
326
|
+
},
|
327
|
+
"0008a" => {
|
328
|
+
input: %(
|
329
329
|
<http://example.com> <http://example.com/property> _:outerlist .
|
330
330
|
_:outerlist <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> _:lista .
|
331
331
|
_:outerlist <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b0 .
|
@@ -355,7 +355,7 @@ describe JSON::LD::API do
|
|
355
355
|
_:b3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "b3" .
|
356
356
|
_:b3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
|
357
357
|
),
|
358
|
-
JSON.parse(%([
|
358
|
+
output: JSON.parse(%([
|
359
359
|
{
|
360
360
|
"@id": "http://example.com",
|
361
361
|
"http://example.com/property": [
|
@@ -369,12 +369,11 @@ describe JSON::LD::API do
|
|
369
369
|
]
|
370
370
|
}
|
371
371
|
])),
|
372
|
-
RDF::NQuads::Reader
|
373
|
-
|
374
|
-
}.each do |name,
|
375
|
-
it name do
|
376
|
-
|
377
|
-
expect(r).to produce(output, logger)
|
372
|
+
reader: RDF::NQuads::Reader
|
373
|
+
}
|
374
|
+
}.each do |name, params|
|
375
|
+
it "#{name}" do
|
376
|
+
do_fromRdf(params)
|
378
377
|
end
|
379
378
|
end
|
380
379
|
end
|
@@ -465,33 +464,32 @@ describe JSON::LD::API do
|
|
465
464
|
}
|
466
465
|
]
|
467
466
|
},
|
468
|
-
}.each_pair do |name,
|
469
|
-
it name do
|
470
|
-
|
471
|
-
expect(r).to produce(properties[:output], logger)
|
467
|
+
}.each_pair do |name, params|
|
468
|
+
it "#{name}" do
|
469
|
+
do_fromRdf(params.merge(reader: RDF::NQuads::Reader))
|
472
470
|
end
|
473
471
|
end
|
474
472
|
end
|
475
473
|
|
476
474
|
context "problems" do
|
477
475
|
{
|
478
|
-
"xsd:boolean as value" =>
|
479
|
-
%(
|
476
|
+
"xsd:boolean as value" => {
|
477
|
+
input: %(
|
480
478
|
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
481
479
|
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
|
482
480
|
|
483
481
|
<http://data.wikia.com/terms#playable> rdfs:range xsd:boolean .
|
484
482
|
),
|
485
|
-
[{
|
483
|
+
output: [{
|
486
484
|
"@id" => "http://data.wikia.com/terms#playable",
|
487
485
|
"http://www.w3.org/2000/01/rdf-schema#range" => [
|
488
486
|
{ "@id" => "http://www.w3.org/2001/XMLSchema#boolean" }
|
489
487
|
]
|
490
488
|
}]
|
491
|
-
|
492
|
-
}.each do |t,
|
489
|
+
},
|
490
|
+
}.each do |t, params|
|
493
491
|
it "#{t}" do
|
494
|
-
|
492
|
+
do_fromRdf(params)
|
495
493
|
end
|
496
494
|
end
|
497
495
|
end
|
@@ -510,4 +508,17 @@ describe JSON::LD::API do
|
|
510
508
|
statements = g.each_statement.to_a
|
511
509
|
JSON::LD::API.fromRdf(statements, logger: logger, **options)
|
512
510
|
end
|
511
|
+
|
512
|
+
def do_fromRdf(params)
|
513
|
+
begin
|
514
|
+
input, output, processingMode = params[:input], params[:output], params.fetch(:processingMode, 'json-ld-1.0')
|
515
|
+
output = ::JSON.parse(output) if output.is_a?(String)
|
516
|
+
jld = serialize(input, **params)
|
517
|
+
expect(jld).to produce_jsonld(output, logger)
|
518
|
+
rescue JSON::LD::JsonLdError => e
|
519
|
+
fail("#{e.class}: #{e.message}\n" +
|
520
|
+
"#{logger}\n" +
|
521
|
+
"Backtrace:\n#{e.backtrace.join("\n")}")
|
522
|
+
end
|
523
|
+
end
|
513
524
|
end
|