rdf-turtle 3.2.1 → 3.3.1

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
  SHA256:
3
- metadata.gz: 57d92c642076069a911db896415fa9dbd3203b6c82a9074e0fc8a53dafb2389d
4
- data.tar.gz: 238620d914ce1ff78d8710e12083d03eacb5f9be7106d0d12ef15c5105445b72
3
+ metadata.gz: '086c95b097002c034394631a59d5d4c52fe4403eaea9b68bf2d241b45951dca3'
4
+ data.tar.gz: 68fa875004dfcebf6295444ff9aa945689c58fe0c54d6b5e14ad91dc9d9f0d02
5
5
  SHA512:
6
- metadata.gz: 0db24a8c173d7b522ba06e1af9e957c513a551a211d22b6a2d19b7218a79e236f6db1f66b738a1a76e5b96ef6161f432f7ece17dea4af8d3de46520960a89977
7
- data.tar.gz: a2826f9e8fbd34364acc54a117e283067982491e9c8e736ac1c8fcb86aac1f6a3acc43811040242fea19e79019d809fd14dae6b46ecc0568b67775dddd84369d
6
+ metadata.gz: 2b69fe9cdd04a28078122d80f6d0e79a34b1223b9254aa4d4347714042cc0292a4d4051a6a3dae08305e999b63811a54dbfb491b7c2e0d394ebaab4f039ed011
7
+ data.tar.gz: 3686da200196de7c4e21eaf52a6e6ea927796cd4221722be9c6d7a8868faf0b2896a3713d684b1cadab9179b6b47673c5b8917c8376581f335b286c45fca7cb2
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [Turtle][] reader/writer for [RDF.rb][RDF.rb] .
4
4
 
