rdf 1.1.0.p0 → 1.1.0.p1

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.
@@ -103,7 +103,7 @@ module RDF
103
103
  end
104
104
 
105
105
  ##
106
- # Returns `true` if `self` is a {RDF::Query::Variable}.
106
+ # Returns `true` this value is a {RDF::Query::Variable}, or is contains a variable.
107
107
  #
108
108
  # @return [Boolean]
109
109
  # @since 0.1.7
@@ -111,6 +111,15 @@ module RDF
111
111
  false
112
112
  end
113
113
 
114
+ ##
115
+ # Returns `true` if this value is constant.
116
+ #
117
+ # @return [Boolean] `true` or `false`
118
+ # @see #variable?
119
+ def constant?
120
+ !(variable?)
121
+ end
122
+
114
123
  ##
115
124
  # Is this an anonymous value?
116
125
  #
@@ -15,6 +15,7 @@ module RDF::NTriples
15
15
  # RDF::Format.for(:content_type => "text/plain")
16
16
  #
17
17
  # @see http://www.w3.org/TR/rdf-testcases/#ntriples
18
+ # @see http://www.w3.org/TR/n-triples/
18
19
  class Format < RDF::Format
19
20
  content_type 'application/n-triples', :extension => :nt, :alias => ['text/plain']
20
21
  content_encoding 'utf-8'
@@ -25,6 +25,7 @@ module RDF::NTriples
25
25
  # end
26
26
  #
27
27
  # @see http://www.w3.org/TR/rdf-testcases/#ntriples
28
+ # @see http://www.w3.org/TR/n-triples/
28
29
  class Reader < RDF::Reader
29
30
  format RDF::NTriples::Format
30
31
 
@@ -239,6 +240,8 @@ module RDF::NTriples
239
240
  uri.canonicalize! if canonicalize?
240
241
  uri
241
242
  end
243
+ rescue ArgumentError => e
244
+ raise RDF::ReaderError, "invalid URI"
242
245
  end
243
246
 
244
247
  ##
@@ -35,6 +35,7 @@ module RDF::NTriples
35
35
  # end
36
36
  #
37
37
  # @see http://www.w3.org/TR/rdf-testcases/#ntriples
38
+ # @see http://www.w3.org/TR/n-triples/
38
39
  class Writer < RDF::Writer
39
40
  format RDF::NTriples::Format
40
41
 
@@ -43,6 +44,10 @@ module RDF::NTriples
43
44
  ESCAPE_ASCII = /\A[\x00-\x7F]*\z/m.freeze
44
45
 
45
46
  ##
47
+ # Escape Literal and URI content. If encoding is ASCII, all unicode
48
+ # is escaped, otherwise only ASCII characters that must be escaped are
49
+ # escaped.
50
+ #
46
51
  # @param [String] string
47
52
  # @param [Encoding] encoding
48
53
  # @return [String]
@@ -53,7 +58,7 @@ module RDF::NTriples
53
58
  string
54
59
  when string.ascii_only?
55
60
  StringIO.open do |buffer|
56
- string.each_byte { |u| buffer << escape_ascii(u) }
61
+ string.each_byte { |u| buffer << escape_ascii(u, encoding) }
57
62
  buffer.string
58
63
  end
59
64
  when encoding && encoding != Encoding::ASCII
@@ -62,7 +67,7 @@ module RDF::NTriples
62
67
  string.each_char do |u|
63
68
  buffer << case u.ord
64
69
  when (0x00..0x7F)
65
- escape_ascii(u)
70
+ escape_ascii(u, encoding)
66
71
  else
67
72
  u
68
73
  end
@@ -70,6 +75,7 @@ module RDF::NTriples
70
75
  buffer.string
71
76
  end
72
77
  else
78
+ # Encode ASCII && UTF-8 characters
73
79
  StringIO.open do |buffer|
74
80
  string.each_codepoint { |u| buffer << escape_unicode(u, encoding) }
75
81
  buffer.string
@@ -89,7 +95,7 @@ module RDF::NTriples
89
95
  def self.escape_unicode(u, encoding)
90
96
  case (u = u.ord)
91
97
  when (0x00..0x7F) # ASCII 7-bit
92
- escape_ascii(u)
98
+ escape_ascii(u, encoding)
93
99
  when (0x80..0xFFFF) # Unicode BMP
94
100
  escape_utf16(u)
95
101
  when (0x10000..0x10FFFF) # Unicode
@@ -100,15 +106,22 @@ module RDF::NTriples
100
106
  end
101
107
 
102
108
  ##
109
+ # Standard ASCII escape sequences. If encoding is ASCII, use Test-Cases
110
+ # sequences, otherwise, assume the test-cases escape sequences. Otherwise,
111
+ # the N-Triples recommendation includes `\b` and `\f` escape sequences.
112
+ #
103
113
  # @param [Integer, #ord] u
104
114
  # @return [String]
105
115
  # @see http://www.w3.org/TR/rdf-testcases/#ntrip_strings
106
- def self.escape_ascii(u)
116
+ # @see http://www.w3.org/TR/n-triples/
117
+ def self.escape_ascii(u, encoding)
107
118
  case (u = u.ord)
