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.
@@ -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 {#new}
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, the URL used for finding the file
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.keys.each do |key|
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
- if invalid
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
- if invalid
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
- warn "#{type} has invalid property '#{key}' (#{value.inspect}): expected #{invalid}"
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
- if invalid
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
- if invalid && key == :titles
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
- if invalid
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.keys.each do |key|
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
- if invalid && key == :titles
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
- if invalid
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\a/, ' ') unless %w(string json xml html anyAtomicType any).include?(datatype.base)
2067
- value = value.strip.gsub(/\s+/, ' ') unless %w(string json xml html anyAtomicType any normalizedString).include?(datatype.base)
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 any).include?(datatype.base)
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
@@ -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
@@ -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
- all_integer_digits > min_integer_digits ? "\\d{#{min_integer_digits},}" : "\\d{#{min_integer_digits}}"
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 -= primary_grouping_size
239
- all_integer_digits -= primary_grouping_size
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)
@@ -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(12 1.2), base: "integer", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1})(?<suffix>)$/},
1336
- '00' => {valid: %w(12), invalid: %w(1 123 1,2), base: "integer", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{2})(?<suffix>)$/},
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(12.1 1.12), base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1}\.\d{1})(?<suffix>)$/},
1342
- '0.00' => {valid: %w(1.12 +1.12), invalid: %w(12.12 1.1 1.123), base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1}\.\d{2})(?<suffix>)$/},
1343
- '0.#' => {valid: %w(1 1.1), invalid: %w(12.1 1.12), base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1}(?:\.\d{0,1})?)(?<suffix>)$/},
1344
- '0.##' => {base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1}(?:\.\d{0,2})?)(?<suffix>)$/},
1345
-
1346
- '+0' => {valid: %w(+1), invalid: %w(1 -1 +10), base: "decimal", re: /^(?<prefix>\+)(?<numeric_part>\d{1})(?<suffix>)$/},
1347
- '-0' => {valid: %w(-1), invalid: %w(1 +1 -10), base: "decimal", re: /^(?<prefix>\-)(?<numeric_part>\d{1})(?<suffix>)$/},
1348
- '%000' => {valid: %w(%123 %+123 %-123), invalid: %w(%12 %1234 123%), base: "decimal", re: /^(?<prefix>%[+-]?)(?<numeric_part>\d{3})(?<suffix>)$/},
1349
- '000' => {valid: %w(‰123 ‰+123 ‰-123), invalid: %w(‰12 ‰1234 123‰), base: "decimal", re: /^(?<prefix>‰[+-]?)(?<numeric_part>\d{3})(?<suffix>)$/},
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>\d{1},\d{2},\d{3})(?<suffix>)$/},
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>)$/},
@@ -240,7 +240,7 @@ describe RDF::Tabular::Reader do
240
240
  end
241
241
  end
242
242
 
243
- it "ADT mode", skip: true do
243
+ it "ADT mode", unless: true do
244
244
  json = ttl.sub("-standard.ttl", "-atd.json")
245
245
  expected = File.expand_path("../data/#{json}", __FILE__)
246
246
 
@@ -6,6 +6,7 @@ require 'rspec'
6
6
  require 'rspec/its'
7
7
  require 'rdf/isomorphic'
8
8
  require 'rdf/turtle'
9
+ require 'rdf/vocab'
9
10
  require 'rdf/spec/matchers'
10
11
  require 'json'
11
12
  require 'webmock/rspec'
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.2.1
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-09-28 00:00:00.000000000 Z
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.7
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.