json-ld 0.1.6 → 0.1.6.1
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.
- data/History.markdown +3 -0
- data/VERSION +1 -1
- data/lib/json/ld/api.rb +2 -1
- data/lib/json/ld/evaluation_context.rb +25 -10
- data/lib/json/ld/from_rdf.rb +6 -5
- data/spec/evaluation_context_spec.rb +13 -1
- data/spec/from_rdf_spec.rb +29 -5
- metadata +2 -2
data/History.markdown
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.6
|
1
|
+
0.1.6.1
|
data/lib/json/ld/api.rb
CHANGED
@@ -368,7 +368,8 @@ module JSON::LD
|
|
368
368
|
# @param [Proc] callback (&block)
|
369
369
|
# Alternative to using block, with same parameteres.
|
370
370
|
# @param [Hash{Symbol => Object}] options
|
371
|
-
# @option options [Boolean] :
|
371
|
+
# @option options [Boolean] :useRdfType (false) use rdf:type instead of @type
|
372
|
+
# @option options [Boolean] :useNativeDatatypes FIXME
|
372
373
|
# @yield jsonld
|
373
374
|
# @yieldparam [Hash] jsonld
|
374
375
|
# The JSON-LD document in expanded form
|
@@ -13,6 +13,11 @@ module JSON::LD
|
|
13
13
|
# @attr_reader [RDF::URI]
|
14
14
|
attr_reader :base
|
15
15
|
|
16
|
+
# The base IRI of the context, if loaded remotely.
|
17
|
+
#
|
18
|
+
# @attr [RDF::URI]
|
19
|
+
attr :context_base, true
|
20
|
+
|
16
21
|
# A list of current, in-scope mappings from term to IRI.
|
17
22
|
#
|
18
23
|
# @attr [Hash{String => String}]
|
@@ -132,18 +137,26 @@ module JSON::LD
|
|
132
137
|
raise JSON::LD::InvalidContext::Syntax, "Failed to parse remote context at #{context}: #{e.message}" if @options[:validate]
|
133
138
|
self.dup
|
134
139
|
end
|
135
|
-
when
|
140
|
+
when nil
|
141
|
+
debug("parse") {"nil"}
|
142
|
+
# Load context document, if it is a string
|
143
|
+
ec = EvaluationContext.new(options)
|
144
|
+
when String
|
136
145
|
debug("parse") {"remote: #{context}"}
|
137
146
|
# Load context document, if it is a string
|
138
147
|
ec = nil
|
139
148
|
begin
|
140
|
-
|
149
|
+
url = expand_iri(context, :base => context_base || base, :position => :subject)
|
150
|
+
ecdup = self.dup
|
151
|
+
ecdup.context_base = url # Set context_base for recursive remote contexts
|
152
|
+
RDF::Util::File.open_file(url) {|f| ec = ecdup.parse(f)}
|
141
153
|
ec.provided_context = context
|
154
|
+
ec.context_base = url
|
142
155
|
debug("parse") {"=> provided_context: #{context.inspect}"}
|
143
156
|
ec
|
144
157
|
rescue Exception => e
|
145
|
-
debug("parse") {"Failed to retrieve @context from remote document at #{context}: #{e.message}"}
|
146
|
-
raise JSON::LD::InvalidContext::LoadError, "Failed to
|
158
|
+
debug("parse") {"Failed to retrieve @context from remote document at #{context.inspect}: #{e.message}"}
|
159
|
+
raise JSON::LD::InvalidContext::LoadError, "Failed to retrieve remote context at #{context.inspect}: #{e.message}", e.backtrace if @options[:validate]
|
147
160
|
self.dup
|
148
161
|
end
|
149
162
|
when Array
|
@@ -467,6 +480,8 @@ module JSON::LD
|
|
467
480
|
# @param [Hash{Symbol => Object}] options
|
468
481
|
# @option options [:subject, :predicate, :object, :datatype] position
|
469
482
|
# Useful when determining how to serialize.
|
483
|
+
# @option options [RDF::URI] base (self.base)
|
484
|
+
# Base IRI to use when expanding relative IRIs.
|
470
485
|
#
|
471
486
|
# @return [RDF::URI, String] IRI or String, if it's a keyword
|
472
487
|
# @raise [RDF::ReaderError] if the iri cannot be expanded
|
@@ -476,7 +491,7 @@ module JSON::LD
|
|
476
491
|
prefix, suffix = iri.split(':', 2)
|
477
492
|
return mapping(iri) if mapping(iri) # If it's an exact match
|
478
493
|
debug("expand_iri") {"prefix: #{prefix.inspect}, suffix: #{suffix.inspect}, vocab: #{vocab.inspect}"} unless options[:quiet]
|
479
|
-
base = [:subject, :object].include?(options[:position]) ? self.base : nil
|
494
|
+
base = [:subject, :object].include?(options[:position]) ? options.fetch(:base, self.base) : nil
|
480
495
|
prefix = prefix.to_s
|
481
496
|
case
|
482
497
|
when prefix == '_' && suffix then bnode(suffix)
|
@@ -654,13 +669,13 @@ module JSON::LD
|
|
654
669
|
# @param [Hash, String] value
|
655
670
|
# Value (literal or IRI) to be expanded
|
656
671
|
# @param [Hash{Symbol => Object}] options
|
657
|
-
# @option options [Boolean] :
|
672
|
+
# @option options [Boolean] :useNativeTypes (true) use native representations
|
658
673
|
#
|
659
674
|
# @return [Hash] Object representation of value
|
660
675
|
# @raise [RDF::ReaderError] if the iri cannot be expanded
|
661
676
|
# @see http://json-ld.org/spec/latest/json-ld-api/#value-expansion
|
662
677
|
def expand_value(property, value, options = {})
|
663
|
-
options = {:
|
678
|
+
options = {:useNativeTypes => true}.merge(options)
|
664
679
|
depth(options) do
|
665
680
|
debug("expand_value") {"property: #{property.inspect}, value: #{value.inspect}, coerce: #{coerce(property).inspect}"}
|
666
681
|
value = RDF::Literal(value) if RDF::Literal(value).has_datatype?
|
@@ -681,7 +696,7 @@ module JSON::LD
|
|
681
696
|
when RDF::XSD.double.to_s
|
682
697
|
{"@value" => value.to_s, "@type" => RDF::XSD.double.to_s}
|
683
698
|
else
|
684
|
-
if options[:
|
699
|
+
if options[:useNativeTypes]
|
685
700
|
# Unless there's coercion, to not modify representation
|
686
701
|
{"@value" => (value.is_a?(RDF::Literal::Boolean) ? value.object : value)}
|
687
702
|
else
|
@@ -695,7 +710,7 @@ module JSON::LD
|
|
695
710
|
{"@value" => RDF::Literal::Double.new(value, :canonicalize => true).to_s, "@type" => RDF::XSD.double.to_s}
|
696
711
|
when RDF::XSD.integer.to_s, nil
|
697
712
|
# Unless there's coercion, to not modify representation
|
698
|
-
if options[:
|
713
|
+
if options[:useNativeTypes]
|
699
714
|
{"@value" => value.is_a?(RDF::Literal::Integer) ? value.object : value}
|
700
715
|
else
|
701
716
|
{"@value" => value.to_s, "@type" => RDF::XSD.integer.to_s}
|
@@ -714,7 +729,7 @@ module JSON::LD
|
|
714
729
|
when RDF::XSD.double.to_s
|
715
730
|
{"@value" => RDF::Literal::Double.new(value, :canonicalize => true).to_s, "@type" => RDF::XSD.double.to_s}
|
716
731
|
when nil
|
717
|
-
if options[:
|
732
|
+
if options[:useNativeTypes]
|
718
733
|
# Unless there's coercion, to not modify representation
|
719
734
|
{"@value" => value.is_a?(RDF::Literal::Double) ? value.object : value}
|
720
735
|
else
|
data/lib/json/ld/from_rdf.rb
CHANGED
@@ -64,8 +64,8 @@ module JSON::LD
|
|
64
64
|
value = graph[:nodes][subject] ||= {'@id' => subject}
|
65
65
|
|
66
66
|
# If property is http://www.w3.org/1999/02/22-rdf-syntax-ns#type
|
67
|
-
# and the
|
68
|
-
if statement.predicate == RDF.type && !@options[:
|
67
|
+
# and the useRdfType option is not true
|
68
|
+
if statement.predicate == RDF.type && !@options[:useRdfType]
|
69
69
|
object = ec.expand_iri(statement.object).to_s
|
70
70
|
debug("@type") { object.inspect}
|
71
71
|
# append the string representation of object to the array value for the key @type, creating
|
@@ -78,10 +78,11 @@ module JSON::LD
|
|
78
78
|
key = ec.expand_iri(statement.predicate).to_s
|
79
79
|
(value[key] ||= []) << {"@list" => []}
|
80
80
|
else
|
81
|
-
# Otherwise, let key be the string representation of predicate and
|
82
|
-
# be object represented in expanded form as
|
81
|
+
# Otherwise, let key be the string representation of predicate and
|
82
|
+
# let object representation be object represented in expanded form as
|
83
|
+
# described in Value Expansion.
|
83
84
|
key = ec.expand_iri(statement.predicate).to_s
|
84
|
-
object = ec.expand_value(key, statement.object,
|
85
|
+
object = ec.expand_value(key, statement.object, @options)
|
85
86
|
if blank_node?(object)
|
86
87
|
# if object is an Unnamed Node, set as the head element in the listMap
|
87
88
|
# entry for object
|
@@ -32,7 +32,7 @@ describe JSON::LD::EvaluationContext do
|
|
32
32
|
|
33
33
|
it "fails given a missing remote @context" do
|
34
34
|
RDF::Util::File.stub(:open_file).with("http://example.com/context").and_raise(IOError)
|
35
|
-
lambda {subject.parse("http://example.com/context")}.should raise_error(JSON::LD::InvalidContext, /Failed to
|
35
|
+
lambda {subject.parse("http://example.com/context")}.should raise_error(JSON::LD::InvalidContext, /Failed to retrieve remote context/)
|
36
36
|
end
|
37
37
|
|
38
38
|
it "creates mappings" do
|
@@ -49,6 +49,18 @@ describe JSON::LD::EvaluationContext do
|
|
49
49
|
ec = subject.parse(StringIO.new("{}"))
|
50
50
|
ec.mappings.should produce({}, @debug)
|
51
51
|
end
|
52
|
+
|
53
|
+
it "parses a referenced context at a relative URI" do
|
54
|
+
c1 = StringIO.new(%({"@context": "context"}))
|
55
|
+
RDF::Util::File.stub(:open_file).with("http://example.com/c1").and_yield(c1)
|
56
|
+
RDF::Util::File.stub(:open_file).with("http://example.com/context").and_yield(@ctx)
|
57
|
+
ec = subject.parse("http://example.com/c1")
|
58
|
+
ec.mappings.should produce({
|
59
|
+
"name" => "http://xmlns.com/foaf/0.1/name",
|
60
|
+
"homepage" => "http://xmlns.com/foaf/0.1/homepage",
|
61
|
+
"avatar" => "http://xmlns.com/foaf/0.1/avatar"
|
62
|
+
}, @debug)
|
63
|
+
end
|
52
64
|
end
|
53
65
|
|
54
66
|
context "EvaluationContext" do
|
data/spec/from_rdf_spec.rb
CHANGED
@@ -65,6 +65,14 @@ describe JSON::LD::API do
|
|
65
65
|
it "integer" do
|
66
66
|
input = %(@prefix ex: <http://example.com/> . ex:a ex:b 1 .)
|
67
67
|
serialize(input).should produce([{
|
68
|
+
'@id' => "http://example.com/a",
|
69
|
+
"http://example.com/b" => [{"@value" => 1}]
|
70
|
+
}], @debug)
|
71
|
+
end
|
72
|
+
|
73
|
+
it "integer (non-native)" do
|
74
|
+
input = %(@prefix ex: <http://example.com/> . ex:a ex:b 1 .)
|
75
|
+
serialize(input, :useNativeTypes => false).should produce([{
|
68
76
|
'@id' => "http://example.com/a",
|
69
77
|
"http://example.com/b" => [{"@value" => "1","@type" => "http://www.w3.org/2001/XMLSchema#integer"}]
|
70
78
|
}], @debug)
|
@@ -73,6 +81,14 @@ describe JSON::LD::API do
|
|
73
81
|
it "boolean" do
|
74
82
|
input = %(@prefix ex: <http://example.com/> . ex:a ex:b true .)
|
75
83
|
serialize(input).should produce([{
|
84
|
+
'@id' => "http://example.com/a",
|
85
|
+
"http://example.com/b" => [{"@value" => true}]
|
86
|
+
}], @debug)
|
87
|
+
end
|
88
|
+
|
89
|
+
it "boolean (non-native)" do
|
90
|
+
input = %(@prefix ex: <http://example.com/> . ex:a ex:b true .)
|
91
|
+
serialize(input, :useNativeTypes => false).should produce([{
|
76
92
|
'@id' => "http://example.com/a",
|
77
93
|
"http://example.com/b" => [{"@value" => "true","@type" => "http://www.w3.org/2001/XMLSchema#boolean"}]
|
78
94
|
}], @debug)
|
@@ -89,13 +105,21 @@ describe JSON::LD::API do
|
|
89
105
|
it "double" do
|
90
106
|
input = %(@prefix ex: <http://example.com/> . ex:a ex:b 1.0e0 .)
|
91
107
|
serialize(input).should produce([{
|
108
|
+
'@id' => "http://example.com/a",
|
109
|
+
"http://example.com/b" => [{"@value" => 1.0E0}]
|
110
|
+
}], @debug)
|
111
|
+
end
|
112
|
+
|
113
|
+
it "double (non-native)" do
|
114
|
+
input = %(@prefix ex: <http://example.com/> . ex:a ex:b 1.0e0 .)
|
115
|
+
serialize(input, :useNativeTypes => false).should produce([{
|
92
116
|
'@id' => "http://example.com/a",
|
93
117
|
"http://example.com/b" => [{"@value" => "1.0E0","@type" => "http://www.w3.org/2001/XMLSchema#double"}]
|
94
118
|
}], @debug)
|
95
119
|
end
|
96
120
|
end
|
97
121
|
|
98
|
-
context "datatyped" do
|
122
|
+
context "datatyped (non-native)" do
|
99
123
|
{
|
100
124
|
:integer => 1,
|
101
125
|
:unsignedInteger => 1,
|
@@ -110,7 +134,7 @@ describe JSON::LD::API do
|
|
110
134
|
@prefix ex: <http://example.com/> .
|
111
135
|
ex:a ex:b "#{v}"^^xsd:#{t} .
|
112
136
|
)
|
113
|
-
serialize(input).should produce([{
|
137
|
+
serialize(input, :useNativeTypes => false).should produce([{
|
114
138
|
'@id' => "http://example.com/a",
|
115
139
|
"http://example.com/b" => [{"@value" => "#{v}","@type" => "http://www.w3.org/2001/XMLSchema##{t}"}]
|
116
140
|
}], @debug)
|
@@ -307,10 +331,10 @@ describe JSON::LD::API do
|
|
307
331
|
end
|
308
332
|
end
|
309
333
|
|
310
|
-
context "
|
334
|
+
context "useRdfType option" do
|
311
335
|
it "uses @type if set to false" do
|
312
336
|
input = %(@prefix ex: <http://example.com/> . ex:a a ex:b .)
|
313
|
-
serialize(input, :
|
337
|
+
serialize(input, :useRdfType => false).should produce([{
|
314
338
|
'@id' => "http://example.com/a",
|
315
339
|
"@type" => ["http://example.com/b"]
|
316
340
|
}], @debug)
|
@@ -318,7 +342,7 @@ describe JSON::LD::API do
|
|
318
342
|
|
319
343
|
it "does not use @type if set to true" do
|
320
344
|
input = %(@prefix ex: <http://example.com/> . ex:a a ex:b .)
|
321
|
-
serialize(input, :
|
345
|
+
serialize(input, :useRdfType => true).should produce([{
|
322
346
|
'@id' => "http://example.com/a",
|
323
347
|
RDF.type.to_s => [{"@id" => "http://example.com/b"}]
|
324
348
|
}], @debug)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json-ld
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.6
|
4
|
+
version: 0.1.6.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-09-
|
12
|
+
date: 2012-09-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rdf
|