108
- when (0x00..0x08) then escape_utf16(u)
119
+ when (0x00..0x07) then escape_utf16(u)
120
+ when (0x08) then (encoding && encoding == Encoding::ASCII ? escape_utf16(u) : "\\b")
109
121
  when (0x09) then "\\t"
110
122
  when (0x0A) then "\\n"
111
- when (0x0B..0x0C) then escape_utf16(u)
123
+ when (0x0B) then escape_utf16(u)
124
+ when (0x0C) then (encoding && encoding == Encoding::ASCII ? escape_utf16(u) : "\\f")
112
125
  when (0x0D) then "\\r"
113
126
  when (0x0E..0x1F) then escape_utf16(u)
114
127
  when (0x22) then "\\\""
@@ -67,29 +67,6 @@ module RDF; class Query
67
67
  subject.nil? && predicate.nil? && object.nil? && context.nil?
68
68
  end
69
69
 
70
- ##
71
- # Returns `true` if this is a constant pattern, with all terms being
72
- # either URIs, blank nodes, or literals.
73
- #
74
- # A constant pattern is structurally and functionally equivalent to an
75
- # RDF statement.
76
- #
77
- # @return [Boolean] `true` or `false`
78
- # @since 0.3.0
79
- def constant?
80
- !(variable?)
81
- end
82
-
83
- ##
84
- # Returns `true` if this is a variable pattern, with any term being
85
- # `nil` or a variable.
86
- #
87
- # @return [Boolean] `true` or `false`
88
- # @since 0.3.0
89
- def variable?
90
- subject.nil? || predicate.nil? || object.nil? || context.nil? || has_variables?
91
- end
92
-
93
70
  ##
94
71
  # Returns `true` if this pattern contains any variables.
95
72
  #
@@ -189,6 +189,7 @@ module RDF
189
189
  @options[:canonicalize] ||= false
190
190
  @options[:intern] ||= true
191
191
  @options[:prefixes] ||= Hash.new
192
+ @options[:base_uri] ||= input.base_uri if input.respond_to?(:base_uri)
192
193
 
193
194
  @input = case input
194
195
  when String then StringIO.new(input)
@@ -362,6 +363,13 @@ module RDF
362
363
  end
363
364
  alias_method :close!, :close
364
365
 
366
+ ##
367
+ # Current line number being processed. For formats that can associate generated {Statement} with a particular line number from input, this value reflects that line number.
368
+ # @return [Integer]
369
+ def lineno
370
+ @input.lineno
371
+ end
372
+
365
373
  protected
366
374
 
367
375
  ##
@@ -465,12 +473,6 @@ module RDF
465
473
  super
466
474
  end
467
475
 
468
- ##
469
- # @return [Integer]
470
- def lineno
471
- @input.lineno
472
- end
473
-
474
476
  ##
475
477
  # @private
476
478
  # @return [String] The most recently read line of the input
@@ -105,13 +105,18 @@ module RDF
105
105
  ##
106
106
  # @param [RDF::Enumerable, #each] data
107
107
  # the graph or repository to dump
108
- # @param [IO, File] io
108
+ # @param [IO, File, String] io
109
109
  # the output stream or file to write to
110
110
  # @param [Hash{Symbol => Object}] options
111
111
  # passed to {RDF::Writer#initialize} or {RDF::Writer.buffer}
112
112
  # @return [void]
113
113
  def self.dump(data, io = nil, options = {})
114
- io = File.open(io, 'w') if io.is_a?(String)
114
+ if io.is_a?(String)
115
+ io = File.open(io, 'w')
116
+ elsif io.respond_to?(:external_encoding) && io.external_encoding
117
+ options = {:encoding => io.external_encoding}.merge(options)
118
+ end
119
+ io.set_encoding(options[:encoding]) if io.respond_to?(:set_encoding) && options[:encoding]
115
120
  method = data.respond_to?(:each_statement) ? :each_statement : :each
116
121
  if io
117
122
  new(io, options) do |writer|
@@ -138,9 +143,11 @@ module RDF
138
143
  # @return [String]
139
144
  # @raise [ArgumentError] if no block is provided
140
145
  def self.buffer(*args, &block)
146
+ options = args.last.is_a?(Hash) ? args.last : {}
141
147
  raise ArgumentError, "block expected" unless block_given?
142
148
 
143
149
  StringIO.open do |buffer|
150
+ buffer.set_encoding(options[:encoding]) if options[:encoding]
144
151
  self.new(buffer, *args) { |writer| block.call(writer) }
145
152
  buffer.string
146
153
  end
@@ -156,6 +163,7 @@ module RDF
156
163
  # @return [RDF::Writer]
157
164
  def self.open(filename, options = {}, &block)
158
165
  File.open(filename, 'wb') do |file|
166
+ file.set_encoding(options[:encoding]) if options[:encoding]
159
167
  format_options = options.dup
160
168
  format_options[:file_name] ||= filename
161
169
  self.for(options[:format] || format_options).new(file, options, &block)
@@ -436,7 +444,7 @@ module RDF
436
444
  ##