5
- [![Gem Version](https://badge.fury.io/rb/rdf-turtle.png)](https://badge.fury.io/rb/rdf-turtle)
5
+ [![Gem Version](https://badge.fury.io/rb/rdf-turtle.svg)](https://badge.fury.io/rb/rdf-turtle)
6
6
  [![Build Status](https://github.com/ruby-rdf/rdf-turtle/workflows/CI/badge.svg?branch=develop)](https://github.com/ruby-rdf/rdf-turtle/actions?query=workflow%3ACI)
7
7
  [![Coverage Status](https://coveralls.io/repos/ruby-rdf/rdf-turtle/badge.svg?branch=develop)](https://coveralls.io/github/ruby-rdf/rdf-turtle?branch=develop)
8
8
  [![Gitter chat](https://badges.gitter.im/ruby-rdf/rdf.png)](https://gitter.im/ruby-rdf/rdf)
@@ -17,9 +17,9 @@ Install with `gem install rdf-turtle`
17
17
 
18
18
  * 100% free and unencumbered [public domain](https://unlicense.org/) software.
19
19
  * Implements a complete parser for [Turtle][].
20
- * Compatible with Ruby >= 2.6.
20
+ * Compatible with Ruby >= 3.0.
21
21
  * Optional streaming writer, to serialize large graphs
22
- * Provisional support for [Turtle-star][RDF-star].
22
+ * Provisional support for [RDF 1.2][].
23
23
 
24
24
  ## Usage
25
25
  Instantiate a reader from a local file:
@@ -36,15 +36,17 @@ Write a graph to a file:
36
36
  writer << graph
37
37
  end
38
38
 
39
- ## Turtle-star (RDF-star)
39
+ ## RDF 1.2
40
40
 
41
- Both reader and writer include provisional support for [Turtle-star][RDF-star].
41
+ Both reader and writer include provisional support for [RDF 1.2][] quoted triples.
42
+
43
+ Both reader and writer include provisional support for [RDF 1.2][] directional language-tagged strings, which are literals of type `rdf:dirLangString` having both a `language` and `direction`.
42
44
 
43
45
  Internally, an `RDF::Statement` is treated as another resource, along with `RDF::URI` and `RDF::Node`, which allows an `RDF::Statement` to have a `#subject` or `#object` which is also an `RDF::Statement`.
44
46
 
45
47
  **Note: This feature is subject to change or elimination as the standards process progresses.**
46
48
 
47
- ### Serializing a Graph containing embedded statements
49
+ ### Serializing a Graph containing quoted triples
48
50
 
49
51
  require 'rdf/turtle'
50
52
  statement = RDF::Statement(RDF::URI('bob'), RDF::Vocab::FOAF.age, RDF::Literal(23))
@@ -52,7 +54,7 @@ Internally, an `RDF::Statement` is treated as another resource, along with `RDF:
52
54
  graph.dump(:ttl, validate: false, standard_prefixes: true)
53
55
  # => '<<<bob> foaf:age 23>> <ex:certainty> 9.0e-1 .'
54
56
 
55
- ### Reading a Graph containing embedded statements
57
+ ### Reading a Graph containing quoted triples
56
58
 
57
59
  By default, the Turtle reader will reject a document containing a subject resource.
58
60
 
@@ -138,11 +140,15 @@ An example of reading Freebase dumps:
138
140
  ## Implementation Notes
139
141
  This version uses a hand-written parser using the Lexer from the [EBNF][] gem instead of a general [EBNF][] LL(1) parser for faster performance.
140
142
 
143
+ ## Change Log
144
+
145
+ See [Release Notes on GitHub](https://github.com/ruby-rdf/rdf-turtle/releases)
146
+
141
147
  ## Dependencies
142
148
 
143
- * [Ruby](https://ruby-lang.org/) (>= 2.6)
144
- * [RDF.rb](https://rubygems.org/gems/rdf) (~> 3.2)
145
- * [EBNF][] (~> 1.2)
149
+ * [Ruby](https://ruby-lang.org/) (>= 3.0)
150
+ * [RDF.rb](https://rubygems.org/gems/rdf) (~> 3.3)
151
+ * [EBNF][] (~> 2.5)
146
152
 
147
153
  ## Installation
148
154
 
@@ -187,10 +193,10 @@ A copy of the [Turtle EBNF][] and derived parser files are included in the repos
187
193
  [PDD]: https://unlicense.org/#unlicensing-contributions
188
194
  [RDF.rb]: https://ruby-rdf.github.io/rdf
189
195
  [EBNF]: https://rubygems.org/gems/ebnf
190
- [Backports]: https://rubygems.org/gems/backports
191
- [N-Triples]: https://www.w3.org/TR/rdf-testcases/#ntriples
192
- [Turtle]: https://www.w3.org/TR/2012/WD-turtle-20120710/
193
- [RDF-star]: https://w3c.github.io/rdf-star/rdf-star-cg-spec.html
196
+ [N-Triples]: https://www.w3.org/TR/rdf12-n-triples
197
+ [Turtle]: https://www.w3.org/TR/rdf12-turtle
198
+ [RDF 1.1]: https://www.w3.org/TR/rdf11-concepts/
199
+ [RDF 1.2]: https://www.w3.org/TR/rdf12-concepts/
194
200
  [Turtle doc]: https://ruby-rdf.github.io/rdf-turtle/master/file/README.md
195
- [Turtle EBNF]: https://dvcs.w3.org/hg/rdf/file/default/rdf-turtle/turtle.bnf
196
- [Freebase Dumps]: https://developers.google.com/freebase/data
201
+ [Turtle EBNF]: https://w3c.github.io/rdf-turtle/spec/turtle-bnf.html
202
+ [Freebase Dumps]: https://developers.google.com/freebase/data
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.2.1
1
+ 3.3.1
@@ -64,6 +64,14 @@ module RDF::Turtle
64
64
  end
65
65
  pfx_iri = prefix(ns)
66
66
  raise RDF::ReaderError.new("ERROR [line #{lineno}] prefix #{ns.inspect} is not defined", lineno: lineno) unless pfx_iri
67
+
68
+ # Unescape PN_LOCAL_ESC
69
+ suffix = suffix.gsub(PN_LOCAL_ESC) {|esc| esc[1]} if
70
+ suffix.match?(PN_LOCAL_ESC)
71
+
72
+ # Remove any redundant leading hash from suffix
73
+ suffix = suffix.sub(/^\#/, "") if pfx_iri.to_s.index("#")
74
+
67
75
  uri = RDF::URI(pfx_iri + suffix)
68
76
  uri.validate! if validate?
69
77
  uri
@@ -79,8 +87,9 @@ module RDF::Turtle
79
87
  if literal_str = match(LITERAL_PLAIN)
80
88
  literal_str = self.class.unescape(literal_str)
81
89
  literal = case
82
- when language = match(RDF::NTriples::Reader::LANGTAG)
83
- RDF::Literal.new(literal_str, language: language)
90
+ when lang_dir = match(RDF::Turtle::Reader::LANG_DIR)
91
+ language, direction = lang_dir.split('--')
92
+ RDF::Literal.new(literal_str, language: language, direction: direction)
84
93
  when datatype = match(/^(\^\^)/)
85
94
  RDF::Literal.new(literal_str, datatype: read_pname(intern: true) || read_uriref || fail_object)
86
95
  else
@@ -36,7 +36,7 @@ module RDF::Turtle
36
36
 
37
37
  terminal(:PREFIX, PREFIX)
38
38
  terminal(:BASE, BASE)
39
- terminal(:LANGTAG, LANGTAG)
39
+ terminal(:LANG_DIR, LANG_DIR)
40
40
 
41
41
  ##
42
42
  # Reader options
@@ -227,7 +227,14 @@ module RDF::Turtle
227
227
  error("undefined prefix", production: :pname, token: prefix)
228
228
  ''
229
229
  end
230
- suffix = suffix.to_s.sub(/^\#/, "") if base.index("#")
230
+
231
+ # Unescape PN_LOCAL_ESC
232
+ suffix = suffix.gsub(PN_LOCAL_ESC) {|esc| esc[1]} if
233
+ suffix.match?(PN_LOCAL_ESC)
234
+
235
+ # Remove any redundant leading hash from suffix
236
+ suffix = suffix.sub(/^\#/, "") if base.index("#")
237
+
231
238
  debug("pname", depth: options[:depth]) {"base: '#{base}', suffix: '#{suffix}'"}
232
239
  process_iri(base + suffix.to_s)
233
240
  end
@@ -394,7 +401,7 @@ module RDF::Turtle
394
401
  end
395
402
  end
396
403
 
397
- # Read an RDF-star reified statement
404
+ # Read a quoted triple
398
405
  # @return [RDF::Statement]
399
406
  def read_quotedTriple
400
407
  return unless @options[:rdfstar]
@@ -470,8 +477,10 @@ module RDF::Turtle
470
477
  value = @lexer.shift.value[1..-2]
471
478
  error("read_literal", "Unexpected end of file") unless token = @lexer.first
472
479
  case token.type || token.value
473
- when :LANGTAG
474
- literal(value, language: @lexer.shift.value[1..-1].to_sym)
480
+ when :LANG_DIR
481
+ lang_dir = @lexer.shift.value[1..-1]
482
+ language, direction = lang_dir.split('--')
483
+ literal(value, language: language, direction: direction)
475
484
  when '^^'
476
485
  @lexer.shift
477
486
  literal(value, datatype: read_iri)
@@ -484,8 +493,10 @@ module RDF::Turtle
484
493
  value = @lexer.shift.value[3..-4]
485
494
  error("read_literal", "Unexpected end of file") unless token = @lexer.first
486
495
  case token.type || token.value
487
- when :LANGTAG
488
- literal(value, language: @lexer.shift.value[1..-1].to_sym)
496
+ when :LANG_DIR
497
+ lang_dir = @lexer.shift.value[1..-1]
498
+ language, direction = lang_dir.split('--')
499
+ literal(value, language: language, direction: direction)
489
500
  when '^^'
490
501
  @lexer.shift
491
502
  literal(value, datatype: read_iri)
@@ -48,7 +48,7 @@ module RDF::Turtle
48
48
  # 141s
49
49
  BLANK_NODE_LABEL = /_:(?:[0-9]|#{PN_CHARS_U})(?:(?:#{PN_CHARS}|\.)*#{PN_CHARS})?/u.freeze
50
50
  # 144s
51
- LANGTAG = /@[a-zA-Z]+(?:-[a-zA-Z0-9]+)*/u.freeze
51
+ LANG_DIR = /@([a-zA-Z]+(?:-[a-zA-Z0-9]+)*(?:--[a-zA-Z]+)?)/u.freeze
52
52
  # 19
53
53
  INTEGER = /[+-]?[0-9]+/u.freeze
54
54
  # 20
@@ -87,7 +87,7 @@ module RDF::Turtle
87
87
  symbol: :literal_shorthand,
88
88
  datatype: FalseClass,
89
89
  on: ["--no-literal-shorthand"],
90
- description: "Do not ttempt to use Literal shorthands fo numbers and boolean values.") {false},
90
+ description: "Do not attempt to use Literal shorthands fo numbers and boolean values.") {false},
91
91
  ]
92
92
  end
93
93
 
@@ -215,7 +215,7 @@ module RDF::Turtle
215
215
  end
216
216
 
217
217
  pname = case
218
- when @uri_to_pname.has_key?(uri)
218
+ when @uri_to_pname.key?(uri)
219
219
  return @uri_to_pname[uri]
220
220
  when u = @uri_to_prefix.keys.sort_by {|uu| uu.length}.reverse.detect {|uu| uri.index(uu.to_s) == 0}
221
221
  # Use a defined prefix
@@ -296,8 +296,9 @@ module RDF::Turtle
296
296
  in_form ? literal.value : literal.canonicalize.to_s.sub('E', 'e').to_s
297
297
  else
298
298
  text = quoted(literal.value)
299
- text << "@#{literal.language}" if literal.has_language?
300
- text << "^^#{format_uri(literal.datatype)}" if literal.has_datatype?
299
+ text << "@#{literal.language}" if literal.language?
300
+ text << "--#{literal.direction}" if literal.direction?
301
+ text << "^^#{format_uri(literal.datatype)}" if literal.datatype?
301
302
  text
302
303
  end
303
304
  else
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rdf-turtle
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.1
4
+ version: 3.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gregg Kellogg
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-28 00:00:00.000000000 Z
11
+ date: 2024-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rdf
@@ -16,28 +16,62 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '3.2'
19
+ version: '3.3'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '3.2'
26
+ version: '3.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: ebnf
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '2.3'
33
+ version: '2.5'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '2.3'
40
+ version: '2.5'
41
+ - !ruby/object:Gem::Dependency
42
+ name: base64
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.2'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bigdecimal
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.1'
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: 3.1.5
65
+ type: :runtime
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - "~>"
70
+ - !ruby/object:Gem::Version
71
+ version: '3.1'
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 3.1.5
41
75
  - !ruby/object:Gem::Dependency
42
76
  name: erubis
43
77
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +86,20 @@ dependencies:
52
86
  - - "~>"
53
87
  - !ruby/object:Gem::Version
54
88
  version: '2.7'
89
+ - !ruby/object:Gem::Dependency
90
+ name: getoptlong
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '0.2'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '0.2'
55
103
  - !ruby/object:Gem::Dependency
56
104
  name: htmlentities
57
105
  requirement: !ruby/object:Gem::Requirement
@@ -72,14 +120,14 @@ dependencies:
72
120
  requirements:
73
121
  - - "~>"
74
122
  - !ruby/object:Gem::Version
75
- version: '3.10'
123
+ version: '3.12'
76
124
  type: :development
77
125
  prerelease: false
78
126
  version_requirements: !ruby/object:Gem::Requirement
79
127
  requirements:
80
128
  - - "~>"
81
129
  - !ruby/object:Gem::Version
82
- version: '3.10'
130
+ version: '3.12'
83
131
  - !ruby/object:Gem::Dependency
84
132
  name: rspec-its
85
133
  requirement: !ruby/object:Gem::Requirement
@@ -100,56 +148,56 @@ dependencies:
100
148
  requirements:
101
149
  - - "~>"
102
150
  - !ruby/object:Gem::Version
103
- version: '3.2'
151
+ version: '3.3'
104
152
  type: :development
105
153
  prerelease: false
106
154
  version_requirements: !ruby/object:Gem::Requirement
107
155
  requirements:
108
156
  - - "~>"
109
157
  - !ruby/object:Gem::Version
110
- version: '3.2'
158
+ version: '3.3'
111
159
  - !ruby/object:Gem::Dependency
112
160
  name: json-ld
113
161
  requirement: !ruby/object:Gem::Requirement
114
162
  requirements:
115
163
  - - "~>"
116
164
  - !ruby/object:Gem::Version
117
- version: '3.2'
165
+ version: '3.3'
118
166
  type: :development
119
167
  prerelease: false
120
168
  version_requirements: !ruby/object:Gem::Requirement
121
169
  requirements:
122
170
  - - "~>"
123
171
  - !ruby/object:Gem::Version
124
- version: '3.2'
172
+ version: '3.3'
125
173
  - !ruby/object:Gem::Dependency
126
174
  name: rdf-spec
127
175
  requirement: !ruby/object:Gem::Requirement
128
176
  requirements:
129
177
  - - "~>"
130
178
  - !ruby/object:Gem::Version
131
- version: '3.2'
179
+ version: '3.3'
132
180
  type: :development
133
181
  prerelease: false
134
182
  version_requirements: !ruby/object:Gem::Requirement
135
183
  requirements:
136
184
  - - "~>"
137
185
  - !ruby/object:Gem::Version
138
- version: '3.2'
186
+ version: '3.3'
139
187
  - !ruby/object:Gem::Dependency
140
188
  name: rdf-vocab
141
189
  requirement: !ruby/object:Gem::Requirement
142
190
  requirements:
143
191
  - - "~>"
144
192
  - !ruby/object:Gem::Version
145
- version: '3.2'
193
+ version: '3.3'
146
194
  type: :development
147
195
  prerelease: false
148
196
  version_requirements: !ruby/object:Gem::Requirement
149
197
  requirements:
150
198
  - - "~>"
151
199
  - !ruby/object:Gem::Version
152
- version: '3.2'
200
+ version: '3.3'
153
201
  description: RDF::Turtle is an Turtle reader/writer for the RDF.rb library suite.
154
202
  email: public-rdf-ruby@w3.org
155
203
  executables: []
@@ -186,14 +234,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
186
234
  requirements:
187
235
  - - ">="
188
236
  - !ruby/object:Gem::Version
189
- version: '2.6'
237
+ version: '3.0'
190
238
  required_rubygems_version: !ruby/object:Gem::Requirement
191
239
  requirements:
192
240
  - - ">="
193
241
  - !ruby/object:Gem::Version
194
242
  version: '0'
195
243
  requirements: []
196
- rubygems_version: 3.3.3
244
+ rubygems_version: 3.4.19
197
245
  signing_key:
198
246
  specification_version: 4
199
247
  summary: Turtle reader/writer for Ruby.