json-ld 3.2.1 → 3.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +4 -5
- data/VERSION +1 -1
- data/lib/json/ld/api.rb +53 -16
- data/lib/json/ld/reader.rb +1 -1
- data/lib/json/ld/streaming_reader.rb +2 -1
- data/lib/json/ld/to_rdf.rb +1 -1
- data/lib/json/ld/writer.rb +8 -9
- data/lib/json/ld.rb +3 -0
- data/spec/api_spec.rb +67 -19
- data/spec/format_spec.rb +2 -2
- data/spec/frame_spec.rb +25 -1
- data/spec/suite_helper.rb +1 -0
- data/spec/test-files/{test-1-compacted.json → test-1-compacted.jsonld} +0 -0
- data/spec/test-files/{test-1-context.json → test-1-context.jsonld} +0 -0
- data/spec/test-files/{test-1-expanded.json → test-1-expanded.jsonld} +0 -0
- data/spec/test-files/{test-1-input.json → test-1-input.jsonld} +0 -0
- data/spec/test-files/{test-2-compacted.json → test-2-compacted.jsonld} +0 -0
- data/spec/test-files/{test-2-context.json → test-2-context.jsonld} +0 -0
- data/spec/test-files/{test-2-expanded.json → test-2-expanded.jsonld} +0 -0
- data/spec/test-files/{test-2-input.json → test-2-input.jsonld} +0 -0
- data/spec/test-files/{test-3-compacted.json → test-3-compacted.jsonld} +0 -0
- data/spec/test-files/{test-3-context.json → test-3-context.jsonld} +0 -0
- data/spec/test-files/{test-3-expanded.json → test-3-expanded.jsonld} +0 -0
- data/spec/test-files/{test-3-input.json → test-3-input.jsonld} +0 -0
- data/spec/test-files/{test-4-compacted.json → test-4-compacted.jsonld} +0 -0
- data/spec/test-files/{test-4-context.json → test-4-context.jsonld} +0 -0
- data/spec/test-files/{test-4-expanded.json → test-4-expanded.jsonld} +0 -0
- data/spec/test-files/{test-4-input.json → test-4-input.jsonld} +0 -0
- data/spec/test-files/{test-5-compacted.json → test-5-compacted.jsonld} +0 -0
- data/spec/test-files/{test-5-context.json → test-5-context.jsonld} +0 -0
- data/spec/test-files/{test-5-expanded.json → test-5-expanded.jsonld} +0 -0
- data/spec/test-files/{test-5-input.json → test-5-input.jsonld} +0 -0
- data/spec/test-files/{test-6-compacted.json → test-6-compacted.jsonld} +0 -0
- data/spec/test-files/{test-6-context.json → test-6-context.jsonld} +0 -0
- data/spec/test-files/{test-6-expanded.json → test-6-expanded.jsonld} +0 -0
- data/spec/test-files/{test-6-input.json → test-6-input.jsonld} +0 -0
- data/spec/test-files/{test-7-compacted.json → test-7-compacted.jsonld} +0 -0
- data/spec/test-files/{test-7-context.json → test-7-context.jsonld} +0 -0
- data/spec/test-files/{test-7-expanded.json → test-7-expanded.jsonld} +0 -0
- data/spec/test-files/{test-7-input.json → test-7-input.jsonld} +0 -0
- data/spec/test-files/{test-8-compacted.json → test-8-compacted.jsonld} +0 -0
- data/spec/test-files/{test-8-context.json → test-8-context.jsonld} +0 -0
- data/spec/test-files/{test-8-expanded.json → test-8-expanded.jsonld} +0 -0
- data/spec/test-files/{test-8-frame.json → test-8-frame.jsonld} +0 -0
- data/spec/test-files/{test-8-framed.json → test-8-framed.jsonld} +0 -0
- data/spec/test-files/{test-8-input.json → test-8-input.jsonld} +0 -0
- data/spec/test-files/{test-9-compacted.json → test-9-compacted.jsonld} +0 -0
- data/spec/test-files/{test-9-context.json → test-9-context.jsonld} +0 -0
- data/spec/test-files/{test-9-expanded.json → test-9-expanded.jsonld} +0 -0
- data/spec/test-files/{test-9-input.json → test-9-input.jsonld} +0 -0
- metadata +78 -84
- data/spec/test-files/test-1-normalized.json +0 -8
- data/spec/test-files/test-2-normalized.json +0 -32
- data/spec/test-files/test-3-normalized.json +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 63c237710b5f32fe8037a11969feaf712a79f68a4d1d568a89ece1a5d1d26ff2
|
4
|
+
data.tar.gz: cac81da94266cac30a7e31e5018477ef55e52b6b1701b048214947f266439236
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 440da082cc1cbabcd69e8cb3d34858c4fe8fd96b116c0d67651d5ce7338d6e787f9d00451ff1f730d08982f0d8697d097f51d09d033ff7f8e290252006f96c78
|
7
|
+
data.tar.gz: 0b877d9d96857964a4913aef1790aa04dc98f83676ec0154c016ad05e7a9dc0a22b1b3bd31ae785cfb4447ac6914291ac56d42f5dc6781fc58c6687ccd4d15cd
|
data/README.md
CHANGED
@@ -32,10 +32,10 @@ This gem also implements an optimized streaming writer used for generating JSON-
|
|
32
32
|
* Each statement written as a separate node in expanded/flattened form.
|
33
33
|
* `RDF List`s are written as separate nodes using `rdf:first` and `rdf:rest` properties.
|
34
34
|
|
35
|
-
The order of triples retrieved from the `RDF::Enumerable` dataset determines the way that JSON-LD node objects are written; for best results, statements should be ordered by _graph name_,
|
35
|
+
The order of triples retrieved from the `RDF::Enumerable` dataset determines the way that JSON-LD node objects are written; for best results, statements should be ordered by _graph name_, _subject_, _predicate_ and _object_.
|
36
36
|
|
37
37
|
### MultiJson parser
|
38
|
-
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.
|
38
|
+
The [MultiJson](https://rubygems.org/gems/multi_json) gem is used for parsing and serializing JSON; this defaults to the native JSON parser/serializer, 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. Additionally, a custom serialilzer may be specified by passing the `:serializer` option to {JSON::LD::Writer} or methods of {JSON::LD::API}. See [MultiJson](https://rubygems.org/gems/multi_json) for more information.
|
39
39
|
|
40
40
|
### JSON-LD-star (RDFStar)
|
41
41
|
|
@@ -624,8 +624,7 @@ To get a local working copy of the development repository, do:
|
|
624
624
|
which you will be asked to agree to on the first commit to a repo within the organization.
|
625
625
|
Note that the agreement applies to all repos in the [Ruby RDF](https://github.com/ruby-rdf/) organization.
|
626
626
|
|
627
|
-
License
|
628
|
-
-------
|
627
|
+
## License
|
629
628
|
|
630
629
|
This is free and unencumbered public domain software. For more information,
|
631
630
|
see <https://unlicense.org/> or the accompanying {file:UNLICENSE} file.
|
@@ -641,7 +640,7 @@ see <https://unlicense.org/> or the accompanying {file:UNLICENSE} file.
|
|
641
640
|
[Backports]: https://rubygems.org/gems/backports
|
642
641
|
[JSON-LD]: https://www.w3.org/TR/json-ld11/ "JSON-LD 1.1"
|
643
642
|
[JSON-LD API]: https://www.w3.org/TR/json-ld11-api/ "JSON-LD 1.1 Processing Algorithms and API"
|
644
|
-
[JSON-LD Framing]: https://www.w3.org/TR/json-ld11-framing/ "JSON-LD
|
643
|
+
[JSON-LD Framing]: https://www.w3.org/TR/json-ld11-framing/ "JSON-LD 1.1 Framing"
|
645
644
|
[Promises]: https://dom.spec.whatwg.org/#promises
|
646
645
|
[jsonlint]: https://rubygems.org/gems/jsonlint
|
647
646
|
[Sinatra]: https://www.sinatrarb.com/
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.2.
|
1
|
+
3.2.2
|
data/lib/json/ld/api.rb
CHANGED
@@ -126,7 +126,8 @@ module JSON::LD
|
|
126
126
|
|
127
127
|
case remote_doc.document
|
128
128
|
when String
|
129
|
-
|
129
|
+
mj_opts = options.keep_if {|k,v| k != :adapter || MUTLI_JSON_ADAPTERS.include?(v)}
|
130
|
+
MultiJson.load(remote_doc.document, **mj_opts)
|
130
131
|
else
|
131
132
|
# Already parsed
|
132
133
|
remote_doc.document
|
@@ -155,6 +156,9 @@ module JSON::LD
|
|
155
156
|
#
|
156
157
|
# @param [String, #read, Hash, Array] input
|
157
158
|
# The JSON-LD object to copy and perform the expansion upon.
|
159
|
+
# @param [Proc] serializer (nil)
|
160
|
+
# A Serializer method used for generating the JSON serialization of the result. If absent, the internal Ruby objects are returned, which can be transformed to JSON externally via `#to_json`.
|
161
|
+
# See {JSON::LD::API.serializer}.
|
158
162
|
# @param [Hash{Symbol => Object}] options
|
159
163
|
# @option options (see #initialize)
|
160
164
|
# @raise [JsonLdError]
|
@@ -167,7 +171,7 @@ module JSON::LD
|
|
167
171
|
# @return [Object, Array<Hash>]
|
168
172
|
# If a block is given, the result of evaluating the block is returned, otherwise, the expanded JSON-LD document
|
169
173
|
# @see https://www.w3.org/TR/json-ld11-api/#expansion-algorithm
|
170
|
-
def self.expand(input, framing: false, **options, &block)
|
174
|
+
def self.expand(input, framing: false, serializer: nil, **options, &block)
|
171
175
|
result = doc_base = nil
|
172
176
|
API.new(input, options[:expandContext], **options) do
|
173
177
|
result = self.expand(self.value, nil, self.context,
|
@@ -180,6 +184,7 @@ module JSON::LD
|
|
180
184
|
|
181
185
|
# Finally, if element is a JSON object, it is wrapped into an array.
|
182
186
|
result = [result].compact unless result.is_a?(Array)
|
187
|
+
result = serializer.call(result, **options) if serializer
|
183
188
|
|
184
189
|
if block_given?
|
185
190
|
case block.arity
|
@@ -204,6 +209,9 @@ module JSON::LD
|
|
204
209
|
# The JSON-LD object to copy and perform the compaction upon.
|
205
210
|
# @param [String, #read, Hash, Array, JSON::LD::Context] context
|
206
211
|
# The base context to use when compacting the input.
|
212
|
+
# @param [Proc] serializer (nil)
|
213
|
+
# A Serializer instance used for generating the JSON serialization of the result. If absent, the internal Ruby objects are returned, which can be transformed to JSON externally via `#to_json`.
|
214
|
+
# See {JSON::LD::API.serializer}.
|
207
215
|
# @param [Boolean] expanded (false) Input is already expanded
|
208
216
|
# @param [Hash{Symbol => Object}] options
|
209
217
|
# @option options (see #initialize)
|
@@ -215,7 +223,7 @@ module JSON::LD
|
|
215
223
|
# If a block is given, the result of evaluating the block is returned, otherwise, the compacted JSON-LD document
|
216
224
|
# @raise [JsonLdError]
|
217
225
|
# @see https://www.w3.org/TR/json-ld11-api/#compaction-algorithm
|
218
|
-
def self.compact(input, context, expanded: false, **options)
|
226
|
+
def self.compact(input, context, expanded: false, serializer: nil, **options)
|
219
227
|
result = nil
|
220
228
|
options = {compactToRelative: true}.merge(options)
|
221
229
|
|
@@ -238,6 +246,7 @@ module JSON::LD
|
|
238
246
|
end
|
239
247
|
result = ctx.merge(result) unless ctx.fetch('@context', {}).empty?
|
240
248
|
end
|
249
|
+
result = serializer.call(result, **options) if serializer
|
241
250
|
block_given? ? yield(result) : result
|
242
251
|
end
|
243
252
|
|
@@ -251,6 +260,9 @@ module JSON::LD
|
|
251
260
|
# @param [String, #read, Hash, Array, JSON::LD::EvaluationContext] context
|
252
261
|
# An optional external context to use additionally to the context embedded in input when expanding the input.
|
253
262
|
# @param [Boolean] expanded (false) Input is already expanded
|
263
|
+
# @param [Proc] serializer (nil)
|
264
|
+
# A Serializer instance used for generating the JSON serialization of the result. If absent, the internal Ruby objects are returned, which can be transformed to JSON externally via `#to_json`.
|
265
|
+
# See {JSON::LD::API.serializer}.
|
254
266
|
# @param [Hash{Symbol => Object}] options
|
255
267
|
# @option options (see #initialize)
|
256
268
|
# @option options [Boolean] :createAnnotations
|
@@ -262,7 +274,7 @@ module JSON::LD
|
|
262
274
|
# @return [Object, Hash]
|
263
275
|
# If a block is given, the result of evaluating the block is returned, otherwise, the flattened JSON-LD document
|
264
276
|
# @see https://www.w3.org/TR/json-ld11-api/#framing-algorithm
|
265
|
-
def self.flatten(input, context, expanded: false, **options)
|
277
|
+
def self.flatten(input, context, expanded: false, serializer: nil, **options)
|
266
278
|
flattened = []
|
267
279
|
options = {
|
268
280
|
compactToRelative: true,
|
@@ -318,6 +330,7 @@ module JSON::LD
|
|
318
330
|
end
|
319
331
|
end
|
320
332
|
|
333
|
+
flattened = serializer.call(flattened, **options) if serializer
|
321
334
|
block_given? ? yield(flattened) : flattened
|
322
335
|
end
|
323
336
|
|
@@ -350,7 +363,7 @@ module JSON::LD
|
|
350
363
|
# If a block is given, the result of evaluating the block is returned, otherwise, the framed JSON-LD document
|
351
364
|
# @raise [InvalidFrame]
|
352
365
|
# @see https://www.w3.org/TR/json-ld11-api/#framing-algorithm
|
353
|
-
def self.frame(input, frame, expanded: false, **options)
|
366
|
+
def self.frame(input, frame, expanded: false, serializer: nil, **options)
|
354
367
|
result = nil
|
355
368
|
options = {
|
356
369
|
base: (RDF::URI(input) if input.is_a?(String)),
|
@@ -379,7 +392,8 @@ module JSON::LD
|
|
379
392
|
requestProfile: 'http://www.w3.org/ns/json-ld#frame',
|
380
393
|
**options)
|
381
394
|
if remote_doc.document.is_a?(String)
|
382
|
-
|
395
|
+
mj_opts = options.keep_if {|k,v| k != :adapter || MUTLI_JSON_ADAPTERS.include?(v)}
|
396
|
+
MultiJson.load(remote_doc.document, **mj_opts)
|
383
397
|
else
|
384
398
|
remote_doc.document
|
385
399
|
end
|
@@ -467,6 +481,7 @@ module JSON::LD
|
|
467
481
|
result
|
468
482
|
end
|
469
483
|
|
484
|
+
result = serializer.call(result, **options) if serializer
|
470
485
|
block_given? ? yield(result) : result
|
471
486
|
end
|
472
487
|
|
@@ -528,18 +543,21 @@ module JSON::LD
|
|
528
543
|
# The resulting `Array` is either returned or yielded, if a block is given.
|
529
544
|
#
|
530
545
|
# @param [RDF::Enumerable] input
|
546
|
+
# @param [Boolean] useRdfType (false)
|
547
|
+
# If set to `true`, the JSON-LD processor will treat `rdf:type` like a normal property instead of using `@type`.
|
548
|
+
# @param [Boolean] useNativeTypes (false) use native representations
|
549
|
+
# @param [Proc] serializer (nil)
|
550
|
+
# A Serializer instance used for generating the JSON serialization of the result. If absent, the internal Ruby objects are returned, which can be transformed to JSON externally via `#to_json`.
|
551
|
+
# See {JSON::LD::API.serializer}.
|
531
552
|
# @param [Hash{Symbol => Object}] options
|
532
553
|
# @option options (see #initialize)
|
533
|
-
# @option options [Boolean] :useRdfType (false)
|
534
|
-
# If set to `true`, the JSON-LD processor will treat `rdf:type` like a normal property instead of using `@type`.
|
535
|
-
# @option options [Boolean] :useNativeTypes (false) use native representations
|
536
554
|
# @yield jsonld
|
537
555
|
# @yieldparam [Hash] jsonld
|
538
556
|
# The JSON-LD document in expanded form
|
539
557
|
# @yieldreturn [Object] returned object
|
540
558
|
# @return [Object, Hash]
|
541
559
|
# If a block is given, the result of evaluating the block is returned, otherwise, the expanded JSON-LD document
|
542
|
-
def self.fromRdf(input, useRdfType: false, useNativeTypes: false, **options, &block)
|
560
|
+
def self.fromRdf(input, useRdfType: false, useNativeTypes: false, serializer: nil, **options, &block)
|
543
561
|
result = nil
|
544
562
|
|
545
563
|
API.new(nil, nil, **options) do
|
@@ -548,6 +566,7 @@ module JSON::LD
|
|
548
566
|
useNativeTypes: useNativeTypes)
|
549
567
|
end
|
550
568
|
|
569
|
+
result = serializer.call(result, **options) if serializer
|
551
570
|
block_given? ? yield(result) : result
|
552
571
|
end
|
553
572
|
|
@@ -648,7 +667,8 @@ module JSON::LD
|
|
648
667
|
end
|
649
668
|
else
|
650
669
|
validate_input(remote_doc.document, url: remote_doc.documentUrl) if validate
|
651
|
-
|
670
|
+
mj_opts = options.keep_if {|k,v| k != :adapter || MUTLI_JSON_ADAPTERS.include?(v)}
|
671
|
+
MultiJson.load(remote_doc.document, **mj_opts)
|
652
672
|
end
|
653
673
|
end
|
654
674
|
|
@@ -682,8 +702,8 @@ module JSON::LD
|
|
682
702
|
base_uri ||= url.base_uri if url.respond_to?(:base_uri)
|
683
703
|
content_type = options[:content_type]
|
684
704
|
content_type ||= url.content_type if url.respond_to?(:content_type)
|
685
|
-
context_url = if url.respond_to?(:links) && url.links
|
686
|
-
(content_type == '
|
705
|
+
context_url = if url.respond_to?(:links) && url.links &&
|
706
|
+
(content_type == 'application/json' || content_type.match?(%r(application/(^ld)+json)))
|
687
707
|
link = url.links.find_link(LINK_REL_CONTEXT)
|
688
708
|
link.href if link
|
689
709
|
end
|
@@ -759,7 +779,8 @@ module JSON::LD
|
|
759
779
|
raise JSON::LD::JsonLdError::LoadingDocumentFailed, "Script tag has type=#{element.attributes['type']}" unless element.attributes['type'].to_s.start_with?('application/ld+json')
|
760
780
|
content = element.inner_html
|
761
781
|
validate_input(content, url: url) if options[:validate]
|
762
|
-
|
782
|
+
mj_opts = options.keep_if {|k,v| k != :adapter || MUTLI_JSON_ADAPTERS.include?(v)}
|
783
|
+
MultiJson.load(content, **mj_opts)
|
763
784
|
elsif extractAllScripts
|
764
785
|
res = []
|
765
786
|
elements = if profile
|
@@ -773,7 +794,8 @@ module JSON::LD
|
|
773
794
|
elements.each do |element|
|
774
795
|
content = element.inner_html
|
775
796
|
validate_input(content, url: url) if options[:validate]
|
776
|
-
|
797
|
+
mj_opts = options.keep_if {|k,v| k != :adapter || MUTLI_JSON_ADAPTERS.include?(v)}
|
798
|
+
r = MultiJson.load(content, **mj_opts)
|
777
799
|
if r.is_a?(Hash)
|
778
800
|
res << r
|
779
801
|
elsif r.is_a?(Array)
|
@@ -788,12 +810,27 @@ module JSON::LD
|
|
788
810
|
raise JSON::LD::JsonLdError::LoadingDocumentFailed, "No script tag found" unless element
|
789
811
|
content = element.inner_html
|
790
812
|
validate_input(content, url: url) if options[:validate]
|
791
|
-
|
813
|
+
mj_opts = options.keep_if {|k,v| k != :adapter || MUTLI_JSON_ADAPTERS.include?(v)}
|
814
|
+
MultiJson.load(content, **mj_opts)
|
792
815
|
end
|
793
816
|
rescue MultiJson::ParseError => e
|
794
817
|
raise JSON::LD::JsonLdError::InvalidScriptElement, e.message
|
795
818
|
end
|
796
819
|
|
820
|
+
##
|
821
|
+
# The default serializer for serialzing Ruby Objects to JSON.
|
822
|
+
#
|
823
|
+
# Defaults to `MultiJson.dump`
|
824
|
+
#
|
825
|
+
# @param [Object] object
|
826
|
+
# @param [Array<Object>] args
|
827
|
+
# other arguments that may be passed for some specific implementation.
|
828
|
+
# @param [Hash<Symbol, Object>] options
|
829
|
+
# options passed from the invoking context.
|
830
|
+
def self.serializer(object, *args, **options)
|
831
|
+
MultiJson.dump(object, JSON_STATE)
|
832
|
+
end
|
833
|
+
|
797
834
|
##
|
798
835
|
# Validate JSON using JsonLint, if loaded
|
799
836
|
private
|
data/lib/json/ld/reader.rb
CHANGED
@@ -26,7 +26,8 @@ module JSON::LD
|
|
26
26
|
unique_bnodes, rename_bnodes = @options[:unique_bnodes], @options.fetch(:rename_bnodes, true)
|
27
27
|
# FIXME: document loader doesn't stream
|
28
28
|
@base = RDF::URI(@options[:base] || base_uri)
|
29
|
-
|
29
|
+
mj_opts = @options.keep_if {|k,v| k != :adapter || MUTLI_JSON_ADAPTERS.include?(v)}
|
30
|
+
value = MultiJson.load(@doc, mj_opts)
|
30
31
|
context_ref = @options[:expandContext]
|
31
32
|
#context_ref = @options.fetch(:expandContext, remote_doc.contextUrl)
|
32
33
|
context = Context.parse(context_ref, **@options)
|
data/lib/json/ld/to_rdf.rb
CHANGED
@@ -11,7 +11,7 @@ module JSON::LD
|
|
11
11
|
##
|
12
12
|
# @param [Hash{String => Object}] item
|
13
13
|
# @param [RDF::Resource] graph_name
|
14
|
-
# @param [Boolean] emitted triples are quoted triples.
|
14
|
+
# @param [Boolean] quoted emitted triples are quoted triples.
|
15
15
|
# @yield statement
|
16
16
|
# @yieldparam [RDF::Statement] statement
|
17
17
|
# @return RDF::Resource the subject of this item
|
data/lib/json/ld/writer.rb
CHANGED
@@ -186,10 +186,6 @@ module JSON::LD
|
|
186
186
|
# @return [Boolean]
|
187
187
|
# @see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.1
|
188
188
|
def accept?(accept_params)
|
189
|
-
# Profiles that aren't specific IANA relations represent the URL
|
190
|
-
# of a context or frame that may be subject to black- or white-listing
|
191
|
-
profile = accept_params[:profile].to_s.split(/\s+/)
|
192
|
-
|
193
189
|
if block_given?
|
194
190
|
yield(accept_params)
|
195
191
|
else
|
@@ -229,6 +225,8 @@ module JSON::LD
|
|
229
225
|
# frame to use when serializing.
|
230
226
|
# @option options [Boolean] :unique_bnodes (false)
|
231
227
|
# Use unique bnode identifiers, defaults to using the identifier which the node was originall initialized with (if any).
|
228
|
+
# @option options [Proc] serializer (JSON::LD::API.serializer)
|
229
|
+
# A Serializer method used for generating the JSON serialization of the result.
|
232
230
|
# @option options [Boolean] :stream (false)
|
233
231
|
# Do not attempt to optimize graph presentation, suitable for streaming large graphs.
|
234
232
|
# @yield [writer] `self`
|
@@ -239,6 +237,7 @@ module JSON::LD
|
|
239
237
|
def initialize(output = $stdout, **options, &block)
|
240
238
|
options[:base_uri] ||= options[:base] if options.key?(:base)
|
241
239
|
options[:base] ||= options[:base_uri] if options.key?(:base_uri)
|
240
|
+
@serializer = options.fetch(:serializer, JSON::LD::API.method(:serializer))
|
242
241
|
super do
|
243
242
|
@repo = RDF::Repository.new
|
244
243
|
|
@@ -300,7 +299,7 @@ module JSON::LD
|
|
300
299
|
else
|
301
300
|
|
302
301
|
log_debug("writer") { "serialize #{@repo.count} statements, #{@options.inspect}"}
|
303
|
-
result = API.fromRdf(@repo, **@options)
|
302
|
+
result = API.fromRdf(@repo, **@options.merge(serializer: nil))
|
304
303
|
|
305
304
|
# Some options may be indicated from accept parameters
|
306
305
|
profile = @options.fetch(:accept_params, {}).fetch(:profile, "").split(' ')
|
@@ -322,20 +321,20 @@ module JSON::LD
|
|
322
321
|
|
323
322
|
# Rename BNodes to uniquify them, if necessary
|
324
323
|
if options[:unique_bnodes]
|
325
|
-
result = API.flatten(result, context, **@options)
|
324
|
+
result = API.flatten(result, context, **@options.merge(serializer: nil))
|
326
325
|
end
|
327
326
|
|
328
327
|
if frame = @options[:frame]
|
329
328
|
# Perform framing, if given a frame
|
330
329
|
log_debug("writer") { "frame result"}
|
331
|
-
result = API.frame(result, frame, **@options)
|
330
|
+
result = API.frame(result, frame, **@options.merge(serializer: nil))
|
332
331
|
elsif context
|
333
332
|
# Perform compaction, if we have a context
|
334
333
|
log_debug("writer") { "compact result"}
|
335
|
-
result = API.compact(result, context, **@options)
|
334
|
+
result = API.compact(result, context, **@options.merge(serializer: nil))
|
336
335
|
end
|
337
336
|
|
338
|
-
@output.write(
|
337
|
+
@output.write(@serializer.call(result, **@options))
|
339
338
|
end
|
340
339
|
|
341
340
|
super
|
data/lib/json/ld.rb
CHANGED
@@ -46,6 +46,9 @@ module JSON
|
|
46
46
|
# Default context when compacting without one being specified
|
47
47
|
DEFAULT_CONTEXT = "http://schema.org"
|
48
48
|
|
49
|
+
# Acceptable MultiJson adapters
|
50
|
+
MUTLI_JSON_ADAPTERS = %i(oj json_gem json_pure ok_json yajl nsjsonseerialization)
|
51
|
+
|
49
52
|
KEYWORDS = Set.new(%w(
|
50
53
|
@annotation
|
51
54
|
@base
|
data/spec/api_spec.rb
CHANGED
@@ -48,30 +48,78 @@ describe JSON::LD::API do
|
|
48
48
|
context "with MultiJson adapter #{adapter.inspect}" do
|
49
49
|
Dir.glob(File.expand_path(File.join(File.dirname(__FILE__), 'test-files/*-input.*'))) do |filename|
|
50
50
|
test = File.basename(filename).sub(/-input\..*$/, '')
|
51
|
-
frame = filename.sub(/-input\..*$/, '-frame.
|
52
|
-
framed = filename.sub(/-input\..*$/, '-framed.
|
53
|
-
compacted = filename.sub(/-input\..*$/, '-compacted.
|
54
|
-
context = filename.sub(/-input\..*$/, '-context.
|
55
|
-
expanded = filename.sub(/-input\..*$/, '-expanded.
|
51
|
+
frame = filename.sub(/-input\..*$/, '-frame.jsonld')
|
52
|
+
framed = filename.sub(/-input\..*$/, '-framed.jsonld')
|
53
|
+
compacted = filename.sub(/-input\..*$/, '-compacted.jsonld')
|
54
|
+
context = filename.sub(/-input\..*$/, '-context.jsonld')
|
55
|
+
expanded = filename.sub(/-input\..*$/, '-expanded.jsonld')
|
56
56
|
ttl = filename.sub(/-input\..*$/, '-rdf.ttl')
|
57
57
|
|
58
58
|
context test, skip: ("Not supported in JRuby" if RUBY_ENGINE == "jruby" && %w(oj yajl).include?(adapter.to_s)) do
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
59
|
+
around do |example|
|
60
|
+
@file = File.open(filename)
|
61
|
+
case filename
|
62
|
+
when /.jsonld$/
|
63
|
+
@file.define_singleton_method(:content_type) {'application/ld+json'}
|
64
|
+
end
|
65
|
+
if context
|
66
|
+
@ctx_io = File.open(context)
|
67
|
+
case context
|
68
|
+
when /.jsonld$/
|
69
|
+
@ctx_io.define_singleton_method(:content_type) {'application/ld+json'}
|
70
|
+
end
|
71
|
+
end
|
72
|
+
example.run
|
73
|
+
@file.close
|
74
|
+
@ctx_io.close if @ctx_io
|
75
|
+
end
|
76
|
+
|
77
|
+
if File.exist?(expanded)
|
78
|
+
it "expands" do
|
79
|
+
options = {logger: logger, adapter: adapter}
|
80
|
+
options[:expandContext] = @ctx_io if context
|
81
|
+
jld = described_class.expand(@file, **options)
|
82
|
+
expect(jld).to produce_jsonld(JSON.parse(File.read(expanded)), logger)
|
83
|
+
end
|
84
|
+
|
85
|
+
it "expands with serializer" do
|
86
|
+
options = {logger: logger, adapter: adapter}
|
87
|
+
options[:expandContext] = @ctx_io if context
|
88
|
+
jld = described_class.expand(@file, serializer: JSON::LD::API.method(:serializer), **options)
|
89
|
+
expect(jld).to be_a(String)
|
90
|
+
expect(JSON.load(jld)).to produce_jsonld(JSON.parse(File.read(expanded)), logger)
|
91
|
+
end
|
92
|
+
end
|
65
93
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
94
|
+
if File.exist?(compacted) && File.exist?(context)
|
95
|
+
it "compacts" do
|
96
|
+
jld = described_class.compact(@file, @ctx_io, adapter: adapter, logger: logger)
|
97
|
+
expect(jld).to produce_jsonld(JSON.parse(File.read(compacted)), logger)
|
98
|
+
end
|
99
|
+
|
100
|
+
it "compacts with serializer" do
|
101
|
+
jld = described_class.compact(@file, @ctx_io, serializer: JSON::LD::API.method(:serializer), adapter: adapter, logger: logger)
|
102
|
+
expect(jld).to be_a(String)
|
103
|
+
expect(JSON.load(jld)).to produce_jsonld(JSON.parse(File.read(compacted)), logger)
|
104
|
+
end
|
105
|
+
end
|
70
106
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
107
|
+
if File.exist?(framed) && File.exist?(frame)
|
108
|
+
it "frames" do
|
109
|
+
File.open(frame) do |frame_io|
|
110
|
+
jld = described_class.frame(@file, frame_io, adapter: adapter, logger: logger)
|
111
|
+
expect(jld).to produce_jsonld(JSON.parse(File.read(framed)), logger)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
it "frames with serializer" do
|
116
|
+
File.open(frame) do |frame_io|
|
117
|
+
jld = described_class.frame(@file, frame_io, serializer: JSON::LD::API.method(:serializer), adapter: adapter, logger: logger)
|
118
|
+
expect(jld).to be_a(String)
|
119
|
+
expect(JSON.load(jld)).to produce_jsonld(JSON.parse(File.read(framed)), logger)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
75
123
|
|
76
124
|
it "toRdf" do
|
77
125
|
expect(RDF::Repository.load(filename, format: :jsonld, adapter: adapter, logger: logger)).to be_equivalent_graph(RDF::Repository.load(ttl), logger: logger)
|
data/spec/format_spec.rb
CHANGED
@@ -73,8 +73,8 @@ describe JSON::LD::Format do
|
|
73
73
|
describe ".cli_commands", skip: Gem.win_platform? do
|
74
74
|
require 'rdf/cli'
|
75
75
|
let(:ttl) {File.expand_path("../test-files/test-1-rdf.ttl", __FILE__)}
|
76
|
-
let(:json) {File.expand_path("../test-files/test-1-input.
|
77
|
-
let(:context) {File.expand_path("../test-files/test-1-context.
|
76
|
+
let(:json) {File.expand_path("../test-files/test-1-input.jsonld", __FILE__)}
|
77
|
+
let(:context) {File.expand_path("../test-files/test-1-context.jsonld", __FILE__)}
|
78
78
|
|
79
79
|
describe "#expand" do
|
80
80
|
it "expands RDF" do
|
data/spec/frame_spec.rb
CHANGED
@@ -2438,7 +2438,31 @@ describe JSON::LD::API do
|
|
2438
2438
|
"@id": "ex:entity1"
|
2439
2439
|
}),
|
2440
2440
|
processingMode: "json-ld-1.1"
|
2441
|
-
}
|
2441
|
+
},
|
2442
|
+
"don't embed list elements": {
|
2443
|
+
frame: %({
|
2444
|
+
"@context": {"ex": "http://example.org/"},
|
2445
|
+
"ex:embed": {
|
2446
|
+
"@list": [{"@embed": "@never"}]
|
2447
|
+
}
|
2448
|
+
}),
|
2449
|
+
input: %({
|
2450
|
+
"@context": {"ex": "http://example.org/"},
|
2451
|
+
"@id": "ex:Sub1",
|
2452
|
+
"ex:embed": {
|
2453
|
+
"@list": [{
|
2454
|
+
"@id": "ex:Sub2",
|
2455
|
+
"ex:prop": "property"
|
2456
|
+
}]
|
2457
|
+
}
|
2458
|
+
}),
|
2459
|
+
output: %({
|
2460
|
+
"@context": {"ex": "http://example.org/"},
|
2461
|
+
"@id": "ex:Sub1",
|
2462
|
+
"ex:embed": {"@list": [{"@id": "ex:Sub2"}]}
|
2463
|
+
}),
|
2464
|
+
processingMode: "json-ld-1.1"
|
2465
|
+
},
|
2442
2466
|
}.each do |title, params|
|
2443
2467
|
it title do
|
2444
2468
|
do_frame(params)
|
data/spec/suite_helper.rb
CHANGED
@@ -60,6 +60,7 @@ module RDF::Util
|
|
60
60
|
document_options[:headers][:content_type] = options[:contentType] if options[:contentType]
|
61
61
|
|
62
62
|
remote_document = RDF::Util::File::RemoteDocument.new(response.read, **document_options)
|
63
|
+
response.close
|
63
64
|
if block_given?
|
64
65
|
return yield remote_document
|
65
66
|
else
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
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: 3.2.
|
4
|
+
version: 3.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gregg Kellogg
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-08-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rdf
|
@@ -357,55 +357,52 @@ files:
|
|
357
357
|
- spec/suite_remote_doc_spec.rb
|
358
358
|
- spec/suite_to_rdf_spec.rb
|
359
359
|
- spec/support/extensions.rb
|
360
|
-
- spec/test-files/test-1-compacted.
|
361
|
-
- spec/test-files/test-1-context.
|
362
|
-
- spec/test-files/test-1-expanded.
|
363
|
-
- spec/test-files/test-1-input.
|
364
|
-
- spec/test-files/test-1-normalized.json
|
360
|
+
- spec/test-files/test-1-compacted.jsonld
|
361
|
+
- spec/test-files/test-1-context.jsonld
|
362
|
+
- spec/test-files/test-1-expanded.jsonld
|
363
|
+
- spec/test-files/test-1-input.jsonld
|
365
364
|
- spec/test-files/test-1-rdf.ttl
|
366
|
-
- spec/test-files/test-2-compacted.
|
367
|
-
- spec/test-files/test-2-context.
|
368
|
-
- spec/test-files/test-2-expanded.
|
369
|
-
- spec/test-files/test-2-input.
|
370
|
-
- spec/test-files/test-2-normalized.json
|
365
|
+
- spec/test-files/test-2-compacted.jsonld
|
366
|
+
- spec/test-files/test-2-context.jsonld
|
367
|
+
- spec/test-files/test-2-expanded.jsonld
|
368
|
+
- spec/test-files/test-2-input.jsonld
|
371
369
|
- spec/test-files/test-2-rdf.ttl
|
372
|
-
- spec/test-files/test-3-compacted.
|
373
|
-
- spec/test-files/test-3-context.
|
374
|
-
- spec/test-files/test-3-expanded.
|
375
|
-
- spec/test-files/test-3-input.
|
376
|
-
- spec/test-files/test-3-normalized.json
|
370
|
+
- spec/test-files/test-3-compacted.jsonld
|
371
|
+
- spec/test-files/test-3-context.jsonld
|
372
|
+
- spec/test-files/test-3-expanded.jsonld
|
373
|
+
- spec/test-files/test-3-input.jsonld
|
377
374
|
- spec/test-files/test-3-rdf.ttl
|
378
|
-
- spec/test-files/test-4-compacted.
|
379
|
-
- spec/test-files/test-4-context.
|
380
|
-
- spec/test-files/test-4-expanded.
|
381
|
-
- spec/test-files/test-4-input.
|
375
|
+
- spec/test-files/test-4-compacted.jsonld
|
376
|
+
- spec/test-files/test-4-context.jsonld
|
377
|
+
- spec/test-files/test-4-expanded.jsonld
|
378
|
+
- spec/test-files/test-4-input.jsonld
|
382
379
|
- spec/test-files/test-4-rdf.ttl
|
383
|
-
- spec/test-files/test-5-compacted.
|
384
|
-
- spec/test-files/test-5-context.
|
385
|
-
- spec/test-files/test-5-expanded.
|
386
|
-
- spec/test-files/test-5-input.
|
380
|
+
- spec/test-files/test-5-compacted.jsonld
|
381
|
+
- spec/test-files/test-5-context.jsonld
|
382
|
+
- spec/test-files/test-5-expanded.jsonld
|
383
|
+
- spec/test-files/test-5-input.jsonld
|
387
384
|
- spec/test-files/test-5-rdf.ttl
|
388
|
-
- spec/test-files/test-6-compacted.
|
389
|
-
- spec/test-files/test-6-context.
|
390
|
-
- spec/test-files/test-6-expanded.
|
391
|
-
- spec/test-files/test-6-input.
|
385
|
+
- spec/test-files/test-6-compacted.jsonld
|
386
|
+
- spec/test-files/test-6-context.jsonld
|
387
|
+
- spec/test-files/test-6-expanded.jsonld
|
388
|
+
- spec/test-files/test-6-input.jsonld
|
392
389
|
- spec/test-files/test-6-rdf.ttl
|
393
|
-
- spec/test-files/test-7-compacted.
|
394
|
-
- spec/test-files/test-7-context.
|
395
|
-
- spec/test-files/test-7-expanded.
|
396
|
-
- spec/test-files/test-7-input.
|
390
|
+
- spec/test-files/test-7-compacted.jsonld
|
391
|
+
- spec/test-files/test-7-context.jsonld
|
392
|
+
- spec/test-files/test-7-expanded.jsonld
|
393
|
+
- spec/test-files/test-7-input.jsonld
|
397
394
|
- spec/test-files/test-7-rdf.ttl
|
398
|
-
- spec/test-files/test-8-compacted.
|
399
|
-
- spec/test-files/test-8-context.
|
400
|
-
- spec/test-files/test-8-expanded.
|
401
|
-
- spec/test-files/test-8-frame.
|
402
|
-
- spec/test-files/test-8-framed.
|
403
|
-
- spec/test-files/test-8-input.
|
395
|
+
- spec/test-files/test-8-compacted.jsonld
|
396
|
+
- spec/test-files/test-8-context.jsonld
|
397
|
+
- spec/test-files/test-8-expanded.jsonld
|
398
|
+
- spec/test-files/test-8-frame.jsonld
|
399
|
+
- spec/test-files/test-8-framed.jsonld
|
400
|
+
- spec/test-files/test-8-input.jsonld
|
404
401
|
- spec/test-files/test-8-rdf.ttl
|
405
|
-
- spec/test-files/test-9-compacted.
|
406
|
-
- spec/test-files/test-9-context.
|
407
|
-
- spec/test-files/test-9-expanded.
|
408
|
-
- spec/test-files/test-9-input.
|
402
|
+
- spec/test-files/test-9-compacted.jsonld
|
403
|
+
- spec/test-files/test-9-context.jsonld
|
404
|
+
- spec/test-files/test-9-expanded.jsonld
|
405
|
+
- spec/test-files/test-9-input.jsonld
|
409
406
|
- spec/to_rdf_spec.rb
|
410
407
|
- spec/writer_spec.rb
|
411
408
|
homepage: https://github.com/ruby-rdf/json-ld
|
@@ -466,52 +463,49 @@ test_files:
|
|
466
463
|
- spec/support/extensions.rb
|
467
464
|
- spec/to_rdf_spec.rb
|
468
465
|
- spec/writer_spec.rb
|
469
|
-
- spec/test-files/test-1-compacted.
|
470
|
-
- spec/test-files/test-1-context.
|
471
|
-
- spec/test-files/test-1-expanded.
|
472
|
-
- spec/test-files/test-1-input.
|
473
|
-
- spec/test-files/test-1-normalized.json
|
466
|
+
- spec/test-files/test-1-compacted.jsonld
|
467
|
+
- spec/test-files/test-1-context.jsonld
|
468
|
+
- spec/test-files/test-1-expanded.jsonld
|
469
|
+
- spec/test-files/test-1-input.jsonld
|
474
470
|
- spec/test-files/test-1-rdf.ttl
|
475
|
-
- spec/test-files/test-2-compacted.
|
476
|
-
- spec/test-files/test-2-context.
|
477
|
-
- spec/test-files/test-2-expanded.
|
478
|
-
- spec/test-files/test-2-input.
|
479
|
-
- spec/test-files/test-2-normalized.json
|
471
|
+
- spec/test-files/test-2-compacted.jsonld
|
472
|
+
- spec/test-files/test-2-context.jsonld
|
473
|
+
- spec/test-files/test-2-expanded.jsonld
|
474
|
+
- spec/test-files/test-2-input.jsonld
|
480
475
|
- spec/test-files/test-2-rdf.ttl
|
481
|
-
- spec/test-files/test-3-compacted.
|
482
|
-
- spec/test-files/test-3-context.
|
483
|
-
- spec/test-files/test-3-expanded.
|
484
|
-
- spec/test-files/test-3-input.
|
485
|
-
- spec/test-files/test-3-normalized.json
|
476
|
+
- spec/test-files/test-3-compacted.jsonld
|
477
|
+
- spec/test-files/test-3-context.jsonld
|
478
|
+
- spec/test-files/test-3-expanded.jsonld
|
479
|
+
- spec/test-files/test-3-input.jsonld
|
486
480
|
- spec/test-files/test-3-rdf.ttl
|
487
|
-
- spec/test-files/test-4-compacted.
|
488
|
-
- spec/test-files/test-4-context.
|
489
|
-
- spec/test-files/test-4-expanded.
|
490
|
-
- spec/test-files/test-4-input.
|
481
|
+
- spec/test-files/test-4-compacted.jsonld
|
482
|
+
- spec/test-files/test-4-context.jsonld
|
483
|
+
- spec/test-files/test-4-expanded.jsonld
|
484
|
+
- spec/test-files/test-4-input.jsonld
|
491
485
|
- spec/test-files/test-4-rdf.ttl
|
492
|
-
- spec/test-files/test-5-compacted.
|
493
|
-
- spec/test-files/test-5-context.
|
494
|
-
- spec/test-files/test-5-expanded.
|
495
|
-
- spec/test-files/test-5-input.
|
486
|
+
- spec/test-files/test-5-compacted.jsonld
|
487
|
+
- spec/test-files/test-5-context.jsonld
|
488
|
+
- spec/test-files/test-5-expanded.jsonld
|
489
|
+
- spec/test-files/test-5-input.jsonld
|
496
490
|
- spec/test-files/test-5-rdf.ttl
|
497
|
-
- spec/test-files/test-6-compacted.
|
498
|
-
- spec/test-files/test-6-context.
|
499
|
-
- spec/test-files/test-6-expanded.
|
500
|
-
- spec/test-files/test-6-input.
|
491
|
+
- spec/test-files/test-6-compacted.jsonld
|
492
|
+
- spec/test-files/test-6-context.jsonld
|
493
|
+
- spec/test-files/test-6-expanded.jsonld
|
494
|
+
- spec/test-files/test-6-input.jsonld
|
501
495
|
- spec/test-files/test-6-rdf.ttl
|
502
|
-
- spec/test-files/test-7-compacted.
|
503
|
-
- spec/test-files/test-7-context.
|
504
|
-
- spec/test-files/test-7-expanded.
|
505
|
-
- spec/test-files/test-7-input.
|
496
|
+
- spec/test-files/test-7-compacted.jsonld
|
497
|
+
- spec/test-files/test-7-context.jsonld
|
498
|
+
- spec/test-files/test-7-expanded.jsonld
|
499
|
+
- spec/test-files/test-7-input.jsonld
|
506
500
|
- spec/test-files/test-7-rdf.ttl
|
507
|
-
- spec/test-files/test-8-compacted.
|
508
|
-
- spec/test-files/test-8-context.
|
509
|
-
- spec/test-files/test-8-expanded.
|
510
|
-
- spec/test-files/test-8-frame.
|
511
|
-
- spec/test-files/test-8-framed.
|
512
|
-
- spec/test-files/test-8-input.
|
501
|
+
- spec/test-files/test-8-compacted.jsonld
|
502
|
+
- spec/test-files/test-8-context.jsonld
|
503
|
+
- spec/test-files/test-8-expanded.jsonld
|
504
|
+
- spec/test-files/test-8-frame.jsonld
|
505
|
+
- spec/test-files/test-8-framed.jsonld
|
506
|
+
- spec/test-files/test-8-input.jsonld
|
513
507
|
- spec/test-files/test-8-rdf.ttl
|
514
|
-
- spec/test-files/test-9-compacted.
|
515
|
-
- spec/test-files/test-9-context.
|
516
|
-
- spec/test-files/test-9-expanded.
|
517
|
-
- spec/test-files/test-9-input.
|
508
|
+
- spec/test-files/test-9-compacted.jsonld
|
509
|
+
- spec/test-files/test-9-context.jsonld
|
510
|
+
- spec/test-files/test-9-expanded.jsonld
|
511
|
+
- spec/test-files/test-9-input.jsonld
|
@@ -1,32 +0,0 @@
|
|
1
|
-
[{
|
2
|
-
"@id": {
|
3
|
-
"@id": "http://example.org/library"
|
4
|
-
},
|
5
|
-
"http://example.org/vocab#contains": {
|
6
|
-
"@id": "http://example.org/library/the-republic"
|
7
|
-
},
|
8
|
-
"http://www.w3.org/1999/02/22-rdf-syntax-ns#type": {
|
9
|
-
"@id": "http://example.org/vocab#Library"
|
10
|
-
}
|
11
|
-
}, {
|
12
|
-
"@id": {
|
13
|
-
"@id": "http://example.org/library/the-republic"
|
14
|
-
},
|
15
|
-
"http://example.org/vocab#contains": {
|
16
|
-
"@id": "http://example.org/library/the-republic#introduction"
|
17
|
-
},
|
18
|
-
"http://purl.org/dc/elements/1.1/creator": "Plato",
|
19
|
-
"http://purl.org/dc/elements/1.1/title": "The Republic",
|
20
|
-
"@type": {
|
21
|
-
"@id": "http://example.org/vocab#Book"
|
22
|
-
}
|
23
|
-
}, {
|
24
|
-
"@id": {
|
25
|
-
"@id": "http://example.org/library/the-republic#introduction"
|
26
|
-
},
|
27
|
-
"http://purl.org/dc/elements/1.1/description": "An introductory chapter on The Republic.",
|
28
|
-
"http://purl.org/dc/elements/1.1/title": "The Introduction",
|
29
|
-
"@type": {
|
30
|
-
"@id": "http://example.org/vocab#Chapter"
|
31
|
-
}
|
32
|
-
}]
|
@@ -1,13 +0,0 @@
|
|
1
|
-
[{
|
2
|
-
"@id": {
|
3
|
-
"@id": "_:c14n0"
|
4
|
-
},
|
5
|
-
"http://xmlns.com/foaf/0.1/age": {
|
6
|
-
"@type": "http://www.w3.org/2001/XMLSchema#integer",
|
7
|
-
"@value": "41"
|
8
|
-
},
|
9
|
-
"http://xmlns.com/foaf/0.1/homepage": {
|
10
|
-
"@id": "http://manu.sporny.org/"
|
11
|
-
},
|
12
|
-
"http://xmlns.com/foaf/0.1/name": "Manu Sporny"
|
13
|
-
}]
|