rdf-n3 2.2.0 → 3.1.2
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 +5 -5
- data/README.md +192 -69
- data/UNLICENSE +1 -1
- data/VERSION +1 -1
- data/lib/rdf/n3.rb +11 -8
- data/lib/rdf/n3/algebra.rb +204 -0
- data/lib/rdf/n3/algebra/builtin.rb +79 -0
- data/lib/rdf/n3/algebra/formula.rb +446 -0
- data/lib/rdf/n3/algebra/list/append.rb +42 -0
- data/lib/rdf/n3/algebra/list/first.rb +24 -0
- data/lib/rdf/n3/algebra/list/in.rb +48 -0
- data/lib/rdf/n3/algebra/list/last.rb +24 -0
- data/lib/rdf/n3/algebra/list/length.rb +24 -0
- data/lib/rdf/n3/algebra/list/member.rb +44 -0
- data/lib/rdf/n3/algebra/list_operator.rb +83 -0
- data/lib/rdf/n3/algebra/log/conclusion.rb +65 -0
- data/lib/rdf/n3/algebra/log/conjunction.rb +36 -0
- data/lib/rdf/n3/algebra/log/content.rb +34 -0
- data/lib/rdf/n3/algebra/log/equal_to.rb +34 -0
- data/lib/rdf/n3/algebra/log/implies.rb +102 -0
- data/lib/rdf/n3/algebra/log/includes.rb +70 -0
- data/lib/rdf/n3/algebra/log/n3_string.rb +34 -0
- data/lib/rdf/n3/algebra/log/not_equal_to.rb +23 -0
- data/lib/rdf/n3/algebra/log/not_includes.rb +27 -0
- data/lib/rdf/n3/algebra/log/output_string.rb +40 -0
- data/lib/rdf/n3/algebra/log/parsed_as_n3.rb +36 -0
- data/lib/rdf/n3/algebra/log/semantics.rb +40 -0
- data/lib/rdf/n3/algebra/math/absolute_value.rb +36 -0
- data/lib/rdf/n3/algebra/math/acos.rb +26 -0
- data/lib/rdf/n3/algebra/math/acosh.rb +26 -0
- data/lib/rdf/n3/algebra/math/asin.rb +26 -0
- data/lib/rdf/n3/algebra/math/asinh.rb +26 -0
- data/lib/rdf/n3/algebra/math/atan.rb +26 -0
- data/lib/rdf/n3/algebra/math/atanh.rb +26 -0
- data/lib/rdf/n3/algebra/math/ceiling.rb +28 -0
- data/lib/rdf/n3/algebra/math/cos.rb +40 -0
- data/lib/rdf/n3/algebra/math/cosh.rb +38 -0
- data/lib/rdf/n3/algebra/math/difference.rb +40 -0
- data/lib/rdf/n3/algebra/math/equal_to.rb +54 -0
- data/lib/rdf/n3/algebra/math/exponentiation.rb +35 -0
- data/lib/rdf/n3/algebra/math/floor.rb +28 -0
- data/lib/rdf/n3/algebra/math/greater_than.rb +41 -0
- data/lib/rdf/n3/algebra/math/less_than.rb +41 -0
- data/lib/rdf/n3/algebra/math/negation.rb +38 -0
- data/lib/rdf/n3/algebra/math/not_equal_to.rb +25 -0
- data/lib/rdf/n3/algebra/math/not_greater_than.rb +25 -0
- data/lib/rdf/n3/algebra/math/not_less_than.rb +25 -0
- data/lib/rdf/n3/algebra/math/product.rb +20 -0
- data/lib/rdf/n3/algebra/math/quotient.rb +36 -0
- data/lib/rdf/n3/algebra/math/remainder.rb +35 -0
- data/lib/rdf/n3/algebra/math/rounded.rb +26 -0
- data/lib/rdf/n3/algebra/math/sin.rb +40 -0
- data/lib/rdf/n3/algebra/math/sinh.rb +38 -0
- data/lib/rdf/n3/algebra/math/sum.rb +40 -0
- data/lib/rdf/n3/algebra/math/tan.rb +40 -0
- data/lib/rdf/n3/algebra/math/tanh.rb +38 -0
- data/lib/rdf/n3/algebra/not_implemented.rb +13 -0
- data/lib/rdf/n3/algebra/resource_operator.rb +123 -0
- data/lib/rdf/n3/algebra/str/concatenation.rb +27 -0
- data/lib/rdf/n3/algebra/str/contains.rb +33 -0
- data/lib/rdf/n3/algebra/str/contains_ignoring_case.rb +33 -0
- data/lib/rdf/n3/algebra/str/ends_with.rb +33 -0
- data/lib/rdf/n3/algebra/str/equal_ignoring_case.rb +34 -0
- data/lib/rdf/n3/algebra/str/format.rb +17 -0
- data/lib/rdf/n3/algebra/str/greater_than.rb +38 -0
- data/lib/rdf/n3/algebra/str/less_than.rb +33 -0
- data/lib/rdf/n3/algebra/str/matches.rb +37 -0
- data/lib/rdf/n3/algebra/str/not_equal_ignoring_case.rb +17 -0
- data/lib/rdf/n3/algebra/str/not_greater_than.rb +17 -0
- data/lib/rdf/n3/algebra/str/not_less_than.rb +17 -0
- data/lib/rdf/n3/algebra/str/not_matches.rb +18 -0
- data/lib/rdf/n3/algebra/str/replace.rb +35 -0
- data/lib/rdf/n3/algebra/str/scrape.rb +35 -0
- data/lib/rdf/n3/algebra/str/starts_with.rb +33 -0
- data/lib/rdf/n3/algebra/time/day.rb +35 -0
- data/lib/rdf/n3/algebra/time/day_of_week.rb +27 -0
- data/lib/rdf/n3/algebra/time/gm_time.rb +29 -0
- data/lib/rdf/n3/algebra/time/hour.rb +35 -0
- data/lib/rdf/n3/algebra/time/in_seconds.rb +59 -0
- data/lib/rdf/n3/algebra/time/local_time.rb +29 -0
- data/lib/rdf/n3/algebra/time/minute.rb +35 -0
- data/lib/rdf/n3/algebra/time/month.rb +35 -0
- data/lib/rdf/n3/algebra/time/second.rb +35 -0
- data/lib/rdf/n3/algebra/time/timezone.rb +36 -0
- data/lib/rdf/n3/algebra/time/year.rb +29 -0
- data/lib/rdf/n3/extensions.rb +221 -0
- data/lib/rdf/n3/format.rb +66 -1
- data/lib/rdf/n3/list.rb +630 -0
- data/lib/rdf/n3/reader.rb +834 -492
- data/lib/rdf/n3/reasoner.rb +282 -0
- data/lib/rdf/n3/refinements.rb +178 -0
- data/lib/rdf/n3/repository.rb +332 -0
- data/lib/rdf/n3/terminals.rb +80 -0
- data/lib/rdf/n3/vocab.rb +36 -3
- data/lib/rdf/n3/writer.rb +476 -239
- metadata +187 -68
- data/AUTHORS +0 -1
- data/History.markdown +0 -99
- data/lib/rdf/n3/patches/array_hacks.rb +0 -53
- data/lib/rdf/n3/reader/meta.rb +0 -641
- data/lib/rdf/n3/reader/parser.rb +0 -237
@@ -0,0 +1,332 @@
|
|
1
|
+
module RDF::N3
|
2
|
+
##
|
3
|
+
# Sub-class of RDF::Repository which allows for native lists in different positions.
|
4
|
+
class Repository < RDF::Repository
|
5
|
+
DEFAULT_GRAPH = false
|
6
|
+
|
7
|
+
##
|
8
|
+
# Initializes this repository instance.
|
9
|
+
#
|
10
|
+
# @param [URI, #to_s] uri (nil)
|
11
|
+
# @param [String, #to_s] title (nil)
|
12
|
+
# @param [Hash{Symbol => Object}] options
|
13
|
+
# @option options [Boolean] :with_graph_name (true)
|
14
|
+
# Indicates that the repository supports named graphs, otherwise,
|
15
|
+
# only the default graph is supported.
|
16
|
+
# @option options [Boolean] :with_validity (true)
|
17
|
+
# Indicates that the repository supports named validation.
|
18
|
+
# @option options [Boolean] :transaction_class (DEFAULT_TX_CLASS)
|
19
|
+
# Specifies the RDF::Transaction implementation to use in this Repository.
|
20
|
+
# @yield [repository]
|
21
|
+
# @yieldparam [Repository] repository
|
22
|
+
def initialize(uri: nil, title: nil, **options, &block)
|
23
|
+
@data = options.delete(:data) || {}
|
24
|
+
super do
|
25
|
+
if block_given?
|
26
|
+
case block.arity
|
27
|
+
when 1 then block.call(self)
|
28
|
+
else instance_eval(&block)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
##
|
35
|
+
# Returns `true` if this respository supports the given `feature`.
|
36
|
+
#
|
37
|
+
# This repository supports list_terms.
|
38
|
+
def supports?(feature)
|
39
|
+
case feature.to_sym
|
40
|
+
when :list_terms then true
|
41
|
+
when :rdfstar then true
|
42
|
+
when :snapshots then false
|
43
|
+
else super
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
##
|
48
|
+
# Creates a query from the statements in this repository, turning blank nodes into non-distinguished variables. This can be used to determine if this repository is logically a subset of another repository.
|
49
|
+
#
|
50
|
+
# @return [RDF::Query]
|
51
|
+
def to_query
|
52
|
+
RDF::Query.new do |query|
|
53
|
+
each do |statement|
|
54
|
+
query.pattern RDF::Query::Pattern.from(statement, ndvars: true)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
##
|
60
|
+
# @private
|
61
|
+
# @see RDF::Countable#count
|
62
|
+
def count
|
63
|
+
count = 0
|
64
|
+
@data.each do |_, ss|
|
65
|
+
ss.each do |_, ps|
|
66
|
+
ps.each { |_, os| count += os.size }
|
67
|
+
end
|
68
|
+
end
|
69
|
+
count
|
70
|
+
end
|
71
|
+
|
72
|
+
##
|
73
|
+
# @private
|
74
|
+
# @see RDF::Enumerable#has_graph?
|
75
|
+
def has_graph?(graph)
|
76
|
+
@data.has_key?(graph)
|
77
|
+
end
|
78
|
+
|
79
|
+
##
|
80
|
+
# @private
|
81
|
+
# @see RDF::Enumerable#each_graph
|
82
|
+
def graph_names(options = nil, &block)
|
83
|
+
@data.keys.reject { |g| g == DEFAULT_GRAPH }.to_a
|
84
|
+
end
|
85
|
+
|
86
|
+
##
|
87
|
+
# @private
|
88
|
+
# @see RDF::Enumerable#each_graph
|
89
|
+
def each_graph(&block)
|
90
|
+
if block_given?
|
91
|
+
@data.each_key do |gn|
|
92
|
+
yield RDF::Graph.new(graph_name: (gn == DEFAULT_GRAPH ? nil : gn), data: self)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
enum_graph
|
96
|
+
end
|
97
|
+
|
98
|
+
##
|
99
|
+
# @private
|
100
|
+
# @see RDF::Enumerable#has_statement?
|
101
|
+
def has_statement?(statement)
|
102
|
+
has_statement_in?(@data, statement)
|
103
|
+
end
|
104
|
+
|
105
|
+
##
|
106
|
+
# @private
|
107
|
+
# @see RDF::Enumerable#each_statement
|
108
|
+
def each_statement(&block)
|
109
|
+
if block_given?
|
110
|
+
@data.each do |g, ss|
|
111
|
+
ss.each do |s, ps|
|
112
|
+
ps.each do |p, os|
|
113
|
+
os.each do |o, object_options|
|
114
|
+
yield RDF::Statement.new(s, p, o, object_options.merge(graph_name: g.equal?(DEFAULT_GRAPH) ? nil : g))
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
enum_statement
|
121
|
+
end
|
122
|
+
alias_method :each, :each_statement
|
123
|
+
|
124
|
+
##
|
125
|
+
# Projects statements with lists expanded to first/rest chains
|
126
|
+
#
|
127
|
+
# @yield [RDF::Statement]
|
128
|
+
def each_expanded_statement(&block)
|
129
|
+
if block_given?
|
130
|
+
each_statement do |st|
|
131
|
+
if st.subject.list?
|
132
|
+
st.subject.each_statement(&block)
|
133
|
+
st.subject = st.subject.subject
|
134
|
+
end
|
135
|
+
if st.object.list?
|
136
|
+
st.object.each_statement(&block)
|
137
|
+
st.object = st.object.subject
|
138
|
+
end
|
139
|
+
block.call(st)
|
140
|
+
end
|
141
|
+
end
|
142
|
+
enum_for(:each_expanded_statement) unless block_given?
|
143
|
+
end
|
144
|
+
|
145
|
+
##
|
146
|
+
# Returns the expanded statements for this repository
|
147
|
+
#
|
148
|
+
# @return [Array<RDF::Statement>]
|
149
|
+
def expanded_statements
|
150
|
+
each_expanded_statement.to_a
|
151
|
+
end
|
152
|
+
|
153
|
+
##
|
154
|
+
# @see Mutable#apply_changeset
|
155
|
+
def apply_changeset(changeset)
|
156
|
+
data = @data
|
157
|
+
changeset.deletes.each do |del|
|
158
|
+
if del.constant?
|
159
|
+
data = delete_from(data, del)
|
160
|
+
else
|
161
|
+
# we need this condition to handle wildcard statements
|
162
|
+
query_pattern(del) { |stmt| data = delete_from(data, stmt) }
|
163
|
+
end
|
164
|
+
end
|
165
|
+
changeset.inserts.each { |ins| data = insert_to(data, ins) }
|
166
|
+
@data = data
|
167
|
+
end
|
168
|
+
|
169
|
+
##
|
170
|
+
# @see RDF::Dataset#isolation_level
|
171
|
+
def isolation_level
|
172
|
+
:serializable
|
173
|
+
end
|
174
|
+
|
175
|
+
protected
|
176
|
+
|
177
|
+
##
|
178
|
+
# Match elements with `eql?`, not `==`
|
179
|
+
#
|
180
|
+
# `graph_name` of `false` matches default graph. Unbound variable matches
|
181
|
+
# non-false graph name.
|
182
|
+
#
|
183
|
+
# Matches terms which are native lists.
|
184
|
+
#
|
185
|
+
# @private
|
186
|
+
# @see RDF::Queryable#query_pattern
|
187
|
+
def query_pattern(pattern, **options, &block)
|
188
|
+
if block_given?
|
189
|
+
graph_name = pattern.graph_name
|
190
|
+
subject = pattern.subject
|
191
|
+
predicate = pattern.predicate
|
192
|
+
object = pattern.object
|
193
|
+
|
194
|
+
cs = @data.has_key?(graph_name) ? { graph_name => @data[graph_name] } : @data
|
195
|
+
|
196
|
+
cs.each do |c, ss|
|
197
|
+
next unless graph_name.nil? ||
|
198
|
+
graph_name == DEFAULT_GRAPH && !c ||
|
199
|
+
graph_name.eql?(c)
|
200
|
+
|
201
|
+
ss = if subject.nil? || subject.is_a?(RDF::Query::Variable)
|
202
|
+
ss
|
203
|
+
elsif subject.is_a?(RDF::N3::List)
|
204
|
+
# Match subjects which are eql lists
|
205
|
+
ss.keys.select {|s| s.list? && subject.eql?(s)}.inject({}) do |memo, li|
|
206
|
+
memo.merge(li => ss[li])
|
207
|
+
end
|
208
|
+
elsif subject.is_a?(RDF::Query::Pattern)
|
209
|
+
# Match subjects which are statements matching this pattern
|
210
|
+
ss.keys.select {|s| s.statement? && subject.eql?(s)}.inject({}) do |memo, st|
|
211
|
+
memo.merge(st => ss[st])
|
212
|
+
end
|
213
|
+
elsif ss.has_key?(subject)
|
214
|
+
{ subject => ss[subject] }
|
215
|
+
else
|
216
|
+
[]
|
217
|
+
end
|
218
|
+
ss.each do |s, ps|
|
219
|
+
ps = if predicate.nil? || predicate.is_a?(RDF::Query::Variable)
|
220
|
+
ps
|
221
|
+
elsif predicate.is_a?(RDF::N3::List)
|
222
|
+
# Match predicates which are eql lists
|
223
|
+
ps.keys.select {|p| p.list? && predicate.eql?(p)}.inject({}) do |memo, li|
|
224
|
+
memo.merge(li => ps[li])
|
225
|
+
end
|
226
|
+
elsif ps.has_key?(predicate)
|
227
|
+
{ predicate => ps[predicate] }
|
228
|
+
else
|
229
|
+
[]
|
230
|
+
end
|
231
|
+
ps.each do |p, os|
|
232
|
+
os.each do |o, object_options|
|
233
|
+
next unless object.nil? || object.eql?(o)
|
234
|
+
yield RDF::Statement.new(s, p, o, object_options.merge(graph_name: c.equal?(DEFAULT_GRAPH) ? nil : c))
|
235
|
+
end
|
236
|
+
end
|
237
|
+
end
|
238
|
+
end
|
239
|
+
else
|
240
|
+
enum_for(:query_pattern, pattern, **options)
|
241
|
+
end
|
242
|
+
end
|
243
|
+
|
244
|
+
##
|
245
|
+
# @private
|
246
|
+
# @see RDF::Mutable#insert
|
247
|
+
def insert_statement(statement)
|
248
|
+
@data = insert_to(@data, statement)
|
249
|
+
end
|
250
|
+
|
251
|
+
##
|
252
|
+
# @private
|
253
|
+
# @see RDF::Mutable#delete
|
254
|
+
def delete_statement(statement)
|
255
|
+
@data = delete_from(@data, statement)
|
256
|
+
end
|
257
|
+
|
258
|
+
##
|
259
|
+
# @private
|
260
|
+
# @see RDF::Mutable#clear
|
261
|
+
def clear_statements
|
262
|
+
@data = @data.clear
|
263
|
+
end
|
264
|
+
|
265
|
+
##
|
266
|
+
# @private
|
267
|
+
# @return [Hash]
|
268
|
+
def data
|
269
|
+
@data
|
270
|
+
end
|
271
|
+
|
272
|
+
##
|
273
|
+
# @private
|
274
|
+
# @return [Hash]
|
275
|
+
def data=(hash)
|
276
|
+
@data = hash
|
277
|
+
end
|
278
|
+
|
279
|
+
private
|
280
|
+
|
281
|
+
##
|
282
|
+
# @private
|
283
|
+
# @see #has_statement
|
284
|
+
def has_statement_in?(data, statement)
|
285
|
+
s, p, o, g = statement.to_quad
|
286
|
+
g ||= DEFAULT_GRAPH
|
287
|
+
|
288
|
+
data.has_key?(g) &&
|
289
|
+
data[g].has_key?(s) &&
|
290
|
+
data[g][s].has_key?(p) &&
|
291
|
+
data[g][s][p].has_key?(o)
|
292
|
+
end
|
293
|
+
|
294
|
+
##
|
295
|
+
# @private
|
296
|
+
# @return [Hash] a new, updated hash
|
297
|
+
def insert_to(data, statement)
|
298
|
+
raise ArgumentError, "Statement #{statement.inspect} is incomplete" if statement.incomplete?
|
299
|
+
|
300
|
+
s, p, o, c = statement.to_quad
|
301
|
+
c ||= DEFAULT_GRAPH
|
302
|
+
unless has_statement_in?(data, statement)
|
303
|
+
data = data.has_key?(c) ? data.dup : data.merge(c => {})
|
304
|
+
data[c] = data[c].has_key?(s) ? data[c].dup : data[c].merge(s => {})
|
305
|
+
data[c][s] = data[c][s].has_key?(p) ? data[c][s].dup : data[c][s].merge(p => {})
|
306
|
+
data[c][s][p] = data[c][s][p].merge(o => statement.options)
|
307
|
+
end
|
308
|
+
|
309
|
+
# If statement is inferred, make sure that it is marked as inferred in the dataset.
|
310
|
+
data[c][s][p][o][:inferred] = true if statement.options[:inferred]
|
311
|
+
|
312
|
+
data
|
313
|
+
end
|
314
|
+
|
315
|
+
##
|
316
|
+
# @private
|
317
|
+
# @return [Hash] a new, updated hash
|
318
|
+
def delete_from(data, statement)
|
319
|
+
if has_statement_in?(data, statement)
|
320
|
+
s, p, o, g = statement.to_quad
|
321
|
+
g = DEFAULT_GRAPH unless supports?(:graph_name)
|
322
|
+
g ||= DEFAULT_GRAPH
|
323
|
+
|
324
|
+
os = data[g][s][p].dup.delete_if {|k,v| k == o}
|
325
|
+
ps = os.empty? ? data[g][s].dup.delete_if {|k,v| k == p} : data[g][s].merge(p => os)
|
326
|
+
ss = ps.empty? ? data[g].dup.delete_if {|k,v| k == s} : data[g].merge(s => ps)
|
327
|
+
return ss.empty? ? data.dup.delete_if {|k,v| k == g} : data.merge(g => ss)
|
328
|
+
end
|
329
|
+
data
|
330
|
+
end
|
331
|
+
end
|
332
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module RDF::N3
|
3
|
+
module Terminals
|
4
|
+
# Definitions of token regular expressions used for lexical analysis
|
5
|
+
##
|
6
|
+
# Unicode regular expressions for Ruby 1.9+ with the Oniguruma engine.
|
7
|
+
U_CHARS1 = Regexp.compile(<<-EOS.gsub(/\s+/, ''))
|
8
|
+
[\\u00C0-\\u00D6]|[\\u00D8-\\u00F6]|[\\u00F8-\\u02FF]|
|
9
|
+
[\\u0370-\\u037D]|[\\u037F-\\u1FFF]|[\\u200C-\\u200D]|
|
10
|
+
[\\u2070-\\u218F]|[\\u2C00-\\u2FEF]|[\\u3001-\\uD7FF]|
|
11
|
+
[\\uF900-\\uFDCF]|[\\uFDF0-\\uFFFD]|[\\u{10000}-\\u{EFFFF}]
|
12
|
+
EOS
|
13
|
+
U_CHARS2 = Regexp.compile("\\u00B7|[\\u0300-\\u036F]|[\\u203F-\\u2040]", Regexp::FIXEDENCODING).freeze
|
14
|
+
IRI_RANGE = Regexp.compile("[[^<>\"{}|^`\\\\]&&[^\\x00-\\x20]]", Regexp::FIXEDENCODING).freeze
|
15
|
+
|
16
|
+
ESCAPE_CHAR4 = /\\u(?:[0-9A-Fa-f]{4,4})/u.freeze # \uXXXX
|
17
|
+
ESCAPE_CHAR8 = /\\U(?:[0-9A-Fa-f]{8,8})/u.freeze # \UXXXXXXXX
|
18
|
+
UCHAR = /#{ESCAPE_CHAR4}|#{ESCAPE_CHAR8}/n.freeze
|
19
|
+
# 170s
|
20
|
+
PERCENT = /%[0-9A-Fa-f]{2}/u.freeze
|
21
|
+
# 172s
|
22
|
+
PN_LOCAL_ESC = /\\[_~\.\-\!$\&'\(\)\*\+,;=\/\?\#@%]/u.freeze
|
23
|
+
# 169s
|
24
|
+
PLX = /#{PERCENT}|#{PN_LOCAL_ESC}/u.freeze
|
25
|
+
# 163s
|
26
|
+
PN_CHARS_BASE = /[A-Z]|[a-z]|#{U_CHARS1}/u.freeze
|
27
|
+
# 164s
|
28
|
+
PN_CHARS_U = /_|#{PN_CHARS_BASE}/u.freeze
|
29
|
+
# 166s
|
30
|
+
PN_CHARS = /-|[0-9]|#{PN_CHARS_U}|#{U_CHARS2}/u.freeze
|
31
|
+
PN_LOCAL_BODY = /(?:(?:\.|:|#{PN_CHARS}|#{PLX})*(?:#{PN_CHARS}|:|#{PLX}))?/u.freeze
|
32
|
+
PN_CHARS_BODY = /(?:(?:\.|#{PN_CHARS})*#{PN_CHARS})?/u.freeze
|
33
|
+
# 167s
|
34
|
+
PN_PREFIX = /#{PN_CHARS_BASE}#{PN_CHARS_BODY}/u.freeze
|
35
|
+
# 168s
|
36
|
+
PN_LOCAL = /(?:[0-9]|:|#{PN_CHARS_U}|#{PLX})#{PN_LOCAL_BODY}/u.freeze
|
37
|
+
# 154s
|
38
|
+
EXPONENT = /[eE][+-]?[0-9]+/u.freeze
|
39
|
+
# 159s
|
40
|
+
ECHAR = /\\[tbnrf\\"']/u.freeze
|
41
|
+
# 18
|
42
|
+
IRIREF = /<(?:#{IRI_RANGE}|#{UCHAR})*>/mu.freeze
|
43
|
+
# 139s
|
44
|
+
PNAME_NS = /#{PN_PREFIX}?:/u.freeze
|
45
|
+
# 140s
|
46
|
+
PNAME_LN = /#{PNAME_NS}#{PN_LOCAL}/u.freeze
|
47
|
+
# 141s
|
48
|
+
BLANK_NODE_LABEL = /_:(?:[0-9]|#{PN_CHARS_U})(?:(?:#{PN_CHARS}|\.)*#{PN_CHARS})?/u.freeze
|
49
|
+
# 144s
|
50
|
+
# XXX: negative-lookahed for @is and @has
|
51
|
+
LANGTAG = /@(?!(?:is|has))(?:[a-zA-Z]+(?:-[a-zA-Z0-9]+)*)/u.freeze
|
52
|
+
# 19
|
53
|
+
INTEGER = /[+-]?[0-9]+/u.freeze
|
54
|
+
# 20
|
55
|
+
DECIMAL = /[+-]?(?:[0-9]*\.[0-9]+)/u.freeze
|
56
|
+
# 21
|
57
|
+
DOUBLE = /[+-]?(?:[0-9]+\.[0-9]*#{EXPONENT}|\.?[0-9]+#{EXPONENT})/u.freeze
|
58
|
+
# 22
|
59
|
+
STRING_LITERAL_SINGLE_QUOTE = /'(?:[^\'\\\n\r]|#{ECHAR}|#{UCHAR})*'/u.freeze
|
60
|
+
# 23
|
61
|
+
STRING_LITERAL_QUOTE = /"(?:[^\"\\\n\r]|#{ECHAR}|#{UCHAR})*"/u.freeze
|
62
|
+
# 24
|
63
|
+
STRING_LITERAL_LONG_SINGLE_QUOTE = /'''(?:(?:'|'')?(?:[^'\\]|#{ECHAR}|#{UCHAR}))*'''/um.freeze
|
64
|
+
# 25
|
65
|
+
STRING_LITERAL_LONG_QUOTE = /"""(?:(?:"|"")?(?:[^"\\]|#{ECHAR}|#{UCHAR}))*"""/um.freeze
|
66
|
+
|
67
|
+
# 28t
|
68
|
+
PREFIX = /@?prefix/ui.freeze
|
69
|
+
# 29t
|
70
|
+
BASE = /@?base/ui.freeze
|
71
|
+
QUICK_VAR_NAME = /\?#{PN_LOCAL}/.freeze
|
72
|
+
|
73
|
+
# 161s
|
74
|
+
WS = /(?:\s|(?:#[^\n\r]*))+/um.freeze
|
75
|
+
# 162s
|
76
|
+
ANON = /\[\s*\]/u.freeze
|
77
|
+
|
78
|
+
FORALL = /@forAll/u.freeze
|
79
|
+
end
|
80
|
+
end
|
data/lib/rdf/n3/vocab.rb
CHANGED
@@ -1,4 +1,37 @@
|
|
1
|
-
module RDF
|
2
|
-
|
3
|
-
|
1
|
+
module RDF::N3
|
2
|
+
# @!parse
|
3
|
+
# # Crypto namespace
|
4
|
+
# class Crypto < RDF::Vocabulary; end
|
5
|
+
const_set("Crypto", Class.new(RDF::Vocabulary("http://www.w3.org/2000/10/swap/crypto#")))
|
6
|
+
RDF::Vocabulary.register(:crypto, Crypto)
|
7
|
+
|
8
|
+
# @!parse
|
9
|
+
# # Log namespace
|
10
|
+
# class Log < RDF::Vocabulary; end
|
11
|
+
const_set("Log", Class.new(RDF::Vocabulary("http://www.w3.org/2000/10/swap/log#")))
|
12
|
+
RDF::Vocabulary.register(:log, Log)
|
13
|
+
|
14
|
+
# @!parse
|
15
|
+
# # Math namespace
|
16
|
+
# class Math < RDF::Vocabulary; end
|
17
|
+
const_set("Math", Class.new(RDF::Vocabulary("http://www.w3.org/2000/10/swap/math#")))
|
18
|
+
RDF::Vocabulary.register(:math, Math)
|
19
|
+
|
20
|
+
# @!parse
|
21
|
+
# # Rei namespace
|
22
|
+
# class Rei < RDF::Vocabulary; end
|
23
|
+
const_set("Rei", Class.new(RDF::Vocabulary("http://www.w3.org/2000/10/swap/reify#")))
|
24
|
+
RDF::Vocabulary.register(:rei, Rei)
|
25
|
+
|
26
|
+
# @!parse
|
27
|
+
# # Str namespace
|
28
|
+
# class Str < RDF::Vocabulary; end
|
29
|
+
const_set("Str", Class.new(RDF::Vocabulary("http://www.w3.org/2000/10/swap/string#")))
|
30
|
+
RDF::Vocabulary.register(:string, Str)
|
31
|
+
|
32
|
+
# @!parse
|
33
|
+
# # Time namespace
|
34
|
+
# class Time < RDF::Vocabulary; end
|
35
|
+
const_set("Time", Class.new(RDF::Vocabulary("http://www.w3.org/2000/10/swap/time#")))
|
36
|
+
RDF::Vocabulary.register(:time, Time)
|
4
37
|
end
|