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.
@@ -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.