rdf-tabular 0.2.1 → 0.3.0
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/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.
|