json-ld 1.1.4 → 1.1.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e160cdefa8e2b74088deae22decfcb6e4676bb1f
4
- data.tar.gz: 7910c785d852f65ea62214573c53e6aaf07854ad
3
+ metadata.gz: f1c1389086ba31e386a000da8030526ae1ea6e8e
4
+ data.tar.gz: 499467568e4eceedea6d0617c5c1abef5416b532
5
5
  SHA512:
6
- metadata.gz: 945604edd6ddf16aaf768d2e028d71724fd167d182fd997d431e6efc5b11db1aecff8a37d6fa9400b2c16f85a3c2b664ee4a31f3a1b666dfac4b588c94096c4a
7
- data.tar.gz: 3062bba010e1170ed9626280e346b988d8b5369cece0aba57addcfdc6111ba46326759f0d9c698581657e35b92412a9bc9905f870b39933105879a21b8e5d786
6
+ metadata.gz: 2d5c24e2bc724dfa18413f801893b8bf2fdbd2cef0dc228f037f2b746c8dc9bf9a0de854a182467302d75f3716327b8058754615b479dc5855e2f51d695fd063
7
+ data.tar.gz: 71c39dc45f62e606fb49a43ef73f7b1f05316aca43d995dbd2f5bf93f617766c6dfb10f785187843915d344c3694b4e83049dd23331dfa407651c832f9b8ed51
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.4
1
+ 1.1.5
data/lib/json/ld/api.rb CHANGED
@@ -72,6 +72,8 @@ module JSON::LD
72
72
  # If set to `true`, the JSON-LD processor will treat `rdf:type` like a normal property instead of using `@type`.
73
73
  # @option options [Boolean] :rename_bnodes (true)
74
74
  # Rename bnodes as part of expansion, or keep them the same.
75
+ # @option options [Boolean] :unique_bnodes (false)
76
+ # Use unique bnode identifiers, defaults to using the identifier which the node was originall initialized with (if any).
75
77
  # @yield [api]
76
78
  # @yieldparam [API]
77
79
  def initialize(input, context, options = {}, &block)
@@ -79,7 +81,7 @@ module JSON::LD
79
81
  @options[:validate] = true if @options[:processingMode] == "json-ld-1.0"
80
82
  @options[:documentLoader] ||= self.class.method(:documentLoader)
81
83
  options[:rename_bnodes] ||= true
82
- @namer = options[:rename_bnodes] ? BlankNodeNamer.new("b") : BlankNodeMapper.new
84
+ @namer = options[:unique_bnodes] ? BlankNodeUniqer.new : (options[:rename_bnodes] ? BlankNodeNamer.new("b") : BlankNodeMapper.new)
83
85
  @value = case input
84
86
  when Array, Hash then input.dup
85
87
  when IO, StringIO
@@ -62,7 +62,7 @@ module JSON::LD
62
62
  next unless nil_var = graph_object[RDF.nil.to_s]
63
63
 
64
64
  # For each item usage in the usages member of nil, perform the following steps:
65
- nil_var[:usages].each do |usage|
65
+ nil_var.fetch(:usages, []).each do |usage|
66
66
  node, property, head = usage[:node], usage[:property], usage[:value]
67
67
  list, list_nodes = [], []
68
68
 
@@ -167,7 +167,7 @@ module JSON::LD
167
167
  when Array
168
168
  obj.map {|o| update_obj(o, reference_map)}
169
169
  when Hash
170
- if obj.node_ref?
170
+ if node_reference?(obj)
171
171
  reference_map[obj['id']] ||= Resource.new(obj,
172
172
  :context => @context_name,
173
173
  :clean => false,
data/lib/json/ld/utils.rb CHANGED
@@ -163,6 +163,23 @@ module JSON::LD
163
163
  end
164
164
  end
165
165
 
166
+ class BlankNodeUniqer < BlankNodeMapper
167
+ ##
168
+ # Use the uniquely generated bnodes, rather than a sequence
169
+ # @param [String] old ("")
170
+ # @return [String]
171
+ def get_sym(old = "")
172
+ old = old.to_s.sub(/_:/, '')
173
+ if old && self.has_key?(old)
174
+ self[old]
175
+ elsif !old.empty?
176
+ self[old] = RDF::Node.new.to_unique_base[2..-1]
177
+ else
178
+ RDF::Node.new.to_unique_base[2..-1]
179
+ end
180
+ end
181
+ end
182
+
166
183
  class BlankNodeNamer < BlankNodeMapper
167
184
  # @param [String] prefix
168
185
  def initialize(prefix)
@@ -85,6 +85,8 @@ module JSON::LD
85
85
  # Add standard prefixes to @prefixes, if necessary.
86
86
  # @option options [IO, Array, Hash, String, Context] :context ({})
87
87
  # context to use when serializing. Constructed context for native serialization.
88
+ # @option options [Boolean] :unique_bnodes (false)
89
+ # Use unique bnode identifiers, defaults to using the identifier which the node was originall initialized with (if any).
88
90
  # @yield [writer] `self`
89
91
  # @yieldparam [RDF::Writer] writer
90
92
  # @yieldreturn [void]
@@ -160,7 +162,12 @@ module JSON::LD
160
162
  end if @options[:prefixes]
161
163
  ctx
162
164
  end
163
-
165
+
166
+ # Rename BNodes to uniquify them, if necessary
167
+ if options[:unique_bnodes]
168
+ result = API.flatten(result, context, @options)
169
+ end
170
+
164
171
  # Perform compaction, if we have a context
165
172
  if context
166
173
  debug("writer") { "compact result"}
data/spec/to_rdf_spec.rb CHANGED
@@ -25,6 +25,13 @@ describe JSON::LD::API do
25
25
  }),