437
445
  # @return [void]
438
446
  def puts(*args)
439
- @output.puts(*args)
447
+ @output.puts(*args.map {|s| s.force_encoding(encoding)})
440
448
  end
441
449
 
442
450
  ##
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rdf
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0.p0
4
+ version: 1.1.0.p1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arto Bendiken
@@ -10,36 +10,22 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-03-23 00:00:00.000000000 Z
13
+ date: 2013-04-13 00:00:00.000000000 Z
14
14
  dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: addressable
17
- requirement: !ruby/object:Gem::Requirement
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '2.2'
22
- type: :runtime
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- requirements:
26
- - - ! '>='
27
- - !ruby/object:Gem::Version
28
- version: '2.2'
29
15
  - !ruby/object:Gem::Dependency
30
16
  name: rdf-spec
31
17
  requirement: !ruby/object:Gem::Requirement
32
18
  requirements:
33
19
  - - ~>
34
20
  - !ruby/object:Gem::Version
35
- version: 1.1.0.p
21
+ version: 1.1.0
36
22
  type: :development
37
23
  prerelease: false
38
24
  version_requirements: !ruby/object:Gem::Requirement
39
25
  requirements:
40
26
  - - ~>
41
27
  - !ruby/object:Gem::Version
42
- version: 1.1.0.p
28
+ version: 1.1.0
43
29
  - !ruby/object:Gem::Dependency
44
30
  name: rspec
45
31
  requirement: !ruby/object:Gem::Requirement
@@ -105,10 +91,8 @@ files:
105
91
  - lib/rdf/model/literal/double.rb
106
92
  - lib/rdf/model/literal/integer.rb
107
93
  - lib/rdf/model/literal/numeric.rb
108
- - lib/rdf/model/literal/string.rb
109
94
  - lib/rdf/model/literal/time.rb
110
95
  - lib/rdf/model/literal/token.rb
111
- - lib/rdf/model/literal/xml.rb
112
96
  - lib/rdf/model/literal.rb
113
97
  - lib/rdf/model/node.rb
114
98
  - lib/rdf/model/resource.rb
@@ -170,7 +154,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
170
154
  requirements:
171
155
  - - ! '>='
172
156
  - !ruby/object:Gem::Version
173
- version: 1.9.3
157
+ version: 1.9.2
174
158
  required_rubygems_version: !ruby/object:Gem::Requirement
175
159
  requirements:
176
160
  - - ! '>'
@@ -1,38 +0,0 @@
1
- module RDF; class Literal
2
- ##
3
- # A String literal.
4
- #
5
- # @see http://www.w3.org/TR/xmlschema-2/#string
6
- # @since 0.3.11
7
- class String < Literal
8
- DATATYPE = XSD.string
9
- GRAMMAR = nil
10
-
11
- ##
12
- # @param [Object] value
13
- # @option options [String] :lexical (nil)
14
- def initialize(value, options = {})
15
- @datatype = options[:datatype] || self.class.const_get(:DATATYPE)
16
- @string = options[:lexical] if options.has_key?(:lexical)
17
- @string ||= value if value.is_a?(String)
18
- @object = value.to_s
19
- end
20
-
21
- ##
22
- # Converts this literal into its canonical lexical representation.
23
- #
24
- # @return [RDF::Literal] `self`
25
- # @see http://www.w3.org/TR/xml-exc-c14n/
26
- def canonicalize!
27
- self
28
- end
29
-
30
- ##
31
- # Returns the value as a string.
32
- #
33
- # @return [String]
34
- def to_s
35
- @string || @object
36
- end
37
- end # XML
38
- end; end # RDF::Literal
@@ -1,41 +0,0 @@
1
- module RDF; class Literal
2
- ##
3
- # An XML literal.
4
- #
5
- # This class exists mostly as a stub. See RDF::XSD gem for full support.
6
-
7
- # @see https://github.com/ruby-rdf/rdf-xsd/blob/master/lib/rdf/xsd/xml.rb
8
- # @see http://www.w3.org/TR/rdf-concepts/#section-XMLLiteral
9
- # @see http://www.w3.org/TR/rdfa-core/#s_xml_literals
10
- # @since 0.2.1
11
- class XML < Literal
12
- DATATYPE = RDF.XMLLiteral
13
- GRAMMAR = nil
14
-
15
- ##
16
- # @param [Object] value
17
- # @option options [String] :lexical (nil)
18
- def initialize(value, options = {})
19
- @datatype = options[:datatype] || self.class.const_get(:DATATYPE)
20
- @string = options[:lexical] if options.has_key?(:lexical)
21
- @object = value # TODO: parse XML string using REXML
22
- end
23
-
24
- ##
25
- # Converts this literal into its canonical lexical representation.
26
- #
27
- # @return [RDF::Literal] `self`
28
- # @see http://www.w3.org/TR/xml-exc-c14n/
29
- def canonicalize!
30
- self
31
- end
32
-
33
- ##
34
- # Returns the value as a string.
35
- #
36
- # @return [String]
37
- def to_s
38
- @string || @object.to_s
39
- end
40
- end # XML
41
- end; end # RDF::Literal