rdf 1.1.0.p0 → 1.1.0.p1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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