rdf-turtle 3.2.1 → 3.3.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.
- checksums.yaml +4 -4
- data/README.md +22 -16
- data/VERSION +1 -1
- data/lib/rdf/turtle/freebase_reader.rb +11 -2
- data/lib/rdf/turtle/reader.rb +18 -7
- data/lib/rdf/turtle/terminals.rb +1 -1
- data/lib/rdf/turtle/writer.rb +5 -4
- metadata +66 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '086c95b097002c034394631a59d5d4c52fe4403eaea9b68bf2d241b45951dca3'
|
4
|
+
data.tar.gz: 68fa875004dfcebf6295444ff9aa945689c58fe0c54d6b5e14ad91dc9d9f0d02
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
[](https://badge.fury.io/rb/rdf-turtle)
|
6
6
|
[](https://github.com/ruby-rdf/rdf-turtle/actions?query=workflow%3ACI)
|
7
7
|
[](https://coveralls.io/github/ruby-rdf/rdf-turtle?branch=develop)
|
8
8
|
[](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 >=
|
20
|
+
* Compatible with Ruby >= 3.0.
|
21
21
|
* Optional streaming writer, to serialize large graphs
|
22
|
-
* Provisional support for [
|
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
|
-
##
|
39
|
+
## RDF 1.2
|
40
40
|
|
41
|
-
Both reader and writer include provisional support for [
|
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
|
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
|
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/) (>=
|
144
|
-
* [RDF.rb](https://rubygems.org/gems/rdf) (~> 3.
|
145
|
-
* [EBNF][] (~>
|
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
|
-
[
|
191
|
-
[
|
192
|
-
[
|
193
|
-
[RDF
|
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://
|
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.
|
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
|
83
|
-
|
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
|
data/lib/rdf/turtle/reader.rb
CHANGED
@@ -36,7 +36,7 @@ module RDF::Turtle
|
|
36
36
|
|
37
37
|
terminal(:PREFIX, PREFIX)
|
38
38
|
terminal(:BASE, BASE)
|
39
|
-
terminal(:
|
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
|
-
|
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
|
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 :
|
474
|
-
|
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 :
|
488
|
-
|
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)
|
data/lib/rdf/turtle/terminals.rb
CHANGED
@@ -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
|
-
|
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
|
data/lib/rdf/turtle/writer.rb
CHANGED
@@ -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
|
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.
|
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.
|
300
|
-
text << "
|
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.
|
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:
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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: '
|
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.
|
244
|
+
rubygems_version: 3.4.19
|
197
245
|
signing_key:
|
198
246
|
specification_version: 4
|
199
247
|
summary: Turtle reader/writer for Ruby.
|