rdf-tabular 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/etc/earl.ttl +1579 -799
- data/lib/rdf/tabular/metadata.rb +33 -68
- data/lib/rdf/tabular/reader.rb +14 -13
- data/lib/rdf/tabular/uax35.rb +5 -3
- data/spec/metadata_spec.rb +23 -26
- data/spec/reader_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -0
- metadata +17 -3
data/lib/rdf/tabular/metadata.rb
CHANGED
@@ -137,7 +137,7 @@ module RDF::Tabular
|
|
137
137
|
#
|
138
138
|
# @param [String] path
|
139
139
|
# @param [Hash{Symbol => Object}] options
|
140
|
-
# see `RDF::Util::File.open_file` in RDF.rb and {
|
140
|
+
# see `RDF::Util::File.open_file` in RDF.rb and {new}
|
141
141
|
# @yield [Metadata]
|
142
142
|
# @raise [IOError] if file not found
|
143
143
|
def self.open(path, options = {})
|
@@ -153,7 +153,7 @@ module RDF::Tabular
|
|
153
153
|
end
|
154
154
|
|
155
155
|
# Return the well-known configuration for a file, and remember using a weak-reference cache to avoid uncessary retreivles.
|
156
|
-
# @param [String] base
|
156
|
+
# @param [String] base the URL used for finding the file
|
157
157
|
# @return [Array<String>, false]
|
158
158
|
def self.site_wide_config(base)
|
159
159
|
require 'rdf/util/cache' unless defined?(::RDF::Util::Cache)
|
@@ -433,7 +433,7 @@ module RDF::Tabular
|
|
433
433
|
end
|
434
434
|
|
435
435
|
# Getters and Setters
|
436
|
-
INHERITED_PROPERTIES.
|
436
|
+
INHERITED_PROPERTIES.each do |key, type|
|
437
437
|
define_method(key) do
|
438
438
|
object.fetch(key) do
|
439
439
|
parent ? parent.send(key) : default_value(key)
|
@@ -459,12 +459,7 @@ module RDF::Tabular
|
|
459
459
|
# We handle this through a separate datatype= setter
|
460
460
|
end
|
461
461
|
|
462
|
-
|
463
|
-
warn "#{type} has invalid property '#{key}' (#{value.inspect}): expected #{invalid}"
|
464
|
-
object.delete(key)
|
465
|
-
else
|
466
|
-
object[key] = value
|
467
|
-
end
|
462
|
+
set_property(key, type, value, invalid)
|
468
463
|
end
|
469
464
|
end
|
470
465
|
|
@@ -1223,6 +1218,24 @@ module RDF::Tabular
|
|
1223
1218
|
(@warnings ||= []) << string
|
1224
1219
|
end
|
1225
1220
|
|
1221
|
+
def set_property(key, type, value, invalid)
|
1222
|
+
if invalid
|
1223
|
+
warn "#{type} has invalid property '#{key}' (#{value.inspect}): expected #{invalid}"
|
1224
|
+
case type
|
1225
|
+
when :link, :uri_template
|
1226
|
+
object[key] = ""
|
1227
|
+
when :object
|
1228
|
+
object[key] = {}
|
1229
|
+
when :natural_language
|
1230
|
+
object[key] = set_nl(value) || []
|
1231
|
+
else
|
1232
|
+
object.delete(key)
|
1233
|
+
end
|
1234
|
+
else
|
1235
|
+
object[key] = value
|
1236
|
+
end
|
1237
|
+
end
|
1238
|
+
|
1226
1239
|
# When setting a natural language property, always put in language-map form
|
1227
1240
|
# @param [Hash{String => String, Array<String>}, Array<String>, String] value
|
1228
1241
|
# @return [Hash{String => Array<String>}]
|
@@ -1329,12 +1342,7 @@ module RDF::Tabular
|
|
1329
1342
|
# We handle this through a separate setters
|
1330
1343
|
end
|
1331
1344
|
|
1332
|
-
|
1333
|
-
warn "#{type} has invalid property '#{key}' (#{value.inspect}): expected #{invalid}"
|
1334
|
-
object.delete(key)
|
1335
|
-
else
|
1336
|
-
object[key] = value
|
1337
|
-
end
|
1345
|
+
set_property(key, type, value, invalid)
|
1338
1346
|
end
|
1339
1347
|
end
|
1340
1348
|
|
@@ -1421,8 +1429,7 @@ module RDF::Tabular
|
|
1421
1429
|
end
|
1422
1430
|
|
1423
1431
|
if invalid
|
1424
|
-
|
1425
|
-
object.delete(key)
|
1432
|
+
set_property(key, type, value, invalid)
|
1426
1433
|
elsif key == :url
|
1427
1434
|
# URL of CSV relative to metadata
|
1428
1435
|
object[:url] = value
|
@@ -1490,12 +1497,7 @@ module RDF::Tabular
|
|
1490
1497
|
"string or array of strings" unless !value.is_a?(Hash) && Array(value).all? {|v| v.is_a?(String)}
|
1491
1498
|
end
|
1492
1499
|
|
1493
|
-
|
1494
|
-
warn "#{type} has invalid property '#{key}' (#{value.inspect}): expected #{invalid}"
|
1495
|
-
object.delete(key)
|
1496
|
-
else
|
1497
|
-
object[key] = value
|
1498
|
-
end
|
1500
|
+
set_property(key, type, value, invalid)
|
1499
1501
|
end
|
1500
1502
|
end
|
1501
1503
|
|
@@ -1619,16 +1621,7 @@ module RDF::Tabular
|
|
1619
1621
|
valid_natural_language_property?(value)
|
1620
1622
|
end
|
1621
1623
|
|
1622
|
-
|
1623
|
-
warn "#{type} has invalid property '#{key}' (#{value.inspect}): expected #{invalid}"
|
1624
|
-
object[key] = set_nl(value)
|
1625
|
-
object.delete(key) if object[key].nil?
|
1626
|
-
elsif invalid
|
1627
|
-
warn "#{type} has invalid property '#{key}' (#{value.inspect}): expected #{invalid}"
|
1628
|
-
object.delete(key)
|
1629
|
-
else
|
1630
|
-
object[key] = value
|
1631
|
-
end
|
1624
|
+
set_property(key, t, value, invalid)
|
1632
1625
|
end
|
1633
1626
|
end
|
1634
1627
|
|
@@ -1700,12 +1693,7 @@ module RDF::Tabular
|
|
1700
1693
|
"json or rdf" unless %w(json rdf).include?(value) || value.nil?
|
1701
1694
|
end
|
1702
1695
|
|
1703
|
-
|
1704
|
-
warn "#{type} has invalid property '#{key}' (#{value.inspect}): expected #{invalid}"
|
1705
|
-
object.delete(key)
|
1706
|
-
else
|
1707
|
-
object[key] = value
|
1708
|
-
end
|
1696
|
+
set_property(key, type, value, invalid)
|
1709
1697
|
end
|
1710
1698
|
end
|
1711
1699
|
end
|
@@ -1749,7 +1737,7 @@ module RDF::Tabular
|
|
1749
1737
|
REQUIRED = [].freeze
|
1750
1738
|
|
1751
1739
|
# Getters and Setters
|
1752
|
-
PROPERTIES.
|
1740
|
+
PROPERTIES.each do |key, type|
|
1753
1741
|
define_method(key) do
|
1754
1742
|
object.fetch(key, DEFAULTS[key])
|
1755
1743
|
end
|
@@ -1772,16 +1760,7 @@ module RDF::Tabular
|
|
1772
1760
|
valid_natural_language_property?(value)
|
1773
1761
|
end
|
1774
1762
|
|
1775
|
-
|
1776
|
-
warn "#{type} has invalid property '#{key}' (#{value.inspect}): expected #{invalid}"
|
1777
|
-
object[key] = set_nl(value)
|
1778
|
-
object.delete(key) if object[key].nil?
|
1779
|
-
elsif invalid
|
1780
|
-
warn "#{type} has invalid property '#{key}' (#{value.inspect}): expected #{invalid}"
|
1781
|
-
object.delete(key)
|
1782
|
-
else
|
1783
|
-
object[key] = value
|
1784
|
-
end
|
1763
|
+
set_property(key, type, value, invalid)
|
1785
1764
|
end
|
1786
1765
|
end
|
1787
1766
|
|
@@ -1931,12 +1910,7 @@ module RDF::Tabular
|
|
1931
1910
|
end
|
1932
1911
|
end
|
1933
1912
|
|
1934
|
-
|
1935
|
-
warn "#{self.type} has invalid property '#{key}' (#{value.inspect}): expected #{invalid}"
|
1936
|
-
object.delete(key)
|
1937
|
-
else
|
1938
|
-
object[key] = value
|
1939
|
-
end
|
1913
|
+
set_property(key, type, value, invalid)
|
1940
1914
|
end
|
1941
1915
|
end
|
1942
1916
|
end
|
@@ -2063,28 +2037,19 @@ module RDF::Tabular
|
|
2063
2037
|
@values << cell = Cell.new(metadata, column, self, value)
|
2064
2038
|
|
2065
2039
|
datatype = column.datatype || Datatype.new({base: "string"}, parent: column)
|
2066
|
-
value = value.gsub(/\r\t
|
2067
|
-
value = value.strip.gsub(/\s+/, ' ') unless %w(string json xml html anyAtomicType
|
2040
|
+
value = value.gsub(/\r\n\t/, ' ') unless %w(string json xml html anyAtomicType).include?(datatype.base)
|
2041
|
+
value = value.strip.gsub(/\s+/, ' ') unless %w(string json xml html anyAtomicType normalizedString).include?(datatype.base)
|
2068
2042
|
# if the resulting string is an empty string, apply the remaining steps to the string given by the default property
|
2069
2043
|
value = column.default || '' if value.empty?
|
2070
2044
|
|
2071
2045
|
cell_values = column.separator ? value.split(column.separator) : [value]
|
2072
2046
|
|
2073
2047
|
cell_values = cell_values.map do |v|
|
2074
|
-
v = v.strip unless %w(string anyAtomicType
|
2048
|
+
v = v.strip unless %w(string anyAtomicType).include?(datatype.base)
|
2075
2049
|
v = column.default || '' if v.empty?
|
2076
2050
|
if Array(column.null).include?(v)
|
2077
2051
|
nil
|
2078
2052
|
else
|
2079
|
-
# Trim value
|
2080
|
-
if %w(string anyAtomicType any).include?(datatype.base)
|
2081
|
-
v.lstrip! if %w(true start).include?(metadata.dialect.trim.to_s)
|
2082
|
-
v.rstrip! if %w(true end).include?(metadata.dialect.trim.to_s)
|
2083
|
-
else
|
2084
|
-
# unless the datatype is string or anyAtomicType or any, strip leading and trailing whitespace from the string value
|
2085
|
-
v.strip!
|
2086
|
-
end
|
2087
|
-
|
2088
2053
|
expanded_dt = datatype.id || metadata.context.expand_iri(datatype.base, vocab: true)
|
2089
2054
|
if (lit_or_errors = value_matching_datatype(v.dup, datatype, expanded_dt, column.lang)).is_a?(RDF::Literal)
|
2090
2055
|
lit_or_errors
|
data/lib/rdf/tabular/reader.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'rdf'
|
2
|
+
require 'rdf/vocab'
|
2
3
|
|
3
4
|
module RDF::Tabular
|
4
5
|
##
|
@@ -204,30 +205,30 @@ module RDF::Tabular
|
|
204
205
|
# Provenance
|
205
206
|
if prov?
|
206
207
|
activity = RDF::Node.new
|
207
|
-
add_statement(0, table_group, RDF::PROV.wasGeneratedBy, activity)
|
208
|
-
add_statement(0, activity, RDF.type, RDF::PROV.Activity)
|
209
|
-
add_statement(0, activity, RDF::PROV.wasAssociatedWith, RDF::URI("http://rubygems.org/gems/rdf-tabular"))
|
210
|
-
add_statement(0, activity, RDF::PROV.startedAtTime, RDF::Literal::DateTime.new(start_time))
|
211
|
-
add_statement(0, activity, RDF::PROV.endedAtTime, RDF::Literal::DateTime.new(Time.now))
|
208
|
+
add_statement(0, table_group, RDF::Vocab::PROV.wasGeneratedBy, activity)
|
209
|
+
add_statement(0, activity, RDF.type, RDF::Vocab::PROV.Activity)
|
210
|
+
add_statement(0, activity, RDF::Vocab::PROV.wasAssociatedWith, RDF::URI("http://rubygems.org/gems/rdf-tabular"))
|
211
|
+
add_statement(0, activity, RDF::Vocab::PROV.startedAtTime, RDF::Literal::DateTime.new(start_time))
|
212
|
+
add_statement(0, activity, RDF::Vocab::PROV.endedAtTime, RDF::Literal::DateTime.new(Time.now))
|
212
213
|
|
213
214
|
unless (urls = input.tables.map(&:url)).empty?
|
214
215
|
usage = RDF::Node.new
|
215
|
-
add_statement(0, activity, RDF::PROV.qualifiedUsage, usage)
|
216
|
-
add_statement(0, usage, RDF.type, RDF::PROV.Usage)
|
216
|
+
add_statement(0, activity, RDF::Vocab::PROV.qualifiedUsage, usage)
|
217
|
+
add_statement(0, usage, RDF.type, RDF::Vocab::PROV.Usage)
|
217
218
|
urls.each do |url|
|
218
|
-
add_statement(0, usage, RDF::PROV.entity, RDF::URI(url))
|
219
|
+
add_statement(0, usage, RDF::Vocab::PROV.entity, RDF::URI(url))
|
219
220
|
end
|
220
|
-
add_statement(0, usage, RDF::PROV.hadRole, CSVW.csvEncodedTabularData)
|
221
|
+
add_statement(0, usage, RDF::Vocab::PROV.hadRole, CSVW.csvEncodedTabularData)
|
221
222
|
end
|
222
223
|
|
223
224
|
unless Array(input.filenames).empty?
|
224
225
|
usage = RDF::Node.new
|
225
|
-
add_statement(0, activity, RDF::PROV.qualifiedUsage, usage)
|
226
|
-
add_statement(0, usage, RDF.type, RDF::PROV.Usage)
|
226
|
+
add_statement(0, activity, RDF::Vocab::PROV.qualifiedUsage, usage)
|
227
|
+
add_statement(0, usage, RDF.type, RDF::Vocab::PROV.Usage)
|
227
228
|
Array(input.filenames).each do |fn|
|
228
|
-
add_statement(0, usage, RDF::PROV.entity, RDF::URI(fn))
|
229
|
+
add_statement(0, usage, RDF::Vocab::PROV.entity, RDF::URI(fn))
|
229
230
|
end
|
230
|
-
add_statement(0, usage, RDF::PROV.hadRole, CSVW.tabularMetadata)
|
231
|
+
add_statement(0, usage, RDF::Vocab::PROV.hadRole, CSVW.tabularMetadata)
|
231
232
|
end
|
232
233
|
end
|
233
234
|
ensure
|
data/lib/rdf/tabular/uax35.rb
CHANGED
@@ -211,6 +211,7 @@ module RDF::Tabular
|
|
211
211
|
|
212
212
|
min_integer_digits = integer_part.gsub(groupChar, '').gsub('#', '').length
|
213
213
|
all_integer_digits = integer_part.gsub(groupChar, '').length
|
214
|
+
all_integer_digits += 1 if all_integer_digits == min_integer_digits
|
214
215
|
min_fractional_digits = fractional_part.gsub(groupChar, '').gsub('#', '').length
|
215
216
|
max_fractional_digits = fractional_part.gsub(groupChar, '').length
|
216
217
|
exponent_sign = exponent_part[0] if exponent_part =~ /^[+-]/
|
@@ -225,8 +226,9 @@ module RDF::Tabular
|
|
225
226
|
fractional_grouping_size = fractional_parts[0].to_s.length
|
226
227
|
|
227
228
|
# Construct regular expression for integer part
|
229
|
+
#require 'byebug'; byebug
|
228
230
|
integer_str = if primary_grouping_size == 0
|
229
|
-
|
231
|
+
"\\d{#{min_integer_digits},}"
|
230
232
|
else
|
231
233
|
# These number of groupings must be there
|
232
234
|
integer_parts = []
|
@@ -235,8 +237,8 @@ module RDF::Tabular
|
|
235
237
|
sz = [primary_grouping_size, min_integer_digits].min
|
236
238
|
integer_rem = primary_grouping_size - sz
|
237
239
|
integer_parts << "\\d{#{sz}}"
|
238
|
-
min_integer_digits -=
|
239
|
-
all_integer_digits -=
|
240
|
+
min_integer_digits -= sz
|
241
|
+
all_integer_digits -= sz
|
240
242
|
primary_grouping_size = secondary_grouping_size
|
241
243
|
end
|
242
244
|
required_digits = integer_parts.reverse.join(ge)
|
data/spec/metadata_spec.rb
CHANGED
@@ -928,9 +928,9 @@ describe RDF::Tabular::Metadata do
|
|
928
928
|
}
|
929
929
|
},
|
930
930
|
"PNames" => {
|
931
|
-
aboutUrl: [RDF::SCHEMA.addressCountry, RDF::SCHEMA.latitude, RDF::SCHEMA.longitude, RDF::SCHEMA.name],
|
932
|
-
propertyUrl: [RDF::SCHEMA.addressCountry, RDF::SCHEMA.latitude, RDF::SCHEMA.longitude, RDF::SCHEMA.name],
|
933
|
-
valueUrl: [RDF::SCHEMA.addressCountry, RDF::SCHEMA.latitude, RDF::SCHEMA.longitude, RDF::SCHEMA.name],
|
931
|
+
aboutUrl: [RDF::Vocab::SCHEMA.addressCountry, RDF::Vocab::SCHEMA.latitude, RDF::Vocab::SCHEMA.longitude, RDF::Vocab::SCHEMA.name],
|
932
|
+
propertyUrl: [RDF::Vocab::SCHEMA.addressCountry, RDF::Vocab::SCHEMA.latitude, RDF::Vocab::SCHEMA.longitude, RDF::Vocab::SCHEMA.name],
|
933
|
+
valueUrl: [RDF::Vocab::SCHEMA.addressCountry, RDF::Vocab::SCHEMA.latitude, RDF::Vocab::SCHEMA.longitude, RDF::Vocab::SCHEMA.name],
|
934
934
|
md: {
|
935
935
|
"aboutUrl" => "http://schema.org/{_name}",
|
936
936
|
"propertyUrl" => 'schema:{_name}',
|
@@ -1332,28 +1332,25 @@ describe RDF::Tabular::Metadata do
|
|
1332
1332
|
|
1333
1333
|
context "Number formats" do
|
1334
1334
|
{
|
1335
|
-
'0' => {valid: %w(1 -1 +1), invalid: %w(
|
1336
|
-
'00' => {valid: %w(12), invalid: %w(1
|
1335
|
+
'0' => {valid: %w(1 -1 +1 12), invalid: %w(1.2), base: "integer", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,})(?<suffix>)$/},
|
1336
|
+
'00' => {valid: %w(12 123), invalid: %w(1 1,2), base: "integer", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{2,})(?<suffix>)$/},
|
1337
1337
|
'#' => {valid: %w(1 12 123), invalid: %w(1.2), base: "integer", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{0,})(?<suffix>)$/},
|
1338
1338
|
'##' => {re: /^(?<prefix>[+-]?)(?<numeric_part>\d{0,})(?<suffix>)$/},
|
1339
1339
|
'#0' => {re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,})(?<suffix>)$/},
|
1340
1340
|
|
1341
|
-
'0.0' => {valid: %w(1.1 -1.1), invalid: %w(
|
1342
|
-
'0.00' => {valid: %w(1.12 +1.12), invalid: %w(
|
1343
|
-
'0.#' => {valid: %w(1 1.1), invalid: %w(
|
1344
|
-
'0
|
1345
|
-
|
1346
|
-
'
|
1347
|
-
'
|
1348
|
-
'
|
1349
|
-
'
|
1350
|
-
'000%' => {valid: %w(123% +123% -123%), invalid: %w(12% 1234% %123), base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{3})(?<suffix>%)$/},
|
1351
|
-
'000‰' => {valid: %w(123‰ +123‰ -123‰), invalid: %w(12‰ 1234‰ ‰123), base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{3})(?<suffix>‰)$/},
|
1352
|
-
'000.0%' => {base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{3}\.\d{1})(?<suffix>%)$/},
|
1341
|
+
'0.0' => {valid: %w(1.1 -1.1 12.1), invalid: %w(1.12), base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,}\.\d{1})(?<suffix>)$/},
|
1342
|
+
'0.00' => {valid: %w(1.12 +1.12 12.12), invalid: %w(1.1 1.123), base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,}\.\d{2})(?<suffix>)$/},
|
1343
|
+
'0.#' => {valid: %w(1 1.1 12.1), invalid: %w(1.12), base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,}(?:\.\d{0,1})?)(?<suffix>)$/},
|
1344
|
+
'-0' => {valid: %w(-1 -10), invalid: %w(1 +1), base: "decimal", re: /^(?<prefix>\-)(?<numeric_part>\d{1,})(?<suffix>)$/},
|
1345
|
+
'%000' => {valid: %w(%123 %+123 %-123 %1234), invalid: %w(%12 123%), base: "decimal", re: /^(?<prefix>%[+-]?)(?<numeric_part>\d{3,})(?<suffix>)$/},
|
1346
|
+
'‰000' => {valid: %w(‰123 ‰+123 ‰-123 ‰1234), invalid: %w(‰12 123‰), base: "decimal", re: /^(?<prefix>‰[+-]?)(?<numeric_part>\d{3,})(?<suffix>)$/},
|
1347
|
+
'000%' => {valid: %w(123% +123% -123% 1234%), invalid: %w(12% %123), base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{3,})(?<suffix>%)$/},
|
1348
|
+
'000‰' => {valid: %w(123‰ +123‰ -123‰ 1234‰), invalid: %w(12‰ ‰123), base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{3,})(?<suffix>‰)$/},
|
1349
|
+
'000.0%' => {base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{3,}\.\d{1})(?<suffix>%)$/},
|
1353
1350
|
|
1354
1351
|
'###0.#####' => {valid: %w(1 1.1 12345.12345), invalid: %w(1,234.1 1.123456), base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,}(?:\.\d{0,5})?)(?<suffix>)$/},
|
1355
1352
|
'###0.0000#' => {valid: %w(1.1234 1.12345 12345.12345), invalid: %w(1,234.1234 1.12), base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,}\.\d{4,5})(?<suffix>)$/},
|
1356
|
-
'00000.0000' => {valid: %w(12345.1234), invalid: %w(1.2 1,234.123,4), base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{5}\.\d{4})(?<suffix>)$/},
|
1353
|
+
'00000.0000' => {valid: %w(12345.1234), invalid: %w(1.2 1,234.123,4), base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{5,}\.\d{4})(?<suffix>)$/},
|
1357
1354
|
|
1358
1355
|
'#0.0#E#0' => {base: "double", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,}\.\d{1,2}E[+-]?\d{1,2})(?<suffix>)$/},
|
1359
1356
|
'#0.0#E+#0' => {base: "double", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,}\.\d{1,2}E\+\d{1,2})(?<suffix>)$/},
|
@@ -1366,14 +1363,14 @@ describe RDF::Tabular::Metadata do
|
|
1366
1363
|
'#,##,000' => {base: "integer", re: /^(?<prefix>[+-]?)(?<numeric_part>(?:\d{1,2},)?(?:\d{2},)*\d{3})(?<suffix>)$/},
|
1367
1364
|
'#,#0,000' => {base: "integer", re: /^(?<prefix>[+-]?)(?<numeric_part>(?:(?:\d{1,2},)?(?:\d{2},)*\d)?\d{1},\d{3})(?<suffix>)$/},
|
1368
1365
|
'#,00,000' => {base: "integer", re: /^(?<prefix>[+-]?)(?<numeric_part>(?:\d{1,2},)?(?:\d{2},)*\d{2},\d{3})(?<suffix>)$/},
|
1369
|
-
'0,00,000' => {base: "integer", re: /^(?<prefix>[+-]?)(?<numeric_part
|
1370
|
-
|
1371
|
-
'0.0##,###' => {base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1}\.\d{1}(?:\d(?:\d(?:,\d(?:\d(?:\d)?)?)?)?)?)(?<suffix>)$/},
|
1372
|
-
'0.00#,###' => {base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1}\.\d{2}(?:\d(?:,\d(?:\d(?:\d)?)?)?)?)(?<suffix>)$/},
|
1373
|
-
'0.000,###' => {base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1}\.\d{3}(?:,\d(?:\d(?:\d)?)?)?)(?<suffix>)$/},
|
1374
|
-
'0.000,0##' => {base: "decimal", re:/^(?<prefix>[+-]?)(?<numeric_part>\d{1}\.\d{3},\d{1}(?:\d(?:\d)?)?)(?<suffix>)$/},
|
1375
|
-
'0.000,00#' => {base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1}\.\d{3},\d{2}(?:\d)?)(?<suffix>)$/},
|
1376
|
-
'0.000,000' => {base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1}\.\d{3},\d{3})(?<suffix>)$/},
|
1366
|
+
'0,00,000' => {base: "integer", re: /^(?<prefix>[+-]?)(?<numeric_part>(?:(?:\d{1,2},)?(?:\d{2},)*\d)?\d{1},\d{2},\d{3})(?<suffix>)$/},
|
1367
|
+
|
1368
|
+
'0.0##,###' => {base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,}\.\d{1}(?:\d(?:\d(?:,\d(?:\d(?:\d)?)?)?)?)?)(?<suffix>)$/},
|
1369
|
+
'0.00#,###' => {base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,}\.\d{2}(?:\d(?:,\d(?:\d(?:\d)?)?)?)?)(?<suffix>)$/},
|
1370
|
+
'0.000,###' => {base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,}\.\d{3}(?:,\d(?:\d(?:\d)?)?)?)(?<suffix>)$/},
|
1371
|
+
'0.000,0##' => {base: "decimal", re:/^(?<prefix>[+-]?)(?<numeric_part>\d{1,}\.\d{3},\d{1}(?:\d(?:\d)?)?)(?<suffix>)$/},
|
1372
|
+
'0.000,00#' => {base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,}\.\d{3},\d{2}(?:\d)?)(?<suffix>)$/},
|
1373
|
+
'0.000,000' => {base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,}\.\d{3},\d{3})(?<suffix>)$/},
|
1377
1374
|
|
1378
1375
|
# Jeni's
|
1379
1376
|
'##0' => {valid: %w(1 12 123 1234), invalid: %w(1,234 123.4), base: "integer", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,})(?<suffix>)$/},
|
data/spec/reader_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rdf-tabular
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gregg Kellogg
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bcp47
|
@@ -50,6 +50,20 @@ dependencies:
|
|
50
50
|
- - ">="
|
51
51
|
- !ruby/object:Gem::Version
|
52
52
|
version: 1.1.7
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: rdf-vocab
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0.8'
|
60
|
+
type: :runtime
|
61
|
+
prerelease: false
|
62
|
+
version_requirements: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - "~>"
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0.8'
|
53
67
|
- !ruby/object:Gem::Dependency
|
54
68
|
name: rdf-xsd
|
55
69
|
requirement: !ruby/object:Gem::Requirement
|
@@ -268,7 +282,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
268
282
|
version: '0'
|
269
283
|
requirements: []
|
270
284
|
rubyforge_project:
|
271
|
-
rubygems_version: 2.4.
|
285
|
+
rubygems_version: 2.4.5.1
|
272
286
|
signing_key:
|
273
287
|
specification_version: 4
|
274
288
|
summary: Tabular Data RDF Reader and JSON serializer.
|