json-ld 1.0.4 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- OTQ4OTc2MWQ0M2FlYTFiNmEyMDM3ZmEzNWMxYTE2NDk2MjczYWZmMg==
4
+ YTQ0NzdhNmE4YWFlYzBjYzVkOWVlOGJjNGJjNDdiY2ZmN2RhYzdhMg==
5
5
  data.tar.gz: !binary |-
6
- MTYzNzQ3ZGE1ZTlhY2MyYTBlMDBiODVlMDE3NTBhZmZkNGE1OTk2Yw==
6
+ NWNkMTAxNWU0NGQxOGQ5NjlmMTFkZmFiZDY3MWRiZDFkMWE2YWMwNQ==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- NTEyZDU1ZWY0OWU1ZWJiNzY4YzQ4M2M3MmUyM2I4ODMyOGRkMjAxNDkwZjg0
10
- YmZmNWIzZTQ0ZmRiZWFjMzAwZDg4NWQzNDU1MmM4YWUzYmM1M2IyYWUxY2Ux
11
- NzVlOWFjNGM0N2NhZDJkNTI2MjVkNDdkNWQxYTE4Y2NlNzEzNDY=
9
+ ZGExMzc0OThkODZlNDJiOWI2ZDRmOGU3Y2RkNTY5YWVjNzcyZmM1N2M3NzY0
10
+ OGM5YzcyYzM5NzUxMTNiZDE1NDVhYmZhMzNhN2ZkYzkwZWY5YTJkMDA2NjRm
11
+ ZjA0M2ViODM0YTk0MTQzMDk2MmE2MTg2NzQ1Y2MyNzc2N2Q3NjA=
12
12
  data.tar.gz: !binary |-
13
- YzI5MzE5ZDBlOGEyNjIwMDA3YzhhZTNiNWJmOTkwZTRkZjU2OWM4Y2MwYTVl
14
- MTZhNDQzYzg1ZDU1NmRjMGFjN2E1ZDdjZDU1ZjE0ZGM0Y2RjZDFhNTg2Njhi
15
- M2VjMWQ5ZmE3M2E5MGI0NGRiY2U4N2JkOTgwNzNlZjYxOWE3ZTQ=
13
+ MzljNjBiZDdlYWZjZjM4YmI5MmZhZDQ0ZTI3N2EyYjU2MWIzNjBlZTk5ZjI1
14
+ YjM2YzkyMmEyNDU2NmEyNTMwNzE3NGE4YTczMTMzYWE2MDA3MzI5ZDhkNWEw
15
+ Y2MwMjllM2FjNTRiYTRhMzRlMGVjYWIwYzg4Zjc0NzJiNGMxZmU=
data/README.md CHANGED
@@ -18,7 +18,7 @@ Install with `gem install json-ld`
18
18
 
19
19
  ### Expand a Document
20
20
 
