rdf-n3 0.3.4.1 → 0.3.5
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.
- data/{History.md → History.markdown} +0 -0
- data/{README → README.markdown} +13 -8
- data/VERSION +1 -1
- data/lib/rdf/n3.rb +1 -1
- data/lib/rdf/n3/format.rb +0 -35
- data/lib/rdf/n3/patches/list.rb +36 -0
- data/lib/rdf/n3/reader.rb +11 -26
- data/lib/rdf/n3/writer.rb +21 -40
- metadata +51 -71
- data/.yardopts +0 -12
- data/README.md +0 -149
- data/Rakefile +0 -45
- data/example-files/arnau-registered-vocab.rb +0 -21
- data/example-files/arnau-stack-overflow.ttl +0 -12
- data/example-files/best-buy.nt +0 -4
- data/example-files/dwbutler-mj.n3 +0 -10
- data/example-files/dwbutler-mj.ttl +0 -8
- data/example-files/lee-reilly-list.rb +0 -40
- data/example-files/recipe.ttl +0 -33
- data/example-files/sp2b.n3 +0 -50177
- data/example.rb +0 -45
- data/lib/rdf/n3/patches/graph_properties.rb +0 -34
- data/lib/rdf/n3/reader/bnf-rules.n3 +0 -134
- data/lib/rdf/n3/reader/n3-selectors.n3 +0 -0
- data/lib/rdf/n3/reader/n3.n3 +0 -261
- data/rdf-n3.gemspec +0 -111
- data/script/build_meta +0 -249
- data/script/console +0 -10
- data/script/parse +0 -103
- data/script/tc +0 -53
- data/script/yard-to-rubyforge +0 -2
- data/spec/.gitignore +0 -1
- data/spec/cwm_spec.rb +0 -44
- data/spec/cwm_test.rb +0 -76
- data/spec/format_spec.rb +0 -41
- data/spec/matchers.rb +0 -130
- data/spec/reader_spec.rb +0 -1243
- data/spec/spec.opts +0 -1
- data/spec/spec_helper.rb +0 -86
- data/spec/swap_spec.rb +0 -78
- data/spec/swap_test.rb +0 -79
- data/spec/turtle_spec.rb +0 -66
- data/spec/turtle_test.rb +0 -98
- data/spec/writer_spec.rb +0 -399
data/rdf-n3.gemspec
DELETED
@@ -1,111 +0,0 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
-
# -*- encoding: utf-8 -*-
|
5
|
-
|
6
|
-
Gem::Specification.new do |s|
|
7
|
-
s.name = %q{rdf-n3}
|
8
|
-
s.version = "0.3.4.1"
|
9
|
-
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["Gregg Kellogg"]
|
12
|
-
s.date = %q{2011-07-11}
|
13
|
-
s.description = %q{RDF::N3 is an Notation-3 and Turtle reader/writer for the RDF.rb library suite.}
|
14
|
-
s.email = %q{gregg@kellogg-assoc.com}
|
15
|
-
s.extra_rdoc_files = [
|
16
|
-
"AUTHORS",
|
17
|
-
"History.md",
|
18
|
-
"README.md",
|
19
|
-
"UNLICENSE",
|
20
|
-
"VERSION"
|
21
|
-
]
|
22
|
-
s.files = [
|
23
|
-
".yardopts",
|
24
|
-
"AUTHORS",
|
25
|
-
"History.md",
|
26
|
-
"README",
|
27
|
-
"README.md",
|
28
|
-
"Rakefile",
|
29
|
-
"UNLICENSE",
|
30
|
-
"VERSION",
|
31
|
-
"example-files/arnau-registered-vocab.rb",
|
32
|
-
"example-files/arnau-stack-overflow.ttl",
|
33
|
-
"example-files/best-buy.nt",
|
34
|
-
"example-files/dwbutler-mj.n3",
|
35
|
-
"example-files/dwbutler-mj.ttl",
|
36
|
-
"example-files/lee-reilly-list.rb",
|
37
|
-
"example-files/recipe.ttl",
|
38
|
-
"example-files/sp2b.n3",
|
39
|
-
"example.rb",
|
40
|
-
"lib/rdf/n3.rb",
|
41
|
-
"lib/rdf/n3/format.rb",
|
42
|
-
"lib/rdf/n3/patches/array_hacks.rb",
|
43
|
-
"lib/rdf/n3/patches/graph_properties.rb",
|
44
|
-
"lib/rdf/n3/reader.rb",
|
45
|
-
"lib/rdf/n3/reader/bnf-rules.n3",
|
46
|
-
"lib/rdf/n3/reader/meta.rb",
|
47
|
-
"lib/rdf/n3/reader/n3-selectors.n3",
|
48
|
-
"lib/rdf/n3/reader/n3.n3",
|
49
|
-
"lib/rdf/n3/reader/parser.rb",
|
50
|
-
"lib/rdf/n3/version.rb",
|
51
|
-
"lib/rdf/n3/vocab.rb",
|
52
|
-
"lib/rdf/n3/writer.rb",
|
53
|
-
"rdf-n3.gemspec",
|
54
|
-
"script/build_meta",
|
55
|
-
"script/console",
|
56
|
-
"script/parse",
|
57
|
-
"script/tc",
|
58
|
-
"script/yard-to-rubyforge",
|
59
|
-
"spec/.gitignore",
|
60
|
-
"spec/cwm_spec.rb",
|
61
|
-
"spec/cwm_test.rb",
|
62
|
-
"spec/format_spec.rb",
|
63
|
-
"spec/matchers.rb",
|
64
|
-
"spec/reader_spec.rb",
|
65
|
-
"spec/spec.opts",
|
66
|
-
"spec/spec_helper.rb",
|
67
|
-
"spec/swap_spec.rb",
|
68
|
-
"spec/swap_test.rb",
|
69
|
-
"spec/turtle_spec.rb",
|
70
|
-
"spec/turtle_test.rb",
|
71
|
-
"spec/writer_spec.rb"
|
72
|
-
]
|
73
|
-
s.homepage = %q{http://github.com/gkellogg/rdf-n3}
|
74
|
-
s.require_paths = ["lib"]
|
75
|
-
s.rubygems_version = %q{1.5.0}
|
76
|
-
s.summary = %q{N3/Turtle reader/writer for RDF.rb.}
|
77
|
-
|
78
|
-
if s.respond_to? :specification_version then
|
79
|
-
s.specification_version = 3
|
80
|
-
|
81
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
82
|
-
s.add_runtime_dependency(%q<rdf>, [">= 0.3.3"])
|
83
|
-
s.add_development_dependency(%q<open-uri-cached>, [">= 0"])
|
84
|
-
s.add_development_dependency(%q<spira>, [">= 0.0.12"])
|
85
|
-
s.add_development_dependency(%q<rspec>, [">= 2.5.0"])
|
86
|
-
s.add_development_dependency(%q<rdf-spec>, [">= 0.3.3"])
|
87
|
-
s.add_development_dependency(%q<rdf-rdfxml>, [">= 0.3.3"])
|
88
|
-
s.add_development_dependency(%q<rdf-isomorphic>, [">= 0.3.4"])
|
89
|
-
s.add_development_dependency(%q<yard>, [">= 0"])
|
90
|
-
else
|
91
|
-
s.add_dependency(%q<rdf>, [">= 0.3.3"])
|
92
|
-
s.add_dependency(%q<open-uri-cached>, [">= 0"])
|
93
|
-
s.add_dependency(%q<spira>, [">= 0.0.12"])
|
94
|
-
s.add_dependency(%q<rspec>, [">= 2.5.0"])
|
95
|
-
s.add_dependency(%q<rdf-spec>, [">= 0.3.3"])
|
96
|
-
s.add_dependency(%q<rdf-rdfxml>, [">= 0.3.3"])
|
97
|
-
s.add_dependency(%q<rdf-isomorphic>, [">= 0.3.4"])
|
98
|
-
s.add_dependency(%q<yard>, [">= 0"])
|
99
|
-
end
|
100
|
-
else
|
101
|
-
s.add_dependency(%q<rdf>, [">= 0.3.3"])
|
102
|
-
s.add_dependency(%q<open-uri-cached>, [">= 0"])
|
103
|
-
s.add_dependency(%q<spira>, [">= 0.0.12"])
|
104
|
-
s.add_dependency(%q<rspec>, [">= 2.5.0"])
|
105
|
-
s.add_dependency(%q<rdf-spec>, [">= 0.3.3"])
|
106
|
-
s.add_dependency(%q<rdf-rdfxml>, [">= 0.3.3"])
|
107
|
-
s.add_dependency(%q<rdf-isomorphic>, [">= 0.3.4"])
|
108
|
-
s.add_dependency(%q<yard>, [">= 0"])
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
data/script/build_meta
DELETED
@@ -1,249 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# build_meta --- generator of parser tables for SPARQL::Grammar::Parser
|
3
|
-
# Derived from:
|
4
|
-
# http://www.w3.org/2000/10/swap/grammar/predictiveParser.py
|
5
|
-
# - predictiveParser.py, Tim Berners-Lee, 2004
|
6
|
-
#
|
7
|
-
require 'rubygems'
|
8
|
-
$:.unshift(File.expand_path(File.join(File.dirname(__FILE__), "..", 'lib')))
|
9
|
-
require 'rdf/n3'
|
10
|
-
require 'getoptlong'
|
11
|
-
|
12
|
-
# Build rdf/n3/parser/meta.rb from http://www.w3.org/2000/10/swap/grammar/n3-selectors.n3
|
13
|
-
|
14
|
-
class BNF < RDF::Vocabulary("http://www.w3.org/2000/10/swap/grammar/bnf#"); end
|
15
|
-
class REGEX < RDF::Vocabulary("http://www.w3.org/2000/10/swap/grammar/regex#"); end
|
16
|
-
class N3 < RDF::Vocabulary("http://www.w3.org/2000/10/swap/grammar/n3#"); end
|
17
|
-
|
18
|
-
class PredictiveParser
|
19
|
-
attr_accessor :already, :agenda, :errors, :literalTerminals, :branchTable, :tokenRegexps
|
20
|
-
attr_accessor :graph
|
21
|
-
|
22
|
-
def initialize
|
23
|
-
@already = []
|
24
|
-
@agenda = []
|
25
|
-
@errors = []
|
26
|
-
@literalTerminals = {}
|
27
|
-
@branchTable = {}
|
28
|
-
@tokenRegexps = {}
|
29
|
-
end
|
30
|
-
|
31
|
-
def parse(file)
|
32
|
-
progress("Loading " + file)
|
33
|
-
@graph = RDF::Graph.load(file)
|
34
|
-
progress("Loaded #{@graph.count} statements.")
|
35
|
-
end
|
36
|
-
|
37
|
-
def recordError(str)
|
38
|
-
errors << str
|
39
|
-
"##### ERROR: #{str}"
|
40
|
-
end
|
41
|
-
|
42
|
-
def progress(str); puts(str); end
|
43
|
-
def chatty(str); progress(str) if $verbose; end
|
44
|
-
|
45
|
-
def runProduction(lhs)
|
46
|
-
doProduction(lhs)
|
47
|
-
while !@agenda.empty?
|
48
|
-
x = @agenda.shift
|
49
|
-
@already << x
|
50
|
-
doProduction(x)
|
51
|
-
end
|
52
|
-
|
53
|
-
if !@errors.empty?
|
54
|
-
progress("###### FAILED with #{errors.length} errors.")
|
55
|
-
@errors.each {|s| progress(" #{s}")}
|
56
|
-
exit(-2)
|
57
|
-
else
|
58
|
-
progress("Ok for predictive parsing")
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
# Generate branch tables for one production
|
63
|
-
def doProduction(lhs)
|
64
|
-
if lhs == BNF.void
|
65
|
-
progress("\nvoid")
|
66
|
-
return
|
67
|
-
end
|
68
|
-
if lhs == BNF.eof
|
69
|
-
progress( "\nEOF")
|
70
|
-
return
|
71
|
-
end
|
72
|
-
if lhs.is_a?(RDF::Literal)
|
73
|
-
literalTerminals[lhs.value()] = 1
|
74
|
-
return
|
75
|
-
end
|
76
|
-
|
77
|
-
branchDict = {}
|
78
|
-
|
79
|
-
rhs = graph.first_object(:subject => lhs, :predicate => BNF.matches)
|
80
|
-
if rhs
|
81
|
-
chatty("\nToken #{lhs} matches regexp #{rhs}")
|
82
|
-
tokenRegexps[lhs] = rhs.value
|
83
|
-
|
84
|
-
cc = graph.query(:subject => lhs, :predicate => BNF.canStartWith)
|
85
|
-
progress(recordError("No record of what token #{lhs} can start with")) if cc.empty?
|
86
|
-
cc.each {|statement| chatty(" Can start with: #{statement.object}")}
|
87
|
-
return
|
88
|
-
end
|
89
|
-
|
90
|
-
rhs = graph.first_object(:subject => lhs, :predicate => BNF.mustBeOneSequence)
|
91
|
-
unless rhs
|
92
|
-
progress(recordError("No definition of #{lhs}"))
|
93
|
-
# raise RuntimeError("No definition of %s in\n %s" %(`lhs`, `g`))
|
94
|
-
return
|
95
|
-
end
|
96
|
-
|
97
|
-
options = rhs
|
98
|
-
progress("\nProduction #{lhs} :: #{options}")
|
99
|
-
graph.query(:subject => lhs, :predicate => BNF.canPrecede) do |statement|
|
100
|
-
chatty(" Can precede '#{statement.object}'")
|
101
|
-
end
|
102
|
-
|
103
|
-
graph.query(:subject => lhs, :predicate => BNF.branch) do |statement|
|
104
|
-
branch = statement.object
|
105
|
-
sequence = graph.first_object(:subject => statement.object, :predicate => BNF.sequence)
|
106
|
-
option = RDF::List.new(sequence, graph).to_a
|
107
|
-
progress(" option: #{option}")
|
108
|
-
|
109
|
-
option.each do |part|
|
110
|
-
agenda << part unless already.include?(part) || agenda.include?(part)
|
111
|
-
end
|
112
|
-
|
113
|
-
conditions = graph.query(:subject => branch, :predicate => BNF.condition).map(&:object)
|
114
|
-
if conditions.empty?
|
115
|
-
progress(recordError("NO SELECTOR for #{lhs} option #{option}"))
|
116
|
-
if option.empty?
|
117
|
-
# Void case - the tricky one
|
118
|
-
graph.pattern(:subject => lhs, :predicate => BNF.canPrecede) do |st|
|
119
|
-
progress(" Can precede #{st.object}")
|
120
|
-
end
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
progress(" Conditions: #{conditions.to_a.map(&:to_s)}")
|
125
|
-
conditions.each do |str1|
|
126
|
-
if branchDict.has_key?(str1)
|
127
|
-
progress(
|
128
|
-
"Conflict: #{str1} is also the condition for #{branchDict[str1]}")
|
129
|
-
end
|
130
|
-
branchDict[str1] = option
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
branchDict.keys.each do |str1|
|
135
|
-
branchDict.keys.each do |str2|
|
136
|
-
s1, s2 = str1.to_s, str2.to_s
|
137
|
-
if (s1.index(s2) == 0 || s2.index(s1) == 0) && branchDict[str1] != branchDict[str2]
|
138
|
-
progress("WARNING: for #{lhs}, #{str1} indicates #{branchDict[str1]}, but #{str2} indicates #{branchDict[str2]}")
|
139
|
-
end
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
branchTable[lhs] = branchDict
|
144
|
-
end
|
145
|
-
|
146
|
-
def litOrNot(value)
|
147
|
-
(value.is_a?(RDF::Literal) ? "" : ":") + value.to_s.dump
|
148
|
-
end
|
149
|
-
|
150
|
-
def outputBranchTable(io, indent = 0)
|
151
|
-
ind0 = ' ' * indent
|
152
|
-
ind1 = ind0 + ' '
|
153
|
-
ind2 = ind1 + ' '
|
154
|
-
ind3 = ind2 + ' '
|
155
|
-
io.puts "#{ind0}BRANCHES = {"
|
156
|
-
branchTable.keys.sort_by(&:to_s).each do |prod|
|
157
|
-
# Special case double, integer, and decimal to output just a numericliteral, due to a parser conflict
|
158
|
-
next if prod.to_s =~ /numericliteral/
|
159
|
-
io.puts "#{ind1}#{litOrNot(prod)} => {"
|
160
|
-
branchTable[prod].keys.sort_by(&:to_s).each do |term|
|
161
|
-
list = branchTable[prod][term].map {|t2| litOrNot(t2)}.join(",\n#{ind3}")
|
162
|
-
io.puts "#{ind2}#{litOrNot(term)} => [#{list}],"
|
163
|
-
end
|
164
|
-
io.puts "#{ind1}},"
|
165
|
-
end
|
166
|
-
io.puts "#{ind0}}\n"
|
167
|
-
end
|
168
|
-
|
169
|
-
def outputRegexpTable(io, indent = 0)
|
170
|
-
ind0 = ' ' * indent
|
171
|
-
ind1 = ind0 + ' '
|
172
|
-
io.puts "#{ind0}REGEXPS = {"
|
173
|
-
tokenRegexps.keys.sort_by(&:to_s).each do |prod|
|
174
|
-
# Special case double, integer, and decimal to output just a numericliteral, due to a parser conflict
|
175
|
-
next if prod.to_s =~ /(integer|double|decimal)/
|
176
|
-
io.puts "#{ind1}#{litOrNot(prod)} => Regexp.compile(" +
|
177
|
-
case prod.to_s
|
178
|
-
when /barename/ then %q(%(^[#{BARENAME_START}][#{BARENAME_TAIL}]*))
|
179
|
-
when /explicituri/ then %q("^<[^>]*>")
|
180
|
-
when /langcode/ then %q("^[a-zA-Z]+(-[a-zA-Z0-9]+)*")
|
181
|
-
when /prefix/ then %q(%(^([#{BARENAME_START}][#{BARENAME_TAIL}]*)?:))
|
182
|
-
when /qname/ then %q(%(^(([#{BARENAME_START}][#{BARENAME_TAIL}]*)?:)?([#{BARENAME_START}][#{BARENAME_TAIL}]*)?))
|
183
|
-
when /variable/ then %q(%(^\\\\?[#{BARENAME_START}][#{BARENAME_TAIL}]*))
|
184
|
-
else tokenRegexps[prod].dump
|
185
|
-
end + "),"
|
186
|
-
end
|
187
|
-
|
188
|
-
io.puts "\n#{ind1}# Hack to replace integer|double|decimal with numericliteral"
|
189
|
-
io.puts "#{ind1}#{litOrNot(N3.numericliteral)} => Regexp.compile(" + %q(%(^[-+]?[0-9]+(\\\\.[0-9]+)?(e[-+]?[0-9]+)?)) + ")"
|
190
|
-
io.puts "#{ind0}}\n"
|
191
|
-
end
|
192
|
-
end
|
193
|
-
|
194
|
-
$verbose = false
|
195
|
-
$debug = false
|
196
|
-
grammarFile = File.expand_path(File.join(File.dirname(__FILE__), "../lib/rdf/n3/reader/n3-selectors.n3"))
|
197
|
-
start = N3.document
|
198
|
-
output = STDOUT
|
199
|
-
|
200
|
-
opts = GetoptLong.new(
|
201
|
-
["--debug", GetoptLong::NO_ARGUMENT],
|
202
|
-
["--verbose", GetoptLong::NO_ARGUMENT],
|
203
|
-
["--grammar", GetoptLong::REQUIRED_ARGUMENT],
|
204
|
-
["--start", GetoptLong::REQUIRED_ARGUMENT],
|
205
|
-
["--output", "-o", GetoptLong::REQUIRED_ARGUMENT],
|
206
|
-
["--help", "-?", GetoptLong::NO_ARGUMENT]
|
207
|
-
)
|
208
|
-
opts.each do |opt, arg|
|
209
|
-
case opt
|
210
|
-
when '--verbose' then $verbose = true
|
211
|
-
when '--debug' then $debug = true
|
212
|
-
when '--grammar' then grammarFile = arg
|
213
|
-
when '--as' then parseAs = arg
|
214
|
-
when '--output' then output = File.open(arg, "w")
|
215
|
-
when '--help'
|
216
|
-
puts %(Usage: build_meta --grammar=file --as=uri [--output=file]
|
217
|
-
--grammar=file This is the RDF augmented grammar
|
218
|
-
--start=uri This is the URI of the production as which the document
|
219
|
-
is to be parsed
|
220
|
-
--output=file Where to save output
|
221
|
-
)
|
222
|
-
exit(0)
|
223
|
-
end
|
224
|
-
end
|
225
|
-
|
226
|
-
pp = PredictiveParser.new
|
227
|
-
|
228
|
-
pp.parse(grammarFile)
|
229
|
-
pp.runProduction(start)
|
230
|
-
|
231
|
-
unless output == STDOUT
|
232
|
-
output.puts "# This file is automatically generated by #{__FILE__}"
|
233
|
-
output.puts "# Branch and Regexp tables derived from #{grammarFile}"
|
234
|
-
output.puts "module RDF::N3::Meta"
|
235
|
-
end
|
236
|
-
pp.outputBranchTable(output, 1)
|
237
|
-
output.puts %q(
|
238
|
-
if RUBY_VERSION >= "1.9.0"
|
239
|
-
BARENAME_START = "A-Z_a-z\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02ff\u0370-\u037d\u037f-\u1fff\u200c-\u200d\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd\u{10000}-\u{effff}"
|
240
|
-
BARENAME_TAIL = "0-9#{BARENAME_START}\u00b7\u0300-\u036f\u203f-\u2040\\\\-"
|
241
|
-
else
|
242
|
-
BARENAME_START = "A-Z_a-z\xc0-\xd6\xd8-\xf6\xf8-\xff"
|
243
|
-
BARENAME_TAIL = "0-9#{BARENAME_START}\xb7\\\\-"
|
244
|
-
end
|
245
|
-
)
|
246
|
-
pp.outputRegexpTable(output, 1)
|
247
|
-
unless output == STDOUT
|
248
|
-
output.puts "end"
|
249
|
-
end
|
data/script/console
DELETED
@@ -1,10 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# File: script/console
|
3
|
-
irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
|
4
|
-
|
5
|
-
libs = " -r irb/completion"
|
6
|
-
RDF = File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "rdf", "lib"))
|
7
|
-
libs << " -I #{RDF}" if File.directory?(RDF)
|
8
|
-
libs << " -r #{File.join(File.expand_path(File.dirname(__FILE__)), "..", "lib", "rdf", "n3.rb")}"
|
9
|
-
puts "Loading rdf-n3 gem"
|
10
|
-
exec "#{irb} #{libs} --simple-prompt"
|
data/script/parse
DELETED
@@ -1,103 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require 'rubygems'
|
3
|
-
$:.unshift(File.expand_path(File.join(File.dirname(__FILE__), "..", 'lib')))
|
4
|
-
require 'rdf/n3'
|
5
|
-
require 'rdf/ntriples'
|
6
|
-
require 'rdf/rdfxml' rescue nil
|
7
|
-
require 'rdf/rdfa' rescue nil
|
8
|
-
require 'getoptlong'
|
9
|
-
require 'open-uri'
|
10
|
-
|
11
|
-
def run(input, options)
|
12
|
-
reader_class = RDF::Reader.for(options[:input_format].to_sym)
|
13
|
-
raise "Reader not found for #{options[:input_format]}" unless reader_class
|
14
|
-
|
15
|
-
prefixes = {}
|
16
|
-
start = Time.new
|
17
|
-
num = 0
|
18
|
-
if options[:parse_only]
|
19
|
-
include RDF::N3::Meta
|
20
|
-
include RDF::N3::Parser
|
21
|
-
puts "\nparse #{input.read}---\n\n" unless options[:quiet]
|
22
|
-
input.rewind
|
23
|
-
if options[:quiet]
|
24
|
-
$stdout = StringIO.new
|
25
|
-
end
|
26
|
-
test(input, BRANCHES, REGEXPS)
|
27
|
-
if options[:quiet]
|
28
|
-
$stdout = STDOUT
|
29
|
-
print "."
|
30
|
-
end
|
31
|
-
elsif options[:output_format] == :ntriples || options[:quiet]
|
32
|
-
reader_class.new(input, :base_uri => options[:base_uri], :strict => true).each do |statement|
|
33
|
-
num += 1
|
34
|
-
if options[:quiet]
|
35
|
-
#print "."
|
36
|
-
else
|
37
|
-
options[:output]. puts statement.to_ntriples
|
38
|
-
end
|
39
|
-
end
|
40
|
-
elsif options[:output_format] == :inspect
|
41
|
-
reader_class.new(input, :base_uri => options[:base_uri], :strict => true).each do |statement|
|
42
|
-
num += 1
|
43
|
-
options[:output].puts statement.inspect
|
44
|
-
end
|
45
|
-
else
|
46
|
-
r = reader_class.new(input, :base_uri => options[:base_uri], :strict => true)
|
47
|
-
g = RDF::Graph.new << r
|
48
|
-
num = g.count
|
49
|
-
options[:output].puts g.dump(options[:output_format], :base_uri => options[:base_uri], :prefixes => r.prefixes, :standard_prefixes => true)
|
50
|
-
end
|
51
|
-
puts
|
52
|
-
secs = Time.new - start
|
53
|
-
puts "Parsed #{num} statements in #{secs} seconds @ #{num/secs} statements/second."
|
54
|
-
rescue
|
55
|
-
fname = input.respond_to?(:path) ? input.path : "-stdin-"
|
56
|
-
STDERR.puts("Error in #{fname}")
|
57
|
-
raise
|
58
|
-
end
|
59
|
-
|
60
|
-
options = {
|
61
|
-
:validate => false,
|
62
|
-
:strict => true,
|
63
|
-
:output => STDOUT,
|
64
|
-
:output_format => :ntriples,
|
65
|
-
:input_format => :n3,
|
66
|
-
:base_uri => "http://example.com",
|
67
|
-
}
|
68
|
-
input = nil
|
69
|
-
|
70
|
-
opts = GetoptLong.new(
|
71
|
-
["--dbg", GetoptLong::NO_ARGUMENT],
|
72
|
-
["--execute", "-e", GetoptLong::REQUIRED_ARGUMENT],
|
73
|
-
["--format", GetoptLong::REQUIRED_ARGUMENT],
|
74
|
-
["--input-format", GetoptLong::REQUIRED_ARGUMENT],
|
75
|
-
["--output", "-o", GetoptLong::REQUIRED_ARGUMENT],
|
76
|
-
["--parse-only", GetoptLong::NO_ARGUMENT],
|
77
|
-
["--quiet", GetoptLong::NO_ARGUMENT],
|
78
|
-
["--uri", GetoptLong::REQUIRED_ARGUMENT],
|
79
|
-
["--verbose", GetoptLong::NO_ARGUMENT]
|
80
|
-
)
|
81
|
-
opts.each do |opt, arg|
|
82
|
-
case opt
|
83
|
-
when '--dbg' then ::RDF::N3::debug = true
|
84
|
-
when '--execute' then input = arg
|
85
|
-
when '--format' then options[:output_format] = arg.to_sym
|
86
|
-
when '--input-format' then options[:input_format] = arg.to_sym
|
87
|
-
when '--output' then options[:output] = File.open(arg, "w")
|
88
|
-
when '--parse-only' then options[:parse_only] = true
|
89
|
-
when '--quiet' then options[:quiet] = true
|
90
|
-
when '--uri' then options[:base_uri] = arg
|
91
|
-
when '--verbose' then $verbose = true
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
if ARGV.empty?
|
96
|
-
s = input ? input : $stdin.read
|
97
|
-
run(StringIO.new(s), options)
|
98
|
-
else
|
99
|
-
ARGV.each do |test_file|
|
100
|
-
run(Kernel.open(test_file), options)
|
101
|
-
end
|
102
|
-
end
|
103
|
-
puts
|