26
26
  %q([ <http://example.com/foo> "bar"^^xsd:string] .)
27
27
  ],
28
+ "@id with _:a and reference" => [
29
+ %q({
30
+ "@id": "_:a",
31
+ "http://example.com/foo": {"@id": "_:a"}
32
+ }),
33
+ %q(_:a <http://example.com/foo> _:a .)
34
+ ],
28
35
  }.each do |title, (js, ttl)|
29
36
  it title do
30
37
  ttl = "@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . #{ttl}"
@@ -56,21 +63,21 @@ describe JSON::LD::API do
56
63
  "@id": "",
57
64
  "@type": "#{RDF::RDFS.Resource}"
58
65
  }),
59
- %(<http://example.org/> a <#{RDF::RDFS.Resource}>)
66
+ %(<http://example.org/> a <#{RDF::RDFS.Resource}> .)
60
67
  ],
61
68
  "relative" => [
62
69
  %({
63
70
  "@id": "a/b",
64
71
  "@type": "#{RDF::RDFS.Resource}"
65
72
  }),
66
- %(<http://example.org/a/b> a <#{RDF::RDFS.Resource}>)
73
+ %(<http://example.org/a/b> a <#{RDF::RDFS.Resource}> .)
67
74
  ],
68
75
  "hash" => [
69
76
  %({
70
77
  "@id": "#a",
71
78
  "@type": "#{RDF::RDFS.Resource}"
72
79
  }),
73
- %(<http://example.org/#a> a <#{RDF::RDFS.Resource}>)
80
+ %(<http://example.org/#a> a <#{RDF::RDFS.Resource}> .)
74
81
  ],
75
82
  }.each do |title, (js, ttl)|
76
83
  it title do
@@ -660,7 +667,7 @@ describe JSON::LD::API do
660
667
  def parse(input, options = {})
661
668
  @debug = []
662
669
  graph = options[:graph] || RDF::Graph.new
663
- options = {:debug => @debug, :validate => true, :canonicalize => false}.merge(options)
670
+ options = {debug: @debug, validate: true, canonicalize: false}.merge(options)
664
671
  JSON::LD::API.toRdf(StringIO.new(input), options) {|st| graph << st}
665
672
  graph
666
673
  end
data/spec/writer_spec.rb CHANGED
@@ -20,7 +20,7 @@ describe JSON::LD::Writer do
20
20
  {:content_type => 'application/x-ld+json'},
21
21
  ].each do |arg|
22
22
  it "discovers with #{arg.inspect}" do
23
- RDF::Reader.for(arg).should == JSON::LD::Reader
23
+ expect(RDF::Reader.for(arg)).to eql JSON::LD::Reader
24
24
  end
25
25
  end
26
26
  end
@@ -28,7 +28,7 @@ describe JSON::LD::Writer do
28
28
  context "simple tests" do
29
29
  it "should use full URIs without base" do
30
30
  input = %(<http://a/b> <http://a/c> <http://a/d> .)
31
- serialize(input).should produce([{
31
+ expect(serialize(input)).to produce([{
32
32
  '@id' => "http://a/b",
33
33
  "http://a/c" => [{"@id" => "http://a/d"}]
34
34
  }], @debug)
@@ -36,8 +36,7 @@ describe JSON::LD::Writer do
36
36
 
37
37
  it "should use qname URIs with standard prefix" do
38
38
  input = %(<http://xmlns.com/foaf/0.1/b> <http://xmlns.com/foaf/0.1/c> <http://xmlns.com/foaf/0.1/d> .)
39
- serialize(input, :standard_prefixes => true).
40
- should produce({
39
+ expect(serialize(input, :standard_prefixes => true)).to produce({
41
40
  '@context' => {
42
41
  "foaf" => "http://xmlns.com/foaf/0.1/",
43
42
  },
@@ -53,12 +52,11 @@ describe JSON::LD::Writer do
53
52
  <https://senet.org/gm> <https://senet.org/ns#unofficialTitle> "Rhythm Tengoku"@en .
54
53
  <https://senet.org/gm> <https://senet.org/ns#urlkey> "rhythm-tengoku" .
55
54
  )
56
- serialize(input, :prefixes => {
55
+ expect(serialize(input, :prefixes => {
57
56
  :dc => "http://purl.org/dc/terms/",
58
57
  :frbr => "http://vocab.org/frbr/core#",
59
58
  :senet => "https://senet.org/ns#",
60
- }).
61
- should produce({
59
+ })).to produce({
62
60
  '@context' => {
63
61
  "dc" => "http://purl.org/dc/terms/",
64
62
  "frbr" => "http://vocab.org/frbr/core#",
@@ -75,8 +73,8 @@ describe JSON::LD::Writer do
75
73
  it "should use CURIEs with empty prefix" do
76
74
  input = %(<http://xmlns.com/foaf/0.1/b> <http://xmlns.com/foaf/0.1/c> <http://xmlns.com/foaf/0.1/d> .)
77
75
  begin
78
- serialize(input, :prefixes => { "" => RDF::FOAF}).
79
- should produce({
76
+ expect(serialize(input, :prefixes => { "" => RDF::FOAF})).
77
+ to produce({
80
78
  "@context" => {
81
79
  "" => "http://xmlns.com/foaf/0.1/"
82
80
  },
@@ -92,8 +90,8 @@ describe JSON::LD::Writer do
92
90
 
93
91
  it "should not use terms if no suffix" do
94
92
  input = %(<http://xmlns.com/foaf/0.1/> <http://xmlns.com/foaf/0.1/> <http://xmlns.com/foaf/0.1/> .)
95
- serialize(input, :standard_prefixes => true).
96
- should_not produce({
93
+ expect(serialize(input, :standard_prefixes => true)).
94
+ not_to produce({
97
95
  "@context" => {"foaf" => "http://xmlns.com/foaf/0.1/"},
98
96
  '@id' => "foaf",
99
97
  "foaf" => {"@id" => "foaf"}
@@ -107,10 +105,10 @@ describe JSON::LD::Writer do
107
105
  db:Michael_Jackson dbo:artistOf <http://dbpedia.org/resource/%28I_Can%27t_Make_It%29_Another_Day> .
108
106
  )
109
107
 
110
- serialize(input, :prefixes => {
108
+ expect(serialize(input, :prefixes => {
111
109
  "db" => RDF::URI("http://dbpedia.org/resource/"),
112
- "dbo" => RDF::URI("http://dbpedia.org/ontology/")}).
113
- should produce({
110
+ "dbo" => RDF::URI("http://dbpedia.org/ontology/")})).
111
+ to produce({
114
112
  "@context" => {
115
113
  "db" => "http://dbpedia.org/resource/",
116
114
  "dbo" => "http://dbpedia.org/ontology/"
@@ -120,6 +118,12 @@ describe JSON::LD::Writer do
120
118
  }, @debug)
121
119
  end
122
120
 
121
+ it "should not use provided node identifiers if :unique_bnodes set" do
122
+ input = %(_:a <http://example.com/foo> _:b \.)
123
+ result = serialize(input, unique_bnodes: true, context: {})
124
+ expect(result.to_json).to match(%r(_:g\w+))
125
+ end
126
+
123
127
  it "serializes multiple subjects" do
124
128
  input = %q(
125
129
  @prefix : <http://www.w3.org/2006/03/test-description#> .
@@ -127,8 +131,8 @@ describe JSON::LD::Writer do
127
131
  <http://example.com/test-cases/0001> a :TestCase .
128
132
  <http://example.com/test-cases/0002> a :TestCase .
129
133
  )
130
- serialize(input, :prefixes => {"" => "http://www.w3.org/2006/03/test-description#"}).
131
- should produce({
134
+ expect(serialize(input, :prefixes => {"" => "http://www.w3.org/2006/03/test-description#"})).
135
+ to produce({
132
136
  '@context' => {
133
137
  "" => "http://www.w3.org/2006/03/test-description#",
134
138
  "dc" => RDF::DC.to_s
@@ -154,12 +158,12 @@ describe JSON::LD::Writer do
154
158
  owl:onClass <http://data.wikia.com/terms#Element>;
155
159
  owl:onProperty <http://data.wikia.com/terms#characterIn> .
156
160
  )
157
- serialize(input, :rename_bnodes => false, :prefixes => {
161
+ expect(serialize(input, :rename_bnodes => false, :prefixes => {
158
162
  :owl => "http://www.w3.org/2002/07/owl#",
159
163
  :rdfs => "http://www.w3.org/2000/01/rdf-schema#",
160
164
  :xsd => "http://www.w3.org/2001/XMLSchema#"
161
- }).
162
- should produce({
165
+ })).
166
+ to produce({
163
167
  '@context' => {
164
168
  "owl" => "http://www.w3.org/2002/07/owl#",
165
169
  "rdf" => "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
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.4
4
+ version: 1.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gregg Kellogg
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-07 00:00:00.000000000 Z
11
+ date: 2014-06-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rdf
@@ -17,6 +17,9 @@ dependencies:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.1'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.1.4
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -24,6 +27,9 @@ dependencies:
24
27
  - - "~>"
25
28
  - !ruby/object:Gem::Version
26
29
  version: '1.1'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.1.4
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: equivalent-xml
29
35
  requirement: !ruby/object:Gem::Requirement