21
- input = {
21
+ input = JSON.parse %({
22
22
  "@context": {
23
23
  "name": "http://xmlns.com/foaf/0.1/name",
24
24
  "homepage": "http://xmlns.com/foaf/0.1/homepage",
@@ -27,7 +27,7 @@ Install with `gem install json-ld`
27
27
  "name": "Manu Sporny",
28
28
  "homepage": "http://manu.sporny.org/",
29
29
  "avatar": "http://twitter.com/account/profile_image/manusporny"
30
- }
30
+ })
31
31
  JSON::LD::API.expand(input) =>
32
32
 
33
33
  [{
@@ -38,26 +38,26 @@ Install with `gem install json-ld`
38
38
 
39
39
  ### Compact a Document
40
40
 
41
- input = [{
41
+ input = JSON.parse %([{
42
42
  "http://xmlns.com/foaf/0.1/name": ["Manu Sporny"],
43
- "http://xmlns.com/foaf/0.1/homepage": ["http://manu.sporny.org/"],
44
- "http://xmlns.com/foaf/0.1/avatar": ["http://twitter.com/account/profile_image/manusporny"]
45
- }]
43
+ "http://xmlns.com/foaf/0.1/homepage": [{"@id": "http://manu.sporny.org/"}],
44
+ "http://xmlns.com/foaf/0.1/avatar": [{"@id": "http://twitter.com/account/profile_image/manusporny"}]
45
+ }])
46
46
 
47
- context = {
47
+ context = JSON.parse(%({
48
48
  "@context": {
49
49
  "name": "http://xmlns.com/foaf/0.1/name",
50
- "homepage": "http://xmlns.com/foaf/0.1/homepage",
51
- "avatar": "http://xmlns.com/foaf/0.1/avatar"
50
+ "homepage": {"@id": "http://xmlns.com/foaf/0.1/homepage", "@type": "@id"},
51
+ "avatar": {"@id": "http://xmlns.com/foaf/0.1/avatar", "@type": "@id"}
52
52
  }
53
- }
53
+ }))['@context']
54
54
 
55
55
  JSON::LD::API.compact(input, context) =>
56
56
  {
57
57
  "@context": {
58
- "avatar": "http://xmlns.com/foaf/0.1/avatar",
59
- "homepage": "http://xmlns.com/foaf/0.1/homepage",
60
- "name": "http://xmlns.com/foaf/0.1/name"
58
+ "name": "http://xmlns.com/foaf/0.1/name",
59
+ "homepage": {"@id": "http://xmlns.com/foaf/0.1/homepage", "@type": "@id"},
60
+ "avatar": {"@id": "http://xmlns.com/foaf/0.1/avatar", "@type": "@id"}
61
61
  },
62
62
  "avatar": "http://twitter.com/account/profile_image/manusporny",
63
63
  "homepage": "http://manu.sporny.org/",
@@ -66,7 +66,7 @@ Install with `gem install json-ld`
66
66
 
67
67
  ### Frame a Document
68
68
 
69
- input = {
69
+ input = JSON.parse %({
70
70
  "@context": {
71
71
  "Book": "http://example.org/vocab#Book",
72
72
  "Chapter": "http://example.org/vocab#Chapter",
@@ -95,9 +95,9 @@ Install with `gem install json-ld`
95
95
  "description": "An introductory chapter on The Republic.",
96
96
  "title": "The Introduction"
97
97
  }]
98
- }
98
+ })
99
99
 
100
- frame = {
100
+ frame = JSON.parse %({
101
101
  "@context": {
102
102
  "Book": "http://example.org/vocab#Book",
103
103
  "Chapter": "http://example.org/vocab#Chapter",
@@ -114,8 +114,9 @@ Install with `gem install json-ld`
114
114
  "@type": "Chapter"
115
115
  }
116
116
  }
117
- }
118
- JSON::LD.frame(input, frame) =>
117
+ })
118
+
119
+ JSON::LD::API.frame(input, frame) =>
119
120
  {
120
121
  "@context": {
121
122
  "Book": "http://example.org/vocab#Book",
@@ -148,7 +149,7 @@ Install with `gem install json-ld`
148
149
 
149
150
  ### Turn JSON-LD into RDF (Turtle)
150
151
 
151
- input = {
152
+ input = JSON.parse %({
152
153
  "@context": {
153
154
  "": "http://manu.sporny.org/",
154
155
  "foaf": "http://xmlns.com/foaf/0.1/"
@@ -157,9 +158,12 @@ Install with `gem install json-ld`
157
158
  "@type": "foaf:Person",
158
159
  "foaf:name": "Joe Bob",
159
160
  "foaf:nick": { "@list": [ "joe", "bob", "jaybe" ] }
160
- }
161
+ })
161
162
 
162
- JSON::LD::API.toRDF(input) =>
163
+ graph = RDF::Graph.new << JSON::LD::API.toRDF(input)
164
+
165
+ require 'rdf/turtle'
166
+ graph.dump(:ttl, :prefixes => {:foaf => "http://xmlns.com/foaf/0.1/"})
163
167
  @prefix foaf: <http://xmlns.com/foaf/0.1/> .
164
168
 
165
169
  <http://example.org/people#joebob> a foaf:Person;
@@ -168,36 +172,41 @@ Install with `gem install json-ld`
168
172
 
169
173
  ### Turn RDF into JSON-LD
170
174
 
171
- input =
172
- @prefix foaf: <http://xmlns.com/foaf/0.1/> .
175
+ require 'rdf/turtle'
176
+ input = RDF::Graph.new << RDF::Turtle::Reader.new(%(
177
+ @prefix foaf: <http://xmlns.com/foaf/0.1/> .
173
178
 
174
- <http://manu.sporny.org/#me> a foaf:Person;
175
- foaf:knows [ a foaf:Person;
176
- foaf:name "Gregg Kellogg"];
177
- foaf:name "Manu Sporny" .
179
+ <http://manu.sporny.org/#me> a foaf:Person;
180
+ foaf:knows [ a foaf:Person;
181
+ foaf:name "Gregg Kellogg"];
182
+ foaf:name "Manu Sporny" .
183
+ ))
178
184
 
179
- context =
180
- {
181
- "@context": {
182
- "": "http://manu.sporny.org/",
183
- "foaf": "http://xmlns.com/foaf/0.1/"
184
- }
185
- }
186
-
187
- JSON::LD::API::fromRDF(input, context) =>
188
- {
185
+ context = JSON.parse %({
189
186
  "@context": {
190
187
  "": "http://manu.sporny.org/",
191
188
  "foaf": "http://xmlns.com/foaf/0.1/"
192
- },
193
- "@id": ":#me",
194
- "@type": "foaf:Person",
195
- "foaf:name": "Manu Sporny",
196
- "foaf:knows": {
197
- "@type": "foaf:Person",
198
- "foaf:name": "Gregg Kellogg"
199
189
  }
200
- }
190
+ })
191
+
192
+ compacted = nil
193
+ JSON::LD::API::fromRDF(input) do |expanded|
194
+ compacted = JSON::LD::API.compact(expanded, context['@context'])
195
+ end
196
+ compacted =>
197
+ [
198
+ {
199
+ "@id": "_:g70265766605380",
200
+ "@type": ["http://xmlns.com/foaf/0.1/Person"],
201
+ "http://xmlns.com/foaf/0.1/name": [{"@value": "Gregg Kellogg"}]
202
+ },
203
+ {
204
+ "@id": "http://manu.sporny.org/#me",
205
+ "@type": ["http://xmlns.com/foaf/0.1/Person"],
206
+ "http://xmlns.com/foaf/0.1/knows": [{"@id": "_:g70265766605380"}],
207
+ "http://xmlns.com/foaf/0.1/name": [{"@value": "Manu Sporny"}]
208
+ }
209
+ ]
201
210
 
202
211
  ## RDF Reader and Writer
203
212
  {JSON::LD} also acts as a normal RDF reader and writer, using the standard RDF.rb reader/writer interfaces:
@@ -205,6 +214,8 @@ Install with `gem install json-ld`
205
214
  graph = RDF::Graph.load("etc/doap.jsonld", :format => :jsonld)
206
215
  graph.dump(:jsonld, :standard_prefixes => true)
207
216
 
217
+ `RDF::GRAPH#dump` can also take a `:context` option to use a separately defined context
218
+
208
219
  ## Documentation
209
220
  Full documentation available on [RubyDoc](http://rubydoc.info/gems/json-ld/file/README.md)
210
221
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.4
1
+ 1.0.5
@@ -20,8 +20,8 @@ module JSON::LD
20
20
  # For each id-node in active_graph
21
21
  active_graph.each do |id, node|
22
22
  # Initialize subject as the IRI or BNode representation of id
23
- subject = as_resource(id, context.doc_base)
24
- debug("graph_to_rdf") {"subject: #{subject.to_ntriples}"}
23
+ subject = as_resource(id)
24
+ debug("graph_to_rdf") {"subject: #{subject.to_ntriples} (id: #{id})"}
25
25
 
26
26
  # For each property-values in node
27
27
  node.each do |property, values|
@@ -29,7 +29,7 @@ module JSON::LD
29
29
  when '@type'
30
30
  # If property is @type, construct triple as an RDF Triple composed of id, rdf:type, and object from values where id and object are represented either as IRIs or Blank Nodes
31
31
  results += values.map do |value|
32
- object = as_resource(value, context.doc_base)
32
+ object = as_resource(value)
33
33
  debug("graph_to_rdf") {"type: #{object.to_ntriples}"}
34
34
  RDF::Statement.new(subject, RDF.type, object)
35
35
  end
@@ -38,7 +38,7 @@ module JSON::LD
38
38
  else
39
39
  # Otherwise, property is an IRI or Blank Node identifier
40
40
  # Initialize predicate from property as an IRI or Blank node
41
- predicate = as_resource(property, context.doc_base)
41
+ predicate = as_resource(property)
42
42
  debug("graph_to_rdf") {"predicate: #{predicate.to_ntriples}"}
43
43
 
44
44
  # For each item in values
@@ -104,7 +104,7 @@ module JSON::LD
104
104
  # Otherwise, value must be a node definition containing only @id whos value is an IRI or Blank Node identifier
105
105
  raise "Expected node reference, got #{item.inspect}" unless item.keys == %w(@id)
106
106
  # Return value associated with @id as an IRI or Blank node
107
- as_resource(item['@id'], context.doc_base)
107
+ as_resource(item['@id'])
108
108
  end
109
109
  end
110
110
 
data/spec/suite_helper.rb CHANGED
@@ -60,6 +60,8 @@ end
60
60
  module Fixtures
61
61
  module SuiteTest
62
62
  SUITE = RDF::URI("http://json-ld.org/test-suite/")
63
+ TEST_IRI_BASE = RDF::URI("http://example/").freeze
64
+
63
65
  class Manifest < JSON::LD::Resource
64
66
  def self.open(file)
65
67
  #puts "open: #{file}"
@@ -109,6 +111,45 @@ module Fixtures
109
111
  end
110
112
 
111
113
  def trace; @debug.join("\n"); end
114
+
115
+ # Don't use NQuads writer so that we don't escape Unicode
116
+ def to_quad(thing)
117
+ case thing
118
+ when RDF::URI
119
+ TEST_IRI_BASE.join(thing).canonicalize.to_ntriples
120
+ when RDF::Node
121
+ escaped(thing)
122
+ when RDF::Literal::Double
123
+ thing.canonicalize.to_ntriples
124
+ when RDF::Literal
125
+ v = quoted(escaped(thing.value))
126
+ case thing.datatype
127
+ when nil, "http://www.w3.org/2001/XMLSchema#string", "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
128
+ # Ignore these
129
+ else
130
+ v += "^^#{to_quad(thing.datatype)}"
131
+ end
132
+ v += "@#{thing.language}" if thing.language
133
+ v
134
+ when RDF::Statement
135
+ thing.to_quad.map {|r| to_quad(r)}.compact.join(" ") + " .\n"
136
+ end
137
+ end
138
+
139
+ ##
140
+ # @param [String] string
141
+ # @return [String]
142
+ def quoted(string)
143
+ "\"#{string}\""
144
+ end
145
+
146
+ ##
147
+ # @param [String, #to_s] string
148
+ # @return [String]
149
+ def escaped(string)
150
+ string.to_s.gsub('\\', '\\\\').gsub("\t", '\\t').
151
+ gsub("\n", '\\n').gsub("\r", '\\r').gsub('"', '\\"')
152
+ end
112
153
  end
113
154
  end
114
155
  end
@@ -15,7 +15,7 @@ describe JSON::LD do
15
15
  :base => t.base,
16
16
  :debug => t.debug
17
17
  ).map do |statement|
18
- to_quad(statement)
18
+ t.to_quad(statement)
19
19
  end
20
20
 
21
21
  sorted_expected = t.expect.readlines.uniq.sort.join("")
@@ -31,52 +31,4 @@ describe JSON::LD do
31
31
  end
32
32
  end
33
33
  end
34
-
35
- # Don't use NQuads writer so that we don't escape Unicode
36
- def to_quad(thing)
37
- case thing
38
- when RDF::URI
39
- "<#{escaped(thing.to_s)}>"
40
- when RDF::Node
41
- escaped(thing.to_s)
42
- when RDF::Literal::Double
43
- case
44
- when thing.object.nan?, thing.object.infinite?, thing.object.zero?
45
- thing.canonicalize.to_ntriples
46
- else
47
- i, f, e = ('%.15E' % thing.object.to_f).split(/[\.E]/)
48
- f.sub!(/0*$/, '') # remove any trailing zeroes
49
- f = '0' if f.empty? # ...but there must be a digit to the right of the decimal point
50
- e.sub!(/^\+?0+(\d)$/, '\1') # remove the optional leading '+' sign and any extra leading zeroes
51
- %("#{i}.#{f}E#{e}"^^<http://www.w3.org/2001/XMLSchema#double>)
52
- end
53
- when RDF::Literal
54
- v = quoted(escaped(thing.value))
55
- case thing.datatype
56
- when nil, "http://www.w3.org/2001/XMLSchema#string", "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
57
- # Ignore these
58
- else
59
- v += "^^<#{thing.datatype}>"
60
- end
61
- v += "@#{thing.language}" if thing.language
62
- v
63
- when RDF::Statement
64
- thing.to_quad.map {|r| to_quad(r)}.compact.join(" ") + " .\n"
65
- end
66
- end
67
-
68
- ##
69
- # @param [String] string
70
- # @return [String]
71
- def quoted(string)
72
- "\"#{string}\""
73
- end
74
-
75
- ##
76
- # @param [String] string
77
- # @return [String]
78
- def escaped(string)
79
- string.gsub('\\', '\\\\').gsub("\t", '\\t').
80
- gsub("\n", '\\n').gsub("\r", '\\r').gsub('"', '\\"')
81
- end
82
34
  end unless ENV['CI']
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.0.4
4
+ version: 1.0.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: 2013-08-17 00:00:00.000000000 Z
11
+ date: 2013-08-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rdf